diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000000..b7f20a0458 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 3a0aa59c7ed8b37b6bf049672ee6dcf2 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/API.html b/API.html new file mode 100644 index 0000000000..274058a596 --- /dev/null +++ b/API.html @@ -0,0 +1,319 @@ + + + + + + + + + + + API Reference — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Algorithms.html b/Algorithms.html new file mode 100644 index 0000000000..3bb242d14e --- /dev/null +++ b/Algorithms.html @@ -0,0 +1,481 @@ + + + + + + + + + + + Algorithms — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Algorithms

+

Each algorithm will retrieve a container from either TEvent or TStore +and if an output container is specified, it is saved to the TStore +object such that the following algorithms can access the container. +TStore will manage the memory for the user.

+
+

Event Selection

+

(moved to BasicEventSelection.h)

+
+ + + + +
+

HelperFunctions

+
+
+

HelperClasses

+
+
+

NTuple Creation

+

HelpTreeBase is a class (not an algorithm) that creates and fills a +TTree. When adding an object type i.e. jet, muon, or event level +quantities, it can be easily configured with “info switches” ( See +HelperClasses ) that take a space separated list of categories.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/BJetEfficiencyCorrector.html b/BJetEfficiencyCorrector.html new file mode 100644 index 0000000000..e2853c1bd7 --- /dev/null +++ b/BJetEfficiencyCorrector.html @@ -0,0 +1,537 @@ + + + + + + + + + + + b-jet — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

b-jet

+
+
+class BJetEfficiencyCorrector : public xAH::Algorithm
+
+

Public Functions

+
+
+BJetEfficiencyCorrector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+EL::StatusCode executeEfficiencyCorrection(const xAOD::JetContainer *inJets, const xAOD::EventInfo *eventInfo, bool doNominal)
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+unsigned int getMCIndex(int dsid)
+
+ +
+
+void makeMCIndexMap(std::string effCalib)
+
+ +
+
+std::string getFlavorLabel(const xAOD::Jet &jet) const
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_inputAlgo = ""
+

The name of the vector containing the names of the systematically-varied jet-related containers from the upstream algorithm, which will be processed by this algorithm.

+

Only jet calibration systematics or any other that create shallow copies of jet containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

+
+ +
+
+std::string m_systName = ""
+
+ +
+
+std::string m_outputSystName = "BJetEfficiency_Algo"
+
+ +
+
+bool m_writeSystToMetadata = false
+
+ +
+
+std::string m_corrFileName = "xAODBTaggingEfficiency/13p6TeV/2023-22-13p6TeV-MC21-CDI_Test_2023-08-1_v1.root"
+
+ +
+
+std::string m_jetAuthor = "AntiKt4EMPFlowJets"
+
+ +
+
+float m_minPt = 20e3
+

Minimum pT in MeV for taggable jets.

+
+ +
+
+std::string m_taggerName = "DL1r"
+
+ +
+
+bool m_useDevelopmentFile = true
+
+ +
+
+bool m_coneFlavourLabel = true
+
+ +
+
+std::string m_systematicsStrategy = "SFEigen"
+
+ +
+
+bool m_errorOnTagWeightFailure = true
+

BTaggingSelectionTool throws an error on missing tagging weights. If false, a warning is given instead.

+
+ +
+
+bool m_alwaysGetTagWeight = false
+

Decorate tag weights even if we’re not doing pseudocontinuous b-tagging.

+
+ +
+
+bool m_isRun3 = false
+

Flag to get Run3 MC-MC SFs.

+
+ +
+
+std::string m_operatingPt = "FixedCutBEff_70"
+

Operating point.

+
+ +
+
+std::string m_operatingPtCDI = ""
+

Operating point that CDI will understand.

+
+ +
+
+bool m_getScaleFactors = false
+

will only get scale factors for calibrated working points

+
+ +
+
+bool m_useContinuous = false
+

will get tagWeight, quantile, and SF

+
+ +
+
+std::string m_decor = "BTag"
+

The decoration key written to passing objects.

+
+ +
+
+bool m_tagDecisionOnly = false
+

Only apply b-tag decision decoration; don’t retrieve scale factors (Not recommended. For expert use.)

+
+ +
+
+bool m_setMapIndex = false
+

Select an efficiency map for use in MC/MC and inefficiency scale factors, based on user specified selection of efficiency maps.

+
+ +
+
+std::string m_DSIDtoGenerator_filename = "xAODAnaHelpers/DSIDtoGenerator.txt"
+
+ +
+
+float m_orBJetPtUpperThres = -1
+

upper pt threshold of b-jet in OR in unit of GeV, negative value means no pt threshold

+
+ +
+
+std::string m_EfficiencyCalibration = ""
+

Calibration to use for MC (EfficiencyB/C/T/LightCalibrations), “auto” to determine from sample name (multiple samples can be provided as long as they are separated by ‘;’)

+

Example: “410470;410250;410558;410464” (Pythia8,Sherpa22,Herwig7,MG)

+
+ +
+
+bool m_allowCalibrationFallback = false
+

Allow to fallback to “default” configuration when the shower type can’t be determined automatically.

+
+ +
+
+std::string m_EigenvectorReductionB = "Loose"
+

To change NP scheme for b-tagging systematics - Loose is the default value in athena.

+
+ +
+
+std::string m_EigenvectorReductionC = "Loose"
+
+ +
+
+std::string m_EigenvectorReductionLight = "Loose"
+
+ +
+
+

Private Members

+
+
+std::string m_decorSF = ""
+

The decoration key written to passing objects.

+
+ +
+
+std::string m_decorWeight = ""
+
+ +
+
+std::string m_decorQuantile = ""
+
+ +
+
+std::map<int, std::string> m_DSIDtoGenerator
+
+ +
+
+std::map<std::string, unsigned int> m_MCIndexes
+
+ +
+
+std::vector<std::string> m_inputAlgoList
+
+ +
+
+bool m_runAllSyst = false
+
+ +
+
+asg::AnaToolHandle<IBTaggingSelectionTool> m_BJetSelectTool_handle = {"BTaggingSelectionTool", this}
+
+ +
+
+asg::AnaToolHandle<IBTaggingEfficiencyTool> m_BJetEffSFTool_handle = {"BTaggingEfficiencyTool", this}
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/BasicEventSelection.html b/BasicEventSelection.html new file mode 100644 index 0000000000..26dc90f6fb --- /dev/null +++ b/BasicEventSelection.html @@ -0,0 +1,897 @@ + + + + + + + + + + + Event — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Event

+
+
+class BasicEventSelection : public xAH::Algorithm
+

This algorithm performs the very basic event selection. This should be the first algo in the algo chain. It can create weighted and unweighted cutflow objects to be picked up downstream by other xAH algos, and your own. The selection applied in data only is:

+
+
    +
  • GRL (can be turned off)

  • +
  • LAr Error

  • +
  • Tile Error

  • +
  • Core Flag

  • +
+
+

In both data and simulation (MC), the following cuts are applied

+
+
+
+

For derivations, the metadata can be accessed and added to the cutflow for normalization. The parameters to control the trigger are described in this header file. If one wants to write out some of the trigger information into a tree using HelpTreeBase, flags must be set here.

+

+
+

Note

+

For MC only, the pileup reweight can also be applied.

+
+
+

Public Functions

+
+
+BasicEventSelection()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+bool m_isTLAData = false
+

Flag to determine when running on TLA data for different handling of TDT.

+
+ +
+
+bool m_truthLevelOnly = false
+

Protection when running on truth xAOD.

+
+ +
+
+bool m_setAFII = false
+

SimulationFlavour will be determined from the sample MetaData, unless AFII or FS is explicitely requested with the following flags.

+
+ +
+
+bool m_setAF3 = false
+
+ +
+
+bool m_setFS = false
+
+ +
+
+bool m_applyGRLCut = false
+

Apply GRL selection.

+
+ +
+
+std::string m_GRLxml = ""
+

Path to GRL XML file.

+
+ +
+
+std::string m_GRLExcludeList = ""
+

Run numbers to skip in GRL.

+
+ +
+
+bool m_cleanPowheg = false
+

Clean Powheg huge weight.

+
+ +
+
+bool m_reweightSherpa22 = false
+

Reweight Sherpa 2.2 Samples.

+
+ +
+
+bool m_doPUreweighting = false
+

Reweight pile-up profile \(\mu\)

+
+ +
+
+bool m_doPUreweightingSys = false
+
+ +
+
+std::string m_lumiCalcFileNames = ""
+

Comma separated list of filenames.

+
+ +
+
+std::string m_PRWFileNames = ""
+

Comma separated list of filenames.

+
+ +
+
+bool m_autoconfigPRW = false
+

Automatically configure PRW using config files from SUSYTools instead of using m_PRWFileNames.

+
+ +
+
+bool m_useCommonPRWFiles = false
+

Configure PRW using common files instead of DSID-specific files.

+
+ +
+
+std::string m_prwActualMu2016File = ""
+

actualMu configuration file for the MC16a campaign (2015/2016). Added to the PRW tool when using PRW autoconfiguration.

+
+ +
+
+std::string m_prwActualMu2017File = ""
+

actualMu configuration file for the MC16d campaign (2017). Added to the PRW tool when using PRW autoconfiguration.

+
+ +
+
+std::string m_prwActualMu2018File = ""
+

actualMu configuration file for the MC16e campaign (2018). Added to the PRW tool when using PRW autoconfiguration.

+
+ +
+
+std::string m_prwActualMu2022File = ""
+

actualMu configuration file for the MC23a campaign (2022). Added to the PRW tool when using PRW autoconfiguration.

+
+ +
+
+std::string m_prwActualMu2023File = ""
+

actualMu configuration file for the MC23d campaign (2023). Added to the PRW tool when using PRW autoconfiguration.

+
+ +
+
+std::string m_commonPRWFileMC20a = "PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root"
+

Common PRW file for the MC20a campaign (2015/16). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_commonPRWFileMC20d = "PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root"
+

Common PRW file for the MC20d campaign (2017). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_commonPRWFileMC20e = "PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root"
+

Common PRW file for the MC20e campaign (2018). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_commonPRWFileMC23a = "PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root"
+

Common PRW file for the MC23a campaign (2022). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_commonPRWFileMC23c = "PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root"
+

Common PRW file for the MC23c campaign (2023). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_commonPRWFileMC23d = "PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root"
+

Common PRW file for the MC23d campaign (2023). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

+
+ +
+
+std::string m_mcCampaign
+

mc16(acd) to bypass the automatic campaign determination from AMI, several campaigns can be separated by a comma. Only used +when m_autoconfigPRW is true

+
+ +
+
+std::string m_periodConfig = "auto"
+

Use Period Configuration or auto.

+
+ +
+
+bool m_checkStreams = false
+

Print streamTags (only in debug mode)

+
+ +
+
+int m_actualMuMin = -1
+

The minimum threshold for EventInfo::actualInteractionsPerCrossing()

+
+ +
+
+int m_actualMuMax = -1
+

The maximum threshold for EventInfo::actualInteractionsPerCrossing()

+
+ +
+
+bool m_calcBCIDInfo = false
+

Calculate distance to nearest empty and unpaired BCIDs.

+
+ +
+
+bool m_applyPrimaryVertexCut = false
+

Enable to apply a primary vertex cut.

+
+ +
+
+int m_PVNTrack = 2
+

Minimum number of tracks from the primary vertex (Harmonized Cut)

+
+ +
+
+bool m_applyEventCleaningCut = false
+
+ +
+
+bool m_applyCoreFlagsCut = false
+
+ +
+
+bool m_applyJetCleaningEventFlag = false
+

recommended way to clean all jets, but especially collections other than EMTopo … equivalent to “loose” jet-by-jet cleaning!

+
+ +
+
+bool m_applyIsBadBatmanFlag = false
+

should only ever be used in 2015 and 2016 data, for analyses which may be of interest for analyses where fake MET can be an issue

+
+ +
+
+bool m_printBranchList = false
+
+ +
+
+std::string m_triggerSelection = ""
+

RegEx expression to choose triggers to consider to be cut on with m_applyTriggerCut

+
+ +
+
+std::string m_extraTriggerSelection = ""
+

Decisions of triggers which are saved but not cut on.

+
+ +
+
+bool m_applyTriggerCut = false
+

Skip events in which the trigger string m_triggerSelection does not fire

+
+ +
+
+bool m_storeTrigDecisions = false
+

Save string of fired triggers matching m_triggerSelection

+
+ +
+
+bool m_storePassL1 = false
+

Save if any L1 trigger fired, e.g. "L1_.*"

+
+ +
+
+bool m_storePassHLT = false
+

Save if any HLT trigger fired, e.g. "HLT_.*"

+
+ +
+
+bool m_storeTrigKeys = false
+

Save master, L1, and HLT key.

+
+ +
+
+bool m_storePrescaleWeight = true
+

Save the trigger prescale weight.

+
+ +
+
+std::string m_derivationName = ""
+

The name of the derivation (use this as an override)

+
+ +
+
+bool m_useMetaData = true
+

Retrieve and save information on DAOD selection.

+
+ +
+
+std::string m_metaDataStreamName = "metadata"
+
+ +
+
+std::string m_duplicatesStreamName = "duplicates_tree"
+
+ +
+
+bool m_checkDuplicatesData = false
+

Check for duplicated events in data

+
+ +
+
+bool m_checkDuplicatesMC = false
+

Check for duplicated events in MC

+
+ +
+
+bool m_doRunByRunCutflows = false
+
+ +
+
+

Private Functions

+
+
+StatusCode autoconfigurePileupRWTool()
+

Automatically add the required PRW config file for the DSID being processed to the PRW tool.

+

helper functions

The PRW config files stored by SUSYTools are added to the m_pileup_tool_handle. If the m_mcCampaign is +not set, the campaign is determined automatically. If it is set, then all of the campaings listed +in the setting are added.

+

+
+ +
+
+

Private Members

+
+
+std::set<std::pair<uint32_t, uint32_t>> m_RunNr_VS_EvtNr
+
+ +
+
+std::vector<std::string> m_triggerUnprescaleList
+
+ +
+
+std::vector<std::string> m_extraTriggerSelectionList
+
+ +
+
+asg::AnaToolHandle<IGoodRunsListSelectionTool> m_grl_handle = {"GoodRunsListSelectionTool", this}
+
+ +
+
+asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle = {"CP::PileupReweightingTool/Pileup"}
+
+ +
+
+asg::AnaToolHandle<TrigConf::ITrigConfigTool> m_trigConfTool_handle = {"TrigConf::xAODConfigTool/xAODConfigTool", this}
+
+ +
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+int m_eventCounter
+
+ +
+
+TH1D *m_histSumW = nullptr
+
+ +
+
+TH1D *m_histEventCount = nullptr
+
+ +
+
+uint64_t m_MD_initialNevents
+
+ +
+
+uint64_t m_MD_finalNevents
+
+ +
+
+double m_MD_initialSumW
+
+ +
+
+double m_MD_finalSumW
+
+ +
+
+double m_MD_initialSumWSquared
+
+ +
+
+double m_MD_finalSumWSquared
+
+ +
+
+std::string m_mcCampaignMD
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_all
+
+ +
+
+int m_cutflow_init
+
+ +
+
+int m_cutflow_duplicates
+
+ +
+
+int m_cutflow_grl
+
+ +
+
+int m_cutflow_lar
+
+ +
+
+int m_cutflow_tile
+
+ +
+
+int m_cutflow_SCT
+
+ +
+
+int m_cutflow_core
+
+ +
+
+int m_cutflow_jetcleaning
+
+ +
+
+int m_cutflow_isbadbatman
+
+ +
+
+int m_cutflow_npv
+
+ +
+
+int m_cutflow_trigger
+
+ +
+
+TH1D *m_runByrun_beforeCuts = nullptr
+
+ +
+
+TH1D *m_runByrun_afterCuts = nullptr
+
+ +
+
+TH1D *m_el_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_el_cutflowHist_2 = nullptr
+
+ +
+
+TH1D *m_mu_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_mu_cutflowHist_2 = nullptr
+
+ +
+
+TH1D *m_ph_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_tau_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_tau_cutflowHist_2 = nullptr
+
+ +
+
+TH1D *m_jet_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_trk_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_truth_cutflowHist_1 = nullptr
+
+ +
+
+TTree *m_duplicatesTree = nullptr
+

TTree for duplicates bookeeping

+
+ +
+
+int m_duplRunNumber
+
+ +
+
+long int m_duplEventNumber
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Calibrators.html b/Calibrators.html new file mode 100644 index 0000000000..5982cb6355 --- /dev/null +++ b/Calibrators.html @@ -0,0 +1,247 @@ + + + + + + + + + + + Calibrating Objects — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Calibrating Objects

+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ClusterHists.html b/ClusterHists.html new file mode 100644 index 0000000000..18c5e7ad2c --- /dev/null +++ b/ClusterHists.html @@ -0,0 +1,250 @@ + + + + + + + + + + + ClusterHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

ClusterHists

+
+

Warning

+

doxygenclass: Cannot find class “ClusterHists” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ClusterHistsAlgo.html b/ClusterHistsAlgo.html new file mode 100644 index 0000000000..e1a762ebcf --- /dev/null +++ b/ClusterHistsAlgo.html @@ -0,0 +1,324 @@ + + + + + + + + + + + ClusterHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

ClusterHistsAlgo

+
+
+class ClusterHistsAlgo : public xAH::Algorithm
+
+

Public Functions

+
+
+ClusterHistsAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_detailStr = ""
+
+ +
+
+

Private Members

+
+
+ClusterHists *m_plots = nullptr
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Community.html b/Community.html new file mode 100644 index 0000000000..3540d5efe0 --- /dev/null +++ b/Community.html @@ -0,0 +1,267 @@ + + + + + + + + + + + Community — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Community

+
+

Tutorials

+ +
+
+

Email List

+

For other inquiries in which you don’t have a Github account or prefer to ask a question to the community at large, please feel free to both subscribe and email to atlas-sw-xAODAnaHelpersFW.

+
+
+

Who uses us?

+

The following list are packages / analyses searches that depend on xAH. We thank them for their hard work and hope they continue to use us!

+ +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Correctors.html b/Correctors.html new file mode 100644 index 0000000000..04193df630 --- /dev/null +++ b/Correctors.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Efficiency Correcting — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Efficiency Correcting

+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/DebugTool.html b/DebugTool.html new file mode 100644 index 0000000000..65ec6e2ebb --- /dev/null +++ b/DebugTool.html @@ -0,0 +1,308 @@ + + + + + + + + + + + Debug Tool — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Debug Tool

+
+
+class DebugTool : public xAH::Algorithm
+
+

Public Functions

+
+
+DebugTool()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+bool m_printStore = false
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Development.html b/Development.html new file mode 100644 index 0000000000..3d4a30ce72 --- /dev/null +++ b/Development.html @@ -0,0 +1,695 @@ + + + + + + + + + + + Development — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Development

+
+

Warning

+

Never push to main. Always create a new branch for changes, rebase your branch with main git pull --rebase origin main and use the branch for creating a pull-request to merge with main. This keeps main mergeable for everyone for all development.

+
+ +
+

Development Workflow

+

Changes should be tested properly ( “it compiles” is not sufficient ). We use the git rebase workflow.

+
+

New User

+

This is for users who do not have write access to UCATLAS/xAODAnaHelpers to make branches. Instead, they fork and write their changes to their own repository and submit pull-requests.

+
    +
  • For very new users, you may want to setup SSH key access to your personal repository. To do this, follow the instructions at Generating SSH keys. So you go here: https://github.com/UCATLAS/xAODAnaHelpers/ and just click the ‘Fork’ at top right. This forks a copy into your account (yourAccount/xAODAnaHelpers). Next, clone it. Set the upstream:

    +
    git clone git@github.com:yourAccount/xAODAnaHelpers
    +cd xAODAnaHelpers
    +git remote add upstream git@github.com:UCATLAS/xAODAnaHelpers
    +
    +
    +
  • +
+

Note: If you do not have an ssh-key set up, you may want to use the HTTPS version of the above URL:

+
git remote add upstream https://github.com/UCATLAS/xAODAnaHelpers
+
+
+

Next, make your changes for the feature/bug/fix:

+
vim Root/JetSelector.cxx
+vim Root/HelpTreeBase.cxx
+git status # make sure you changed the files you want to change
+git diff # make sure the changes are what you want
+
+
+

Then go ahead and commit your changes:

+
git add Root/JetSelector.cxx
+git commit -m "Update with new jet calibration recommendations"
+git add Root/HelpTreeBase.cxx
+git commit -m "make sure that the tree dumps the systematics for new calibrations"
+
+
+

When you are ready to submit a pull-request, do the following first:

+
git fetch upstream
+git rebase upstream/main
+
+
+

to make sure your code is up to date with the upstream repository.

+

You may want to rebase all of your changes into a single commit if you wish, and that can be done via:

+
git rebase -i HEAD~N
+
+
+

where N is the number of commits to rebase. Then you just follow the instructions. Take care not to rebase through commits that are already on main of the upstream repo. Then submit a pull-request! See https://help.github.com/articles/creating-a-pull-request/ for information on this.

+

After the pull-request has been merged, you can bring yourself up to date with:

+
git fetch upstream
+git rebase upstream/main
+
+
+
+
+

Trusted Dev User

+

In this case, you have write access to this repository. Any new feature you wish to add will need to be in a new branch:

+
git checkout -b feature/newFeature
+
+
+

and then make your commits… then maybe rebase all commits into a few good ones:

+
git rebase -i HEAD~N
+
+
+

where N is the number of commits to rebase. And then rebase with main to make sure your branch is as up-to-date as possible when making the pull-request:

+
git pull --rebase origin main
+
+
+

and push your commits to the remote (setting upstream):

+
git push -u origin feature/newFeature
+
+
+

and then submit a pull request by going to xAODAnaHelpers, finding your branch, and making a pull request (usually shiny green buttons). When it’s been merged, you can run:

+
git checkout main
+git pull --rebase origin main
+git remote prune origin
+
+
+

to delete your local copy of the branch after bringing your local copy up to date.

+
+
+
+

Helpful Suggestions

+
+

Updating changes

+

If you’re on branch myBranch and you have commits that you want to +push to the remote origin - the first thing you should do is always +update so you’re current:

+
git pull --rebase
+
+
+

will do it all. If you want more control, use:

+
git fetch
+git rebase origin/main
+
+
+

or:

+
git fetch origin
+git rebase origin/main myBranch
+
+
+
+

Note

+
    +
  • git fetch will fetch from origin (see git remote -v for what that’s defined as) by default, but you can explicitly provide a different remote repository.

  • +
  • git rebase origin/main will rebase the current branch you are on. You can specify another branch if you want.

  • +
+
+
+
+

Changing Author Info

+

See https://help.github.com/articles/changing-author-info/ for more information.

+
+
+

Renaming lots of tags

+
git tag -l "xAODAnaHelpers*" |
+cut -d "-" -f 2-4 |
+while read ref
+do
+  git tag "$ref" "xAODAnaHelpers-$ref"
+  git tag -d "xAODAnaHelpers-$ref"
+  git push origin ":refs/tags/xAODAnaHelpers-$ref"
+  git push --tags
+done
+
+
+
+
+

Tagging and releasing on svn

+

Only a few people should be doing this. Encourage folks to checkout tags +using git. Here are my general steps:

+
git clone git@github.com:UCATLAS/xAODAnaHelpers xAHGIT
+svn co svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/trunk xAODAnaHelpers
+mv xAHGIT/.git xAODAnaHelpers/.git
+rm -rf xAHGIT
+cd xAODAnaHelpers
+
+
+

At this point, I need to reset all changes locally (these are due to svn):

+
git reset HEAD --hard
+
+
+

and then I can look at the changes with:

+
git status
+
+
+

If I’m happy with things on the git side, I move over to svn side with:

+
svn status
+
+
+

and make sure any new files to add svn add newFile and remove svn del oldFile are dealt with. Then I can commit to trunk:

+
svn commit -m "Release a tag for xAH"
+
+
+

then I can copy trunk to my new tag xx-yy-zz:

+
svn copy svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/trunk svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/tags/xAODAnaHelpers-XX-YY-ZZ
+
+
+

and I should be good to go.

+
+
+

Skimming new test files

+

In order to skim some new test files, I use athena:

+
asetup 20.1.4.7,here
+
+
+

with the following python file executed via athena.py skimming.py on an input.root file

+
from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+import AthenaPoolCnvSvc.ReadAthenaPool
+
+svcMgr.EventSelector.InputCollections = ['input.root']
+
+from GaudiSequencer.PyComps import PyEvtFilter
+filterseq = CfgMgr.AthSequencer("AthFilterSeq")
+#filterseq += PyEvtFilter("MyFilter",evt_list=[18559067]) #will execute main sequence only for these eventnumbers
+
+# Create a POOL output file with the StoreGate contents:
+from OutputStreamAthenaPool.MultipleStreamManager import MSMgr
+xaodStream = MSMgr.NewPoolRootStream( "StreamXAOD", "xAOD.root" )
+
+DetDescrVersion = 'ATLAS-R2-2015-03-01-00'
+include("RecExCond/AllDet_detDescr.py")
+
+# Set up its contents:
+#xaodStream.AcceptAlgs(["MyFilter"])
+xaodStream.GetEventStream().TakeItemsFromInput = True
+#needed to have xAOD readable outside athena (but I thought this is not needed any more?)
+#theApp.CreateSvc += [ "xAODMaker::EventFormatSvc" ]
+xaodStream.AddMetaDataItem(["EventBookkeeperCollection#*"])
+#xaodStream.AddMetaDataItem(["xAOD::EventFormat#EventFormat"])
+
+theApp.EvtMax=5
+
+
+

which will skim 5 events. I’ve found that sometimes it will not work because of the wrong geometry information specified, eg:

+
GeoModelSvc         ERROR *** *** Geometry configured through jobOptions does not match TagInfo tags! *** ***
+GeoModelSvc          INFO ** Job Option configuration:
+GeoModelSvc          INFO * ATLAS tag: ATLAS-R2-2015-01-01-00
+...
+GeoModelSvc          INFO ** TAG INFO configuration:
+GeoModelSvc          INFO * ATLAS tag: ATLAS-R2-2015-03-01-00
+
+
+

and I just have to change the line in the above python file:

+
DetDescrVersion = 'ATLAS-R2-2015-03-01-00'
+
+
+

to match the correct geometry. Ask Giordon Stark for more information if you’re stuck.

+
+
+

Files with trigger data

+

On tier3, we have MC:

+
/atlas/uct3/data/users/fizisist/xAOD/mc15_13TeV.361023.Pythia8EvtGen_A14NNPDF23LO_jetjet_JZ3W.merge.AOD.e3668_s2576_s2132_r6630_r6264/AOD.05403652._000001.pool.root.1
+
+
+

13 TeV data:

+
/atlas/uct3/data/users/fizisist/xAOD/data15_comm.00265573.physics_L1Calo.merge.AOD.x331_m1423/data15_comm.00265573.physics_L1Calo.merge.AOD.x331_m1423._lb0179-lb0183._0001.1
+
+
+

which are useful for testing using:

+
test_multiAlgo submitDir /atlas/uct3/data/users/fizisist/xAOD <sample> <root file>
+
+
+
+
+

Decorations

+

As a follow-up on the discussions in yesterday’s meeting, xAOD decorations can be assigned and read more efficiently defining an decorators/accessors, since auxdata requires a string-comparison search for the correct branch on every call, whereas the static accessor finds this once and then no longer has the overhead.

+

You can define a decorator static SG::AuxElement::Decorator<char> dec_baseline("baseline"); which then can be used like dec_baseline(input) = isbaseline; and then in your code you can replace:

+
input.auxdecor<char>("baseline");
+
+
+

by:

+
dec_baseline(input);
+
+
+

These are the relevant lines of code inside SUSYObjDef _xAOD:

+ +

In SUSYToolsTester there is also an example of an AuxElement::Accessor like this:

+
static SG::AuxElement::Accessor<int> acc_truthType("truthType");
+if (acc_truthType.isAvailable(*trackParticle)  ) muonTruthType = acc_truthType(*trackParticle);
+
+
+

in:

+ +

Note that the difference between accessors and decorators is that accessors are for auxdata branches in general but will not let you modify a const object, whereas Decorators permit adding information to const collections.

+
+
+

TString versus std::string

+

I’ve noticed that TString slows us down a little bit, so try to use std::string where possible. Code changes and equivalencies look like:

+
m_inContainerName.IsNull()
+m_inContainerName.empty()
+
+m_event->retrieve(jets, m_inContainerName.Data());
+m_event->retrieve(jets, m_inContainerName);
+
+ANA_MSG_INFO(m_inContainerName.Data());
+ANA_MSG_INFO(m_inContainerName);
+
+
+
+
+

Creating a new xAH::Algorithm

+

If you are planning to write an xAH::Algorithm, there are two requirements you must abide by to fit within the xAODAnaHelpers ecosystem.

+
    +
  1. Only allow empty constructors, no parameters or arguments passed in.

  2. +
  3. Constructors must initialize an xAH::Algorithm instance passing in the name of itself:

    +
    ExampleClass :: ExampleClass() : Algorithm("ExampleClass") {}
    +
    +
    +
  4. +
+

The first requirement is necessary to make sure streamable code (such as EventLoop) can handle and set up your algorithms correctly when submitting jobs. The second requirement is currently necessary for xAODAnaHelpers to keep track of the number of instances of a given class that has been created. This is a registry book-keeping operation that allows users to write smarter algorithms, the kind that know how many instances of itself have been created!

+
+
+

Adding and Initializing Tools

+

This is albeit a litle bit trickier for anyone new to how Athena tools work. First, I’ll provide header and source code blocks showing an example for a tool, and then I will explain the concepts.

+

Header File:

+
// external tools include(s):
+#include "AsgTools/AnaToolHandle.h"
+#include "JetCalibTools/IJetCalibrationTool.h"
+
+class JetCalibrator : public xAH::Algorithm {
+
+  public:
+    //...
+
+  private:
+    // tools
+    asg::AnaToolHandle<IJetCalibrationTool> m_JetCalibrationTool_handle{"JetCalibrationTool", this};//!
+
+}
+
+
+

Source File:

+
// tools
+#include "JetCalibTools/JetCalibrationTool.h"
+
+//...
+
+EL::StatusCode JetCalibrator :: initialize () {
+  //...
+
+  // initialize jet calibration tool
+  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("JetCollection",m_jetAlgo));
+  //... other setProperty() calls and other logic can be in here for tool configuration
+  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("OutputLevel", msg().level()));
+  ANA_CHECK( m_JetCalibrationTool_handle.retrieve());
+  ANA_MSG_DEBUG("Retrieved tool: " << m_JetCalibrationTool_handle);
+}
+
+EL::StatusCode JetCalibrator :: execute () {
+  //...
+  m_JetCalibrationTool_handle->apply(*jet);
+  //...
+}
+
+//...
+
+
+

Header Discussion

+

First, let’s talk about the header file. You need to include the header file for the tool handles AsgTools/AnaToolHandle.h. As this is a templated method, you really don’t to try and forward-declare this or you’re gonna have a bad time. Next, you’ll want to include the header file for the tool’s interface class, e.g. JetCalibTools/IJetCalibrationTool.h.

+
+

Note

+

To find the correct header file for a tool’s interface, look in the header file for the tool itself, e.g. JetCalibTools/JetCalibrationTool.h, and cross-check by looking at the classes the tool inherits from. For example, JetTileCorrectionTool has the IJetTileCorrectionTool interface class because in its header file:

+
class JetTileCorrectionTool : public virtual IJetTileCorrectionTool,
+                              public asg::AsgMetadataTool
+
+
+
+

You might wonder why we don’t just include the tool’s header file in our header file. One choice is that the interface header file is smaller and easier to compile quickly. This is roughly equivalent to forward-declaring our tool, where we only include the header file for our tool in the source and put a class ClassName; in the header.

+

Lastly for the header, we make the tool handle a private member of our class. Make sure that this gets constructed with a type only by specifying the tool itself, e.g. JetCalibrationTool. By adding the this parameter, we make sure that the tool handle is indeed made as a private tool for the given algorithm.

+
+

Note

+

We will prefer the suffix _handle to refer to the fact that the variable is a tool handle in xAODAnaHelpers.

+
+

Source Discussion

+

Next, looking at the source code… we include the header file for our tool. Although this may not always be needed, it is good practice to help others figure out where the tool is. As of writing this documentation, the interface and the tool may be defined in different packages! Moving on, we will want to put tool initializations in initialize() as this will only get called on files that have events. Files without events will not create a tool, conserving memory and processing power.

+

If you need to use/retrieve a tool created in another class, you will need to have the same name in both places for the ToolHandle to find it, and you need to make sure the tool isn’t made private (do’t use this for the second parameter for initializatiton).

+

If you don’t set a name for the tool, only a type, the default name is the type. For example:

+
asg::AnaToolHandle<IJetCalibrationTool> test_handle{"JetCalibrationTool", this};
+ANA_MSG_INFO(test_handle.name()); // will output "JetCalibrationTool"
+
+
+
+

Note

+

In ASG Software, tools created through AnaToolHandle can be found in the ToolStore via preprending ToolSvc. to the name of the tool:

+
asg::ToolStore::contains<Trig::TrigDecisionTool>("ToolSvc."+ m_trigDecTool_handle.name())
+
+
+

This is a slight gotcha that will trip up people. Because of this, xAODAnaHelpers prefers the convention of using isUserConfigured() instead as this doesn’t need the additional ToolSvc. prepended to the tool name to look it up!

+
+

If it has isUserConfigured()==0 (e.g. “not configured before”: a tool with that type and name has not been created), then let’s go ahead and configure it with setProperty()! One thing you should always do is set the output level of the tool OutputLevel. It is usually best to set it to the same output level that the algorithm is configured to msg().level() and is probably the safest prescription.

+
+

Note

+

For setting properties or managing tools through the tool handle, you access functions through the dot (.) operator. For using the tool, you access functions through the arrow (->) operator.

+
+

If a tool handle has been configured previously, but not initialized (such as using a tool handle of the same type and name as a previously created tool handle), then all setProperty() calls will be further ignored. I can demonstrate this with a neat code example:

+
// set up the players
+asg::AnaToolHandle<IJetCalibrationTool> alice{"JetCalibrationTool/MyName"};
+asg::AnaToolHandle<IJetCalibrationTool> bob  {"JetCalibrationTool/MyName"};
+
+// set configurations on the first handle
+ANA_CHECK(alice.setProperty("p1", v1)); // will set the underlying tool MyName->p1 = v1
+ANA_CHECK(alice.setProperty("p2", v2)); // will set the underlying tool MyName->p2 = v2
+ANA_CHECK(alice.retrieve()); // creates the tool MyName
+
+ANA_CHECK(bob.setProperty("p1", v9)); // will be ignored as bob.isUserConfigured() == 1 [alice owns the tool]
+ANA_CHECK(bob.setProperty("p3", v3)); // will be ignored as bob.isUserConfigured() == 1 [alice owns the tool]
+ANA_CHECK(bob.retrieve()); // retrieves the existing tool MyName
+
+
+

AnaToolHandle will also not let us change the configuration of a previously initialized tool (one which handle.retrieve() has been called on). In this case, the tool has been initialized. Continuing the code example from before, if you were annoyed that the setProperty() calls were ignored, you might try setting it again on alice:

+
ANA_CHECK(alice.setProperty("p3", v3)); // will crash as alice.isInitialized() == 1 [alice already created its tool]
+
+
+

Finally, we retrieve() (initialize()) the tool of the given type and name from the tool store. retreive() and initialize() are synonyms and will almost always create a new tool. The only two exceptions are if the user configured the tool (isUserConfigured()==1) or if another ToolHandle created the tool as a public tool and holds on to it. But that’s it, the memory will be managed for you and you do not need to delete it or do anything else but use it in your code!

+
+

Note

+

Did you get a bus error, segfault, or abort in the code because of the tools? If so, it is most likely due to a typo in the tool’s header file. Please identify which tool causes the error and file an issue so we can inform the tool developers that their tool needs to be fixed. In the meantime, this can be fixed using a macro:

+
ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JVT_tool_handle, CP::JetJvtEfficiency));
+
+
+

An example of a reported issue for the above tool is here: https://its.cern.ch/jira/browse/ATLASG-1214.

+
+
+
+

Check if a tool exists and reuse it (Trig::TrigDecisionTool)

+

The TrigDecisionTool is a special case that needs attention. This tool is unique in that the templaed methods require us to use the tool as its own interface. It is also a singleton which means it will complain heavily if it detects more than one instance of itself. How do we deal with this in xAODAnaHelpers?

+

Header File:

+
// external tools include(s):
+#include "AsgTools/AnaToolHandle.h"
+#include "TrigDecisionTool/TrigDecisionTool.h"
+
+class MyAlgorithm : public xAH::Algorithm {
+
+  public:
+    /** @brief trigDecTool name for configurability if name is not default.  If empty, use the default name. If not empty, change the name. */
+    std::string m_trigDecTool_name{""};
+
+  private:
+    /** @brief Trigger decision tool.
+
+    If you need to use a TDT that was previously created before this algorithm with a different name, set the name in m_trigDecTool_name.
+    */
+    asg::AnaToolHandle<Trig::TrigDecisionTool>     m_trigDecTool_handle{"Trig::TrigDecisionTool"};                         //!
+};
+
+
+

Source File:

+
EL::StatusCode MyAlgorithm :: initialize(){
+
+  // Grab the TrigDecTool from the ToolStore
+  if(!m_trigDecTool_handle.isUserConfigured()){
+    ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Double-check the name of the tool." );
+    return EL::StatusCode::FAILURE;
+  }
+  ANA_CHECK( m_trigDecTool_handle.retrieve());
+  ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
+
+}
+
+
+

The above is an example of how one designs an algorithm that requires the TrigDecisionTool and will crash if it cannot find it. It also prints the name of the tool it is using to make it much easier for a user to debug. By convention in xAODAnaHelpers, BasicEventSelection::m_trigDecTool_name will default to "xAH::TrigDecTool". All algorithms follow this default if they need the trigger decision tool. If there is an external algorithm that creates it and you want xAODAnaHelpers to pick it up instead of creating one, this can be done by setting m_trigDecTool_name to a non-empty value and you’re good to go. For example, BasicEventSelection will create a trigger decision tool if it does not exist:

+
ANA_CHECK( m_trigDecTool_handle.setProperty( "ConfigTool", m_trigConfTool_handle ));
+ANA_CHECK( m_trigDecTool_handle.setProperty( "TrigDecisionKey", "xTrigDecision" ));
+ANA_CHECK( m_trigDecTool_handle.setProperty( "OutputLevel", msg().level() ));
+ANA_CHECK( m_trigDecTool_handle.retrieve());
+ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
+
+
+

so that if such a tool already was created before BasicEventSelection tries to create it, it will retrieve it (and the setProperty() calls will be ignored). If it has not been created/configured before, it will configure and then create the tool. No extra logic needed on the users’ part.

+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ElectronCalibrator.html b/ElectronCalibrator.html new file mode 100644 index 0000000000..84298066be --- /dev/null +++ b/ElectronCalibrator.html @@ -0,0 +1,411 @@ + + + + + + + + + + + \(e\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(e\)

+
+
+class ElectronCalibrator : public xAH::Algorithm
+

This is the algorithm class used to calibrate electrons.

+

In a nutshell, this algorithm performs the following actions:

+
+
    +
  • retrieves an xAOD::ElectronContainer from either TEvent or TStore

  • +
  • makes a shallow copy container and fills it with energy-and-direction calibrated electrons using the EgammaCalibrationAndSmearingTool in Tools Used

  • +
  • saves the shallow copy container to TStore from where it can be retrieved by algorithms downstream via name lookup

  • +
+
+

+
+

Public Functions

+
+
+ElectronCalibrator()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+

The name of the input container for this algorithm to read from TEvent or TStore

+
+ +
+
+std::string m_outContainerName = ""
+

The name of the nominal output container written by the algorithm to TStore

+

If the algorithm applies systematic variations, for each shallow copy saved to TStore, the systematic name will be appended to this.

+
+ +
+
+bool m_sort = true
+

Sort the processed container elements by transverse momentum.

+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

The name of the vector containing the names of the systematically-varied containers from the upstream algorithm, which will be processed by this algorithm.

+

This vector is retrieved from the TStore. If left blank, it means there is no upstream algorithm which applies systematics. This is the case when processing straight from the original xAOD or DxAOD.

+
+ +
+
+std::string m_outputAlgoSystNames = "ElectronCalibrator_Syst"
+

The name of the vector containing the names of the systematically-varied containers created by by this algorithm.

+

If m_systName is empty, the vector will contain only an empty string. When running on systematics, this is the string a downstream algorithm needs to process electrons.

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+std::string m_esModel = ""
+
+ +
+
+std::string m_decorrelationModel = ""
+
+ +
+
+bool m_applyIsolationCorrection = false
+

Apply isolation correction, not needed by default.

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_outSCContainerName
+
+ +
+
+std::string m_outSCAuxContainerName
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+CP::EgammaCalibrationAndSmearingTool *m_EgammaCalibrationAndSmearingTool = nullptr
+
+ +
+
+CP::IsolationCorrectionTool *m_IsolationCorrectionTool = nullptr
+

apply leakage correction to calo based isolation variables for electrons

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ElectronEfficiencyCorrector.html b/ElectronEfficiencyCorrector.html new file mode 100644 index 0000000000..f63f88895b --- /dev/null +++ b/ElectronEfficiencyCorrector.html @@ -0,0 +1,529 @@ + + + + + + + + + + + \(e\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(e\)

+
+
+class ElectronEfficiencyCorrector : public xAH::Algorithm
+

This is the algorithm class that applies generic corrections to electrons. At the moment, only data/MC efficiency correction is included (electron trigger SF and others will follow…).

+

In a nutshell, this algorithm performs the following actions:

+
+
    +
  • retrieves an xAOD::ElectronContainer from either TEvent or TStore

  • +
  • adds a scale factor (SF) decoration for each electron in the input container calculated via the AsgElectronEfficiencyCorrectionTool in Tools Used

  • +
  • the nominal SF and all the systematically-varied ones are saved as a vector<double> decoration for each electron

  • +
+
+

+
+

Note

+

Bear in mind that this algorithm must be called after ElectronSelector. In fact, the configuration file(s) being used must have the same working point as the one chosen in the selector.

+
+
+

Public Functions

+
+
+ElectronEfficiencyCorrector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual EL::StatusCode executeSF(const xAOD::ElectronContainer *inputElectrons, bool nominal, bool writeSystNames)
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+

The name of the input container for this algorithm to read from TEvent or TStore

+
+ +
+
+std::string m_inputSystNamesElectrons
+

The name of the vector containing the names of the systematically-varied electrons-related containers from the upstream algorithm, which will be processed by this algorithm.

+

Only electron calibration systematics or any other that create shallow copies of electron containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+float m_systValPID = 0.0
+
+ +
+
+float m_systValIso = 0.0
+
+ +
+
+float m_systValReco = 0.0
+
+ +
+
+float m_systValTrig = 0.0
+
+ +
+
+std::string m_systNamePID = ""
+
+ +
+
+std::string m_systNameIso = ""
+
+ +
+
+std::string m_systNameReco = ""
+
+ +
+
+std::string m_systNameTrig = ""
+
+ +
+
+std::string m_outputSystNamesPID = "EleEffCorr_PIDSyst"
+
+ +
+
+std::string m_outputSystNamesIso = "EleEffCorr_IsoSyst"
+
+ +
+
+std::string m_outputSystNamesReco = "EleEffCorr_RecoSyst"
+
+ +
+
+std::string m_outputSystNamesTrig = "EleEffCorr_TrigSyst"
+
+ +
+
+std::string m_correlationModel = "FULL"
+

Systematic correlation model.

+
+ +
+
+std::string m_WorkingPointPID = ""
+

PID working point (LooseBLayer, Medium, Tight)

+
+ +
+
+std::string m_WorkingPointIso = ""
+

Isolation working point.

+
+ +
+
+std::string m_WorkingPointReco = ""
+

Reconstruction working point (Reconstruction only)

+
+ +
+
+std::string m_WorkingPointTrig = ""
+

Trigger working point.

+
+ +
+
+bool m_usePerElectronTriggerSFs = true
+
+ +
+
+std::string m_overrideMapFilePath = ""
+

Override corrections map file (not recommended)

+
+ +
+
+std::string m_overrideMapFilePathTrig = ""
+

Override corrections map file for trigger (needed as Run2 R22 Trigger SF use R21 values)

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::vector<CP::SystematicSet> m_systListPID
+
+ +
+
+std::vector<CP::SystematicSet> m_systListIso
+
+ +
+
+std::vector<CP::SystematicSet> m_systListReco
+
+ +
+
+std::vector<CP::SystematicSet> m_systListTrig
+
+ +
+
+AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_PID = nullptr
+
+ +
+
+std::string m_pidEffSF_tool_name
+
+ +
+
+AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Iso = nullptr
+
+ +
+
+std::string m_IsoEffSF_tool_name
+
+ +
+
+AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Reco = nullptr
+
+ +
+
+std::string m_RecoEffSF_tool_name
+
+ +
+
+AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Trig = nullptr
+
+ +
+
+std::string m_TrigEffSF_tool_name
+
+ +
+
+AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_TrigMCEff = nullptr
+
+ +
+
+std::string m_TrigMCEff_tool_name
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ElectronSelector.html b/ElectronSelector.html new file mode 100644 index 0000000000..67941a4e69 --- /dev/null +++ b/ElectronSelector.html @@ -0,0 +1,792 @@ + + + + + + + + + + + \(e\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(e\)

+
+
+class ElectronSelector : public xAH::Algorithm
+

This is the algorithm class that selects electrons according to user’s choice.

+

In a nutshell, this algorithm performs the following actions:

+
+
    +
  • retrieves an xAOD::ElectronContainer from either TEvent or TStore

  • +
  • iterates over the input container, and if electron passes selection, copies it in a ConstDataVector(SG::VIEW_ELEMENTS) container. Otherwise, the electron is skipped

  • +
  • saves the view container to TStore, from where it can be retrieved by algorithms downstream via a name lookup

  • +
+
+

+
+

Public Functions

+
+
+ElectronSelector()
+
+ +
+
+~ElectronSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+bool executeSelection(const xAOD::ElectronContainer *inElectrons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::ElectronContainer> *selectedElectrons)
+
+ +
+
+virtual int passCuts(const xAOD::Electron *electron, const xAOD::Vertex *primaryVertex)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

The name of the input container for this algorithm read from TEvent or TStore

+
+ +
+
+std::string m_outContainerName = ""
+

The name of the nominal output container written by the algorithm to TStore

+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

The name of the vector containing the names of the systematically-varied containers from the upstream algorithm, which will be processed by this algorithm.

+

This vector is retrieved from the TStore. If left blank, it means there is no upstream algorithm which applies systematics. This is the case when processing straight from the original xAOD or DxAOD.

+
+ +
+
+std::string m_outputAlgoSystNames = "ElectronSelector_Syst"
+

The name of the vector containing the names of the systematically-varied containers created by by this algorithm.

+

If m_systName is empty, the vector will contain only an empty string. When running on systematics, this is the string a downstream algorithm needs to process electrons.

+
+ +
+
+bool m_decorateSelectedObjects = true
+

Adds a passSel decoration for objects that pass selection.

+
+ +
+
+bool m_createSelectedContainer = false
+

Fill using a read-only container (SG::VIEW_ELEMENTS) to TStore

+
+ +
+
+int m_nToProcess = -1
+

Number of objects to process, set n=-1 to look at all.

+
+ +
+
+int m_pass_min = -1
+

Require event to have minimum number of objects passing selection.

+
+ +
+
+int m_pass_max = -1
+

Require event to have maximum number of objects passing selection.

+
+ +
+
+float m_pT_max = 1e8
+

[MeV] Require objects to have maximum transverse momentum threshold

+
+ +
+
+float m_pT_min = 1e8
+

[MeV] Require objects to have minimum transverse momentum threshold

+
+ +
+
+float m_eta_max = 1e8
+

Require objects to have maximum \(|\eta|\) value

+
+ +
+
+bool m_vetoCrack = true
+

Require objects to have \(|\eta|\) outside the crack region using caloCluster->eta()

+
+ +
+
+float m_d0_max = 1e8
+

Require objects to have a maximum \(d_{0}\) [mm] (transverse impact parameter)

+
+ +
+
+float m_d0sig_max = 1e8
+

Require objects to have a maximum \(d_{0}\) significance at BL

+
+ +
+
+float m_z0sintheta_max = 1e8
+

Require objects to have maximum \(z_{0}\sin(\theta)\) [mm] (longitudinal impact paramter) at BL - corrected with vertex info

+
+ +
+
+bool m_doAuthorCut = true
+

Perform author kinematic cut.

+
+ +
+
+bool m_doOQCut = true
+

Perform object quality cut.

+
+ +
+
+bool m_applyDeadHVCellVeto = false
+

Apply veto dead HV cells, affects only 2016 data.

+
+ +
+
+bool m_readIDFlagsFromDerivation = false
+

To read electron PID decision from DAOD, rather than recalculate with tool.

+
+ +
+
+bool m_doModifiedEleId = false
+

To correct egamma bug, see ATLSUSYSW-445.

+
+ +
+
+bool m_doLHPID = true
+

Instantiate and perform the electron Likelihood PID.

+
+ +
+
+bool m_doLHPIDcut = false
+

Cut on electron Likelihood PID (recommended)

+
+ +
+
+std::string m_LHOperatingPoint = "Loose"
+

Loosest Likelihood PID operating point to save.

+
+ +
+
+bool m_doCutBasedPID = false
+

Instantiate and perform the electron cut-based PID.

+
+ +
+
+bool m_doCutBasedPIDcut = false
+

Cut on electron cut-based PID.

+
+ +
+
+std::string m_CutBasedOperatingPoint = "Loose"
+

Loosest cut-based PID operating point to save.

+
+ +
+
+std::string m_MinIsoWPCut = ""
+

reject objects which do not pass this isolation cut - default = “” (no cut)

+
+ +
+
+std::string m_IsoWPList = "FCLoose,FCTight,Gradient,FCHighPtCaloOnly"
+

decorate objects with isIsolated_* flag for each WP in this input list - default = all current ASG WPs

+
+ +
+
+std::string m_CaloIsoEff = "0.1*x+90"
+

to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

+
+ +
+
+std::string m_TrackIsoEff = "98"
+

to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

+
+ +
+
+std::string m_CaloBasedIsoType = "topoetcone20"
+

to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

+
+ +
+
+std::string m_TrackBasedIsoType = "ptvarcone20"
+

to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

+
+ +
+
+std::string m_singleElTrigChains = ""
+

A comma-separated string w/ alll the HLT single electron trigger chains for which you want to perform the matching. This is passed by the user as input in configuration If left empty (as it is by default), no trigger matching will be attempted at all.

+
+ +
+
+std::string m_diElTrigChains = ""
+

A comma-separated string w/ alll the HLT di-electron trigger chains for which you want to perform the matching. This is passed by the user as input in configuration If left empty (as it is by default), no trigger matching will be attempted at all.

+
+ +
+
+double m_minDeltaR = 0.07
+

Recommended threshold for egamma triggers: see https://svnweb.cern.ch/trac/atlasoff/browser/Trigger/TrigAnalysis/TriggerMatchingTool/trunk/src/TestMatchingToolAlg.cxx.

+
+ +
+
+bool m_applyCrackVetoCleaning = false
+

Apply fix to EGamma Crack-Electron topocluster association bug for MET (PFlow) / false by default.

+
+ +
+
+bool m_merged_electrons = false
+

Element links need to be updated if merged electrons are used (LRT + std) / false by default.

+
+ +
+
+std::string m_trigInputPrefix = ""
+

Input prefix of trigger decision tool.

+
+ +
+
+std::string m_isoDecSuffix = ""
+
+ +
+
+

Private Members

+
+
+bool m_doBLTrackQualityCut
+

Performs the Likelihood PID B-Layer cut locally.

+
+

Note

+

Occurs automatically only if m_LHOperatingPoint is LooseBL and m_readIDFlagsFromDerivation is true

+
+
+ +
+
+std::string m_outAuxContainerName
+

the name of the auxiliary store for the output container

+
+ +
+
+int m_numEvent
+

keep track of the total number of events processed

+
+ +
+
+int m_numObject
+

keep track of the total number of objects processed

+
+ +
+
+int m_numEventPass
+

keep track of the number of passed events, and fill the cutflow (relevant only if using the algo to skim events: see m_pass_max and m_pass_min above)

+
+ +
+
+int m_weightNumEventPass
+

keep track of the number of weighted passed events, and fill the cutflow (relevant only if using the algo to skim events: see m_pass_max and m_pass_min above)

+
+ +
+
+int m_numObjectPass
+

keep track of the number of selected objects

+
+ +
+
+TH1D *m_cutflowHist = nullptr
+

histogram for event cutflow

+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+

histgram for weighted event cutflow

+
+ +
+
+int m_cutflow_bin
+

index of bin corresponding to this step of the full cutflow

+
+ +
+
+bool m_isUsedBefore = false
+

checks if the algorithm has been used already

+
+ +
+
+TH1D *m_el_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_el_cutflowHist_2 = nullptr
+
+ +
+
+int m_el_cutflow_all
+
+ +
+
+int m_el_cutflow_author_cut
+
+ +
+
+int m_el_cutflow_OQ_cut
+
+ +
+
+int m_el_cutflow_deadHVCell_cut
+
+ +
+
+int m_el_cutflow_ptmax_cut
+
+ +
+
+int m_el_cutflow_ptmin_cut
+
+ +
+
+int m_el_cutflow_eta_cut
+
+ +
+
+int m_el_cutflow_z0sintheta_cut
+
+ +
+
+int m_el_cutflow_d0_cut
+
+ +
+
+int m_el_cutflow_d0sig_cut
+
+ +
+
+int m_el_cutflow_BL_cut
+
+ +
+
+int m_el_cutflow_PID_cut
+
+ +
+
+int m_el_cutflow_iso_cut
+
+ +
+
+std::vector<std::string> m_IsoKeys
+
+ +
+
+asg::AnaToolHandle<CP::IIsolationSelectionTool> m_isolationSelectionTool_handle = {"CP::IsolationSelectionTool/IsolationSelectionTool", this}
+

MC15 ASG tool for isolation.

+
+ +
+
+CP::IsolationSelectionTool *m_isolationSelectionTool = {nullptr}
+
+ +
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchingTool> m_trigElectronMatchTool_handle
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchScoringTool> m_scoreTool = {"Trig::DRScoringTool/DRScoringTool"}
+
+ +
+
+bool m_doTrigMatch = true
+

This internal variable gets set to false if no triggers are defined or if TrigDecisionTool is missing.

+
+ +
+
+ElectronLHPIDManager *m_el_LH_PIDManager = nullptr
+

class to manage LH PID selection/decorations - see ISSUE for explaination

+
+ +
+
+ElectronCutBasedPIDManager *m_el_CutBased_PIDManager = nullptr
+

class to manage cut-based PID selection/decorations - see ISSUE for explaination

+
+ +
+
+asg::AnaToolHandle<IAsgDeadHVCellRemovalTool> m_deadHVTool
+

tool that selects on dead HV from the 2016 run, according to https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaIdentificationRun2#Removal_of_Electron_Photon_clust

+
+ +
+
+std::vector<std::string> m_singleElTrigChainsList
+

contains all the HLT trigger chains tokens extracted from m_singleElTrigChains

+
+ +
+
+std::vector<std::string> m_diElTrigChainsList
+

contains all the HLT trigger chains tokens extracted from m_diElTrigChains

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/FAQs.html b/FAQs.html new file mode 100644 index 0000000000..025ace57ae --- /dev/null +++ b/FAQs.html @@ -0,0 +1,319 @@ + + + + + + + + + + + xAH FAQ — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

xAH FAQ

+

This is a list of Frequently Asked Questions about xAODAnaHelpers and analysis software. Feel free to suggest new entries!

+
+

How do I…

+
+
… submit a grid (prun) job?

Start with a minimal environment:

+
lsetup panda
+
+
+

and a minimal configuration script:

+
from xAH_config import xAH_config
+c = xAH_config()
+c.algorithm("BasicEventSelection", {"m_name": "test", "m_useMetaData": False})
+
+
+

Then we can submit a job:

+
xAH_run.py --inputRucio --files "user.lgagnon.370150.Gtt.DAOD_SUSY10.e4049_s2608_r6765_r6282_p2411_tag_10_v1_output_xAOD.root" \
+--config=test.py prun --optGridMergeOutput=1 \
+--optGridNFilesPerJob=1.0 --optGridOutputSampleName=user.gstark.test
+
+
+
+
… submit xAH_run jobs with production privileges?

You can use --optSubmitFlags="--official" or --optOfficial=1 (?):

+
   xAH_run.py --files MultijetAlgo/scripts/grid_samples_EXOT1_data.txt --inputList \
+   --config MultijetAlgo/scripts/config_MultijetAlgo.py -f --inputDQ2 prun \
+--optGridOutputSampleName="group.phys-exotics.%in:name[1]%.%in:name[2]%.%in:name[3]%.v0.1_20150921/" \
+--optSubmitFlags="--official"
+
+
+
+
… use AnaToolHandle for ASG CP tools?

Unfortunately there’s no much documentation out there, so everything written here comes from direct email question to ASG fellows, or looking at the source code

+
    +
  1. Make the tool handle as a member of a xAH algorithm (NB: remember to set the interface class of the CP tool. Just prepend an `I` to the tool type):

    +
    class MyAlgo : public xAH::Algorithm
    +{
    +  ...
    +  private:
    +    ...
    +    asg::AnaToolHandle<IMyToolType>   m_mytool_handle; //!
    +
    +}
    +
    +
    +
  2. +
  3. In the xAH algorithm initialisation list, call the tool handle constructor. The argument of the constructor must be a string with the tool type and tool name separated by a slash `/` . In general, the tool name in the constructor can be just a dummy string, as it can be changed afterwards:

    +
    MyAlgo :: MyAlgo (std::string className) :
    +  ...
    +  m_mytool_handle("MyToolType/MyToolName"),
    +  ...
    + {
    +   ...
    + }
    +
    +
    +
  4. +
  5. In some cases the name of the tool has to be different than the one set in the constructor. E.g., for the efficiency correctors, the tool names must depend on the configuration of the algorithm, which is set only after the initialisation list is executed. In such situations, the name of the tool can be modified (typically this would happen in EL::initialize()) with:

    +
    EL::StatusCode BasicEventSelection :: initialize ()
    +{
    +  ...
    +  m_mytool_handle.make("MyToolType/MyToolNewName");
    +  ...
    +}
    +
    +
    +
  6. +
  7. In EL::initialize(), set the properties and initialise the tool handle. After m_mytool_handle.initialize() has been called, it will effectively behave like a pointer to the tool itself:

    +
    EL::StatusCode BasicEventSelection :: initialize ()
    +{
    +  ...
    +  m_mytool_handle.make("MyToolType/MyToolNewName");
    +  m_mytool_handle.SetProperty(...);
    +  m_mytool_handle.initialize();
    +  ...
    +}
    +
    +
    +
  8. +
  9. In the algorithm, use the tool associated to the handle via calls like m_mytool_handle->doStuff().

  10. +
  11. The tool associated to the handle will be automatically destroyed when appropriate. Hence, no need to call delete anywhere.

  12. +
+

If the same tool (identified by its name) needs to be used in another xAH algorithm downstream, just declare a tool handle member with the same IMyToolType, call its constructor in the initialisation list and (if needed) change its tool name with make(). Then in EL::initialize() simply call m_mytool_handle.initialize(), without setting any property. It will automagically get the pointer to the correct tool from a registry, and all the tool properties will be preserved from the previous initialisation.

+
+
+
+
+

SLC6 vs SLC7

+

If you’re running into issues with grid submission because of checks for SLC7-compatible machines in xAH_run.py preventing you from doing so, then you can either:

+
    +
  • ssh into lxplus SLC7 (lxplus.cern.ch)

  • +
  • run in a containerized SLC7 environment (setupATLAS -c slc6)

  • +
+

If you think this message is happening in error, file an issue giving us the output from the following commands:

+
    +
  • lsb_release -d

  • +
  • printenv | grep _PLATFORM

  • +
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Getters.html b/Getters.html new file mode 100644 index 0000000000..76a3376578 --- /dev/null +++ b/Getters.html @@ -0,0 +1,239 @@ + + + + + + + + + + + Getting Objects — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Getting Objects

+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/HLTJetGetter.html b/HLTJetGetter.html new file mode 100644 index 0000000000..ea56e6a232 --- /dev/null +++ b/HLTJetGetter.html @@ -0,0 +1,334 @@ + + + + + + + + + + + HLT Jet Getter — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

HLT Jet Getter

+
+
+class HLTJetGetter : public xAH::Algorithm
+
+

Public Functions

+
+
+HLTJetGetter()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_triggerList = ".*"
+

List of triggers whose features will be extracted from TDT.

+
+ +
+
+std::string m_inContainerName = ""
+

input container name, WITHOUT the HLT_xAOD__JetContainer_ prefix

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+

Private Members

+
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+TrigConf::xAODConfigTool *m_trigConfTool = nullptr
+
+ +
+
+bool m_ownTDTAndTCT = false
+

flag to own TDT and TCT

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/HelpTreeBase.html b/HelpTreeBase.html new file mode 100644 index 0000000000..63b2d55856 --- /dev/null +++ b/HelpTreeBase.html @@ -0,0 +1,1099 @@ + + + + + + + + + + + Tree Maker Base Class — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Tree Maker Base Class

+
+
+class HelpTreeBase
+
+

Public Functions

+
+
+HelpTreeBase(xAOD::TEvent *event, TTree *tree, TFile *file, const float units = 1e3, bool debug = false, xAOD::TStore *store = nullptr, std::string nominalTreeName = "nominal")
+
+ +
+
+HelpTreeBase(TTree *tree, TFile *file, xAOD::TEvent *event = nullptr, xAOD::TStore *store = nullptr, const float units = 1e3, bool debug = false, std::string nominalTreeName = "nominal")
+
+ +
+
+virtual ~HelpTreeBase()
+
+ +
+
+void AddEvent(const std::string &detailStr = "")
+
+ +
+
+void AddTrigger(const std::string &detailStr = "")
+
+ +
+
+void AddJetTrigger(const std::string &detailStr = "")
+
+ +
+
+void AddMuons(const std::string &detailStr = "", const std::string &muonName = "muon")
+
+ +
+
+void AddElectrons(const std::string &detailStr = "", const std::string &elecName = "el")
+
+ +
+
+void AddPhotons(const std::string &detailStr = "", const std::string &photonName = "ph")
+
+ +
+
+void AddClusters(const std::string &detailStr = "", const std::string &clusterName = "cl")
+
+ +
+
+void AddJets(const std::string &detailStr = "", const std::string &jetName = "jet")
+
+ +
+
+void AddL1Jets(const std::string &jetName = "")
+
+ +
+
+void AddTruthParts(const std::string &detailStr = "", const std::string &truthName = "xAH_truth")
+
+ +
+
+void AddTrackParts(const std::string &detailStr = "", const std::string &trackName = "trk")
+
+ +
+
+void AddVertices(const std::string &detailStr = "", const std::string &vertexName = "vertex")
+
+ +
+
+void AddTruthVertices(const std::string &detailStr = "", const std::string &vertexName = "truth_vertex")
+
+ +
+
+void AddFatJets(const std::string &detailStr = "", const std::string &fatjetName = "fatjet", const std::string &subjetDetailStr = "", const std::string &suffix = "")
+

Declare a new collection of fatjets to be written to the output tree.

+
+
Parameters
+
    +
  • detailStr – A (space-separated) list of detail options. These keywords specify exactly which information about each jet is written out. Current influential options are: kinematic substructure constituent constituentAll

  • +
  • fatjetName – The (prefix) name of the container. Default: fatjet.

  • +
  • subjetDetailStr – List of detail options to pass to the subjet container. See :cpp:member:HelpTreeBase::AddJets for list of supported values.

  • +
+
+
+
+ +
+
+void AddTruthFatJets(const std::string &detailStr = "", const std::string &truthFatJetName = "truth_fatjet")
+
+ +
+
+void AddTaus(const std::string &detailStr = "", const std::string &tauName = "tau")
+
+ +
+
+void AddMET(const std::string &detailStr = "", const std::string &metName = "met")
+
+ +
+
+void FillEvent(const xAOD::EventInfo *eventInfo, xAOD::TEvent *event = nullptr, const xAOD::VertexContainer *vertices = nullptr)
+
+ +
+
+void FillTrigger(const xAOD::EventInfo *eventInfo)
+
+ +
+
+void FillJetTrigger()
+
+ +
+
+void FillMuons(const xAOD::MuonContainer *muons, const xAOD::Vertex *primaryVertex, const std::string &muonName = "muon")
+
+ +
+
+void FillMuon(const xAOD::Muon *muon, const xAOD::Vertex *primaryVertex, const std::string &muonName = "muon")
+
+ +
+
+void FillElectrons(const xAOD::ElectronContainer *electrons, const xAOD::Vertex *primaryVertex, const std::string &elecName = "el")
+
+ +
+
+void FillElectron(const xAOD::Electron *elec, const xAOD::Vertex *primaryVertex, const std::string &elecName = "el")
+
+ +
+
+void FillPhotons(const xAOD::PhotonContainer *photons, const std::string &photonName = "ph")
+
+ +
+
+void FillPhoton(const xAOD::Photon *photon, const std::string &photonName = "ph")
+
+ +
+
+void FillClusters(const xAOD::CaloClusterContainer *clusters, const std::string &clusterName = "cl")
+
+ +
+
+void FillCluster(const xAOD::CaloCluster *cluster, const std::string &clusterName = "cl")
+
+ +
+
+void FillJets(const xAOD::JetContainer *jets, int pvLocation = -1, const std::string &jetName = "jet")
+
+ +
+
+void FillJet(const xAOD::Jet *jet_itr, const xAOD::Vertex *pv, int pvLocation, const std::string &jetName = "jet")
+
+ +
+
+void FillLegacyL1Jets(const xAOD::JetRoIContainer *jets, const std::string &jetName = "L1Jet", bool sortL1Jets = false)
+
+ +
+
+template<typename T>
inline void FillPhase1L1Jets(T *&jets, const std::string &jetName = "L1Jet", bool sortL1Jets = false)
+
+ +
+
+void FillTruth(const xAOD::TruthParticleContainer *truth, const std::string &truthName = "xAH_truth")
+
+ +
+
+void FillTruth(const xAOD::TruthParticle *truthPart, const std::string &truthName)
+
+ +
+
+void FillTracks(const xAOD::TrackParticleContainer *tracks, const std::string &trackName = "trk")
+
+ +
+
+void FillTrack(const xAOD::TrackParticle *trackPart, const std::string &trackName)
+
+ +
+
+void FillVertices(const xAOD::VertexContainer *vertices, const std::string &vertexName = "vertex")
+
+ +
+
+void FillTruthVertices(const xAOD::TruthVertexContainer *truthVertices, const std::string &truthVertexName = "truth_vertex")
+
+ +
+
+void FillFatJets(const xAOD::JetContainer *fatJets, int pvLocation = 0, const std::string &fatjetName = "fatjet", const std::string &suffix = "")
+

Write a container of jets to the specified container name (and optionally suffix). The container name and suffix should be declared beforehand using AddFatJets(). This clears the current branch state for the collection so it only makes sense to call once per call to Fill().

+
+
Parameters
+
    +
  • fatJets – A container of jets to be written out.

  • +
  • fatjetName – The name of the output collection to write to.

  • +
  • suffix – The suffix of the output collection to write to.

  • +
+
+
+
+ +
+
+void FillFatJet(const xAOD::Jet *fatjet_itr, int pvLocation = 0, const std::string &fatjetName = "fatjet", const std::string &suffix = "")
+
+ +
+
+void FillTruthFatJets(const xAOD::JetContainer *truthFatJets, int pvLocation = 0, const std::string &truthFatJetName = "truth_fatjet")
+
+ +
+
+void FillTruthFatJet(const xAOD::Jet *truth_fatjet_itr, int pvLocation = 0, const std::string &truthFatJetName = "truth_fatjet")
+
+ +
+
+void FillTaus(const xAOD::TauJetContainer *taus, const std::string &tauName = "tau")
+
+ +
+
+void FillTau(const xAOD::TauJet *tau, const std::string &tauName = "tau")
+
+ +
+
+void FillMET(const xAOD::MissingETContainer *met, const std::string &metName = "met")
+
+ +
+
+void Fill()
+
+ +
+
+void ClearEvent()
+
+ +
+
+void ClearTrigger()
+
+ +
+
+void ClearJetTrigger()
+
+ +
+
+void ClearMuons(const std::string &jetName = "muon")
+
+ +
+
+void ClearElectrons(const std::string &elecName = "el")
+
+ +
+
+void ClearPhotons(const std::string &photonName = "ph")
+
+ +
+
+void ClearClusters(const std::string &clusterName = "cl")
+
+ +
+
+void ClearJets(const std::string &jetName = "jet")
+
+ +
+
+void ClearL1Jets(const std::string &jetName = "L1Jet")
+
+ +
+
+void ClearTruth(const std::string &truthName)
+
+ +
+
+void ClearTracks(const std::string &trackName)
+
+ +
+
+void ClearFatJets(const std::string &fatjetName, const std::string &suffix = "")
+
+ +
+
+void ClearTruthFatJets(const std::string &truthFatJetName = "truth_fatjet")
+
+ +
+
+void ClearTaus(const std::string &tauName = "tau")
+
+ +
+
+void ClearMET(const std::string &metName = "met")
+
+ +
+
+void ClearVertices(const std::string &vertexName = "vertex")
+
+ +
+
+void ClearTruthVertices(const std::string &vertexName = "truth_vertex")
+
+ +
+
+bool writeTo(TFile *file)
+
+ +
+
+inline virtual void AddEventUser(const std::string &detailStr = "")
+
+ +
+
+inline virtual void AddTriggerUser(const std::string &detailStr = "")
+
+ +
+
+inline virtual void AddJetTriggerUser(const std::string &detailStr = "")
+
+ +
+
+inline virtual void AddMuonsUser(const std::string &detailStr = "", const std::string &muonName = "muon")
+
+ +
+
+inline virtual void AddElectronsUser(const std::string &detailStr = "", const std::string &elecName = "el")
+
+ +
+
+inline virtual void AddPhotonsUser(const std::string &detailStr = "", const std::string &photonName = "ph")
+
+ +
+
+inline virtual void AddClustersUser(const std::string &detailStr = "", const std::string &clusterName = "cl")
+
+ +
+
+inline virtual void AddJetsUser(const std::string &detailStr = "", const std::string &jetName = "jet")
+
+ +
+
+inline virtual void AddTruthUser(const std::string &truthName = "", const std::string &detailStr = "xAH_truth")
+
+ +
+
+inline virtual void AddTracksUser(const std::string &trackName = "", const std::string &detailStr = "trk")
+
+ +
+
+inline virtual void AddFatJetsUser(const std::string &detailStr = "", const std::string &fatjetName = "", const std::string &suffix = "")
+

Declare a new fat jet collection. Automatically called once per call to AddFatJets(); override this if you want to provide your own additional branches for fatjets.

+
+
Parameters
+
    +
  • detailStr – The space-separated list of detail requested by the called.

  • +
  • fatjetName – The (prefix) name of the output collection.

  • +
  • suffix – A suffix to be appeneded to the end of the output branch name(s).

  • +
+
+
+
+ +
+
+inline virtual void AddTruthFatJetsUser(const std::string &detailStr = "", const std::string &truthFatJetName = "truth_fatjet")
+
+ +
+
+inline virtual void AddTausUser(const std::string &detailStr = "", const std::string &tauName = "tau")
+
+ +
+
+inline virtual void AddMETUser(const std::string &detailStr = "", const std::string &metName = "met")
+
+ +
+
+inline virtual void ClearEventUser()
+
+ +
+
+inline virtual void ClearTriggerUser()
+
+ +
+
+inline virtual void ClearMuonsUser(const std::string&)
+
+ +
+
+inline virtual void ClearElectronsUser(const std::string&)
+
+ +
+
+inline virtual void ClearPhotonsUser(const std::string&)
+
+ +
+
+inline virtual void ClearClustersUser(const std::string&)
+
+ +
+
+inline virtual void ClearTruthUser(const std::string&)
+
+ +
+
+inline virtual void ClearTracksUser(const std::string&)
+
+ +
+
+inline virtual void ClearJetsUser(const std::string&)
+
+ +
+
+inline virtual void ClearFatJetsUser(const std::string&, const std::string&)
+
+ +
+
+inline virtual void ClearTruthFatJetsUser(const std::string&)
+
+ +
+
+inline virtual void ClearTausUser(const std::string&)
+
+ +
+
+inline virtual void ClearMETUser(const std::string&)
+
+ +
+
+inline virtual void FillEventUser(const xAOD::EventInfo*)
+
+ +
+
+inline virtual void FillMuonsUser(const xAOD::Muon*, const std::string&, const xAOD::Vertex*)
+
+ +
+
+inline virtual void FillElectronsUser(const xAOD::Electron*, const std::string&, const xAOD::Vertex*)
+
+ +
+
+inline virtual void FillPhotonsUser(const xAOD::Photon*, const std::string&)
+
+ +
+
+inline virtual void FillClustersUser(const xAOD::CaloCluster*, const std::string&)
+
+ +
+
+inline virtual void FillJetsUser(const xAOD::Jet*, const std::string&)
+
+ +
+
+inline virtual void FillTruthUser(const xAOD::TruthParticle*, const std::string&)
+
+ +
+
+inline virtual void FillTracksUser(const xAOD::TrackParticle*, const std::string&)
+
+ +
+
+inline virtual void FillFatJetsUser(const xAOD::Jet*, int, const std::string&, const std::string&)
+

Called once per call to FillFatJets().Ooverride this if you want to any additional information to your jet collection.

+
+
Parameters
+
    +
  • jet – a pointer to the current xAOD::Jet object that should be written to the output branch(s).

  • +
  • fatjetName – the (prefix) name of the output collection

  • +
  • suffix – the suffix to append to output branches.

  • +
+
+
+
+ +
+
+inline virtual void FillTruthFatJetsUser(const xAOD::Jet*, int, const std::string&)
+
+ +
+
+inline virtual void FillTausUser(const xAOD::TauJet*, const std::string&)
+
+ +
+
+inline virtual void FillMETUser(const xAOD::MissingETContainer*, const std::string&)
+
+ +
+
+inline virtual void FillTriggerUser(const xAOD::EventInfo*)
+
+ +
+
+inline virtual void FillJetTriggerUser()
+
+ +
+
+

Public Members

+
+
+xAOD::TEvent *m_event
+
+ +
+
+xAOD::TStore *m_store
+
+ +
+
+std::string m_vertexContainerName = "PrimaryVertices"
+

Name of vertex container.

+
+ +
+
+std::string m_truthVertexContainerName = "TruthVertices"
+
+ +
+
+HelperClasses::TriggerInfoSwitch *m_trigInfoSwitch
+
+ +
+
+std::string m_triggerSelection
+
+ +
+
+TrigConf::xAODConfigTool *m_trigConfTool
+
+ +
+
+Trig::TrigDecisionTool *m_trigDecTool
+
+ +
+
+

Public Static Functions

+
+
+static std::string FatJetCollectionName(const std::string &fatjetName = "fatjet", const std::string &suffix = "")
+

Helper function to lookup each fatjet container name/suffix combo in the internal map of vectors for vectors. You probably don’t need this but it might be useful if you’re implementing [Add/Fill/Clear]FatJetsUser().

+
+
Parameters
+
    +
  • fatjetName – The (prefix) name of the container.

  • +
  • suffix – The container branch suffix.

  • +
+
+
Returns
+

a string that uniquely identifies the collection name/suffix in the lookup map.

+
+
+
+ +
+
+

Protected Functions

+
+
+template<typename T, typename U, typename V>
void safeFill(const V *xAODObj, SG::AuxElement::ConstAccessor<T> &accessor, std::vector<U> &destination, U defaultValue, int m_units = 1)
+
+ +
+
+template<typename T, typename U, typename V>
void safeVecFill(const V *xAODObj, SG::AuxElement::ConstAccessor<std::vector<T>> &accessor, std::vector<std::vector<U>> &destination, int m_units = 1)
+
+ +
+
+template<typename T>
void setBranch(std::string prefix, std::string varName, std::vector<T> *localVectorPtr)
+
+ +
+
+

Protected Attributes

+
+
+TTree *m_tree
+
+ +
+
+int m_units
+
+ +
+
+bool m_debug
+
+ +
+
+bool m_isMC
+
+ +
+
+std::string m_nominalTreeName
+
+ +
+
+bool m_nominalTree
+
+ +
+
+xAH::EventInfo *m_eventInfo
+
+ +
+
+int m_passL1
+
+ +
+
+int m_passHLT
+
+ +
+
+unsigned int m_masterKey
+
+ +
+
+unsigned int m_L1PSKey
+
+ +
+
+unsigned int m_HLTPSKey
+
+ +
+
+std::vector<std::string> m_elTrigForMatching
+
+ +
+
+std::vector<std::string> m_passedTriggers
+
+ +
+
+std::vector<std::string> m_disabledTriggers
+
+ +
+
+std::vector<float> m_triggerPrescales
+
+ +
+
+std::vector<float> m_triggerPrescalesLumi
+
+ +
+
+std::vector<std::string> m_isPassBitsNames
+
+ +
+
+std::vector<unsigned int> m_isPassBits
+
+ +
+
+std::map<std::string, xAH::JetContainer*> m_jets
+
+ +
+
+std::map<std::string, xAH::L1JetContainer*> m_l1Jets
+
+ +
+
+std::map<std::string, xAH::TruthContainer*> m_truth
+
+ +
+
+std::map<std::string, xAH::TrackContainer*> m_tracks
+
+ +
+
+std::map<std::string, xAH::FatJetContainer*> m_fatjets
+
+ +
+
+std::map<std::string, xAH::FatJetContainer*> m_truth_fatjets
+
+ +
+
+std::map<std::string, xAH::MuonContainer*> m_muons
+
+ +
+
+std::map<std::string, std::vector<std::string>> m_MuonRecoEff_SF_sysNames
+
+ +
+
+std::map<std::string, std::vector<std::string>> m_MuonIsoEff_SF_sysNames
+
+ +
+
+std::map<std::string, std::map<std::string, std::vector<std::string>>> m_MuonTrigEff_SF_sysNames
+
+ +
+
+std::vector<std::string> m_MuonTTVAEff_SF_sysNames
+
+ +
+
+std::map<std::string, xAH::ElectronContainer*> m_elecs
+
+ +
+
+std::map<std::string, xAH::PhotonContainer*> m_photons
+
+ +
+
+std::map<std::string, xAH::ClusterContainer*> m_clusters
+
+ +
+
+std::map<std::string, xAH::TauContainer*> m_taus
+
+ +
+
+std::map<std::string, xAH::MetContainer*> m_met
+
+ +
+
+std::map<std::string, xAH::VertexContainer*> m_vertices
+
+ +
+
+std::map<std::string, xAH::VertexContainer*> m_truth_vertices
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/HelperClasses.html b/HelperClasses.html new file mode 100644 index 0000000000..547a7ed731 --- /dev/null +++ b/HelperClasses.html @@ -0,0 +1,1348 @@ + + + + + + + + + + + Helper Classes — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Helper Classes

+
+
+namespace HelperClasses
+
+

Enums

+
+
+enum class ContainerType
+

Values:

+
+
+enumerator UNKNOWN
+
+ +
+
+enumerator CONSTDV
+
+ +
+
+enumerator CONSTCONT
+
+ +
+ +
+
+enum class ToolName
+

Values:

+
+
+enumerator MUONSELECTOR
+
+ +
+
+enumerator ELECTRONSELECTOR
+
+ +
+
+enumerator PHOTONSELECTOR
+
+ +
+
+enumerator JETSELECTOR
+
+ +
+
+enumerator BJETSELECTOR
+
+ +
+
+enumerator CALIBRATOR
+
+ +
+
+enumerator CORRECTOR
+
+ +
+
+enumerator SELECTOR
+
+ +
+
+enumerator DEFAULT
+
+ +
+ +
+
+
+template<typename T>
class EnumParser
+
+#include <HelperClasses.h>
+

template enum parser. Copied from: http://stackoverflow.com/a/726681

+
+ +
+
+class InfoSwitch
+
+#include <HelperClasses.h>
+

A struct that is used for parsing configuration strings and assigning booleans to various properties. Currently used in plotting code.

+

Strings are used to turn on and off histograms and branches in the tree The following structs hold the bools used to control the content and also have the string which is necessary to turn a set on. +See the derived members for more information about what is supported. Each derived member should provide a table of parameters, patterns, and type of matching scheme used. The pattern will use standard PCRE-syntax when appropriate.

+

We support two major matching schemes:

+
+
+
Exact

If a variable is matched exactly to a string, then a boolean is set to True or False based on whether an exact match exists or not.

+
+
Partial

If a variable is partially matched to a string, then there is some specific pattern we are extracting that will succeed the partial match that determines what the variable will be set to (usually not a bool).

+
+
+
+

+

Subclassed by HelperClasses::EventInfoSwitch, HelperClasses::IParticleInfoSwitch, HelperClasses::METInfoSwitch, HelperClasses::TrackInfoSwitch, HelperClasses::TriggerInfoSwitch

+
+

Public Functions

+
+
+inline InfoSwitch(const std::string configStr)
+

Constructor. Take in input string, create vector of tokens.

+
+
Parameters
+

configStr – The configuration string to split up.

+
+
+
+ +
+
+inline bool has_exact(const std::string flag)
+

Search for an exact match in m_configDetails.

+

+
+
Parameters
+

flag – The string we search for.

+
+
+
+ +
+
+inline bool has_match(const std::string flag)
+

Search for a partial match in m_configStr.

+

+
+
Parameters
+

flag – The string we search for.

+
+
+
+ +
+
+std::string get_working_point(const std::string flag)
+

Search for a single flag in m_configDetails and parse out the working point.

+

+
+
Parameters
+

flag – The string we search for.

+
+
+
+ +
+
+std::vector<std::string> get_working_points(const std::string flag)
+

Search for multiple flags in m_configDetails and parse out the working points.

+

+
+
Parameters
+

flag – The string we search for.

+
+
+
+ +
+
+

Protected Attributes

+
+
+const std::string m_configStr
+

The input configuration string from which we split up into tokens.

+
+ +
+
+std::set<std::string> m_configDetails
+

The vector of tokens from which we search through for finding matches.

+
+ +
+
+ +
+
+class EventInfoSwitch : public HelperClasses::InfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for Event Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_noDataInfo

noDataInfo

exact

m_eventCleaning

eventCleaning

exact

m_bcidInfo

bcidInfo

exact

m_pileup

pileup

exact

m_pileupsys

pileupsys

exact

m_shapeEM

shapeEM

exact

m_shapeEMPFLOW

shapeEMPFLOW

exact

m_shapeLC

shapeLC

exact

m_truth

truth

exact

m_caloClus

caloClusters

exact

m_weightsSys

weightsSys

exact

m_beamspotweight

beamspotweight

exact

+

+
+ +
+
+class TriggerInfoSwitch : public HelperClasses::InfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for Trigger Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_basic

basic

exact

m_menuKeys

menuKeys

exact

m_passTriggers

passTriggers

exact

m_passTrigBits

passTrigBits

exact

m_prescales

prescales

exact

m_prescalesLumi

prescalesLumi

exact

+

+
+

Note

+

m_prescales contains information from the TrigDecisionTool for every trigger used in event selection and event trigger-matching. m_prescalesLumi contains information retrieved from the pile-up reweighting tool based on the actual luminosities of triggers.

+
+
+ +
+
+class IParticleInfoSwitch : public HelperClasses::InfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for IParticle Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_noMultiplicity

noMultiplicity

exact

m_kinematic

kinematic

exact

m_numLeading

NLeading

partial

m_useTheS

useTheS

exact

+

+
+

Note

+

m_numLeading requires a number XX to follow it, defining the number of leading partiles and associate it with that variable.

+

For example:

+
m_configStr = "... NLeading4 ..."
+
+
+

will define int m_numLeading = 4.

+
+

Subclassed by HelperClasses::ClusterInfoSwitch, HelperClasses::ElectronInfoSwitch, HelperClasses::JetInfoSwitch, HelperClasses::MuonInfoSwitch, HelperClasses::PhotonInfoSwitch, HelperClasses::TauInfoSwitch, HelperClasses::TruthInfoSwitch

+
+ +
+
+class MuonInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::IParticleInfoSwitch class for Muon Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_trigger

trigger

exact

m_isolation

isolation

exact

m_isolationKinematics

isolationKinematics

exact

m_quality

quality

exact

m_recoparams

recoparams

exact

m_trackparams

trackparams

exact

m_trackhitcont

trackhitcont

exact

m_effSF

effSF

exact

m_energyLoss

energyLoss

exact

m_recoWPs[XYZ]

RECO_XYZ

pattern

m_isolWPs[“”]

ISOL_

exact

m_isolWPs[“”]

ISOL_NONE

exact

m_isolWPs[XYZ]

ISOL_XYZ

pattern

m_trigWPs[XYZ]

TRIG_XYZ

pattern

m_passSel

passSel

exact

m_passOR

passOR

exact

+

+
+

Note

+

quality, isolation and effSF switches do not enable any additional output by themselves. They require additional working point pattern using RECO_XYZ for quality working points and scale factors, ISOL_XYZ for isolation working points and scale factors, and TRIG_XYZ for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

+
m_configStr = "... RECO_Medium ..."
+
+
+

will define the Medium quality working point and the accompanying scale factors.

+

Isolation supports NONE or empty option which will enable scale factors without additional isolation requirements, for example:

+
m_configStr = "... ISOL_NONE ISOL_Loose ..."
+
+
+

will define the Loose isolation working point status branch, and scale factors without isolation requirements and using the Loose WP.

+
+
+ +
+
+class ElectronInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::IParticleInfoSwitch class for Electron Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_trigger

trigger

exact

m_isolation

isolation

exact

m_isolationKinematics

isolationKinematics

exact

m_PID

PID

exact

m_trackparams

trackparams

exact

m_trackhitcont

trackhitcont

exact

m_effSF

effSF

exact

m_PIDWPs[XYZ]

PID_XYZ

pattern

m_PIDSFWPs[XYZ]

PIDSF_XYZ

pattern

m_isolWPs[“”]

ISOL_

exact

m_isolWPs[“”]

ISOL_NONE

exact

m_isolWPs[XYZ]

ISOL_XYZ

pattern

m_trigWPs[XYZ]

TRIG_XYZ

pattern

m_passSel

passSel

exact

m_passOR

passOR

exact

+

+
+

Note

+

PID, isolation and effSF switches do not enable any additional output by themselves. They require additional working point pattern using PID_XYZ for PID working points, PIDSF_XYZ for PID scale factors, ISOL_XYZ for isolation working points and scale factors, and TRIG_XYZ for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

+
m_configStr = "... PID_LHMedium PIDSF_MediumLLH ..."
+
+
+

will define the LHMedium PID working point and the accompanying scale factors. Note that not all PID working points have scale factors available.

+

Isolation supports NONE or empty option which will enable scale factors without additional isolation requirements, for example:

+
m_configStr = "... ISOL_NONE ISOL_Loose ..."
+
+
+

will define the Loose isolation working point status branch, and scale factors without isolation requirements and using the Loose WP.

+
+
+ +
+
+class PhotonInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::IParticleInfoSwitch class for Photon Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_isolation

isolation

exact

m_PID

PID

exact

m_purity

purity

exact

m_effSF

effSF

exact

m_trigger

trigger

exact

m_isoCones

isoCone

partial

+

+
+

Note

+

isoCone can be repeated but requires a number after it, for example:

+
m_configStr = "... isoCone20 isoCone40 ..."
+
+
+

which will define std::vector<int> m_isoCones = {20,40}.

+
+
+ +
+
+class ClusterInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+ +
+
+class JetInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::IParticleInfoSwitch class for Jet Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_noMultiplicity

noMultiplicity

exact

m_kinematic

kinematic

exact

m_trigger

trigger

exact

m_substructure

substructure

exact

m_ntrimsubjets

ntrimsubjets

exact

m_bosonCount

bosonCount

exact

m_VTags

VTags

exact

m_rapidity

rapidity

exact

m_clean

clean

exact

m_cleanLight

cleanLight

exact

m_cleanLightLLP

cleanLightLLP

exact

m_cleanTrig

cleanTrig

exact

m_timing

timing

exact

m_energy

energy

exact

m_energyLight

energyLight

exact

m_scales

scales

exact

m_constscaleEta

constscaleEta

exact

m_detectorEta

detectorEta

exact

m_resolution

resolution

exact

m_truth

truth

exact

m_truthDetails

truth_details

exact

m_layer

layer

exact

m_trackPV

trackPV

exact

m_trackAll

trackAll

exact

m_chargedPFOPV

chargedPFOPV

exact

m_jvt

JVT

exact

m_NNJvt

NNJvt

exact

m_sfJVTName

sfJVT

partial

m_sffJVTName

sffJVT

partial

m_allTrack

allTrack

exact

m_allTrackPVSel

allTrackPVSel

exact

m_allTrackDetail

allTrackDetail

exact

m_constituent

constituent

exact

m_constituentAll

constituentAll

exact

m_flavorTag

flavorTag

exact

m_flavorTagHLT

flavorTagHLT

exact

m_flavorTagTLA

flavorTagTLA

exact

m_sfFTagFix

sfFTagFix

partial

m_sfFTagFlt

sfFTagFlt

partial

m_sfFTagHyb

sfFTagHyb

partial

m_jetBTag

jetBTag

partial

m_area

area

exact

m_JVC

JVC

exact

m_tracksInJet

tracksInJet

partial

m_trackJetName

trackJetName

partial

m_hltVtxComp

hltVtxComp

exact

m_onlineBS

onlineBS

exact

m_onlineBSTool

onlineBSTool

exact

m_charge

charge

exact

m_passSel

passSel

exact

m_passOR

passOR

exact

m_vsLumiBlock

vsLumiBlock

exact

m_vsActualMu

vsActualMu

exact

m_lumiB_runN

lumiB_runN

exact

m_byAverageMu

byAverageMu

exact

m_byEta

byEta

exact

m_etaPhiMap

etaPhiMap

exact

m_muonCorrection

muonCorrection

exact

+

trackJetName expects one or more track jet container names separated by an underscore. For example, the string trackJetName_GhostAntiKt2TrackJet_GhostVR30Rmax4Rmin02TrackJet will set the attriubte m_trackJetNames +to {"GhostAntiKt2TrackJet", "GhostVR30Rmax4Rmin02TrackJet"}.

+

+
+

Note

+

sfJVT requires a working point after it, for example:

+
m_configStr = "... sfJVTMedium ..."
+
+
+

jetBTag expects the format jetBTag_tagger_type_AABB..MM..YY.ZZ. This will create a vector of working points (AA, BB, CC, …, ZZ) associated with that tagger. Several entries can be given. For example:

+

m_configStr = “… jetBTag_DL1r_FixedCutBEff_60707785 …”

+
+
+ +
+
+class TruthInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for Truth Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_noMultiplicity

noMultiplicity

exact

m_kinematic

kinematic

exact

m_type

type

exact

m_bVtx

bVtx

exact

m_parents

parents

exact

m_children

children

exact

m_dressed

dressed

exact

m_origin

origin

exact

m_particleType

particleType

exact

m_pdgIdOnly

pdgIdOnly

exact

+

+
+ +
+
+class TrackInfoSwitch : public HelperClasses::InfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for Track Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_noMultiplicity

noMultiplicity

exact

m_kinematic

kinematic

exact

m_fitpars

fitpars

exact

m_numbers

numbers

exact

m_vertex

vertex

exact

m_useTheS

useTheS

exact

+

+
+ +
+
+class TauInfoSwitch : public HelperClasses::IParticleInfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::IParticleInfoSwitch struct for Tau Information.

+

+
+

Note

+

identification and effSF switches do not enable any additional output by themselves. +They require additional working point pattern using TAUEFF_XYZ for combined scale factors, and TRIG_XYZ +for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

+
m_configStr = "... TAUEFF_EleOLRElectronEleRNNLoose_TauIDMedium ... TRIG_EleOLRElectronEleRNNMedium_TauIDLoose_TrigMyTriggerMenu"
+
+
+

Notice that the working point for TAUEFF is a combination of two working points from EleOLRElectron and TauID.

+
+
+ +
+
+class METInfoSwitch : public HelperClasses::InfoSwitch
+
+#include <HelperClasses.h>
+

The HelperClasses::InfoSwitch struct for Missing \(\text{E}_{\text{T}}\) Information.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

Pattern

Match

m_metClus

metClus

exact

m_metTrk

metTrk

exact

m_sigClus

sigClus|all

exact

m_sigTrk

sigTrk|all

exact

m_sigResolutionClus

sigResolutionClus|all

exact

m_sigResolutionTrk

sigResolutionTrk|all

exact

m_refEle

refEle|all

exact

m_refGamma

refGamma|all

exact

m_refTau

refTau|all

exact

m_refMuons

refMuons|all

exact

m_refJet

refJet|all

exact

m_refJetTrk

refJetTrk

exact

m_softClus

softClus|all

exact

m_softTrk

softTrk|all

exact

m_noExtra

noExtra

exact

+

+
+

Note

+

For all except m_refJetTrk, you can pass in the string "all" to enable all information. You can force only calocluster- or track-based MET using m_metClus or m_metTrk.

+
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/HelperFunctions.html b/HelperFunctions.html new file mode 100644 index 0000000000..915d39de51 --- /dev/null +++ b/HelperFunctions.html @@ -0,0 +1,736 @@ + + + + + + + + + + + Helper Functions — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Helper Functions

+
+
+namespace HelperFunctions
+
+

Enums

+
+
+enum ShowerType
+

The different supported shower types.

+

Values:

+
+
+enumerator Unknown
+
+ +
+
+enumerator Pythia8
+
+ +
+
+enumerator Herwig7p1
+
+ +
+
+enumerator Herwig7p2
+
+ +
+
+enumerator Sherpa221
+
+ +
+
+enumerator Sherpa2210
+
+ +
+
+enumerator Sherpa2212
+
+ +
+
+enumerator AmcPy8
+
+ +
+
+enumerator AmcH7
+
+ +
+
+enumerator Pythia8_517
+
+ +
+
+enumerator Sherpa2214
+
+ +
+
+enumerator Sherpa_Unknown
+
+ +
+ +
+
+

Functions

+
+
+MsgStream &msg(MSG::Level lvl = MSG::INFO)
+

Static object that provides athena-based message logging functionality

+
+ +
+
+bool passPrimaryVertexSelection(const xAOD::VertexContainer *vertexContainer, int Ntracks = 2)
+
+ +
+
+int countPrimaryVertices(const xAOD::VertexContainer *vertexContainer, int Ntracks = 2)
+
+ +
+
+const xAOD::Vertex *getPrimaryVertex(const xAOD::VertexContainer *vertexContainer, MsgStream &msg)
+
+ +
+
+inline const xAOD::Vertex *getPrimaryVertex(const xAOD::VertexContainer *vertexContainer)
+
+ +
+
+float getPrimaryVertexZ(const xAOD::Vertex *pvx)
+
+ +
+
+int getPrimaryVertexLocation(const xAOD::VertexContainer *vertexContainer, MsgStream &msg)
+
+ +
+
+inline int getPrimaryVertexLocation(const xAOD::VertexContainer *vertexContainer)
+
+ +
+
+bool applyPrimaryVertexSelection(const xAOD::JetContainer *jets, const xAOD::VertexContainer *vertices)
+
+ +
+
+std::string replaceString(std::string subjet, const std::string &search, const std::string &replace)
+
+ +
+
+std::vector<TString> SplitString(TString &orig, const char separator)
+
+ +
+
+float dPhi(float phi1, float phi2)
+
+ +
+
+bool has_exact(const std::string input, const std::string flag)
+
+ +
+
+std::size_t string_pos(const std::string &haystack, const std::string &needle, unsigned int N)
+

Function which returns the position of the n-th occurence of a character in a string searching backwards. Returns -1 if no occurencies are found.

+

Source: http://stackoverflow.com/questions/18972258/index-of-nth-occurrence-of-the-string

+
+ +
+
+StatusCode isAvailableMetaData(TTree *metaData)
+
+ +
+
+bool isFilePrimaryxAOD(TFile *inputFile)
+
+ +
+
+std::vector<TLorentzVector> jetReclustering(const xAOD::JetContainer *jets, double radius = 1.0, double fcut = 0.05, fastjet::JetAlgorithm rc_alg = fastjet::antikt_algorithm)
+
+ +
+
+std::vector<TLorentzVector> jetTrimming(const xAOD::JetContainer *jets, double radius = 0.3, double fcut = 0.05, fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm)
+
+ +
+
+TLorentzVector jetTrimming(const xAOD::Jet *jet, double radius = 0.3, double fcut = 0.05, fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm)
+
+ +
+
+bool sort_pt(const xAOD::IParticle *partA, const xAOD::IParticle *partB)
+
+ +
+
+std::vector<CP::SystematicSet> getListofSystematics(const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream &msg)
+

Get a list of systematics.

+
+
Parameters
+
    +
  • inSysts – systematics set retrieved from the tool

  • +
  • systNames – comma separated list of wanted systematics names, use “Nominal” for nominal and “All” for all systematics

  • +
  • systVal – continuous systematics sigma value

  • +
  • msg – the MsgStream object with appropriate level for debugging

  • +
+
+
+
+ +
+
+void writeSystematicsListHist(const std::vector<CP::SystematicSet> &systs, std::string histName, TFile *file)
+
+ +
+
+template<typename T>
std::string type_name(bool useXAOD = true)
+
+ +
+
+template<typename T1, typename T2>
StatusCode makeSubsetCont(T1 *&intCont, T2 *&outCont, MsgStream &msg, const std::string &flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT)
+

Function to copy a subset of a generic input xAOD container into a generic output xAOD container.

+

+If the optional parameters aren’t specified, the function will just make a full copy of the input container into the output one.

+
Author

Marco Milesi (marco.milesi@cern.ch)

+
+
+

+
+
Parameters
+
    +
  • intCont[in] input container

  • +
  • outCont[inout] output container

  • +
  • flagSelect[in] (optional) the name of the decoration for objects passing a certain selection (e.g. “passSel”, “overlaps” …). When explicitly specified, it must not be empty.

  • +
  • tool_name[in] (optional) an enum specifying the tool type which is calling this function (definition in HelperClasses::ToolName)

  • +
+
+
+
+ +
+
+template<typename T1, typename T2>
StatusCode makeSubsetCont(T1 *&intCont, T2 *&outCont, const std::string &flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT)
+
+ +
+
+template<typename T>
StatusCode retrieve(T *&cont, std::string name, xAOD::TEvent *event, xAOD::TStore *store, MsgStream &msg)
+

Retrieve an arbitrary object from TStore / TEvent.

+

This tries to make your life simple by providing a one-stop container retrieval shop for all types.

+

Example Usage:

+
const xAOD::JetContainer  jets(0);
+// look for "AntiKt10LCTopoJets" in both TEvent and TStore
+ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", m_event, m_store) );
+// look for "AntiKt10LCTopoJets" in only TStore
+ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", 0, m_store) );
+// look for "AntiKt10LCTopoJets" in only TEvent, enable verbose output
+ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", m_event, 0, msg()) );
+
+
+

Checking Order:

+
    +
  • start by checking TStore

    +
      +
    • check if store contains ‘xAOD::JetContainer’ named ‘name’

      +
        +
      • attempt to retrieve from store

      • +
      • return if failure

      • +
      +
    • +
    +
  • +
  • next check TEvent

    +
      +
    • check if event contains ‘xAOD::JetContainer’ named ‘name’

      +
        +
      • attempt to retrieve from event

      • +
      • return if failure

      • +
      +
    • +
    • return FAILURE

    • +
    +
  • +
  • return SUCCESS (should never reach this last line)

  • +
+

+

+
+
Parameters
+
    +
  • cont – pass in a pointer to the object to store the retrieved container in

  • +
  • name – the name of the object to look up

  • +
  • event – the TEvent, usually wk()->xaodEvent(). Set to 0 to not search TEvent.

  • +
  • store – the TStore, usually wk()->xaodStore(). Set to 0 to not search TStore.

  • +
  • msg – the MsgStream object with appropriate level for debugging

  • +
+
+
+
+ +
+
+template<typename T>
StatusCode retrieve(T *&cont, std::string name, xAOD::TEvent *event, xAOD::TStore *store)
+
+ +
+
+template<typename T> StatusCode __attribute__ ((deprecated("retrieve<T>(..., bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882"))) retrieve(T *&cont
+
+ +
+
+template<typename T>
bool isAvailable(std::string name, xAOD::TEvent *event, xAOD::TStore *store, MsgStream &msg)
+

Return true if an arbitrary object from TStore / TEvent is available.

+

This tries to make your life simple by providing a one-stop container check shop for all types

+

Example Usage:

+
const xAOD::JetContainer  jets(0);
+// look for "AntiKt10LCTopoJets" in both TEvent and TStore
+HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", m_event, m_store)
+// look for "AntiKt10LCTopoJets" in only TStore
+HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", 0, m_store)
+// look for "AntiKt10LCTopoJets" in only TEvent, enable verbose output
+HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", m_event, 0, MSG::VERBOSE)
+
+
+

+

+
+
Parameters
+
    +
  • name – the name of the object to look up

  • +
  • event – the TEvent, usually wk()->xaodEvent(). Set to 0 to not search TEvent.

  • +
  • store – the TStore, usually wk()->xaodStore(). Set to 0 to not search TStore.

  • +
  • msg – the MsgStream object with appropriate level for debugging

  • +
+
+
+
+ +
+
+template<typename T>
bool isAvailable(std::string name, xAOD::TEvent *event, xAOD::TStore *store)
+
+ +
+
+template<class T>
const T *getLink(const xAOD::IParticle *particle, std::string name)
+

Access to element link to object of type T stored in auxdata.

+
+ +
+
+template<typename T>
T sort_container_pt(T *inCont)
+
+ +
+
+template<typename T>
const T sort_container_pt(const T *inCont)
+
+ +
+
+inline bool found_non_dummy_sys(std::vector<std::string> *sys_list)
+
+ +
+
+template<typename T1, typename T2, typename T3>
StatusCode makeDeepCopy(xAOD::TStore *m_store, std::string containerName, const T1 *cont)
+

Make a deep copy of a container and put it in the TStore.

+

This is a very powerful templating function. The point is to remove the triviality of making deep copies by specifying all that is needed. The best way is to demonstrate via example:

+
const xAOD::JetContainer  selected_jets(nullptr);
+ANA_CHECK( m_event->retrieve( selected_jets, "SelectedJets" ));
+ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::JetContainer, xAOD::JetAuxContainer, xAOD::Jet>(m_store, "BaselineJets", selected_jets)));
+
+
+

+

+
+
Template Parameters
+
    +
  • T1 – The type of the container you’re going to deep copy into

  • +
  • T2 – The type of the aux container you’re going to deep copy into

  • +
  • T3 – The type of the object inside the container you’re going to deep copy

  • +
+
+
Parameters
+
    +
  • m_store – A pointer to the TStore object

  • +
  • containerName – The name of the container to create as output in the TStore

  • +
  • cont – The container to deep copy, it should be a container of pointers (IParticleContainer or ConstDataVector)

  • +
+
+
+
+ +
+
+template<typename T1, typename T2>
StatusCode recordOutput(xAOD::TEvent *m_event, xAOD::TStore *m_store, std::string containerName)
+

Copy a container from the TStore to be recorded in the TEvent (eg: to an output)

+

If you have a container in the TStore, this function will record it into the output for you without an issue. As an example:

+
ANA_CHECK( HelperFunctions::recordOutput<xAOD::JetContainer, xAOD::JetAuxContainer>(m_event, m_store, "BaselineJets"));
+
+
+

where we build off the previous example of making a deep copy (see HelperFunctions::makeDeepCopy()).

+

+

+
+
Template Parameters
+
    +
  • T1 – The type of the container you’re going to record

  • +
  • T2 – The type of the aux container you’re going to record

  • +
+
+
Parameters
+
    +
  • m_event – A pointer to the TEvent object

  • +
  • m_store – A pointer to the TStore object

  • +
  • containerName – The name of the container in the TStore to record to TEvent

  • +
+
+
+
+ +
+
+template<typename T_BR>
void connectBranch(std::string name, TTree *tree, const std::string &branch, std::vector<T_BR> **variable)
+
+ +
+
+template<typename T>
void remove_duplicates(std::vector<T> &vec)
+
+ +
+
+ShowerType getMCShowerType(const std::string &sample_name, const std::string &m_taggerName)
+

Determines the type of generator used for the shower from the sample name.

+

The name of the generator is determined using some common definitions in the ATLAS MC dataset naming scheme. The +case independent strings that are searched for are:

+
+

PYTHIA8EVTGEN or Py8EG or PYTHIA : Pythia8 +HERWIG : Herwig7 +SHERPA_CT : Sherpa21 +SHERPA : Sherpa22 (if not Sherpa 21)

+
+

+

+
+
Parameters
+

sample_name – The name of the sample, usualy the dataset name

+
+
+
+ +
+
+

Variables

+
+
+StatusCode std::string name
+
+ +
+
+StatusCode std::string xAOD::TEvent * event
+
+ +
+
+StatusCode std::string xAOD::TEvent xAOD::TStore * store
+
+ +
+
+StatusCode std::string xAOD::TEvent xAOD::TStore bool debug   = { return retrieve<T>(cont, name, event, store, msg())
+
+ +
+
+
+struct pt_sort
+
+

Public Functions

+
+
+inline bool operator()(const TLorentzVector &lhs, const TLorentzVector &rhs)
+
+ +
+
+inline bool operator()(const TLorentzVector *lhs, const TLorentzVector *rhs)
+
+ +
+
+inline bool operator()(const xAOD::IParticle &lhs, const xAOD::IParticle &rhs)
+
+ +
+
+inline bool operator()(const xAOD::IParticle *lhs, const xAOD::IParticle *rhs)
+
+ +
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Histograms.html b/Histograms.html new file mode 100644 index 0000000000..de34089649 --- /dev/null +++ b/Histograms.html @@ -0,0 +1,636 @@ + + + + + + + + + + + Histograms — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Histograms

+

There are three generic levels to include when building up an analysis +that involves plotting: * HistogramManager * JetHists, ElectronHists, +MuonHists, etc… * JetHistsAlgo, ElectronHistsAlgo, MuonHistsAlgo, +etc…

+

In order: HistogramManager should rarely be changed. This manages the +histograms for you in EventLoop algorithms by initializing histograms +and adding it to the worker. JetHists, etc are plotting classes to +pre-define the set of plots you want to use for a given set of objects +– as well as how to plot them. Finally, JetHistsAlgo, etc… are +EventLoop algorithms that you would include in your jobs and run to +actually apply those plots.

+
+

HistogramManager

+

This is the base class from which all histogram management classes are made for Muons, Jets, Electrons, etcetera. It is meant to be flexible enough for someone to use it to create their own set of histograms to produce for an algorithm from scratch using the class.

+

In particular, the book() functions are overloaded for good reason - they all do the same thing except the number of arguments supplied tells us what kind of histogram you want to make: 1D, 2D, or 3D. All histograms take in a name and a title which get concatenated to provide the stored name of the histogram (name+title). If you wish to use TDirectoryFiles automagically, append a forward-slash to the end of the name, such as "AntiKt10/". The book() function will create the histogram, set up the title, the labels, append it to m_allHists, and returns a pointer to the newly created histogram. The last argument is sumw2 which tells the function whether to enable sumw2() for the histogram or not, this defaults to true. The order of the arguments are listed in the table.

+
+
+class HistogramManager
+

This is used by any class extending to pre-define a set of histograms to book by default.

+

We expect the user to create a new group of histograms, such as for jets:

+
class JetHists : public HistogramManager
+{
+  public:
+    JetHists(std::string name, std::string detailStr);
+    virtual ~JetHists() ;
+
+    bool m_debug;
+    StatusCode initialize();
+    StatusCode execute( const xAOD::JetContainer  jets, float eventWeight, int pvLoc = -1);
+    StatusCode execute( const xAOD::Jet  jet, float eventWeight, int pvLoc = -1 );
+    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
+    using HistogramManager::execute; // overload
+};
+
+
+

The above example is taken from our implementation in JetHists.

+

+
+

Note

+

The expectation is that the user does not directly use this class but rather inherits from it.

+
+

Subclassed by MetHists

+
+

Public Types

+
+
+typedef std::unordered_map<std::string, TH1*> HistMap_t
+

Typedef for convenience.

+
+ +
+
+

Public Functions

+
+
+HistogramManager(std::string name, std::string detailStr)
+

Initialization.

+
+
Parameters
+
    +
  • name – The top-level path in which all histograms are stored under (think of TDirectory)

  • +
  • detailStr – Specify the various details of which to plot. For example, jets might want "kinematic substructure".

  • +
+
+
+
+ +
+
+virtual ~HistogramManager()
+

Destructor, allows the user to delete histograms that are not being recorded.

+
+ +
+
+inline virtual StatusCode initialize()
+

Initialize and book all histograms.

+

Example implementation:

+
StatusCode JetHists::initialize() {
+  m_jetPt          = book(m_name, "jetPt",  "jet p_{T} [GeV]", 120, 0, 3000.);
+  return StatusCode::SUCCESS;
+}
+
+
+

+
+

Note

+

This should call the overloaded functions HistogramManager::book() to create the histograms so that the user can call hists->record(wk()) to record all histograms to the EventLoop worker.

+
+
+ +
+
+inline virtual StatusCode execute()
+

Execute by filling in the histograms.

+

Example implementation:

+
StatusCode JetHists::execute( const xAOD::JetContainer  jets, float eventWeight ){
+  for(const auto& jet:  jets)
+    m_jetPt->Fill( jet->pt()/1.e3, eventWeight );
+  return StatusCode::SUCCESS;
+}
+
+
+

+
+ +
+
+inline virtual StatusCode finalize()
+

Finalize anything that needs to be finalized.

+
+

Warning

+

This should rarely be used. There is not a good use case for this functionality but it needs to exist in the off-chance that a user comes along and needs it for their histogram class.

+
+
+ +
+
+TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh)
+

record a histogram and call various functions

+
+

Note

+

This is an overloaded function. It will build the right histogram given the correct number of input arguments.

+
+
+
Parameters
+
    +
  • name – name of histogram, access it in ROOT file like h_jetPt->Draw()

  • +
  • title – usually pointless,put a description of the histogram in here

  • +
  • xlabel – label to put on the x-axis

  • +
  • xbins – number of xbins to use

  • +
  • xlow – lower bound on xbins

  • +
  • xhigh – upper bound on xbins

  • +
  • xbinsArr – variable xbins, test math \((x_1,y_1)\) and \((x_2,y_2)\)

  • +
  • ylabel – label to put on the y-axis

  • +
  • ylow – lower bound on ybins

  • +
  • yhigh – upper bound on ybins

  • +
  • ybinsArr – variable ybins

  • +
  • zlabel – label to put on the z-axix

  • +
  • zlow – lower bound on zbins

  • +
  • zhigh – upper bound on zbins

  • +
  • zbinsArr – variable zbins

  • +
+
+
+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string xyabel, int ybins, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, double ylow, double yhigh, std::string zlabel, int zbins, double zlow, double zhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, const Double_t *ybinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr, std::string zlabel, int zbins, const Double_t *zbinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, double ylow, double yhigh, std::string option = "")
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, int xbins, const Double_t *xbinsArr, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, int xbins, double xlow, double xhigh, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+void record(EL::IWorker *wk)
+

record all histograms from HistogramManager::m_allHists to the worker

+
+ +
+
+MsgStream &msg() const
+

the standard message stream for this algorithm

+
+ +
+
+MsgStream &msg(int level) const
+

allow ANA_MSG_XXXX macros to be used within algorithms for a given level

+
+ +
+
+TH1 *findHist(const std::string &histName)
+

Return the pointer to the histogram.

+
+ +
+
+void fillHist(const std::string &histName, double value)
+

Fill a histogram by name. Can be overloaded with weight.

+
+
Parameters
+
    +
  • histName – The name of the histogram to be filled

  • +
  • value – The value to fill the histogram with

  • +
+
+
+
+ +
+
+void fillHist(const std::string &histName, double value, double weight)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+void fillHist(const std::string &histName, double valueX, double valueY, double weight)
+
+ +
+
+void fillHist(const std::string &histName, double valueX, double valueY, double valueZ, double weight)
+
+ +
+
+void fillProfile(const std::string &histName, double valueX, double valueY, double weight)
+
+ +
+
+

Public Members

+
+
+HistMap_t m_histMap
+

The map of histogram names to their pointers.

+
+ +
+
+

Protected Attributes

+
+
+std::string m_name
+

generically the main name assigned to all histograms

+
+ +
+
+std::string m_detailStr
+

a detail level in the form of a string

+
+ +
+
+std::vector<TH1*> m_allHists
+

a container holding all generated histograms

+
+ +
+
+mutable MsgStream m_msg
+

hold the MsgStream object

+
+ +
+
+

Private Functions

+
+
+void Sumw2(TH1 *hist, bool flag = true)
+

Turn on Sumw2 for the histogram.

+
+
Parameters
+
    +
  • hist – The histogram to modify

  • +
  • flag – Pass in whether to turn on Sumw2 or not

  • +
+
+
+
+ +
+
+void record(TH1 *hist)
+

Push the new histogram to HistogramManager::m_allHists and add its name to HistogramManager::m_histMap.

+
+ +
+
+void SetLabel(TH1 *hist, std::string xlabel)
+

Set the labels on a histogram.

+
+
Parameters
+
    +
  • hist – The histogram to set the labels on

  • +
  • xlabel – The xlabel to set

  • +
  • ylabel – The ylabel to set

  • +
  • zlabel – The zlabel to set

  • +
+
+
+
+ +
+
+void SetLabel(TH1 *hist, std::string xlabel, std::string ylabel)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+void SetLabel(TH1 *hist, std::string xlabel, std::string ylabel, std::string zlabel)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+ +
+
+

Classes

+

This is a class that predefines all the histograms, defines the execute function which fills in the histograms for you, given an object or a collection of objects, and handles a lot of other logic. This class extends HistogramManager.

+ +
+
+

Algorithms

+

This is an EL Algorithm that incorporates the correspondingly-named class.

+ +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/HowToDocumentation.html b/HowToDocumentation.html new file mode 100644 index 0000000000..7684caea70 --- /dev/null +++ b/HowToDocumentation.html @@ -0,0 +1,468 @@ + + + + + + + + + + + How to Document Code — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

How to Document Code

+

The documentation for xAODAnaHelpers uses a slightly non-trivial workflow:

+
    +
  1. Doxygen parses the header and source files to generate an XML tree of the code

  2. +
  3. breathe is a sphinx wrapper that enables us to parse the XML tree from doxygen

  4. +
  5. sphinx is what produces the various output formats such as html, latex, e-pub from source code comments

  6. +
  7. ReadTheDocs.org uses doxygen, breathe, and sphinx to automatically produce our documentation everytime main changes.

  8. +
+

Our documentation is automatically generated for us so we will always guarantee that our documentation is up-to-date for all users.

+

The aim of this document is to help you get started with producing your own documentation locally to help resolve errors, typos, and make sure you’re formatting it the way that you want before pushing it to our github repo.

+
+

Setting it up Locally

+

Locally, we are going to need doxygen to do the initial parsing. Note that out of the box without doxygen, we can parse python scripts, such as xAH_run.py API Reference, which are included as part of xAODAnaHelpers. However, if we wish to have all of our C++ code’s documentation included, we will need doxygen to do parse it.

+
+

Doxygen

+

Get doxygen however you want. For Macs, we can use:

+
brew install doxygen
+
+
+

to install it. At this point, one should be able to generate the XML tree by navigating to the docs folder and running doxygen with no arguments:

+
cd docs
+doxygen
+
+
+

since we provide a Doxyfile in the docs directory with the correct configurations.

+
+
+

Python Virtual Environment

+

Next, I suggest setting up a python virtual environment. Luckily, this solution is the hardest part. Most (rational) people use virtualenvwrapper to manage my python dependencies and workspace. It is assumed you already have pip.

+

To get the entire functionality of venvwrapper, we just need to grab the package and update our environment when we want to use it:

+
pip install virtualenvwrapper
+echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bash_profile
+
+
+
+

Note

+

Don’t forget to source your profile if you’re going to use the same shell:

+
source ~/.bash_profile
+
+
+
+

From now on, we will have commands like mkvirtualenv, workon, and rmvirtualenv in our shell. As a first-time user, you haven’t made a virtual environment yet, so the first thing we do is make one:

+
mkvirtualenv xAH
+
+
+

This will also automatically call workon xAH. This is something we will always run in the future to enter the virtual environment.

+
+

Note

+

If you ever forget the name of the virtual environment you made, just run workon without any arguments. There is also tab completion.

+
+
+
+

Python Packages

+
+

Note

+

If you choose to use a virtual environment, enter it workon xAH

+
+

This is super easy. We provide a requirements.txt file:

+
cd docs
+pip install -r requirements.txt
+
+
+

which will install all the required packages for you. As of the time of this document, this contains the following packages:

+
alabaster==0.7.12
+Babel==2.9.1
+beautifulsoup4==4.8.1
+breathe==4.35.0
+bs4==0.0.1
+certifi==2024.7.4
+chardet==3.0.4
+docutils==0.15.2
+exhale==0.2.4
+idna==3.7
+imagesize==1.1.0
+Jinja2==3.1.4
+lxml==4.9.1
+MarkupSafe==2.1.3
+packaging==19.2
+Pygments==2.15.0
+pyparsing==2.4.5
+pytz==2019.3
+PyYAML==6.0
+requests==2.32.2
+six==1.13.0
+snowballstemmer==2.0.0
+soupsieve==1.9.5
+Sphinx==4.5.0
+sphinx-argparse==0.2.5
+sphinx-rtd-theme==0.4.3
+sphinxcontrib-applehelp==1.0.1
+sphinxcontrib-devhelp==1.0.1
+sphinxcontrib-htmlhelp==2.0.0
+sphinxcontrib-jsmath==1.0.1
+sphinxcontrib-qthelp==1.0.2
+sphinxcontrib-serializinghtml==1.1.5
+urllib3==1.26.19
+
+
+
+
+
+

Generate Docs Locally

+

Now that we have doxygen and all of the required python packages installed, all you need to do now is process everything:

+
cd docs
+make clean
+doxygen
+make html
+open _build/html/index.html
+
+
+

and we’re good to go. Sphinx provides a Makefile in docs/ to make the html generation much easier to work with.

+

You may not always run all of these pieces each time you generate documentation. For example, if you need to make a change to the header/source files of any kind, you will need to re-run doxygen. In the rare case that the html generation isn’t working right, you might want to run make clean so you start over again. If you’re only changing the reStructuredText (rst) files in docs/ you might only ever need to run make html. All in all, it doesn’t take more than 10-15 seconds to generate the necessary documentation.

+
+
+

Documenting Code

+

In most cases, we will want to follow the reStructuredText directives and formatting for doing the code documentation. We just want to use doxygen + breathe to expose those comments to sphinx to parse and display correctly. In what follows, we provide a set of guidelines (really, examples) to make it easier to document our code specifically.

+
+

Note

+

All comments for a given class, function, variable should be prior to the given item you’re adding documentation for.

+
+

If you have a question about how to do something, google it in the context of reStructuredText or ask on the mailing list. Also have a look through most of our source code and compare it to the docs to figure out how we do something.

+
+

One-Line Comments

+

One-line comments are very useful in cases where we do not have much to say about something, perhaps because it is a rather trivial item:

+
/** @brief generically the main name assigned to all histograms */
+std::string m_name;
+
+
+

which will render as

+
+
+std::string HistogramManager::m_name
+

generically the main name assigned to all histograms

+
+ +
+
+

Block Comments

+

Block comments are very useful in all other cases. When in doubt, you can always make a block comment with just a single line, even for a variable. The flexibility allows us to include a lot more detail and formatting such as tables and latex:

+
/**
+    @brief Destructor, allows the user to delete histograms that are not being recorded.
+*/
+virtual ~HistogramManager();
+
+
+

which will render as

+
+
+virtual HistogramManager::~HistogramManager()
+

Destructor, allows the user to delete histograms that are not being recorded.

+
+ +
+
+

Doxygen rst directive

+

To tell doxygen and breathe that a given block of text should be considered as reStructuredText, we simply need to wrap it:

+
@rst
+    This is now inside a doxygen directive that tells doxygen not to parse it, so that breathe can parse it for Sphinx.
+
+@endrst
+
+
+

which will render as expected if we were writing it inside a standard .rst file. As usual, we have an example:

+
/**
+    @brief This is used by any class extending to pre-define a set of histograms to book by default.
+    @rst
+        .. note:: The expectation is that the user does not directly use this class but rather inherits from it.
+
+        We expect the user to create a new group of histograms, such as for jets::
+
+            class JetHists : public HistogramManager
+            {
+              public:
+                JetHists(std::string name, std::string detailStr);
+                virtual ~JetHists() ;
+
+                StatusCode initialize();
+                StatusCode execute( const xAOD::JetContainer* jets, float eventWeight, int pvLoc = -1);
+                StatusCode execute( const xAOD::Jet* jet, float eventWeight, int pvLoc = -1 );
+                using HistogramManager::book; // make other overloaded version of book() to show up in subclass
+                using HistogramManager::execute; // overload
+            };
+
+        The above example is taken from our implementation in :cpp:class:`JetHists`.
+
+    @endrst
+ */
+class HistogramManager {};
+
+
+

which will render as

+
+
+class HistogramManager
+

This is used by any class extending to pre-define a set of histograms to book by default.

+

We expect the user to create a new group of histograms, such as for jets:

+
class JetHists : public HistogramManager
+{
+  public:
+    JetHists(std::string name, std::string detailStr);
+    virtual ~JetHists() ;
+
+    bool m_debug;
+    StatusCode initialize();
+    StatusCode execute( const xAOD::JetContainer  jets, float eventWeight, int pvLoc = -1);
+    StatusCode execute( const xAOD::Jet  jet, float eventWeight, int pvLoc = -1 );
+    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
+    using HistogramManager::execute; // overload
+};
+
+
+

The above example is taken from our implementation in JetHists.

+

+
+

Note

+

The expectation is that the user does not directly use this class but rather inherits from it.

+
+

Subclassed by MetHists

+
+ +
+
+
+

For everything else…

+

These cover the general basics of how to document code for xAODAnaHelpers. Everything else is specific to how doxygen and Sphinx and breathe work. Most of these are well-supported with a large community, so googling is always very helpful here. Otherwise, feel free to ask on the mailing list.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Installing.html b/Installing.html new file mode 100644 index 0000000000..5238295285 --- /dev/null +++ b/Installing.html @@ -0,0 +1,324 @@ + + + + + + + + + + + Installing — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Installing

+
+

Getting the Source

+

Start in a work directory

+
mkdir workdir && cd $_
+
+
+

Then clone the source

+
git clone https://github.com/UCATLAS/xAODAnaHelpers
+
+
+
+

Note

+

If you have ssh-keys set up, then you can clone over SSH instead of HTTPS:

+
+
git clone git@github.com:UCATLAS/xAODAnaHelpers
+
+
+
+
+

At this point, you have the FULL state of the code. You can run git log to view the recent changes (no more ChangeLog!).

+
+

Checking out a specific tag

+

You can run git tag to view all current tags. You can checkout a specific tag (in a detached head state):

+
cd xAODAnaHelpers
+git checkout tags/XX-YY-ZZ
+cd ../
+
+
+

or you can use:

+
cd xAODAnaHelpers
+git checkout -b XX-YY-ZZ tags/XX-YY-ZZ
+cd ../
+
+
+

which switches you from main to a branch of the given version.

+
+
+
+

Compiling

+

For all sets of instructions below, make sure you run setupATLAS first.

+
+

CMake-based (21.2.X)

+

This step requires a little extra work, but compiles significantly faster. First, inside the workdir directory, we’ll create a build and source directory. The source directory will contain all packages we build in CMake:

+
mkdir src build
+
+
+

Then we’ll set up a release inside the source:

+
cd src
+asetup (RELEASE),here
+
+
+

This also sets up a CMakeLists.txt file in this top-level directory that searches for all packages you’ve checked out inside it. At this point, clone/checkout all packages you need such as xAODAnaHelpers:

+
git clone <url>/UCATLAS/xAODAnaHelpers.git
+
+
+

Next, you will need to change to your build directory that builds all your checked-out packages which is separate from your source code:

+
cd ../build
+
+
+
+

Note

+

This is inside the workdir, so you will have workdir/src/xAODAnaHelpers and workdir/build as paths, for example.

+
+

and then run cmake to generate our makefiles, then compile:

+
cmake ../src
+make
+cd ../
+
+
+

The last thing you need to do is get your environment set up correctly, so you will need to source setup.sh (from the top-level directory):

+
source build/*/setup.sh
+
+
+

Environment variables like ${AnalysisBase_PLATFORM} (or ${AnalysisTop_PLATFORM}) seem to contain the correct variable which represents the architecture of the system, e.g. x86_64-slc6-gcc49-opt.

+
+
+
+

Docker

+

Assuming you have docker, you can always grab the latest image for a given release (e.g. 21.2.4) like so:

+
docker pull ucatlas/xah:21.2.4-latest
+docker run -it --rm ucatlas/xah:21.2.4-latest bash
+
+
+

which puts you into the docker image and xAH is precompiled and the environment is set up so you can:

+
    +
  • compile your package on top of xAH [using cmake, make]

  • +
  • run vanilla `xAH_run.py` with a config on some ROOT files

  • +
+

For example, if you want to have the docker image have access to ROOT files locally on your computer, you can “mount” a folder in it like so:

+
docker run -it --rm -v /path/to/data/files:/home/atlas/data ucatlas/xah:21.2.4-latest bash
+
+
+

and /home/atlas/data inside the docker file will map to /path/to/data/files on your computer (host).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Intro.html b/Intro.html new file mode 100644 index 0000000000..3cf1da92e4 --- /dev/null +++ b/Intro.html @@ -0,0 +1,284 @@ + + + + + + + + + + + Introduction — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Introduction

+

This package is meant to be the minimal needed to use the CP tools +properly to calibrate, select, and correct the physics objects used for +most physics analyses. Each step of the analysis chain is done by an +EL::Algorithm which utilizes TStore to pass information to the Algos +down the chain. The final product can be a TTree, histograms, or a mini +xAOD (coming soon!). The philosophy adopted is not to remake the EDM or +to alter it but to make minimal wrapper around CP tools to help users +configure them properly and connect the full chain without much hassle. +To this end, some details are hidden for the user and set automatically +in the tools. As much as possible we used the same names as is shipped +with the xAOD objects or the CP tools themselves. The user is not meant +to learn a new EDM but rather to learn the minimal needed to start doing +the fun stuff - Physics!!

+
+

Background

+

An analysis is done in steps with a EL::Algorithm running for each. +For example, one algo is used to calibrate the jet collection, another +to apply some selection cuts, and then a third algorithm can contain +your analysis code to calculate something with the jets or one of the +general plotting algorithms that will fill a configurable set of plots. +A second jet calibrator and selector can be added to have a second jet +collection at the same time. A base class for a tree has also been +created with some standard branches and a way for the user to add more +as well. The tree is configurable with the same options as the +histograming classes - with a string of categories of interest. Each +algorithm can be configured via a text file read by TEnv. Example for +all are given and one can look for the “configure” function to see what +options are available (also noted below). Development changes and help +requests can be obtained on the e-group “atlas-sw-xAODAnaHelpersFW” or +directly here on GitHub.

+

A word on systematics. When the object itself is altered (i.e. JES +calibration and JES systematics) a new collection is made and put into +TStore. The name of the nominal collection after calibration is set from +the config file. The name of the systematically varied collection uses +the same name plus the name of the systematic directly from the CP tool. +The next algo in the chain using these objects needs to know which +collections where created. To avoid hardcoding things and all that, when +the systematics are applied a vector is created containing the names of +each systematic. Downstream, algos pick up this vector then know which +collections to run over. Each Algo will loop over all collections before +going to the next step. If selectors are configured with limits in the +number of events passing the cuts, only collections passing the cuts +will be passed to algos downstream. If none pass, the next event is +analyzed.

+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Issues.html b/Issues.html new file mode 100644 index 0000000000..ce7f66ba4d --- /dev/null +++ b/Issues.html @@ -0,0 +1,238 @@ + + + + + + + + + + + Common Issues — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Common Issues

+
+

Missing Metadata Information

+

It has been noticed that some of the latest derived xAODs have missing metadata info due to some bug in Derivation Framework. If you are incurring in a nasty crash at runtime, make sure you have set the name of the derivation property DerivationName property of BasicEventSelection. If that does not work then switched off the configuration flag:

+
UseMetadata False
+
+
+

and try again.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/JetCalibrator.html b/JetCalibrator.html new file mode 100644 index 0000000000..92d028c246 --- /dev/null +++ b/JetCalibrator.html @@ -0,0 +1,637 @@ + + + + + + + + + + + \(j\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(j\)

+
+
+class JetCalibrator : public xAH::Algorithm
+

A wrapper to a few JetETMiss packages. By setting the configuration parameters detailed in the header documentation, one can:

+
+
    +
  • calibrate a given jet collection

  • +
  • apply systematic variations for JES

  • +
  • apply systematic variations for JER

  • +
  • decorate the jet with the decision of the Jet Cleaning tool

  • +
+
+

When considering systematics, a new xAOD::JetCollection is created for each systematic variation. The names are then saved in a vector for downstream algorithms to use.

+

+
+

Public Functions

+
+
+JetCalibrator()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+

The name of the input container for this algorithm to read from TEvent or TStore

+
+ +
+
+std::string m_outContainerName = ""
+

The name of the nominal output container written by the algorithm to TStore

+

If the algorithm applies systematic variations, for each shallow copy saved to TStore, the systematic name will be appended to this.

+
+ +
+
+std::string m_jetAlgo = ""
+

set to AntiKt4EMTopo for AntiKt4EMTopoJets

+
+ +
+
+std::string m_outputAlgo = ""
+

name of vector holding names of jet systematics given by the JetEtmiss Tools

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+bool m_recalibrateHLTJets = false
+

whether to run HLT jet re-calibration

+
+ +
+
+std::string m_HLTVertexContainerName = "HLT_IDVertex_FS"
+

vertex container name to use for HLT jet re-calibration

+
+ +
+
+std::string m_HLTAvgMuDecor = "EventInfo.AvgMu"
+

HLT average mu decoration on EventInfo after formatting.

+
+ +
+
+std::string m_EvtInfoHLTNPVDecor = ""
+

location of the HLT NPV on EventInfo object (e.g. EventInfo.NPV) this defaults to an empty string and is only configured in JetCalibrationTool when a non-empty string is provided

+
+ +
+
+std::string m_calibGSCDepth = ""
+

GSCDepth property to override GSCDepth in config file when set to a non-empty string and GSC is in the calibration sequence.

+
+ +
+
+std::string m_calibConfigDir = ""
+

config for JetCalibrationTool ConfigDir, set it to override tool defaults

+
+ +
+
+std::string m_calibConfigData = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"
+

config for JetCalibrationTool for Data

+
+ +
+
+std::string m_calibConfigFullSim = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"
+

config for JetCalibrationTool for Full Sim MC

+
+ +
+
+std::string m_calibConfigAFII = "JES_MC16Recommendation_AFII_EMTopo_April2018_rel21.config"
+

config for JetCalibrationTool for AFII MC

+
+ +
+
+std::string m_calibSequence = ""
+

List of calibration steps. Auto-configured to the Jet/Etmiss recommendation if left blank.

+
+ +
+
+std::string m_uncertConfig = ""
+

config for Jet Uncertainty Tool

+
+ +
+
+std::string m_uncertMCType = ""
+

MC type for Jet Uncertainty Tool (need to be set for FullSim)

+
+ +
+
+std::string m_overrideCalibArea = ""
+

Override CalibArea tag (default recommended)

+
+ +
+
+std::string m_overrideUncertCalibArea = ""
+

Override uncertainties CalibArea tag (default recommended)

+
+ +
+
+std::string m_overrideAnalysisFile = ""
+

Set analysis-specific jet flavour composition file for JetUncertainties (default: unknown comp.)

+
+ +
+
+std::string m_overrideUncertPath = ""
+

Override uncertainties path (not recommended)

+
+ +
+
+bool m_forceInsitu = false
+

when running data “_Insitu” is appended to calibration sequence

+
+ +
+
+bool m_forceSmear = false
+

when running FullSim “_Smear” is appended to calibration sequence

+
+ +
+
+bool m_jetCalibToolsDEV = false
+

when using DEV mode of JetCalibTools

+
+ +
+
+bool m_addGhostMuonsToJets = false
+

Run muon-to-jet ghost association (recommended for MET)

+
+ +
+
+bool m_doCleaning = true
+

enable to apply jet cleaning decoration

+
+ +
+
+std::string m_jetCleanCutLevel = "LooseBad"
+

Cut Level.

+
+ +
+
+bool m_saveAllCleanDecisions = false
+

Save all cleaning decisions as decorators.

+
+ +
+
+bool m_jetCleanUgly = false
+

Do Ugly cleaning ( i.e. TileGap 3 )

+
+ +
+
+bool m_sort = true
+

Sort the processed container elements by transverse momentum.

+
+ +
+
+bool m_cleanParent = false
+

Apply jet cleaning to parent jet.

+
+ +
+
+bool m_applyFatJetPreSel = false
+
+ +
+
+bool m_useLargeRTruthLabelingTool = true
+

Use large-R jet truth labeling tool (needed for systematics)

+
+ +
+
+std::string m_truthLabelName = "R10TruthLabel_R21Consolidated"
+

Name of the large-R jet truth labeling definition.

+
+ +
+
+bool m_isTruthJetCol = false
+

Flag to indicate if using a truth jet collection.

+
+ +
+
+bool m_useTRUTH3 = true
+

Flag to indicate if input xAOD uses TRUTH3 style containers.

+
+ +
+
+std::string m_truthParticleContainerName = "TruthParticles"
+

Name of the truth particle container if not using TRUTH3 containers.

+
+ +
+
+std::string m_truthBosonContainerName = "TruthBosonsWithDecayParticles"
+

Name of the truth boson container if using TRUTH3 containers.

+
+ +
+
+std::string m_truthTopQuarkContainerName = "TruthTopQuarkWithDecayParticles"
+

Name of the truth top quark container if using TRUTH3 containers.

+
+ +
+
+bool m_doJetTileCorr = false
+

jet tile correction

+
+ +
+
+bool m_pseudoData = false
+

needed in case want to treat MC as pseudoData for JER uncertainty propagation

+
+ +
+
+bool m_mcAndPseudoData = false
+

Treat MC as usual, then run the JER uncertainties on it a second time treating it as pseudodata. Overrides m_pseudodata if true.

+
+ +
+
+

Private Functions

+
+
+EL::StatusCode executeSystematic(const CP::SystematicSet &thisSyst, const xAOD::JetContainer *inJets, std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*> &calibJetsSC, std::vector<std::string> &vecOutContainerNames, bool isPDCopy)
+
+ +
+
+EL::StatusCode initializeUncertaintiesTool(asg::AnaToolHandle<ICPJetUncertaintiesTool> &uncToolHandle, bool isData)
+
+ +
+
+

Private Members

+
+
+bool m_runSysts = false
+

set to true if systematics asked for and exist

+
+ +
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::string m_calibConfig
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+asg::AnaToolHandle<IJetCalibrationTool> m_JetCalibrationTool_handle = {"JetCalibrationTool", this}
+
+ +
+
+asg::AnaToolHandle<ICPJetUncertaintiesTool> m_JetUncertaintiesTool_handle = {"JetUncertaintiesTool", this}
+
+ +
+
+asg::AnaToolHandle<ICPJetUncertaintiesTool> m_pseudodataJERTool_handle = {"PseudodataJERTool", this}
+
+ +
+
+asg::AnaToolHandle<IJetSelector> m_JetCleaningTool_handle = {"JetCleaningTool", this}
+
+ +
+
+std::vector<asg::AnaToolHandle<IJetSelector>> m_AllJetCleaningTool_handles
+
+ +
+
+std::vector<std::string> m_decisionNames
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/JetHists.html b/JetHists.html new file mode 100644 index 0000000000..2d57e0f817 --- /dev/null +++ b/JetHists.html @@ -0,0 +1,250 @@ + + + + + + + + + + + JetHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

JetHists

+
+

Warning

+

doxygenclass: Cannot find class “JetHists” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/JetHistsAlgo.html b/JetHistsAlgo.html new file mode 100644 index 0000000000..40bf730f52 --- /dev/null +++ b/JetHistsAlgo.html @@ -0,0 +1,280 @@ + + + + + + + + + + + JetHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

JetHistsAlgo

+
+
+class JetHistsAlgo : public IParticleHistsAlgo
+
+

Public Functions

+
+
+JetHistsAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode execute()
+

Calls execute<IParticleContainer>

+
+ +
+
+virtual EL::StatusCode AddHists(std::string name)
+

Calls AddHists<IParticleHists>

+
+
Parameters
+

name – Name of the systematic

+
+
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/JetSelector.html b/JetSelector.html new file mode 100644 index 0000000000..c05afdf33d --- /dev/null +++ b/JetSelector.html @@ -0,0 +1,1012 @@ + + + + + + + + + + + \(j\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(j\)

+
+
+class JetSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+JetSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual bool executeSelection(const xAOD::JetContainer *inJets, float mcEvtWeight, bool count, std::string outContainerName, bool isNominal)
+
+ +
+
+virtual int PassCuts(const xAOD::Jet *jet)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

input container name

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+std::string m_truthJetContainer = "AntiKt4TruthJets"
+

truth jet container name (used for JVT SF)

+
+ +
+
+std::string m_inputAlgo = ""
+

input type - from xAOD or from xAODAnaHelper Algo output

+
+ +
+
+std::string m_outputAlgo = ""
+

output type - this is how the vector<string> w/ syst names will be saved in TStore

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+std::string m_jetScaleType = ""
+

Type of Scale Momementum.

+
+ +
+
+std::string m_decor = "passSel"
+

The decoration key written to passing objects.

+
+ +
+
+bool m_decorateSelectedObjects = true
+

decorate selected objects? defaul passSel

+
+ +
+
+bool m_createSelectedContainer = false
+

fill using SG::VIEW_ELEMENTS to be light weight

+
+ +
+
+int m_nToProcess = -1
+

look at n objects

+
+ +
+
+bool m_cleanJets = true
+

require cleanJet decoration to not be set and false

+
+ +
+
+int m_cleanEvtLeadJets = -1
+

kill event if any of the N leading jets are not clean

+
+ +
+
+bool m_cleanEvent = false
+

Kill event if any passing jets are not clean.

+
+

Note

+

The jets need the cleanJet decoration which is set when you enable JetCalibrator::m_doCleaning

+
+
+ +
+
+bool m_markCleanEvent = false
+

Mark event with decorator if any passing jets are not clean.

+
+ +
+
+std::string m_jetScale4Selection = "Final"
+

Choose the scale at which the selection is performed (default “Final”, i.e. default 4vector)

+
+ +
+
+bool m_doMCCleaning = false
+

(MC-only) Kill pileup overlay event if reconstructed jets avg(pT1,pT2) > 1.4*(truth jet pT1)

+
+ +
+
+float m_mcCleaningCut = 1.4
+

Change the default 1.4 cut to x > 1.0.

+
+ +
+
+int m_pass_min = -1
+

minimum number of objects passing cuts

+
+ +
+
+int m_pass_max = -1
+

maximum number of objects passing cuts

+
+ +
+
+float m_pT_max = 1e8
+

require pT < pt_max

+
+ +
+
+float m_pT_min = 1e8
+

require pT > pt_min

+
+ +
+
+float m_ET_max = 1e8
+

require ET < ET_max

+
+ +
+
+float m_ET_min = 1e8
+

require ET > ET_min

+
+ +
+
+float m_eta_max = 1e8
+

require eta < eta_max

+
+ +
+
+float m_eta_min = 1e8
+

require eta > eta_min

+
+ +
+
+float m_detEta_max = 1e8
+

require detEta < detEta_max

+
+ +
+
+float m_detEta_min = 1e8
+

require detEta > detEta_min

+
+ +
+
+float m_mass_max = 1e8
+

require mass < mass_max

+
+ +
+
+float m_mass_min = 1e8
+

require mass > mass_min

+
+ +
+
+float m_rapidity_max = 1e8
+

require rapidity < rapidity_max

+
+ +
+
+float m_rapidity_min = 1e8
+

require rapidity > rapidity_min

+
+ +
+
+int m_truthLabel = -1
+

require truth level on truth jets

+
+ +
+
+bool m_useHadronConeExcl = true
+

use HadronConeExclTruthLabelID for truth match (default)

+
+ +
+
+bool m_doJVF = false
+

check JVF

+
+ +
+
+float m_pt_max_JVF = 50e3
+

max pT [GeV] (JVF is a pileup cut)

+
+ +
+
+float m_eta_max_JVF = 2.4
+

detector eta cut

+
+ +
+
+float m_JVFCut = 0.5
+

cut value

+
+ +
+
+bool m_doTruthJetTagging = true
+

(re-)evaluate the hard-scatter jet label (isJvtHS) required for Jvt efficiency tools

+
+ +
+
+bool m_doJVT = false
+

check JVT

+
+ +
+
+bool m_noJVTVeto = false
+

keep JVT-rejected jets and decorate passing status

+
+ +
+
+bool m_dofJVT = false
+

check forward JVT

+
+ +
+
+bool m_dofJVTVeto = true
+

Remove jets that fail fJVT. Like JVT, the default is to clean the collection.

+
+ +
+
+float m_pt_max_JVT = 60e3
+

max pT [GeV] (JVT is a pileup cut)

+
+ +
+
+float m_eta_max_JVT = 2.4
+

detector eta cut

+
+ +
+
+bool m_jvtUsedBefore = false
+

was JVT already run in an earlier instance of JetSelector?

+
+ +
+
+bool m_haveTruthJets = true
+

Does the input have truth jets? If not, cannot decorate with true hard scatter / pileup info.

+
+ +
+
+bool m_getJVTSF = true
+

Retrieve JVT SFs (true by default, when false: allows to get JVT decision w/o needing truth jets)

+
+ +
+
+float m_JVTCut = -1.0
+

Minimum value of JVT for selecting jets.

+
+

Warning

+

If set to a non-negative value (default is -1.0), it will override any set value for JetSelector::m_WorkingPointJVT

+
+
+ +
+
+std::string m_WorkingPointJVT = "FixedEffPt"
+

WP for NNJvt.

+
+ +
+
+std::string m_SFFileJVT = ""
+

SF file for NNJvtEfficiencyTool.

+
+ +
+
+std::string m_outputSystNamesJVT = "JetJvtEfficiency_JVTSyst"
+
+ +
+
+bool m_recalculateJvtScores = true
+

Do re-calculation of NNJvt - scores need to be re-evaluated in case jet pt changed w.r.t. derivation.

+
+ +
+
+float m_systValJVT = 0.0
+
+ +
+
+std::string m_systNameJVT = ""
+
+ +
+
+std::string m_WorkingPointfJVT = "Loose"
+

WP for fJvt.

+
+ +
+
+std::string m_SFFilefJVT = ""
+

SF file for fJvtEfficiencyTool.

+
+ +
+
+std::string m_outputSystNamesfJVT = "JetJvtEfficiency_fJVTSyst"
+
+ +
+
+float m_systValfJVT = 0.0
+
+ +
+
+std::string m_systNamefJVT = ""
+
+ +
+
+bool m_fjvtUsedBefore = false
+

was fJVT already run in an earlier instance of JetSelector?

+
+ +
+
+bool m_doJetTimingCut = false
+

Timing cut.

+
+ +
+
+float m_jetTiming_max = -1
+
+ +
+
+bool m_doBTagCut = false
+

Flag to apply btagging cut, if false just decorate decisions.

+
+ +
+
+std::string m_corrFileName = "xAODBTaggingEfficiency/cutprofiles_22072015.root"
+
+ +
+
+std::string m_jetAuthor = "AntiKt4EMPFlowJets"
+
+ +
+
+std::string m_taggerName = "DL1r"
+
+ +
+
+std::string m_operatingPt = "FixedCutBEff_70"
+
+ +
+
+double m_b_eta_max = 2.5
+
+ +
+
+double m_b_pt_min = 20e3
+
+ +
+
+bool m_doHLTBTagCut = false
+
+ +
+
+std::string m_HLTBTagTaggerName = "DL1r"
+
+ +
+
+float m_HLTBTagCutValue = -0.4434
+
+ +
+
+bool m_requireHLTVtx = false
+
+ +
+
+bool m_requireNoHLTVtx = false
+
+ +
+
+std::string m_passAuxDecorKeys = ""
+
+ +
+
+std::string m_failAuxDecorKeys = ""
+
+ +
+
+std::string m_singleJetTrigChains = ""
+

A comma-separated string w/ alll the HLT single jet trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

+
+ +
+
+std::string m_diJetTrigChains = ""
+

A comma-separated string w/ all the HLT dijet trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

+
+ +
+
+bool m_removeDuplicates = false
+

remove duplicate jets (exactly the same eta)

+
+ +
+
+int m_count_events_with_duplicates = 0
+

number of events with duplicates

+
+ +
+
+bool m_sort = false
+

sort jets (normally done by JetCalibrator, but HLT jets need sorting and don’t get calibrated here)

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_weightNumEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+int m_pvLocation
+
+ +
+
+bool m_isEMjet
+
+ +
+
+bool m_isLCjet
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+std::vector<std::string> m_passKeys
+
+ +
+
+std::vector<std::string> m_failKeys
+
+ +
+
+TH1D *m_jet_cutflowHist_1 = nullptr
+
+ +
+
+int m_jet_cutflow_all
+
+ +
+
+int m_jet_cutflow_cleaning_cut
+
+ +
+
+int m_jet_cutflow_ptmax_cut
+
+ +
+
+int m_jet_cutflow_ptmin_cut
+
+ +
+
+int m_jet_cutflow_etmax_cut
+
+ +
+
+int m_jet_cutflow_etmin_cut
+
+ +
+
+int m_jet_cutflow_eta_cut
+
+ +
+
+int m_jet_cutflow_jvt_cut
+
+ +
+
+int m_jet_cutflow_timing_cut
+
+ +
+
+int m_jet_cutflow_btag_cut
+
+ +
+
+std::vector<CP::SystematicSet> m_systListJVT
+
+ +
+
+std::vector<CP::SystematicSet> m_systListfJVT
+
+ +
+
+std::vector<std::string> m_singleJetTrigChainsList
+
+ +
+
+std::vector<std::string> m_diJetTrigChainsList
+

/* contains all the HLT trigger chains tokens extracted from m_singleJetTrigChains */

+
+ +
+
+asg::AnaToolHandle<JetPileupLabelingTool> m_jetPileupLabelingTool
+

/* contains all the HLT trigger chains tokens extracted from m_diJetTrigChains */

+
+ +
+
+asg::AnaToolHandle<JetPileupTag::JetVertexNNTagger> m_jetNNJvtMomentTool
+
+ +
+
+asg::AnaToolHandle<IAsgSelectionTool> m_jetNNJvtSelectionTool
+
+ +
+
+asg::AnaToolHandle<CP::IJvtEfficiencyTool> m_jetNNJvtEfficiencyTool
+
+ +
+
+asg::AnaToolHandle<IAsgSelectionTool> m_jetfJvtSelectionTool
+
+ +
+
+asg::AnaToolHandle<CP::IJvtEfficiencyTool> m_jetfJvtEfficiencyTool
+
+ +
+
+asg::AnaToolHandle<IBTaggingSelectionTool> m_BJetSelectTool_handle = {"BTaggingSelectionTool"}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchingTool> m_trigJetMatchTool_handle
+
+ +
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchScoringTool> m_scoreTool = {"Trig::DRScoringTool/DRScoringTool"}
+
+ +
+
+bool m_doTrigMatch = true
+

This internal variable gets set to false if no triggers are defined or if TrigDecisionTool is missing.

+
+ +
+
+std::string m_outputJVTPassed = "JetJVT_Passed"
+
+ +
+
+std::string m_outputfJVTPassed = "JetfJVT_Passed"
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/METConstructor.html b/METConstructor.html new file mode 100644 index 0000000000..3b2e8d87a5 --- /dev/null +++ b/METConstructor.html @@ -0,0 +1,532 @@ + + + + + + + + + + + MET Constructor — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MET Constructor

+
+
+class METConstructor : public xAH::Algorithm
+
+

Public Functions

+
+
+METConstructor()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_mapName = "METAssoc_AntiKt4LCTopo"
+
+ +
+
+std::string m_coreName = "MET_Core_AntiKt4LCTopo"
+
+ +
+
+std::string m_outputContainer = "NewRefFinal"
+
+ +
+
+std::string m_systConfigPrefix = "METUtilities/R22_PreRecs"
+
+ +
+
+std::string m_systConfigSoftTrkFile = "TrackSoftTerms-pflow.config"
+
+ +
+
+std::string m_inputJets = ""
+
+ +
+
+std::string m_inputElectrons = ""
+
+ +
+
+std::string m_inputPhotons = ""
+
+ +
+
+std::string m_inputTaus = ""
+
+ +
+
+std::string m_inputMuons = ""
+
+ +
+
+bool m_doElectronCuts = false
+
+ +
+
+bool m_doPhotonCuts = false
+
+ +
+
+bool m_doTauCuts = false
+
+ +
+
+bool m_doMuonCuts = false
+
+ +
+
+bool m_doMuonEloss = false
+
+ +
+
+bool m_doIsolMuonEloss = false
+
+ +
+
+bool m_doJVTCut = false
+
+ +
+
+bool m_dofJVTCut = false
+
+ +
+
+std::string m_fJVTdecorName = "passFJVT"
+

Name of fJVT decoration.

+
+ +
+
+bool m_doPFlow = true
+

To turn on p-flow MET calculation set m_doPFlow to true.

+
+ +
+
+std::string m_METWorkingPoint = ""
+

Name of MET Working Point (defines the JetSelection applied in METMaker)

+
+ +
+
+bool m_rebuildUsingTracksInJets = false
+

Rebuild MET using tracks in calo jets.

+
+ +
+
+bool m_addSoftClusterTerms = false
+

Include soft cluster terms if rebuilding MET using jet terms (only considered if m_rebuildUsingTracksInJets is false)

+
+ +
+
+bool m_calculateSignificance = false
+

Enable MET significance calculation.

+
+ +
+
+bool m_significanceTreatPUJets = true
+

Introduce “resolution” for jets with low JVT, if the analysis is sensitive to pileup jets.

+
+ +
+
+double m_significanceSoftTermReso = 10.0
+

Set soft term resolution.

+
+ +
+
+bool m_runNominal = true
+

set to false if you want to run met systematics

+
+ +
+
+std::string m_systName = "All"
+

do not change it, not useful

+
+ +
+
+float m_systVal = 1.0
+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+std::string m_jetSystematics = ""
+

Name of jet systematics vector from JetCalibrator.

+
+ +
+
+std::string m_eleSystematics = ""
+

Name of electron systematics vector from ElectronCalibrator.

+
+ +
+
+std::string m_muonSystematics = ""
+

Name of muon systematics vector from MuonCalibrator.

+
+ +
+
+std::string m_tauSystematics = ""
+

Name of tau systematics vector from TauCalibrator.

+
+ +
+
+std::string m_phoSystematics = ""
+

Name of photon systematics vector from PhotonCalibrator.

+
+ +
+
+std::string m_outputAlgoSystNames = ""
+
+ +
+
+

Private Members

+
+
+asg::AnaToolHandle<IMETMaker> m_metmaker_handle = {"met::METMaker/METMaker", this}
+
+ +
+
+asg::AnaToolHandle<IMETSystematicsTool> m_metSyst_handle = {"met::METSystematicsTool/METSystematicsTool", this}
+
+ +
+
+asg::AnaToolHandle<IMETSignificance> m_metSignificance_handle = {"met::METSignificance/METSignificance", this}
+
+ +
+
+asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle = {"TauAnalysisTools::TauSelectionTool/TauSelectionTool", this}
+
+ +
+
+std::vector<CP::SystematicSet> m_sysList
+
+ +
+
+int m_numEvent
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MessagePrinterAlgo.html b/MessagePrinterAlgo.html new file mode 100644 index 0000000000..e8de46a463 --- /dev/null +++ b/MessagePrinterAlgo.html @@ -0,0 +1,257 @@ + + + + + + + + + + + MessagePrinterAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MessagePrinterAlgo

+
+
+class MessagePrinterAlgo : public xAH::Algorithm
+

This algorithm changes the format of the MsgStream objects for all other algorithms. There should only be on instance of it, and it should probably be first.

+
+

Public Members

+
+
+unsigned int m_sourceWidth = 25
+

Set the width of the name in the message.

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MetHists.html b/MetHists.html new file mode 100644 index 0000000000..6827db5fdd --- /dev/null +++ b/MetHists.html @@ -0,0 +1,463 @@ + + + + + + + + + + + MetHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MetHists

+
+
+class MetHists : public HistogramManager
+
+

Public Functions

+
+
+MetHists(std::string name, std::string detailStr)
+
+ +
+
+virtual ~MetHists()
+
+ +
+
+virtual StatusCode initialize()
+

Initialize and book all histograms.

+

Example implementation:

+
StatusCode JetHists::initialize() {
+  m_jetPt          = book(m_name, "jetPt",  "jet p_{T} [GeV]", 120, 0, 3000.);
+  return StatusCode::SUCCESS;
+}
+
+
+

+
+

Note

+

This should call the overloaded functions HistogramManager::book() to create the histograms so that the user can call hists->record(wk()) to record all histograms to the EventLoop worker.

+
+
+ +
+
+StatusCode execute(const xAOD::MissingETContainer *met, float eventWeight)
+
+ +
+
+TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh)
+

record a histogram and call various functions

+
+

Note

+

This is an overloaded function. It will build the right histogram given the correct number of input arguments.

+
+
+
Parameters
+
    +
  • name – name of histogram, access it in ROOT file like h_jetPt->Draw()

  • +
  • title – usually pointless,put a description of the histogram in here

  • +
  • xlabel – label to put on the x-axis

  • +
  • xbins – number of xbins to use

  • +
  • xlow – lower bound on xbins

  • +
  • xhigh – upper bound on xbins

  • +
  • xbinsArr – variable xbins, test math \((x_1,y_1)\) and \((x_2,y_2)\)

  • +
  • ylabel – label to put on the y-axis

  • +
  • ylow – lower bound on ybins

  • +
  • yhigh – upper bound on ybins

  • +
  • ybinsArr – variable ybins

  • +
  • zlabel – label to put on the z-axix

  • +
  • zlow – lower bound on zbins

  • +
  • zhigh – upper bound on zbins

  • +
  • zbinsArr – variable zbins

  • +
+
+
+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string xyabel, int ybins, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, double ylow, double yhigh, std::string zlabel, int zbins, double zlow, double zhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, const Double_t *ybinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr, std::string zlabel, int zbins, const Double_t *zbinsArr)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, double ylow, double yhigh, std::string option = "")
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, int xbins, const Double_t *xbinsArr, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+TProfile *book(std::string name, std::string title, int xbins, double xlow, double xhigh, double ylow, double yhigh)
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+
+ +
+
+inline virtual StatusCode execute()
+

Execute by filling in the histograms.

+

Example implementation:

+
StatusCode JetHists::execute( const xAOD::JetContainer  jets, float eventWeight ){
+  for(const auto& jet:  jets)
+    m_jetPt->Fill( jet->pt()/1.e3, eventWeight );
+  return StatusCode::SUCCESS;
+}
+
+
+

+
+ +
+
+

Public Members

+
+
+bool m_debug
+
+ +
+
+

Protected Attributes

+
+
+HelperClasses::METInfoSwitch *m_infoSwitch
+
+ +
+
+

Private Members

+
+
+TH1F *m_metFinalClus
+
+ +
+
+TH1F *m_metFinalClusPx
+
+ +
+
+TH1F *m_metFinalClusPy
+
+ +
+
+TH1F *m_metFinalClusSumEt
+
+ +
+
+TH1F *m_metFinalClusPhi
+
+ +
+
+TH1F *m_metFinalTrk
+
+ +
+
+TH1F *m_metFinalTrkPx
+
+ +
+
+TH1F *m_metFinalTrkPy
+
+ +
+
+TH1F *m_metFinalTrkSumEt
+
+ +
+
+TH1F *m_metFinalTrkPhi
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MetHistsAlgo.html b/MetHistsAlgo.html new file mode 100644 index 0000000000..6a73a701fa --- /dev/null +++ b/MetHistsAlgo.html @@ -0,0 +1,324 @@ + + + + + + + + + + + MetHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MetHistsAlgo

+
+
+class MetHistsAlgo : public xAH::Algorithm
+
+

Public Functions

+
+
+MetHistsAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_detailStr = ""
+
+ +
+
+

Private Members

+
+
+MetHists *m_plots = nullptr
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MinixAOD.html b/MinixAOD.html new file mode 100644 index 0000000000..5cd47743c4 --- /dev/null +++ b/MinixAOD.html @@ -0,0 +1,508 @@ + + + + + + + + + + + Mini-xAOD — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Mini-xAOD

+
+
+class MinixAOD : public xAH::Algorithm
+

Produce xAOD outputs.

+

I can think up the following cases when a user is doing an EL Algorithm:

+
+

input containers in TEvent (simple) +deep-copied containers in TStore (deep-copy) +shallow-copied containers in TStore (shallow) +CDV containers in TStore (cdv)

+
+

For the above use-cases, we might produce outputs like so:

+
+

write the input container to the output. This uses TEvent::copy(). +write the deep-copied containers to the output. This calls TStore::retrieve() and then TEvent::record(). +two options when we have shallow-copies:

+
    +
  1. shallowIO=false: write to the output as a deep-copy like in the previous option

  2. +
  3. shallowIO=true: write to the output as a shallow-copy, but make sure the original container is also written to the output

  4. +
+

make a deep-copy of the ConstDataVector and then move from TStore to TEvent. The problem is that we point to local memory that will not persist when making the CDV.

+
+

The trickiest case is with shallow copies because those could be our systematics – and you might want to copy the original container, and only copy over systematics via true shallow copies to conserve memory and space.

+

+
+

Warning

+

Care must be taken when managing memory and using copies. You need to think about how copies point to each other and whether you can use shallow copies or deep copies or both.

+
+
+

Public Functions

+
+
+MinixAOD()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_outputFileName = "out_miniXAOD"
+

name of the output file to use for xAOD dumping

+
+ +
+
+bool m_createOutputFile = true
+

enable to create the output file for xAOD dumping

+
+ +
+
+bool m_copyFileMetaData = false
+

copy the file metadata over

+
+ +
+
+bool m_copyTriggerInfo = false
+

copy the trigger containers and meta data over

+
+ +
+
+bool m_copyCutBookkeeper = false
+

copy the cutbookkeeper data over

+
+ +
+
+std::string m_simpleCopyKeys = ""
+

names of containers to copy from the input file

+

Container names should be space-delimited:

+
"m_simpleCopyKeys": "EventInfo AntiKt4EMTopoJets"
+
+
+

+
+ +
+
+std::string m_storeCopyKeys = ""
+

names of containers in the TStore to copy over

+

Container names should be space-delimited:

+
"m_storeCopyKeys": "BrandNewJetContainer ReclusteredJets"
+
+
+

+
+

Note

+

This option is appropriate for deep-copied containers.

+
+
+ +
+
+std::string m_shallowCopyKeys = ""
+

names of containers that have been shallow-copied

+

This option is a little different because shallow-copied containers have parent containers. However, there are two options depending on the setShallowIO option

+
+
+
True

If this is set to true, you will want to specify the parent container so that we copy it over as well (it is assumed that the parent container is in TStore or TEvent):

+
"m_shallowCopyKeys": "SCAntiKt4EMTopoJets|AntiKt4EMTopoJets SCMuons|Muons_Presel"
+
+
+
+
False

If this is set to false, you will not want to specify the parent container

+
+

”m_shallowCopyKeys”: “SCAntiKt4EMTopoJets| SCMuons|”

+
+
+
+
+

Always specify your string in a space-delimited format where pairs are split up by shallow container name|parent container name.

+

+
+

Note

+

This option is appropriate for shallow-copied containers.

+
+
+

Warning

+

Please note that the shallowIO option is what determines how the memory is managed. If you run into issues with shallow-copied containers here, make sure you know whether this option was enabled or not before asking for help.

+
+
+ +
+
+std::string m_deepCopyKeys = ""
+

names of containers that have been shallow-copied

+

Here, we will do the deep-copying for you, so that the containers can be correctly recorded into the output. Due to the way view-only containers work, we can’t figure out whether the memory points to a specific parent container we can copy, or to a non-persistable, local (stack) memory. The best option is to just deep-copy and allocate new memory instead:

+
"m_deepCopyKeys": "AntiKt4EMTopoJets|DeepCopyAntiKt4Jets Muons|DeepCopyMuons"
+
+
+

Always specify your string in a space-delimited format where pairs are split up by input container name|output container name.

+

+
+

Note

+

This option is appropriate for view-only containers such as ConstDataVector.

+
+
+ +
+
+std::string m_vectorCopyKeys = ""
+

names of vectors that have container names for its contents

+

Here, we will do the copying for you by retrieving the vector of container names and copy each one over. See how MinixAOD::m_shallowCopyKeys works.

+

Always specify your string in a space-delimited format where pairs are split up by vector name|parent container name.

+

+
+

Note

+

This option is appropriate for groups shallow-copied containers such as when you are dealing with systematics.

+
+
+ +
+
+

Private Members

+
+
+std::vector<std::string> m_simpleCopyKeys_vec
+

A vector of containers that are in TEvent that just need to be written to the output.

+
+ +
+
+std::vector<std::pair<std::string, std::string>> m_shallowCopyKeys_vec
+

A vector of (container name, parent name) pairs for shallow-copied objects &#8212; if parent is empty, deep-copy it.

+
+ +
+
+std::vector<std::pair<std::string, std::string>> m_deepCopyKeys_vec
+

A vector of (in container, output container) that need to be deep-copied first before moving to TStore.

+
+ +
+
+std::vector<std::pair<std::string, std::string>> m_vectorCopyKeys_vec
+

A vector of (name of vector of container names, parent name) pairs for shallow-copied objects (like systematics) &#8212; if parent is empty, deep-copy it.

+
+ +
+
+std::vector<std::string> m_copyFromStoreToEventKeys_vec
+

A vector of containers (and aux-pairs) in TStore to record in TEvent.

+
+ +
+
+xAODMaker::FileMetaDataTool *m_fileMetaDataTool = nullptr
+

Pointer for the File MetaData Tool.

+
+ +
+
+xAOD::CutBookkeeperContainer *m_outputCBKContainer = nullptr
+

Pointer for the TriggerMenu MetaData Tool.

+

Pointer for our CutBookkeeper

+
+ +
+
+xAOD::CutBookkeeperAuxContainer *m_outputCBKContainer_aux = nullptr
+
+ +
+
+xAOD::CutBookkeeperContainer *m_outputInCBKContainer = nullptr
+
+ +
+
+xAOD::CutBookkeeperAuxContainer *m_outputInCBKContainer_aux = nullptr
+
+ +
+
+xAOD::CutBookkeeper *m_outputCBK = nullptr
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonCalibrator.html b/MuonCalibrator.html new file mode 100644 index 0000000000..05829f9744 --- /dev/null +++ b/MuonCalibrator.html @@ -0,0 +1,412 @@ + + + + + + + + + + + \(\mu\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\mu\)

+
+
+class MuonCalibrator : public xAH::Algorithm
+
+

Public Functions

+
+
+MuonCalibrator()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_outContainerName = ""
+
+ +
+
+std::string m_calibrationMode = "noOption"
+

Set calibrationMode property if different than noOption.

+
+ +
+
+bool m_isRun3Geo = false
+

Switch on Run3 geometry for muon selector tool.

+
+ +
+
+bool m_do2StationsHighPt = false
+
+ +
+
+bool m_sort = true
+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

+
+ +
+
+std::string m_outputAlgoSystNames = "MuonCalibrator_Syst"
+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+float m_systVal = 0.0
+
+ +
+
+std::string m_systName = ""
+
+ +
+
+bool m_forceDataCalib = false
+

Force MuonCalibrationPeriodTool.h to calibrate data.

+

MuonSelectorTool depends on a specific decoration existing on Muons, namely MuonSpectrometerPt. This is decorated by the MuonCalibrationAndSmearingTool. However, you do not calibrate data by default so this tool would not be run on data.

+

In the case where you need the tool to be forced to run on data in order to have this decoration on your muons, you need to flip this boolean. See the Muon Combined Performance Working Group twiki for more information.

+

+
+

Note

+

This should not* modify the momentum of muons in data (according to the tool as of MuonMomentumCorrections-01-00-37).

+
+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_outSCContainerName
+
+ +
+
+std::string m_outSCAuxContainerName
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+asg::AnaToolHandle<CP::MuonCalibTool> m_muonCalibrationTool_handle = {"CP::MuonCalibTool/MuonCalibrationTool", this}
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonEfficiencyCorrector.html b/MuonEfficiencyCorrector.html new file mode 100644 index 0000000000..ee20311ab6 --- /dev/null +++ b/MuonEfficiencyCorrector.html @@ -0,0 +1,517 @@ + + + + + + + + + + + \(\mu\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\mu\)

+
+
+class MuonEfficiencyCorrector : public xAH::Algorithm
+
+

Public Functions

+
+
+MuonEfficiencyCorrector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual EL::StatusCode executeSF(const xAOD::EventInfo *eventInfo, const xAOD::MuonContainer *inputMuons, bool nominal, bool writeSystNames)
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_overrideCalibRelease = ""
+

Recommendations release (not recommended to change)

+
+ +
+
+std::string m_WorkingPointReco = "Loose"
+
+ +
+
+std::string m_WorkingPointIso = "LooseTrackOnly"
+
+ +
+
+bool m_AllowZeroSF = false
+

Use with caution!!!

+
+ +
+
+std::string m_MuTrigLegs = "HLT_mu26_imedium"
+

list of comma-separated single-mu trigger corrections. Individual legs of di-mu menus can be parsed

+
+ +
+
+bool m_usePerMuonTriggerSFs = true
+

Get per-muon trigger SF (default: true) [if false it will take into account combinatorics using all muons from the input muon container].

+
+ +
+
+std::string m_WorkingPointTTVA = "TTVA"
+
+ +
+
+std::string m_inputSystNamesMuons = ""
+

The name of the vector containing the names of the systematically-varied muons-related containers from the upstream algorithm, which will be processed by this algorithm.

+

Only muon calibration systematics or any other that create shallow copies of electron containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+float m_systValReco = 0.0
+
+ +
+
+float m_systValIso = 0.0
+
+ +
+
+float m_systValTrig = 0.0
+
+ +
+
+float m_systValTTVA = 0.0
+
+ +
+
+std::string m_systNameReco = ""
+
+ +
+
+std::string m_systNameIso = ""
+
+ +
+
+std::string m_systNameTrig = ""
+
+ +
+
+std::string m_systNameTTVA = ""
+
+ +
+
+std::string m_outputSystNamesReco = "MuonEfficiencyCorrector_RecoSyst"
+
+ +
+
+std::string m_outputSystNamesIso = "MuonEfficiencyCorrector_IsoSyst"
+
+ +
+
+std::string m_outputSystNamesTrig = "MuonEfficiencyCorrector_TrigSyst"
+
+ +
+
+std::string m_outputSystNamesTTVA = "MuonEfficiencyCorrector_TTVASyst"
+
+ +
+
+bool m_doLRT = false
+

Turn on if using LRT muons.

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::vector<CP::SystematicSet> m_systListReco
+
+ +
+
+std::vector<CP::SystematicSet> m_systListIso
+
+ +
+
+std::vector<CP::SystematicSet> m_systListTrig
+
+ +
+
+std::vector<CP::SystematicSet> m_systListTTVA
+
+ +
+
+std::string m_outputSystNamesTrigBase
+
+ +
+
+asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle = {"CP::PileupReweightingTool/Pileup"}
+
+ +
+
+asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muRecoSF_tool
+
+ +
+
+std::string m_recoEffSF_tool_name
+
+ +
+
+asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muIsoSF_tool
+
+ +
+
+std::string m_isoEffSF_tool_name
+
+ +
+
+asg::AnaToolHandle<CP::IMuonTriggerScaleFactors> m_muTrigSF_tool
+
+ +
+
+std::string m_trigEffSF_tool_name
+
+ +
+
+asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muTTVASF_tool
+
+ +
+
+std::string m_TTVAEffSF_tool_name
+
+ +
+
+std::map<std::string, std::string> m_SingleMuTriggerMap
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonHists.html b/MuonHists.html new file mode 100644 index 0000000000..6007cdd47e --- /dev/null +++ b/MuonHists.html @@ -0,0 +1,250 @@ + + + + + + + + + + + MuonHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MuonHists

+
+

Warning

+

doxygenclass: Cannot find class “MuonHists” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonHistsAlgo.html b/MuonHistsAlgo.html new file mode 100644 index 0000000000..69087dacd4 --- /dev/null +++ b/MuonHistsAlgo.html @@ -0,0 +1,280 @@ + + + + + + + + + + + MuonHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

MuonHistsAlgo

+
+
+class MuonHistsAlgo : public IParticleHistsAlgo
+
+

Public Functions

+
+
+MuonHistsAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode execute()
+

Calls execute<IParticleContainer>

+
+ +
+
+virtual EL::StatusCode AddHists(std::string name)
+

Calls AddHists<IParticleHists>

+
+
Parameters
+

name – Name of the systematic

+
+
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonInFatJetCorrector.html b/MuonInFatJetCorrector.html new file mode 100644 index 0000000000..b69c8804e3 --- /dev/null +++ b/MuonInFatJetCorrector.html @@ -0,0 +1,414 @@ + + + + + + + + + + + fatjet — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

fatjet

+
+
+class MuonInFatJetCorrector : public xAH::Algorithm
+

Algorithm for correcting the momentum of largeR jets containing muon decays.

+

Only muons associated to track jets are used. Quality and kinematic cuts for the muons and track jets can be adjusted by the user.

+

There are currently four correction schemes; Calorimeter, TrackAssisted, Combined, and SimpleMuon. At present, Combined is used, which takes a weighted sum of corrections from both the TrackAssisted and Calorimeter Schemes.

+

The corrected large-R are saved as a TLorentzVector in a decorator named “correctedFatJets_tlv”.

+

+
+

Public Types

+
+
+enum Scheme
+

Different schemes for the muon in jet correction.

+

Values:

+
+
+enumerator Calorimeter
+
+ +
+
+enumerator TrackAssisted
+
+ +
+
+enumerator Combined
+
+ +
+
+enumerator SimpleMuon
+
+ +
+ +
+
+

Public Functions

+
+
+MuonInFatJetCorrector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+EL::StatusCode matchTrackJetsToMuons() const
+
+ +
+
+TLorentzVector getHbbCorrectedVector(const xAOD::Jet &jet)
+
+ +
+
+const xAOD::JetFourMom_t getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector<const xAOD::Muon*> muons, Scheme scheme, bool useJMSScale = false) const
+
+ +
+
+

Public Members

+
+
+std::string m_fatJetContainerName = ""
+

The name of the container with fat jets to be corrected.

+
+ +
+
+std::string m_trackJetContainerName = "AntiKtVR30Rmax4Rmin02TrackJets"
+

The name of the container with track jets used for matching.

+
+ +
+
+std::string m_muonContainerName = ""
+

The name of the container with muons to be used for the correction.

+
+ +
+
+std::string m_trackJetLinkName = "GhostVR30Rmax4Rmin02TrackJet"
+

The name of the link to matched track jets.

+
+ +
+
+std::string m_calibratedMassDecoratorData = "JetInsituScaleMomentum"
+

Name of calibrated jet mass decorator, without the TA/Calo suffix, for data.

+
+ +
+
+std::string m_calibratedMassDecoratorFullSim = "JetJMSScaleMomentum"
+

Name of calibrated jet mass decorator, without the TA/Calo suffix, for full sim.

+
+ +
+
+std::string m_inputAlgo
+

Algortihm systematics loop.

+
+ +
+
+float m_trackJetPtMin = 10000.0
+

Minimum pt of track jets to use for correction.

+
+ +
+
+float m_trackJetEtaMax = 2.5
+

Maximum eta of track jets to use for correction.

+
+ +
+
+float m_trackJetNConst = 2.0
+

Minimum number of constituents (tracks) of track jets to use for correction.

+
+ +
+
+float m_muonPtMin = 10000.0
+

Minimum pt of muons to use for correction.

+
+ +
+
+float m_muonEtaMax = 2.7
+

Maximum eta of muons to use for correction.

+
+ +
+
+float m_muonDrMax = 0.4
+

DR cut to use when matching muons to track jets.

+
+ +
+
+

Private Functions

+
+
+ClassDef (MuonInFatJetCorrector, 1)
+
+ +
+
+

Private Members

+
+
+std::string m_calibratedMassDecorator
+

Name of calibrated jet mass decorator, without the TA/Calo suffix, for the given sample type.

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/MuonSelector.html b/MuonSelector.html new file mode 100644 index 0000000000..e87c4c1bfc --- /dev/null +++ b/MuonSelector.html @@ -0,0 +1,704 @@ + + + + + + + + + + + \(\mu\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\mu\)

+
+
+class MuonSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+MuonSelector()
+
+ +
+
+~MuonSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+bool executeSelection(const xAOD::MuonContainer *inMuons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::MuonContainer> *selectedMuons)
+
+ +
+
+virtual int passCuts(const xAOD::Muon *muon, const xAOD::Vertex *primaryVertex)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

input container name

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+std::string m_outAuxContainerName
+

output auxiliary container name

+
+ +
+
+std::string m_inputAlgoSystNames = ""
+
+ +
+
+std::string m_outputAlgoSystNames = "MuonSelector_Syst"
+
+ +
+
+bool m_decorateSelectedObjects = true
+

decorate selected objects - default “passSel”

+
+ +
+
+bool m_createSelectedContainer = false
+

fill using SG::VIEW_ELEMENTS to be light weight

+
+ +
+
+int m_nToProcess = -1
+

look at n objects

+
+ +
+
+int m_pass_min = -1
+

minimum number of objects passing cuts

+
+ +
+
+int m_pass_max = -1
+

maximum number of objects passing cuts

+
+ +
+
+float m_pT_max = 1e8
+

require pT < pt_max

+
+ +
+
+float m_pT_min = 1e8
+

require pT > pt_min

+
+ +
+
+bool m_pT_NaNcheck = false
+

check if pT is NaN

+
+ +
+
+std::string m_muonQualityStr = "Medium"
+

require quality

+
+ +
+
+bool m_isRun3Geo = false
+

Switch on Run3 geometry for muon selector tool.

+
+ +
+
+float m_eta_max = 1e8
+

require type require |eta| < eta_max

+
+ +
+
+float m_d0_max = 1e8
+

require d0 < m_d0_max

+
+ +
+
+float m_d0sig_max = 1e8
+

require d0 significance (at BL) < m_d0sig_max

+
+ +
+
+float m_z0sintheta_max = 1e8
+

require z0*sin(theta) (at BL - corrected with vertex info) < m_z0sintheta_max

+
+ +
+
+bool m_removeCosmicMuon = false
+

Remove cosmic muons that fail absolute z0 and d0 selections.

+
+ +
+
+bool m_removeEventBadMuon = true
+

Remove events with a bad muon, defined by poor q/p.

+
+ +
+
+bool m_doIsolation = true
+

enable or disable isolation

+
+ +
+
+std::string m_MinIsoWPCut = ""
+

reject objects which do not pass this isolation cut - default = “” (no cut)

+
+ +
+
+std::string m_IsoWPList = "FCTightTrackOnly_FixedRad,FCLoose_FixedRad,FCTight_FixedRad,FixedCutPflowTight,FixedCutPflowLoose"
+

decorate objects with ‘isIsolated_*’ flag for each WP in this input list - default = all current ASG WPs

+
+ +
+
+std::string m_CaloIsoEff = "0.1*x+90"
+

to define a custom WP - make sure “UserDefined” is added in the above input list!

+
+ +
+
+std::string m_TrackIsoEff = "98"
+

to define a custom WP - make sure “UserDefined” is added in the above input list!

+
+ +
+
+std::string m_CaloBasedIsoType = "topoetcone20"
+

to define a custom WP - make sure “UserDefined” is added in the above input list!

+
+ +
+
+std::string m_TrackBasedIsoType = "ptvarcone30"
+

to define a custom WP - make sure “UserDefined” is added in the above input list!

+
+ +
+
+std::string m_singleMuTrigChains = ""
+

A comma-separated string w/ alll the HLT single muon trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

+
+ +
+
+std::string m_diMuTrigChains = ""
+

A comma-separated string w/ all the HLT dimuon trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

+
+ +
+
+double m_minDeltaR = 0.1
+

Recommended threshold for muon triggers: see https://svnweb.cern.ch/trac/atlasoff/browser/Trigger/TrigAnalysis/TriggerMatchingTool/trunk/src/TestMatchingToolAlg.cxx.

+
+ +
+
+bool m_merged_muons = false
+

Element links need to be updated if merged muons are used (LRT + std) / false by default.

+
+ +
+
+std::string m_trigInputPrefix = ""
+

Input prefix of trigger decision tool.

+
+ +
+
+bool m_doLRT = false
+

add LRT muon information

+
+ +
+
+std::string m_isoDecSuffix = ""
+
+ +
+
+

Private Members

+
+
+int m_muonQuality
+
+ +
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_weightNumEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+bool m_isUsedBefore = false
+
+ +
+
+TH1D *m_mu_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_mu_cutflowHist_2 = nullptr
+
+ +
+
+int m_mu_cutflow_all
+
+ +
+
+int m_mu_cutflow_eta_and_quaility_cut
+
+ +
+
+int m_mu_cutflow_ptmax_cut
+
+ +
+
+int m_mu_cutflow_ptmin_cut
+
+ +
+
+int m_mu_cutflow_ptnan_check
+
+ +
+
+int m_mu_cutflow_type_cut
+
+ +
+
+int m_mu_cutflow_z0sintheta_cut
+
+ +
+
+int m_mu_cutflow_d0_cut
+
+ +
+
+int m_mu_cutflow_d0sig_cut
+
+ +
+
+int m_mu_cutflow_iso_cut
+
+ +
+
+int m_mu_cutflow_cosmic_cut
+
+ +
+
+std::vector<std::string> m_IsoKeys
+
+ +
+
+std::vector<std::string> m_singleMuTrigChainsList
+
+ +
+
+std::vector<std::string> m_diMuTrigChainsList
+

/* contains all the HLT trigger chains tokens extracted from m_singleMuTrigChains */

+
+ +
+
+asg::AnaToolHandle<CP::IIsolationSelectionTool> m_isolationSelectionTool_handle = {"CP::IsolationSelectionTool/IsolationSelectionTool", this}
+

/* contains all the HLT trigger chains tokens extracted from m_diMuTrigChains */

+
+ +
+
+CP::IsolationSelectionTool *m_isolationSelectionTool = {nullptr}
+
+ +
+
+asg::AnaToolHandle<CP::IMuonSelectionTool> m_muonSelectionTool_handle = {"CP::MuonSelectionTool/MuonSelectionTool", this}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchingTool> m_trigMuonMatchTool_handle
+
+ +
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchScoringTool> m_scoreTool = {"Trig::DRScoringTool/DRScoringTool"}
+
+ +
+
+bool m_doTrigMatch = true
+

This internal variable gets set to false if no triggers are defined or if TrigDecisionTool is missing.

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Outputs.html b/Outputs.html new file mode 100644 index 0000000000..36a012e688 --- /dev/null +++ b/Outputs.html @@ -0,0 +1,259 @@ + + + + + + + + + + + Producing Outputs — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Producing Outputs

+
+

TTree Outputs

+ +
+
+

xAOD Outputs

+
+ +
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/OverlapRemover.html b/OverlapRemover.html new file mode 100644 index 0000000000..5fe676ae40 --- /dev/null +++ b/OverlapRemover.html @@ -0,0 +1,740 @@ + + + + + + + + + + + Overlap Removal — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Overlap Removal

+
+
+class OverlapRemover : public xAH::Algorithm
+

A wrapper of the overlap removal tool in the ASG AssociationUtils package.

+

The logic of the OLR belongs to the ASG tool itself, and is described extensively in the Analysis Harmonisation Task Force note.

+

If you wish to apply a custom OLR scheme, please contact the author marco.milesi@cern.ch for detailed instructions.

+

The idea behind this algorithm is to consistently thread together the inputs from upstream xAODAnaHelpers algorithms based on user’s configuration, handling also the case where systematics on the input physics objects are taken into account. Here follows a usage example.

+

Consider the simplified scenario where we care only about jets* and electrons. +Assuming the typical xAODAnaHelpers analysis configuration through xAH_config, the analysis workflow could look like the following:

+
c = xAH_config()
+# ...
+c.algorithm("JetSelector", JetSelectorDict)
+c.algorithm("ElectronSelector", ElectronSelectorDict)
+# ...
+c.algorithm("OverlapRemover", OverlapRemoverDict)
+# ...
+
+
+

where each algorithm has the following I/O systematics configuration (via python dictionaries):

+
 JetSelectorDict = {
+     # ...
+     "m_inputAlgo" : "JetCalibrator_Syst",
+     "m_outputAlgo" : "JetSelector_Syst",
+     # ...
+ }
+
+ ElectronSelectorDict = {
+     # ...
+     "m_inputAlgo" : "ElectronCalibrator_Syst",
+     "m_outputAlgo" : "ElectronSelector_Syst",
+     # ...
+}
+
+OverlapRemoverDict = {
+     # ...
+     "m_inputAlgoJets" : "JetSelector_Syst", # leave empty when not considering jet systematics
+     "m_inputAlgoElectrons" : "ElectronSelector_Syst", # leave empty when not considering electron systematics
+     # ...
+}
+
+
+

In this way the overlap removal algorithm will be able to correctly work out all the combinatorics, generating output xAOD containers for jets and electrons for each input systematics combination to be subsequently used downstream according to the user’s needs. The overlap removal algorithm creates an output systematic list that is a combination of systematics from all input containers.

+

+
+

Public Functions

+
+
+OverlapRemover()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual EL::StatusCode fillObjectCutflow(const xAOD::IParticleContainer *objCont, const std::string &overlapFlag = "passOR", const std::string &selectFlag = "passSel")
+

Fill the cutflow histograms.

+
+
Parameters
+
    +
  • objCont – The xAOD container to be considered

  • +
  • overlapFlag – The string identifying objects not overlapping with another object, to be kept (default is "passOR")

  • +
  • selectFlag – The string identifying selected objects (default is "passSel")

  • +
+
+
+
+ +
+
+virtual EL::StatusCode executeOR(const xAOD::ElectronContainer *inElectrons, const xAOD::MuonContainer *inMuons, const xAOD::JetContainer *inJets, const xAOD::PhotonContainer *inPhotons, const xAOD::TauJetContainer *inTaus, SystType syst_type = NOMINAL, std::vector<std::string> *sysVec = nullptr, std::vector<std::string> *sysVecOut = nullptr)
+

Function that internally calls the OLR tool for the input containers (and systematics)

+
+
Parameters
+
    +
  • inElectrons – Input xAOD container for electrons

  • +
  • inMuons – Input xAOD container for muons

  • +
  • inJets – Input xAOD container for jets

  • +
  • inPhotons – Input xAOD container for photons

  • +
  • inTaus – Input xAOD container for taus

  • +
  • syst_type – The type of object for which input systematics should be considered. Default is NOMINAL

  • +
  • sysVec – The list of the input systematics for a given object. Must match with the choice of syst_type. Default is nullptr

  • +
+
+
+
+ +
+
+EL::StatusCode setCutFlowHist()
+

Setup cutflow histograms.

+
+ +
+
+EL::StatusCode setCounters()
+

Initialise counters for events/objects.

+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+

Fill the cutflow histogram(s) for object counting.

+
+ +
+
+bool m_decorateSelectedObjects
+

Decorate selected objects (the default decoration string is passOR)

+
+ +
+
+std::string m_decor = "passOR"
+
+ +
+
+bool m_createSelectedContainers
+

Make a copy of input container(s) with selected objects (using SG::VIEW_ELEMENTS to be light weight)

+
+ +
+
+bool m_useSelected = false
+

In the OLR, consider only objects passing a (pre)selection.

+
+ +
+
+std::string m_bTagWP = ""
+

Use b-tagging decision, set previously with the given decoration name, to remove electrons and muons.

+
+

Note

+

This is automatically set by BJetEfficiencyCorrector

+
+
+ +
+
+bool m_linkOverlapObjects = true
+

Create a link between overlapped objects.

+
+ +
+
+bool m_useBoostedLeptons = false
+

Use boosted object working point.

+
+ +
+
+bool m_doEleEleOR = false
+

Do overlap removal between electrons (HSG2 prescription)

+
+ +
+
+bool m_applyRelPt = false
+

Turn ON ApplyRelPt in MuJetOverlapTool (default is false)

+
+ +
+
+bool m_lepFavWP = false
+

Turn ON Lepton favored working point (HSG2 prescription)

+
+ +
+
+std::string m_outputAlgoSystNames = "ORAlgo_Syst"
+

Output systematics list container name.

+
+ +
+
+std::string m_inContainerName_Electrons = ""
+

Input container name.

+
+ +
+
+std::string m_outContainerName_Electrons = ""
+

Output container name.

+
+ +
+
+std::string m_inputAlgoElectrons = ""
+

Name of the std::vector of systematics coming from the upstream algorithm

+
+ +
+
+std::string m_inContainerName_Muons = ""
+
+ +
+
+std::string m_outContainerName_Muons = ""
+
+ +
+
+std::string m_inputAlgoMuons = ""
+
+ +
+
+std::string m_inContainerName_Jets = ""
+
+ +
+
+std::string m_outContainerName_Jets = ""
+
+ +
+
+std::string m_inputAlgoJets = ""
+
+ +
+
+std::string m_inContainerName_Photons = ""
+
+ +
+
+std::string m_outContainerName_Photons = ""
+
+ +
+
+std::string m_inputAlgoPhotons = ""
+
+ +
+
+std::string m_inContainerName_Taus = ""
+
+ +
+
+std::string m_outContainerName_Taus = ""
+
+ +
+
+std::string m_inputAlgoTaus = ""
+
+ +
+
+

Protected Types

+
+
+enum SystType
+

An enum encoding systematics according to the various objects.

+

Values:

+
+
+enumerator NOMINAL
+
+ +
+
+enumerator ELSYST
+
+ +
+
+enumerator MUSYST
+
+ +
+
+enumerator JETSYST
+
+ +
+
+enumerator PHSYST
+
+ +
+
+enumerator TAUSYST
+
+ +
+ +
+
+

Protected Attributes

+
+
+int m_numEvent
+

A counter for the number of processed events.

+
+ +
+
+int m_numObject
+

A counter for the number of processed objects.

+
+ +
+
+int m_numEventPass
+

A counter for the number of passed events.

+
+ +
+
+int m_weightNumEventPass
+

A counter for the number of passed weighted events.

+
+ +
+
+int m_numObjectPass
+

A counter for the number of passed objects.

+
+ +
+
+bool m_useElectrons = false
+

Consider electrons in the OLR.

+

This is set to false if m_inContainerName_Electrons is set as an empty string. +Electrons (unlike jets) are considered “optional” objetcs in the OLR.

+
+ +
+
+bool m_useMuons = false
+

Consider muons in the OLR.

+

This is set to false if m_inContainerName_Muons is set as an empty string. +Muons (unlike jets) are considered “optional” objects in the OLR.

+
+ +
+
+bool m_usePhotons = false
+

Consider photons in the OLR.

+

This is set to false if m_inContainerName_Photons is set as an empty string. +Photons (unlike jets) are considered “optional” objects in the OLR.

+
+ +
+
+bool m_useTaus = false
+

Consider taus in the OLR.

+

This is set to false if m_inContainerName_Taus is set as an empty string. +Taus (unlike jets) are considered “optional” objects in the OLR.

+
+ +
+
+std::string m_outAuxContainerName_Electrons
+

Output auxiliary container name.

+
+ +
+
+std::string m_outAuxContainerName_Muons
+

Output auxiliary container name.

+
+ +
+
+std::string m_outAuxContainerName_Jets
+

Output auxiliary container name.

+
+ +
+
+std::string m_outAuxContainerName_Photons
+

Output auxiliary container name.

+
+ +
+
+std::string m_outAuxContainerName_Taus
+

Output auxiliary container name.

+
+ +
+
+ORUtils::ToolBox m_ORToolbox
+

Pointer to the CP Tool which performs the actual OLR.

+
+ +
+
+TH1D *m_el_cutflowHist_1 = nullptr
+

Pointer to the histogram for the electron cutflow.

+
+ +
+
+TH1D *m_mu_cutflowHist_1 = nullptr
+

Pointer to the histogram for the muon cutflow.

+
+ +
+
+TH1D *m_jet_cutflowHist_1 = nullptr
+

Pointer to the histogram for the jet cutflow.

+
+ +
+
+TH1D *m_ph_cutflowHist_1 = nullptr
+

Pointer to the histogram for the photon cutflow.

+
+ +
+
+TH1D *m_tau_cutflowHist_1 = nullptr
+

Pointer to the histogram for the tau cutflow.

+
+ +
+
+int m_el_cutflow_OR_cut
+
+ +
+
+int m_mu_cutflow_OR_cut
+
+ +
+
+int m_jet_cutflow_OR_cut
+
+ +
+
+int m_ph_cutflow_OR_cut
+
+ +
+
+int m_tau_cutflow_OR_cut
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ParticlePIDManager.html b/ParticlePIDManager.html new file mode 100644 index 0000000000..aa7dab5dc5 --- /dev/null +++ b/ParticlePIDManager.html @@ -0,0 +1,362 @@ + + + + + + + + + + + Particle PID Manager — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Particle PID Manager

+
+

Electron LH PID Manager

+
+

Warning

+

doxygenclass: Cannot find class “ElectronLHPIDManager” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+
+

Electron Cut-Based PID Manager

+
+
+class ElectronCutBasedPIDManager
+
+

Public Functions

+
+
+ElectronCutBasedPIDManager()
+
+ +
+
+ElectronCutBasedPIDManager(std::string WP, bool debug = false)
+
+ +
+
+~ElectronCutBasedPIDManager()
+
+ +
+
+StatusCode setupWPs(bool configTools, std::string selector_name = "")
+
+ +
+
+StatusCode setDecorations(const xAOD::Electron *electron)
+
+ +
+
+inline const std::string getSelectedWP()
+
+ +
+
+inline std::multimap<std::string, AsgElectronIsEMSelector*> getAllWPTools()
+
+ +
+
+inline std::multimap<std::string, AsgElectronIsEMSelector*> getValidWPTools()
+
+ +
+
+inline const std::set<std::string> getAllWPs()
+
+ +
+
+inline const std::set<std::string> getValidWPs()
+
+ +
+
+

Private Members

+
+
+std::string m_selectedWP
+
+ +
+
+bool m_debug
+
+ +
+
+std::multimap<std::string, AsgElectronIsEMSelector*> m_allWPTools
+
+ +
+
+std::multimap<std::string, AsgElectronIsEMSelector*> m_validWPTools
+
+ +
+
+std::set<std::string> m_allWPAuxDecors
+
+ +
+
+std::set<std::string> m_validWPs
+
+ +
+
+AsgElectronIsEMSelector *m_asgElectronIsEMSelector_Loose
+
+ +
+
+AsgElectronIsEMSelector *m_asgElectronIsEMSelector_Medium
+
+ +
+
+AsgElectronIsEMSelector *m_asgElectronIsEMSelector_Tight
+
+ +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/PhotonCalibrator.html b/PhotonCalibrator.html new file mode 100644 index 0000000000..0a6493fd3e --- /dev/null +++ b/PhotonCalibrator.html @@ -0,0 +1,466 @@ + + + + + + + + + + + \(\gamma\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\gamma\)

+
+
+class PhotonCalibrator : public xAH::Algorithm
+
+

Public Functions

+
+
+PhotonCalibrator()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_outContainerName = ""
+
+ +
+
+std::string m_overridePhotonCalibMap = ""
+
+ +
+
+std::string m_tightIDConfigPath = "ElectronPhotonSelectorTools/offline/20180825/PhotonIsEMTightSelectorCutDefs.conf"
+
+ +
+
+std::string m_mediumIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf"
+
+ +
+
+std::string m_looseIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf"
+
+ +
+
+bool m_sort = true
+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

+
+ +
+
+std::string m_outputAlgoSystNames = "PhotonCalibrator_Syst"
+

this is the name of the vector of names of the systematically varied containers produced by THIS algo ( these will be the m_inputAlgoSystNames of the algo downstream

+
+ +
+
+bool m_useAFII = false
+
+ +
+
+bool m_useAF3 = false
+
+ +
+
+float m_systVal = 0.0
+
+ +
+
+std::string m_systName = ""
+
+ +
+
+std::string m_esModel = "es2017_R21_v1"
+
+ +
+
+std::string m_decorrelationModel = ""
+
+ +
+
+int m_randomRunNumber = -1
+
+ +
+
+bool m_readIDFlagsFromDerivation = false
+

To read PID decision from DAOD, rather than recalculate with tool.

+
+ +
+
+

Private Functions

+
+
+EL::StatusCode decorate(xAOD::Photon *photon)
+
+ +
+
+

Private Members

+
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_outSCContainerName
+
+ +
+
+std::string m_outSCAuxContainerName
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+CP::EgammaCalibrationAndSmearingTool *m_EgammaCalibrationAndSmearingTool = nullptr
+
+ +
+
+asg::AnaToolHandle<CP::IIsolationCorrectionTool> m_isolationCorrectionTool_handle = {"CP::IsolationCorrectionTool/IsolationCorrectionTool", this}
+
+ +
+
+ElectronPhotonVariableCorrectionTool *m_photonVarCorrectionTool = nullptr
+
+ +
+
+AsgPhotonIsEMSelector *m_photonTightIsEMSelector = nullptr
+
+ +
+
+AsgPhotonIsEMSelector *m_photonMediumIsEMSelector = nullptr
+
+ +
+
+AsgPhotonIsEMSelector *m_photonLooseIsEMSelector = nullptr
+
+ +
+
+asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonTightEffTool_handle = {"AsgPhotonEfficiencyCorrectionTool/tight", this}
+
+ +
+
+asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonMediumEffTool_handle = {"AsgPhotonEfficiencyCorrectionTool/medium", this}
+
+ +
+
+asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonLooseEffTool_handle = {"AsgPhotonEfficiencyCorrectionTool/loose", this}
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/PhotonSelector.html b/PhotonSelector.html new file mode 100644 index 0000000000..6c5c3a9b52 --- /dev/null +++ b/PhotonSelector.html @@ -0,0 +1,540 @@ + + + + + + + + + + + \(\gamma\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\gamma\)

+
+
+class PhotonSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+PhotonSelector()
+
+ +
+
+~PhotonSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+bool executeSelection(const xAOD::PhotonContainer *inPhotons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::PhotonContainer> *selectedPhotons)
+
+ +
+
+virtual bool passCuts(const xAOD::Photon *photon)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

configuration variables input container name

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

output auxiliary container name

+
+ +
+
+std::string m_outputAlgoSystNames = "PhotonSelector_Syst"
+
+ +
+
+bool m_decorateSelectedObjects = true
+

decorate selected objects - default “passSel”

+
+ +
+
+bool m_createSelectedContainer = true
+

fill using SG::VIEW_ELEMENTS to be light weight

+
+ +
+
+int m_nToProcess = -1
+

look at n objects

+
+ +
+
+int m_pass_min = -1
+

minimum number of objects passing cuts

+
+ +
+
+int m_pass_max = -1
+

maximum number of objects passing cuts

+
+ +
+
+float m_pT_max = 1e8
+

require pT < pt_max

+
+ +
+
+float m_pT_min = 1e8
+

require pT > pt_min

+
+ +
+
+float m_eta_max = 1e8
+

require |eta| < eta_max

+
+ +
+
+bool m_vetoCrack = true
+

require |eta| outside crack region

+
+ +
+
+bool m_doAuthorCut = true
+
+ +
+
+bool m_doOQCut = true
+
+ +
+
+bool m_readOQFromDerivation = false
+

read object quality from derivation, rather than calculating it on the fly

+
+ +
+
+std::string m_photonIdCut = "None"
+

Name of ID variable to cut

+
+ +
+
+std::string m_MinIsoWPCut = ""
+

reject objects which do not pass this isolation cut - default = “” (no cut)

+
+ +
+
+std::string m_IsoWPList = "FixedCutTightCaloOnly,FixedCutTight,FixedCutLoose"
+

decorate objects with ‘isIsolated_*’ flag for each WP in this input list - default = all current ASG WPs

+
+ +
+
+

Private Members

+
+
+std::string m_outAuxContainerName
+
+ +
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_weightNumEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+TH1D *m_ph_cutflowHist_1 = nullptr
+
+ +
+
+int m_ph_cutflow_all
+
+ +
+
+int m_ph_cutflow_author_cut
+
+ +
+
+int m_ph_cutflow_OQ_cut
+
+ +
+
+int m_ph_cutflow_PID_cut
+
+ +
+
+int m_ph_cutflow_ptmax_cut
+
+ +
+
+int m_ph_cutflow_ptmin_cut
+
+ +
+
+int m_ph_cutflow_eta_cut
+
+ +
+
+int m_ph_cutflow_iso_cut
+
+ +
+
+std::vector<std::string> m_IsoKeys
+
+ +
+
+CP::IsolationSelectionTool *m_IsolationSelectionTool = nullptr
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Selectors.html b/Selectors.html new file mode 100644 index 0000000000..0c051757cb --- /dev/null +++ b/Selectors.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Selecting Objects — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Selecting Objects

+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TauCalibrator.html b/TauCalibrator.html new file mode 100644 index 0000000000..a81205118b --- /dev/null +++ b/TauCalibrator.html @@ -0,0 +1,407 @@ + + + + + + + + + + + \(\tau\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\tau\)

+
+
+class TauCalibrator : public xAH::Algorithm
+
+

Public Functions

+
+
+TauCalibrator()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_outContainerName = ""
+
+ +
+
+std::string m_RecommendationTag = ""
+
+ +
+
+bool m_applyMVATESQualityCheck = false
+
+ +
+
+std::string m_generator = ""
+
+ +
+
+std::string m_campaign = ""
+
+ +
+
+bool m_setAFII = false
+
+ +
+
+bool m_setAF3 = false
+
+ +
+
+bool m_skipTruthMatchCheck = false
+
+ +
+
+bool m_sort = true
+
+ +
+
+std::string m_inputAlgoSystNames = ""
+

this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

+
+ +
+
+std::string m_outputAlgoSystNames = "TauCalibrator_Syst"
+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_outSCContainerName
+
+ +
+
+std::string m_outSCAuxContainerName
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+asg::AnaToolHandle<TauAnalysisTools::ITauSmearingTool> m_tauSmearingTool_handle = {"TauAnalysisTools::TauSmearingTool/TauSmearingTool", this}
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TauEfficiencyCorrector.html b/TauEfficiencyCorrector.html new file mode 100644 index 0000000000..feb712630b --- /dev/null +++ b/TauEfficiencyCorrector.html @@ -0,0 +1,402 @@ + + + + + + + + + + + \(\tau\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\tau\)

+
+
+class TauEfficiencyCorrector : public xAH::Algorithm
+
+

Public Functions

+
+
+TauEfficiencyCorrector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual EL::StatusCode executeSF(const xAOD::EventInfo *eventInfo, const xAOD::TauJetContainer *inputTaus, bool nominal, bool writeSystNames)
+
+ +
+
+

Public Members

+
+
+std::string m_RecommendationTag = ""
+
+ +
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_WorkingPointReco = ""
+
+ +
+
+std::string m_WorkingPointEleOLRHadTau = ""
+
+ +
+
+std::string m_WorkingPointTauEleID = ""
+
+ +
+
+std::string m_WorkingPointTauJetID = ""
+
+ +
+
+std::string m_TriggerName = ""
+
+ +
+
+std::string m_inputSystNamesTaus = ""
+

The name of the vector containing the names of the systematically-varied taus-related containers from the upstream algorithm, which will be processed by this algorithm.

+

Only tau systematics or any other that create shallow copies of tau containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

+
+ +
+
+bool m_writeSystToMetadata = false
+

Write systematics names to metadata.

+
+ +
+
+float m_systVal = 0.0
+
+ +
+
+std::string m_systName = ""
+
+ +
+
+std::string m_outputSystNames = "TauEfficiencyCorrector_Syst"
+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+std::vector<CP::SystematicSet> m_systList
+
+ +
+
+asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle = {"CP::PileupReweightingTool/Pileup"}
+
+ +
+
+asg::AnaToolHandle<TauAnalysisTools::ITauEfficiencyCorrectionsTool> m_tauEffCorrTool_handle = {"TauAnalysisTools::TauEfficiencyCorrectionsTool/TauEfficiencyCorrectionsTool", this}
+
+ +
+
+asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle = {"TauAnalysisTools::TauSelectionTool/TauSelectionTool"}
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TauJetMatching.html b/TauJetMatching.html new file mode 100644 index 0000000000..ea39793e35 --- /dev/null +++ b/TauJetMatching.html @@ -0,0 +1,338 @@ + + + + + + + + + + + \(\tau\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\tau\)

+
+
+class TauJetMatching : public xAH::Algorithm
+
+

Public Functions

+
+
+TauJetMatching()
+
+ +
+
+~TauJetMatching()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+bool executeDecoration(std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet*>>, const xAOD::TauJetContainer *tauCont)
+
+ +
+
+float getDR(float eta1, float eta2, float phi1, float phi2)
+
+ +
+
+std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet*>> findBestMatchDR(const xAOD::JetContainer *jetCont, const xAOD::TauJetContainer *tauCont, float best_DR)
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_outContainerName
+
+ +
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_inputAlgoSystNames = ""
+
+ +
+
+std::string m_outputAlgoSystNames = "TauJetMatching_Syst"
+
+ +
+
+std::string m_inJetContainerName = ""
+
+ +
+
+float m_DeltaR = 0.2
+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TauSelector.html b/TauSelector.html new file mode 100644 index 0000000000..e19cf00e08 --- /dev/null +++ b/TauSelector.html @@ -0,0 +1,527 @@ + + + + + + + + + + + \(\tau\) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

\(\tau\)

+
+
+class TauSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+TauSelector()
+
+ +
+
+~TauSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+bool executeSelection(const xAOD::TauJetContainer *inTaus, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::TauJetContainer> *selectedTaus)
+
+ +
+
+virtual int passCuts(const xAOD::TauJet *tau)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_outContainerName
+
+ +
+
+std::string m_outAuxContainerName
+
+ +
+
+std::string m_inputAlgoSystNames = ""
+
+ +
+
+std::string m_outputAlgoSystNames = "TauSelector_Syst"
+
+ +
+
+bool m_decorateWithTracks = false
+
+ +
+
+bool m_decorateSelectedObjects = true
+
+ +
+
+std::string m_decorationName = "passSel"
+
+ +
+
+bool m_createSelectedContainer = false
+
+ +
+
+int m_nToProcess = -1
+
+ +
+
+int m_pass_min = -1
+
+ +
+
+int m_pass_max = -1
+
+ +
+
+std::string m_ConfigPath = "xAODAnaHelpers/TauConf/00-01-19/Selection/recommended_selection_mc15.conf"
+
+ +
+
+float m_minPtDAOD = 15e3
+
+ +
+
+std::string m_JetIDWP = ""
+
+ +
+
+std::string m_EleRNNWP = ""
+
+ +
+
+bool m_EleID = true
+
+ +
+
+std::string m_singleTauTrigChains = ""
+
+ +
+
+std::string m_diTauTrigChains = ""
+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_weightNumEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+bool m_isUsedBefore = false
+
+ +
+
+TH1D *m_tau_cutflowHist_1 = nullptr
+
+ +
+
+TH1D *m_tau_cutflowHist_2 = nullptr
+
+ +
+
+int m_tau_cutflow_all
+
+ +
+
+int m_tau_cutflow_selected
+
+ +
+
+std::vector<std::string> m_singleTauTrigChainsList
+
+ +
+
+std::vector<std::string> m_diTauTrigChainsList
+

/* contains all the HLT trigger chains tokens extracted from m_singleTauTrigChains */

+
+ +
+
+asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle = {"TauAnalysisTools::TauSelectionTool/TauSelectionTool", this}
+

/* contains all the HLT trigger chains tokens extracted from m_diTauTrigChains */

+
+ +
+
+asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle = {"Trig::TrigDecisionTool/TrigDecisionTool"}
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchingTool> m_trigTauMatchTool_handle
+
+ +
+
+asg::AnaToolHandle<Trig::IMatchScoringTool> m_scoreTool = {"Trig::DRScoringTool/DRScoringTool"}
+
+ +
+
+bool m_doTrigMatch = true
+

This internal variable gets set to false if no triggers are defined or if TrigDecisionTool is missing.

+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/ToolsUsed.html b/ToolsUsed.html new file mode 100644 index 0000000000..1bbf80641f --- /dev/null +++ b/ToolsUsed.html @@ -0,0 +1,279 @@ + + + + + + + + + + + Tools Used — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Tools Used

+

This page provides a list of all the tools used in the framework and where to find documentation for that particular tool (eg: their twiki page). See this twiki for more general details.

+ + +
+

\(\mu\)

+ +
+ +
+

\(\tau\) jets

+ +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TrackHists.html b/TrackHists.html new file mode 100644 index 0000000000..23b7f76d83 --- /dev/null +++ b/TrackHists.html @@ -0,0 +1,250 @@ + + + + + + + + + + + TrackHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

TrackHists

+
+

Warning

+

doxygenclass: Cannot find class “TrackHists” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TrackHistsAlgo.html b/TrackHistsAlgo.html new file mode 100644 index 0000000000..28682a8cff --- /dev/null +++ b/TrackHistsAlgo.html @@ -0,0 +1,324 @@ + + + + + + + + + + + TrackHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

TrackHistsAlgo

+
+
+class TrackHistsAlgo : public xAH::Algorithm
+
+

Public Functions

+
+
+TrackHistsAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+

Public Members

+
+
+std::string m_inContainerName = ""
+
+ +
+
+std::string m_detailStr = ""
+
+ +
+
+

Private Members

+
+
+TrackHists *m_plots = nullptr
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TrackSelector.html b/TrackSelector.html new file mode 100644 index 0000000000..9ce007f31a --- /dev/null +++ b/TrackSelector.html @@ -0,0 +1,664 @@ + + + + + + + + + + + Tracks — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Tracks

+
+
+class TrackSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+TrackSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+EL::StatusCode executeTrackCollection(float mcEvtWeight)
+
+ +
+
+EL::StatusCode executeTracksInJets()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual int PassCuts(const xAOD::TrackParticle *jet, const xAOD::Vertex *pvx)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

input container name

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+std::string m_inJetContainerName = ""
+

input jet container name

+
+ +
+
+bool m_decorateSelectedObjects = true
+

decorate selected objects? defaul passSel

+
+ +
+
+bool m_createSelectedContainer = false
+

fill using SG::VIEW_ELEMENTS to be light weight

+
+ +
+
+int m_nToProcess = -1
+

look at n objects

+
+ +
+
+int m_pass_min = -1
+

minimum number of objects passing cuts

+
+ +
+
+int m_pass_max = -1
+

maximum number of objects passing cuts

+
+ +
+
+std::string m_cutLevelString = ""
+

available: Loose LoosePrimary TightPrimary LooseMuon LooseElectron MinBias HILoose HITight

+
+ +
+
+float m_pT_max = 1e8
+

require pT < pt_max

+
+ +
+
+float m_pT_min = 1e8
+

require pT > pt_max

+
+ +
+
+float m_p_min = 1e8
+

require |p| > p_min

+
+ +
+
+float m_eta_max = 1e8
+

require |eta| < eta_max

+
+ +
+
+float m_eta_min = 1e8
+

require |eta| > eta_min

+
+ +
+
+float m_etaSigned_min = 1e8
+

require eta > eta_min

+
+ +
+
+float m_etaSigned_max = 1e8
+

require eta < eta_max

+
+ +
+
+float m_d0_max = 1e8
+

require |d0| < d0_max

+
+ +
+
+float m_z0_max = 1e8
+

require |z0| < z0_max

+
+ +
+
+float m_sigmad0_max = 1e8
+

maximum error on d0

+
+ +
+
+float m_d0oversigmad0_max = 1e8
+

maximum significance of |d0|

+
+ +
+
+float m_z0sinT_max = 1e8
+

require |z0xsin(theta)| < z0sintheta_max

+
+ +
+
+float m_sigmaz0_max = 1e8
+

maximum error on z0

+
+ +
+
+float m_sigmaz0sintheta_max = 1e8
+

maximum error on z0*sin(theta)

+
+ +
+
+float m_z0oversigmaz0_max = 1e8
+

max |z0| significance

+
+ +
+
+float m_z0sinthetaoversigmaz0sintheta_max = 1e8
+

max |z0sin(theta)| significance

+
+ +
+
+int m_nPixelHits_min = 1e8
+

minimum pixel hits (counting dead sensors)

+
+ +
+
+int m_nPixelHitsPhysical_min = 1e8
+

minimum pixel hits (no dead sensors)

+
+ +
+
+int m_nSctHits_min = 1e8
+

minimum SCT hits (counting dead sensors)

+
+ +
+
+int m_nSctHitsPhysical_min = 1e8
+

minimum SCT hits (no dead sensors)

+
+ +
+
+int m_nSi_min = 1e8
+

require nSi >= nSi_min (nSi = nPix + nSct)

+
+ +
+
+int m_nSiPhysical_min = 1e8
+

require nSi >= nSi_min (nSi = nPix + nSct, no dead sensors)

+
+ +
+
+int m_nPixHoles_max = 1e8
+

require nPixHoles <= nPixHoles_max

+
+ +
+
+int m_nSctHoles_max = 1e8
+

require nSCTHoles <= nSCTHoles_max

+
+ +
+
+int m_nSiHoles_max = 1e8
+

maximum silicon holes

+
+ +
+
+int m_nInnermostPixel_min = 1e8
+

minimum nIBL (if expected)

+
+ +
+
+int m_nNextToInnermostPixel_min = 1e8
+

minimum nBL (if expected)

+
+ +
+
+int m_nBothInnermostLayersHits_min = 1e8
+

minimum nIBL + nBL (if every hit that is not expected, we require one less)

+
+ +
+
+int m_nPixelSharedHits_max = 1e8
+

maximum pixel hits shared with other tracks

+
+ +
+
+int m_nSctSharedHits_max = 1e8
+

maximum SCT hits shared with other tracks

+
+ +
+
+int m_nSiSharedHits_max = 1e8
+

maximum silicon hits shared with other tracks

+
+ +
+
+int m_nSiSharedModules_max = 1e8
+

maximum (pixel + SCT/2) shared hits

+
+ +
+
+float m_chi2NdofCut_max = 1e8
+

require chi2/ndof < chi2NdofCut_max

+
+ +
+
+float m_chi2Prob_max = 1e8
+

require TMath::Prob(chi2,ndof) < chi2ProbMax

+
+ +
+
+float m_chi2Prob_min = 1e8
+

require TMath::Prob(chi2,ndof) > chi2ProbMax

+
+ +
+
+int m_nBL_min = 1e8
+

require nIBL >= nBL_min (not recommended; for downward compatibility)

+
+ +
+
+std::string m_passAuxDecorKeys = ""
+
+ +
+
+std::string m_failAuxDecorKeys = ""
+
+ +
+
+bool m_doTracksInJets = false
+

do track selection on track within jets

+
+ +
+
+

Private Members

+
+
+std::vector<std::string> m_passKeys
+
+ +
+
+std::vector<std::string> m_failKeys
+
+ +
+
+asg::AnaToolHandle<InDet::IInDetTrackSelectionTool> m_trkSelTool_handle = {"InDet::InDetTrackSelectionTool/TrackSelectionTool", this}
+
+ +
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TreeAlgo.html b/TreeAlgo.html new file mode 100644 index 0000000000..59ca71a8be --- /dev/null +++ b/TreeAlgo.html @@ -0,0 +1,697 @@ + + + + + + + + + + + Tree Maker Algorithm — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Tree Maker Algorithm

+
+
+class TreeAlgo : public xAH::Algorithm
+
+

Public Functions

+
+
+TreeAlgo()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual HelpTreeBase *createTree(xAOD::TEvent *event, TTree *tree, TFile *file, const float units, bool debug, xAOD::TStore *store)
+
+ +
+
+

Public Members

+
+
+bool m_outHistDir = false
+
+ +
+
+std::string m_treeStreamName = "tree"
+
+ +
+
+std::string m_evtDetailStr = ""
+
+ +
+
+std::string m_trigDetailStr = ""
+
+ +
+
+std::string m_muDetailStr = ""
+
+ +
+
+std::string m_elDetailStr = ""
+
+ +
+
+std::string m_jetDetailStr = ""
+
+ +
+
+std::string m_trigJetDetailStr = ""
+
+ +
+
+std::string m_truthJetDetailStr = ""
+
+ +
+
+std::string m_fatJetDetailStr = ""
+
+ +
+
+std::string m_truthFatJetDetailStr = ""
+
+ +
+
+std::string m_tauDetailStr = ""
+
+ +
+
+std::string m_METDetailStr = ""
+
+ +
+
+std::string m_METReferenceDetailStr = ""
+
+ +
+
+std::string m_photonDetailStr = ""
+
+ +
+
+std::string m_clusterDetailStr = ""
+
+ +
+
+std::string m_truthParticlesDetailStr = ""
+
+ +
+
+std::string m_trackParticlesDetailStr = ""
+
+ +
+
+std::string m_vertexDetailStr = ""
+
+ +
+
+std::string m_evtContainerName = ""
+
+ +
+
+std::string m_muContainerName = ""
+
+ +
+
+std::string m_elContainerName = ""
+
+ +
+
+std::string m_jetContainerName = ""
+
+ +
+
+std::string m_jetBranchName = "jet"
+
+ +
+
+std::string m_truthJetContainerName = ""
+
+ +
+
+std::string m_truthJetBranchName = "truthJet"
+
+ +
+
+std::string m_trigJetContainerName = ""
+
+ +
+
+std::string m_trigJetBranchName = "trigJet"
+
+ +
+
+std::string m_fatJetContainerName = ""
+
+ +
+
+std::string m_fatJetBranchName = ""
+
+ +
+
+std::string m_truthFatJetContainerName = ""
+
+ +
+
+std::string m_truthFatJetBranchName = "truth_fatjet"
+
+ +
+
+std::string m_tauContainerName = ""
+
+ +
+
+std::string m_METContainerName = ""
+
+ +
+
+std::string m_METReferenceContainerName = ""
+
+ +
+
+std::string m_photonContainerName = ""
+
+ +
+
+std::string m_clusterContainerName = ""
+
+ +
+
+std::string m_clusterBranchName = "CaloCalTopoClusters"
+
+ +
+
+std::string m_truthParticlesContainerName = ""
+
+ +
+
+std::string m_truthParticlesBranchName = "xAH_truth"
+
+ +
+
+std::string m_trackParticlesContainerName = ""
+
+ +
+
+std::string m_l1JetContainerName = ""
+
+ +
+
+std::string m_l1JetBranchName = "L1Jet"
+
+ +
+
+std::string m_vertexBranchName = "vertex"
+
+ +
+
+bool m_sortL1Jets = false
+
+ +
+
+bool m_retrievePV = true
+
+ +
+
+std::string m_muSystsVec = ""
+
+ +
+
+std::string m_elSystsVec = ""
+
+ +
+
+std::string m_tauSystsVec = ""
+
+ +
+
+std::string m_jetSystsVec = ""
+
+ +
+
+std::string m_photonSystsVec = ""
+
+ +
+
+std::string m_fatJetSystsVec = ""
+
+ +
+
+std::string m_metSystsVec = ""
+
+ +
+
+float m_units = 1e3
+

unit conversion from MeV, default is GeV

+
+ +
+
+int m_autoFlush = 0
+

Set to a large negative number, such as -1000000, to ensure that the tree flushes memory after a reasonable amount of time. Otherwise, jobs with a lot of systematics use too much memory.

+
+ +
+
+

Protected Attributes

+
+
+std::vector<std::string> m_jetDetails
+
+ +
+
+std::vector<std::string> m_trigJetDetails
+
+ +
+
+std::vector<std::string> m_fatJetDetails
+
+ +
+
+std::vector<std::string> m_jetContainers
+
+ +
+
+std::vector<std::string> m_truthJetContainers
+
+ +
+
+std::vector<std::string> m_trigJetContainers
+
+ +
+
+std::vector<std::string> m_fatJetContainers
+
+ +
+
+std::vector<std::string> m_l1JetContainers
+
+ +
+
+std::vector<std::string> m_vertexContainers
+
+ +
+
+std::vector<std::string> m_truthParticlesContainers
+
+ +
+
+std::vector<std::string> m_jetBranches
+
+ +
+
+std::vector<std::string> m_truthJetBranches
+
+ +
+
+std::vector<std::string> m_trigJetBranches
+
+ +
+
+std::vector<std::string> m_fatJetBranches
+
+ +
+
+std::vector<std::string> m_l1JetBranches
+
+ +
+
+std::vector<std::string> m_vertexBranches
+
+ +
+
+std::vector<std::string> m_truthParticlesBranches
+
+ +
+
+std::vector<std::string> m_clusterDetails
+
+ +
+
+std::vector<std::string> m_clusterContainers
+
+ +
+
+std::vector<std::string> m_clusterBranches
+
+ +
+
+std::vector<std::string> m_vertexDetails
+
+ +
+
+std::map<std::string, HelpTreeBase*> m_trees
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/TruthSelector.html b/TruthSelector.html new file mode 100644 index 0000000000..0983888214 --- /dev/null +++ b/TruthSelector.html @@ -0,0 +1,526 @@ + + + + + + + + + + + Truth — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Truth

+
+
+class TruthSelector : public xAH::Algorithm
+
+

Public Functions

+
+
+TruthSelector()
+
+ +
+
+virtual EL::StatusCode setupJob(EL::Job &job)
+
+ +
+
+virtual EL::StatusCode fileExecute()
+
+ +
+
+virtual EL::StatusCode histInitialize()
+
+ +
+
+virtual EL::StatusCode changeInput(bool firstFile)
+
+ +
+
+virtual EL::StatusCode initialize()
+
+ +
+
+virtual EL::StatusCode execute()
+
+ +
+
+virtual EL::StatusCode postExecute()
+
+ +
+
+virtual EL::StatusCode finalize()
+
+ +
+
+virtual EL::StatusCode histFinalize()
+
+ +
+
+virtual bool executeSelection(const xAOD::TruthParticleContainer *inTruthParts, float mcEvtWeight, bool count, std::string outContainerName)
+
+ +
+
+virtual int PassCuts(const xAOD::TruthParticle *truthPart)
+
+ +
+
+

Public Members

+
+
+bool m_useCutFlow = true
+
+ +
+
+std::string m_inContainerName = ""
+

input container name

+
+ +
+
+std::string m_outContainerName = ""
+

output container name

+
+ +
+
+std::string m_decor = "passSel"
+

The decoration key written to passing objects.

+
+ +
+
+bool m_decorateSelectedObjects = true
+

decorate selected objects? defaul passSel

+
+ +
+
+bool m_createSelectedContainer = false
+

fill using SG::VIEW_ELEMENTS to be light weight

+
+ +
+
+int m_nToProcess = -1
+

look at n objects

+
+ +
+
+int m_pass_min = -1
+

minimum number of objects passing cuts

+
+ +
+
+int m_pass_max = -1
+

maximum number of objects passing cuts

+
+ +
+
+float m_pT_max = 1e8
+

require pT < pt_max

+
+ +
+
+float m_pT_min = 1e8
+

require pT > pt_min

+
+ +
+
+float m_eta_max = 1e8
+

require eta < eta_max

+
+ +
+
+float m_eta_min = 1e8
+

require eta > eta_max

+
+ +
+
+float m_mass_max = 1e8
+

require mass < mass_max

+
+ +
+
+float m_mass_min = 1e8
+

require mass > mass_max

+
+ +
+
+float m_rapidity_max = 1e8
+

require rapidity < rapidity_max

+
+ +
+
+float m_rapidity_min = 1e8
+

require rapidity > rapidity_min

+
+ +
+
+unsigned int m_type = 1000
+

require classifierParticleType == type (defined by TruthClassifier: https://gitlab.cern.ch/atlas/athena/blob/21.2/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifierDefs.h)

+
+ +
+
+std::string m_typeOptions
+

require classifierParticleType to match any of the “|” separated type values (e.g. “1|2|3|4”)

+
+ +
+
+unsigned int m_origin = 1000
+

require classifierParticleOrigin == origin (defined by TruthClassifier: https://gitlab.cern.ch/atlas/athena/blob/21.2/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifierDefs.h)

+
+ +
+
+std::string m_originOptions
+

require classifierParticleOrigin to match any of the “|” separated origin values (e.g. “10|12|13”)

+
+ +
+
+float m_pT_dressed_min = 1e8
+

require pt_dressed > pt_dressed_min

+
+ +
+
+float m_eta_dressed_min = 1e8
+

require eta_dressed > eta_dressed_min

+
+ +
+
+float m_eta_dressed_max = 1e8
+

require eta_dressed > eta_dressed_max

+
+ +
+
+

Private Members

+
+
+int m_numEvent
+
+ +
+
+int m_numObject
+
+ +
+
+int m_numEventPass
+
+ +
+
+int m_weightNumEventPass
+
+ +
+
+int m_numObjectPass
+
+ +
+
+TH1D *m_cutflowHist = nullptr
+
+ +
+
+TH1D *m_cutflowHistW = nullptr
+
+ +
+
+int m_cutflow_bin
+
+ +
+
+TH1D *m_truth_cutflowHist_1 = nullptr
+
+ +
+
+int m_truth_cutflow_all
+
+ +
+
+int m_truth_cutflow_ptmax_cut
+
+ +
+
+int m_truth_cutflow_ptmin_cut
+
+ +
+
+int m_truth_cutflow_eta_cut
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Tutorial_BrianTuan.html b/Tutorial_BrianTuan.html new file mode 100644 index 0000000000..71f4e54012 --- /dev/null +++ b/Tutorial_BrianTuan.html @@ -0,0 +1,685 @@ + + + + + + + + + + + Brian Tuan’s Tutorial — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Brian Tuan’s Tutorial

+
+

Introduction

+

This tutorial will introduce a new user to analysis of xAOD’s on Tier 3 using the RootCore framework. We will first produce a slimmed tree from Monte Carlo on the GRID, then we will retrieve the file to the local disk and produce a weighted histogram of pT from the slimmed tree. The full source code of the tutorial is here, for those looking to get a quick start.

+
+
+

Setup

+

First, connect to the UC Tier 3 server with X-11 window forwarding +enabled (so that you may use ROOT interactively later):

+
ssh -Y btuan@uct3.uchicago.edu
+
+
+

Make sure that the following lines are in your ~/.bash_profile file, which is a script that runs each time you log into the shell. These lines set up the ATLAS software environment where RootCore, among other tools, is located and depends upon:

+
# Setup ATLAS Environment
+export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
+alias setupATLAS='source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh'
+export ALRB_localConfigDir=$HOME/localConfig
+source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh
+
+
+

Now, setup the RootCore environment and build it. We will use 2.3.21, which, at time of writing is the latest supported release by xAODAnaHelpers. You’ll need to perform this step each time you login to the shell:

+
cd ~/work
+rcSetup Base,2.3.21
+
+
+

To see other available versions of RootCore, type:

+
rcSetup -r
+
+
+

Make a work directory and checkout the xAODAnaHelpers package. This package contains a few useful tools for any analysis: e.g. event selection, jet cleaning, jet calibration etc. After checking out all the packages, return to the directory that has the “RootCore” folder – probably your home directory – and recompile, just to double check that everything works. This may take a while, be patient.

+

In general, always check to make sure that your code compiles properly after any changes with rc compile. Any time package dependencies are updated, be sure to run rc find_packages as well. In addition, if compilation for one of your packages fails, and all code errors seem to be fixed, but RootCore still refuses to compile your package, try running rc clean then rc find_packages && rc compile. This will clean out all of the old files that may have been improperly compiled.

+

It is good practice to repeat this procedure any time you change versions of any packages, RootCore included (though recompiling everything will of course take a while):

+
mkdir work && cd work
+git clone https://github.com/UCATLAS/xAODAnaHelpers.git
+python xAODAnaHelpers/scripts/checkoutASGtags.py 2.3.21
+rc find_packages && rc compile
+
+
+

RootCore comes with a script that allows us to easily create a skeleton for your analysis. Do so:

+
. $ROOTCOREDIR/scripts/make_skeleton.sh Tutorial
+
+
+

Make a directory called run. This is where your script will be located:

+
cd work/Tutorial && mkdir run && cd run
+touch makeSlimmedTree.cxx
+
+
+
+
+

Code and Data

+
+

Warning

+

setConfig and getConfig are eliminated as ROOT::TEnv support is now deprecated.

+
+

Place the following code in your ``makeSlimmedTree.cxx``. Skim through it to familiarize yourself with the sequence of the analysis:

+
void makeSlimmedTree (const std::string& submitDir)
+{
+    //===========================================
+    // FOR ROOT6 WE DO NOT PUT THIS LINE
+    // (ROOT6 uses Cling instead of CINT)
+    // Load the libraries for all packages
+    // gROOT->Macro("$ROOTCOREDIR/scripts/load_packages.C");
+    // Instead on command line do:
+    // > root -l -b -q '$ROOTCOREDIR/scripts/load_packages.C' 'makeSlimmedTree.cxx ("submitDir")'
+    // The above works for ROOT6 and ROOT5
+    //==========================================
+
+    bool f_grid = false;    // decide if we use the GRID to run our analysis. default false.
+
+    // Set up the job for xAOD access:
+    xAOD::Init().ignore();
+
+
+    /*#####################################################
+    ############# SampleHandler Configuation ##############
+    #####################################################*/
+
+    // create a new sample handler to describe the data files we use.
+    SH::SampleHandler sh;
+
+    // Use only one of the following three methods to scan for files with SampleHandler
+
+    // (1) use SampleHandler with DQ2 to obtain the desired dataset
+    // SH::scanDQ2 (sh, "data15_13TeV.00267638.physics_Main.merge.AOD.r6818_p2358/");
+
+    // (2) use SampleHandler with a dataset list to obtain the desired dataset
+    const std::string inputFilePath = gSystem->ExpandPathName("$ROOTCOREBIN/data/Tutorial/inDSShort.txt");
+    SH::readFileList (sh, "sample", inputFilePath );
+
+    // (3) use SampleHandler to scan all of the subdirectories of a directory for particular MC single file:
+    // const char* inputFilePath = gSystem->ExpandPathName ("/export/t3data3/fizisist/");
+    // SH::DiskListLocal list (inputFilePath);
+    // SH::scanDir(sh, list);
+
+    // set the name of the tree in our files. in the xAOD the TTree containing the EDM containers is "CollectionTree"
+    sh.setMetaString ("nc_tree", "CollectionTree");
+    sh.setMetaString("nc_grid_filter", "*");    //Data files on grid to not end in .root
+
+    // print out the samples we found
+    sh.print ();
+
+
+    /*#####################################################
+    ################## Job Configuration ##################
+    #####################################################*/
+
+    // this is the basic description of our job
+    EL::Job job;
+    job.sampleHandler (sh); // use SampleHandler in this job
+
+    // job.options()->setDouble (EL::Job::optMaxEvents, 5000); // for testing purposes, limit to run over the first 500 events only!
+
+    // To automatically delete submitDir
+    job.options()->setDouble(EL::Job::optRemoveSubmitDir, 1);
+
+    // For Trigger
+    job.options()->setString( EL::Job::optXaodAccessMode, EL::Job::optXaodAccessMode_branch );
+
+    // Use TTreeCache to precache data files to speed up analysis
+    job.options()->setDouble (EL::Job::optCacheSize, 10*1024*1024);
+    job.options()->setDouble (EL::Job::optCacheLearnEntries, 20);
+
+
+ /*#####################################################
+    ############### Output Configuration #################
+    #####################################################*/
+
+    std::string outputName;
+    std::string userName = "btuan";
+
+    // if running on GRID, make sure no two runs have the same output name. tag as necessary
+    std::string outputTag = ".v1/";
+
+    if(f_grid) // follow GRID naming conventions
+        outputName = "user."+userName+".%in:name[1]%.%in:name[2]%.%in:name[3]%"+outputTag;
+    else
+        outputName = "%in:name%"+outputTag;
+
+
+    /*#####################################################
+    ############## Algorithm Configuration ################
+    #####################################################*/
+
+    // basic event selection : GRL, event cleaning, NPV
+    BasicEventSelection* baseEventSel = new BasicEventSelection();
+    baseEventSel->setName("baseEventSel")->setConfig( "$ROOTCOREBIN/data/Tutorial/baseEventSel.config" );
+
+    // jet calibrator
+    std::string systName = "None";
+    float systVal = 0;
+    JetCalibrator* jetCalib = new JetCalibrator();
+    jetCalib->setName( "jetCalib" )->setConfig( "$ROOTCOREBIN/data/Tutorial/jetCalib_AntiKt4EMTopo.config")->setSyst( systName, systVal );
+
+    // jet selector
+    JetSelector* jetSelect = new JetSelector();
+    jetSelect->setName( "jetSelect" )->setConfig( "$ROOTCOREBIN/data/Tutorial/jetSelect.config" );
+
+    // tree output
+    TreeAlgo* outTree = new TreeAlgo();
+    outTree->setName( "outTree" )->setConfig( "$ROOTCOREBIN/data/Tutorial/outTree.config" );
+
+    // add algorithms to analysis
+    job.algsAdd (baseEventSel);
+    job.algsAdd (jetCalib);
+    job.algsAdd (jetSelect);
+    job.algsAdd (outTree);
+
+
+    /*#####################################################
+    ################$ Initialize Driver #####$$$###########
+    #####################################################*/
+
+    // here, we choose which driver to use with the boolean set earlier
+    if (f_grid){ // run using the GRID driver
+        EL::PrunDriver driver;
+
+        driver.options()->setString("nc_outputSampleName", outputName);
+        driver.options()->setDouble(EL::Job::optGridNFilesPerJob, 2);
+        // driver.options()->setDouble(EL::Job::optGridMemory, 10240); //10 GB
+
+        driver.submitOnly(job, submitDir); // submitOnly runs job without opening monitoring loop
+    }
+    else { // run using a direct driver
+        EL::DirectDriver driver;
+        driver.options()->setString("nc_outputSampleName", outputName);
+        driver.submit (job, submitDir);
+    }
+
+}
+
+
+

Update the package dependencies on the line ``PACKAGE_DEP`` in cmt/Makefile.RootCore to include xAODAnaHelpers:

+
PACKAGE_DEP = xAODAnaHelpers
+
+
+

Later on, in more driven analyses, you may find yourself adding the EventLoop and EventLoopGrid packages to the dependencies. The xAODAnaHelpers package takes care of all of the event looping for you in this case, so the only dependency is upon that package.

+

Since we use the DQ2 SampleHandler to obtain the datasets, you will need to set up a valid VOMS proxy (which you will need anyways to submit the job to the grid) and a DQ2 client if you want to run the job locally. You can also use the XRootD protocol with FAX to obtain the samples. The code for this is commented out in the ``makeSlimmedTree.cxx`` code. The gist of this is the following (on the command line):

+
voms-proxy-init -voms altas
+localSetupFAX
+fax-get-gLFNs data15_13TeV.00267638.physics_Main.merge.AOD.r6818_p2358 > inDS.txt
+localSetupPandaClient
+
+
+

Make a directory ``Tutorial/data``. This will be where we put all of the data and configuration files for our package, and for xAODAnaHelpers. Once you run find_packages and compile with RootCore, you will be able to refer to this data directory with the ``$ROOTCOREBIN`` path variable, which is particularly useful when you have to generalize your code to run on batch machines, grid, etc:

+
mkdir ~/work/Tutorial/data/
+mv inDS.txt ~/work/Tutorial/data/
+
+
+
+
+

Configuration of xAODAnaHelpers Algorithms

+

As mentioned earlier, xAODAnaHelpers provides a series of algorithms that are chained in sequence to provide the desired output. The input and output containers for each of the algorithms in sequence are configured by .config files – one for each algorithm. Create the following configuration files (as set in the ROOT macro in the run directory) in the data directory:

+
touch ~/work/Tutorial/data/baseEventSel.config
+touch ~/work/Tutorial/data/jetCalib_AntiKt4EMTopo.config
+touch ~/work/Tutorial/data/jetSelect.config
+touch ~/work/Tutorial/data/outTree.config
+
+
+

Each of these configuration files will set the options for a separate part of the analysis. Include the following in each file. At present, there is no centralized documentation for all of xAODAnaHelpers – there is some on the GitHub wiki – but to view the availability of configuration options for each xAODAnaHelpers algorithm, view the header file and source code.

+

baseEventSel.config:

+
Debug                     False
+ApplyGRL                  False
+GRL                       $ROOTCOREBIN/data/Tutorial/data15_13TeV.periodAllYear_DetStatus-v63-pro18-01_DQDefects-00-01-02_PHYS_StandardGRL_All_Good.xml
+DoPileupReweighting       False
+VertexContainer           PrimaryVertices
+NTrackForPrimaryVertex    2
+TruthLevelOnly            False
+#Trigger                   L1_RD0_FILLED
+#Trigger                   L1_.*
+#Trigger                   L1_MBTS_1_1
+#Trigger                   .*
+Trigger                   .*_MBTS_1_1|.*_RD0_FILLED|L1_J[0-9]*|HLT_j[0-9]*|HLT_noalg_j[0-9]*|L1_XE[0-9]*|HLT_XE[0-9]*|HLT_noalg_XE[0-9]*
+StoreTrigDecision         True
+CutOnTrigger              False
+StorePassAny              True
+StorePassL1               True
+StorePassHLT              True
+StoreTrigKeys             True
+UseMetaData               False
+## last option must be followed by a new line ##
+
+
+

jetCalib_AntiKt4EMTopo.config:

+
Debug             False
+InputContainer    AntiKt4EMTopoJets
+JetAlgorithm      AntiKt4EMTopo
+#
+SaveAllCleanDecisions True
+#
+OutputContainer   Jets_Calib
+OutputAlgo        Jets_Calib_Algo
+configNameAFII    JES_Full2012dataset_AFII_January2014.config
+configNameFullSim JES_MC15Prerecommendation_April2015.config
+configNameData    JES_MC15Prerecommendation_April2015.config
+#configNameData    JES_Full2012dataset_May2014.config
+CalibSequence     JetArea_Residual_Origin_EtaJES_GSC
+#
+## last option must be followed by a new line ##
+
+
+

jetSelect.config:

+
Debug                   False
+InputContainer          Jets_Calib
+InputAlgo               Jets_Calib_Algo
+OutputContainer         SignalJets
+OutputAlgo              SignalJets_Algo
+DecorateSelectedObjects False
+CreateSelectedContainer True
+# save multiple cleaning decisions instead of applying the cleaning
+CleanJets               False
+#
+pTMin                   20e3
+PassMin                 1
+Sort                    True
+UseCutFlow              True
+# pT cut is > JVF recommended pT cut - to be added ... or JVT?
+DoJVF                                     False
+pTMaxJVF                        50e3
+etaMaxJVF                       2.4
+JVFCut                                  0.5
+## last option must be followed by a new line ##
+
+
+

outTree.config:

+
Debug                               False
+EventDetailStr              "pileup"
+TrigDetailStr               True
+JetDetailStr                "kinematic substructure rapidity energy scales truth LeadingJets"
+#JetDetailStr               "kinematic"
+JetContainerName    SignalJets
+SameHistsOutDir             False
+## last option must be followed by a new line ##
+
+
+

Almost there! All that’s left to do is copy the requisite files into the locations specified by our makeSlimmedTrees.cxx script.

+

The atlasstyle package is located here. Download and unzip the package, then place it in the run/ directory. Full support for ATLAS Style will be incorporated soon.

+

Copy the desired GRL to the data/ folder. The Good Runs List is used to specify which events will be kept and which events will be discarded, based on LHC and ATLAS operations (e.g. bad luminosity block, etc.). The minutiae are located here.

+
+

Note

+

Always use the most updated GRL, and use the same GRL for your luminosity calculations as you do your event selections. This tutorial uses the following GRL.

+
+
+
+

Plotting

+

Here is a “quick and dirty” plotting macro to be placed in the ``run/`` folder for a plot. An example better integrating AtlasStyle is in the works and should be updated soon:

+
/**
+    * Plotter.cxx -- simple plotter for slimmed trees
+    *
+    * @author   Brian Tuan
+    * @contact  brian.tuan@cern.ch
+    * @date     21 July 2015
+    *
+    * Run on the command line by:
+    *   root -l '$ROOTCOREDIR/scripts/load_packages.C' '$ROOTCOREBIN/data/Tutorial/atlasstyle/AtlasStyle.C' 'Plotter.cxx( filePath )'
+    *           If no argument indicated, Plotter will default to $PWD/submitDir/data-tree/sample.root
+    **/
+
+    #include "atlasstyle/AtlasUtils.h"
+    #include "atlasstyle/AtlasLabels.h"
+    #include "atlasstyle/AtlasStyle.h"
+
+    #include "atlasstyle/AtlasUtils.C"
+    #include "atlasstyle/AtlasLabels.C"
+
+    #include "TCanvas.h"
+    #include "TFile.h"
+    #include "TROOT.h"
+    #include "TH1F.h"
+    #include "TRandom.h"
+    #include "TGraphErrors.h"
+
+    void Plotter (const std::string filePath = "submitDir/data-tree/sample.root"){
+
+        SetAtlasStyle();
+
+        // TFile* f_input = new TFile(filePath.c_str(), "READ", "file", 1);
+        TFile* f_input = new TFile("/afs/cern.ch/user/b/btuan/work/Tutorial/run/submitDir/data-tree/sample.root", "READ", "file", 1);
+        if( !f_input ){ std::cout<<"File not found! Exiting..."<<std::endl; return; }
+
+        TTree* t_tree = (TTree*)f_input->Get("outTree"); // argument must be exact name of tree
+
+        // Create a TTreeReader named "MyTree" from the given TDirectory.
+        // The TTreeReader gives access to the TTree to the TTreeReaderValue and
+        // TTreeReaderArray objects. It knows the current entry number and knows
+        // how to iterate through the TTree.
+        TTreeReader reader("outTree", f_input);
+
+        // Read a single float value in each tree entry:
+        TTreeReaderValue<int> evNum(reader, "eventNumber");
+        TTreeReaderValue<float> weight(reader, "mcEventWeight"); // weight defaults to 1 if data
+
+        // Read a vector from in each of the tree entries:
+        TTreeReaderValue<std::vector<float>> jetPt(reader, "jet_pt");
+        TTreeReaderValue<std::vector<float>> jetEMPt(reader, "jet_emScalePt");
+        TTreeReaderValue<std::vector<float>> jetPUPt(reader, "jet_pileupScalePt");
+        TTreeReaderValue<std::vector<float>> jetPhi(reader, "jet_phi");
+        TTreeReaderValue<std::vector<float>> jetEta(reader, "jet_eta");
+        TTreeReaderValue<std::vector<float>> jetWidth(reader, "jet_Width");
+
+        // Now iterate through the TTree entries and fill a histogram.
+        TH1F* h_jetPt = new TH1F("h_jetPt", "pt", 100, 0., 250.);
+        h_jetPt->SetTitle("AntiKt4 Pt");
+        h_jetPt->SetXTitle("Pt (GeV)");
+        h_jetPt->SetYTitle("nEvents");
+
+        while( reader.Next() ) { // dummy iterator just to keep count!
+            if (reader.GetEntryStatus() != TTreeReader::kEntryValid ){
+                switch (reader.GetEntryStatus()) {
+                    case TTreeReader::kEntryValid:
+                        // All good! Nothing to worry about.
+                        break;
+                    case TTreeReader::kEntryNotLoaded:
+                        std::cerr << "Error: TTreeReader has not loaded any data yet!\n";
+                        break;
+                    case TTreeReader::kEntryNoTree:
+                        std::cerr << "Error: TTreeReader cannot find a tree named \"outTree\"!\n";
+                        break;
+                    case TTreeReader::kEntryNotFound:
+                        // Can't really happen as TTreeReader::Next() knows when to stop.
+                        std::cerr << "Error: The entry number doe not exist\n";
+                        break;
+                    case TTreeReader::kEntryChainSetupError:
+                        std::cerr << "Error: TTreeReader cannot access a chain element, e.g. file without the tree\n";
+                        break;
+                    case TTreeReader::kEntryChainFileError:
+                        std::cerr << "Error: TTreeReader cannot open a chain element, e.g. missing file\n";
+                        break;
+                    case TTreeReader::kEntryDictionaryError:
+                        std::cerr << "Error: TTreeReader cannot find the dictionary for some data\n";
+                        break;
+                }
+                return false;
+            }
+
+            // Access the jetPt as an array, whether the TTree stores this as
+            // a std::vector, std::list, TClonesArray or Jet* C-style array, with
+            // fixed or variable array size.
+            if ((*jetPt).size() < 2 || (*jetPt)[0] < 100) //at least two jets, leading jet > 100 GeV
+                continue;
+
+            // Access the array of taus.
+            float currentWeight = *weight;
+            for (int iJets = 0, nJets = (*jetPt).size(); iJets < nJets; ++iJets)
+                h_jetPt->Fill( (*jetPt)[iJets] , currentWeight);
+        }
+
+
+        TCanvas* c1 = new TCanvas("c1","AntiKt4EMTopoJets pT",50,50,600,600);
+        TPad* thePad = (TPad*)c1->cd();
+
+        myText(       0.3,  0.85, 1, "#sqrt{s}= 14 TeV");
+        myText(       0.57, 0.85, 1, "|#eta_{jet}|<0.5");
+        myMarkerText( 0.55, 0.75, 1, 20, "Data 2009",1.3);
+        myBoxText(    0.55, 0.67, 0.05, 5, "NLO QCD");
+
+        ATLASLabel(0.2,0.2,"Preliminary");
+
+        h_jetPt->Draw();
+
+        c1->Print("Output.eps");
+        c1->Print("Output.png");
+        c1->Print("Output.pdf");
+    }
+
+
+
+
+

Tips & Tricks

+

Here are a few tips and tricks that should help you avoid most errors, and prove as good practice for any analysis with AnaHelpers.

+
+

Maintaining xAODAnaHelpers

+
    +
  • xAODAnaHelpers is now hosted on GitHub! This means two things: first, there is a basic documentation available (xAODAnaHelpers) as reference. The documentation is still in progress, but what’s already there should help you figure out what’s going on with the package. Second, the development page (Latest Version) will contain information about the latest analysis base release that xAH has been tested to be compatible with.

  • +
  • Should you find any errors with xAODAnaHelpers code – which should be a very rare occurrence, but programmers are still human – you can immediately report the issue to the entire xAH team in GitHub issues. Issues are tracked publicly, so you can stay posted about the resolution of your issue.

  • +
  • Updating the framework should be as simple as calling git pull !https://github.com/xAODAnaHelpers from within the xAODAnaHelpers directory. Then, to make sure all the latest Good Runs Lists (GRLs) and configuration information are updated as well, run python xAODAnaHelpers/scripts/checkoutASGtags.py $ABver where $ABver is the version of your analysis base release, in this case 2.3.21. The following lines of code should accomplish the same result automatically:

  • +
+
if [ -d $ROOTCOREBIN/../xAODAnaHelpers ]
+    then cd $ROOTCOREBIN/../ python xAODAnaHelpers/scripts/checkoutASGtags.py $(echo $ROOTCOREDIR \| sed 's/\\/cvmfs\\/atlas\\.cern\\.ch\\/repo\\/sw\\/ASG\\/AnalysisBase\\/\\([0-9]\*[.][0-9]\*[.][0-9]\*\\).\*/\\1 /');
+fi
+
+
+

This framework will automatically scale everything in to the GeV range for you, but the xAOD format lists all energies in MeV.

+

Monitoring loop with pbook show() retry() kill() bigpanda / loadpackages:

+
EL::Driver::wait()
+
+
+

Debug True gives a verbose mode.

+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/UsingUs.html b/UsingUs.html new file mode 100644 index 0000000000..cfb0d108cf --- /dev/null +++ b/UsingUs.html @@ -0,0 +1,402 @@ + + + + + + + + + + + xAH_run.py — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

xAH_run.py

+

xAH_run.py is the xAODAnaHelpers macro written fully in python. The +goal is to make it easier for a user to spin up an analysis without +(potentially) writing any C++ code at all!

+
+

Introduction

+

An analysis job is defined by a few key things: +- the files to run over +- where to run the code +- what algorithms to run

+

and a few other minor features such as submission directory or how many events to run. Primarily, these three things listed above are all you need to get started. xAH_run.py manages all of these for you.

+

A configuration file, written in json or python, is used to specify what algorithms to run, and in what order. You pass in a list of files you want to run over to the script itself, as well as where to run the code. It will take care of the rest for you.

+
+
+

Getting Started

+

To get started, we assume you are little bit familiar with xAODAnaHelpers and AnalysisBase in general. Recall that when you compile a bunch of packages, you generate a namespace under ROOT that all your algorithms are loaded into so that one could create an algorithm by something like ROOT.AlgorithmName() and then start configuring it. In fact, this is how one normally does it within python. Namespaces are automatically linked up by something like ROOT.Namespace.AlgorithmName() in case you wrapped the entire algorithm in a namespace.

+
+

A simple plotting example

+

To get started, let’s just ask a simple question: “How can I make plots of Anti-Kt, R=0.4, LC-calibrated jets?” Let’s assume xAODAnaHelpers has already been checked out and everything is compiled. We only need to know the three key things.

+
+

What algorithms to run

+

We will run 2 algorithms. First is BasicEventSelection to filter/clean events. The second is JetHistsAlgo which will allow us to plot the jets we want. So start with the template JSON file:

+
[
+  { "class": "BasicEventSelection",
+    "configs": {
+    }
+  },
+  {
+    "class": "JetHistsAlgo",
+    "configs": {
+    }
+  }
+]
+
+
+

This gets us started. We make a list of algorithms that we want to run, this list is considered sorted. Each list contains a dictionary object, one which defines the class to run and another which defines a dictionary of configurations to pass into that algorithm. An equivalent script in python looks like

+
from xAODAnaHelpers import Config
+c = Config()
+
+c.algorithm("BasicEventSelection", {})
+c.algorithm("JetHistsAlgo", {})
+
+
+

Next, we should probably add some obvious configurations that work for us. I look up the header files of each and decide to flesh it out as below:

+
[
+  { "class": "BasicEventSelection",
+    "configs": {
+      "m_truthLevelOnly": false,
+      "m_applyGRLCut": true,
+      "m_GRLxml": "$ROOTCOREBIN/data/xAODAnaHelpers/data12_8TeV.periodAllYear_DetStatus-v61-pro14-02_DQDefects-00-01-00_PHYS_StandardGRL_All_Good.xml",
+      "m_doPUreweighting": false,
+      "m_vertexContainerName": "PrimaryVertices",
+      "m_PVNTrack": 2,
+      "m_name": "myBaseEventSel"
+    }
+  },
+  {
+    "class": "JetHistsAlgo",
+    "configs": {
+      "m_inContainerName": "AntiKt4EMTopoJets",
+      "m_detailStr": "kinematic",
+      "m_name": "NoPreSel"
+    }
+  }
+]
+
+
+

and I save this into xah_run_example.json. If you want more variables in your plots, add other possibilities in the detailStr field, separated by a space. Equivalently in python

+
from xAODAnaHelpers import Config
+c = Config()
+
+c.algorithm("BasicEventSelection", {"m_truthLevelOnly": False,
+                                    "m_applyGRLCut": True,
+                                    "m_GRLxml": "$ROOTCOREBIN/data/xAODAnaHelpers/data12_8TeV.periodAllYear_DetStatus-v61-pro14-02_DQDefects-00-01-00_PHYS_StandardGRL_All_Good.xml",
+                                    "m_doPUreweighting": False,
+                                    "m_vertexContainerName": "PrimaryVertices",
+                                    "m_PVNTrack": 2,
+                                    "m_name": "myBaseEventSel"})
+c.algorithm("JetHistsAlgo", {"m_inContainerName": "AntiKt4EMTopoJets",
+                             "m_detailStr": "kinematic",
+                             "m_name": "NoPreSel"})
+
+
+

The similarity is on purpose, to make it incredibly easy to switch back and forth between the two formats.

+
+
+

Running the script

+

I pretty much have everything I need to work with. So, I run the following command

+
xAH_run.py --files file1.root file2.root --config xah_run_example.json direct
+
+
+

which will run over two ROOT files locally (direct), using the configuration we made. Running with the python form of the configuration is just as easy

+
xAH_run.py --files file1.root file2.root --config xah_run_example.py direct
+
+
+

How to pass command line options straight to the python config file? Let’s say you wish to set a variable called var in your config. Then, you would have to have something like this in your config:

+
import shlex
+import argparse
+
+parser = argparse.ArgumentParser(description='Test for extra options')
+parser.add_argument('-var', action='store')
+
+# note "args" is already a variable holding the arguments passed into xAH_run.py
+inner_args = parser.parse_args(shlex.split(args.extra_options))
+
+
+

Then, you can pass that argument with the --extraOptions flag of xAH_run.py:

+
xAH_run.py --files file.root --config YOURCONFIGNAME.py --extraOptions="-var 2" direct
+
+
+

We’re all done! That was easy :beers: .

+
+
+
+
+

Configuring Samples

+

Sample configuration can be done with a python script like so

+
from xAODAnaHelpers import Config
+c = Config()
+
+c.sample(410000, foo='bar', hello='world')
+c.sample("p9495", foo='bar', hello='world', b=1, c=2.0, d=True)
+
+
+

where the pattern specified in Config::sample will be searched for inside the name of the dataset (not the name of the file!). Specifically, we just do something like if pattern in sample.name() in order to flag that sample. Given this, you can make this pattern generic enough to apply a configuration to a specific p-tag, or to a specific dataset ID (DSID) as well. The above will produce the following output when running

+
[WARNING]  No matching sample found for pattern 410000
+[INFO   ]  Setting sample metadata for example.sample.p9495.root
+[INFO   ]       - sample.meta().setDouble(c, 2.0)
+[INFO   ]       - sample.meta().setString(foo, bar)
+[INFO   ]       - sample.meta().setInteger(b, 1)
+[INFO   ]       - sample.meta().setString(hello, world)
+[INFO   ]       - sample.meta().setBool(d, True)
+
+
+

which should make it easy for you to understand what options are being set and for which sample.

+
+
+

Configuration Details

+

As mentioned previous, there are multiple facets to xAH_run.py. The below details the configurations that are possible for the script itself, not for the algorithms you use. For details on what can be configured, look up the header files of the algorithms themselves.

+

For everything listed below, the script contains all this information and is self-documenting. Simply type

+
xAH_run.py -h
+
+
+

to see all the help information.

+
+

Note

+

The {driver} option tells the script where to run the code. There are lots of supported drivers and more can be added if you request it. For more information, you can type xAH_run.py -h drivers of available drivers.

+
+
+
+

API Reference

+
+

Note

+

If you are using a CMake-based release, or you have argcomplete in your python environment, you can enable automatic completion of the options. For example, running something like this:

+

eval “$(register-python-argcomplete xAH_run.py)”

+
+

All of the following properties can be set in a user-specific dotfile located at ${HOME}/.xah. It is an INI file, with the general section used for the generic options and other sections named after sub-commands. The keys in each section are the options without the preceeding dashes.

+

The following example configures the Slurm driver for NERCS’ Cori and records usage statistics:

+
[general]
+stats=1
+
+[slurm]
+optBatchSharedFileSystem=1
+optBatchWait=1
+optSlurmRunTime=5:00:00
+optSlurmExtraConfigLines=#SBATCH --qos=shared --tasks-per-node=1 --constraint=haswell --image=centos:centos7 --export=NONE
+optSlurmWrapperExec=export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/global/project/projectdirs/atlas/scripts/extra_libs_180822; hostname; shifter --module=cvmfs /bin/
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Utilities.html b/Utilities.html new file mode 100644 index 0000000000..efbd6ec5f7 --- /dev/null +++ b/Utilities.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Utilities — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/VtxHists.html b/VtxHists.html new file mode 100644 index 0000000000..c3f6c7eed7 --- /dev/null +++ b/VtxHists.html @@ -0,0 +1,250 @@ + + + + + + + + + + + VtxHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

VtxHists

+
+

Warning

+

doxygenclass: Cannot find class “VtxHists” in doxygen xml output for project “xAH” from directory: ./doxygen/xml

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/_sources/API.rst.txt b/_sources/API.rst.txt new file mode 100644 index 0000000000..a969fb426b --- /dev/null +++ b/_sources/API.rst.txt @@ -0,0 +1,15 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 4 + + Getters + Calibrators + Correctors + Selectors + Histograms + ToolsUsed + Outputs + Utilities + diff --git a/_sources/Algorithms.rst.txt b/_sources/Algorithms.rst.txt new file mode 100644 index 0000000000..d40ec96ea6 --- /dev/null +++ b/_sources/Algorithms.rst.txt @@ -0,0 +1,251 @@ +Algorithms +========== + +Each algorithm will retrieve a container from either TEvent or TStore +and if an output container is specified, it is saved to the TStore +object such that the following algorithms can access the container. +TStore will manage the memory for the user. + +Event Selection +--------------- + +(moved to BasicEventSelection.h) + +Jet Related +----------- + +HLTJetGetter +~~~~~~~~~~~~~ + +The HLTJetGetter Algorithm retrieves jets from the TrigDecisionTool. +The output is a shallow copy of the trigger feature that is requested +via the combination of the name of the jet collection (m_inContainerName) and +the jet trigger that is selected m_triggerList. The name of the copy +is chosen via the m_outContainerName. +The input container name should be given without any HLT_xAOD__JetContainer prefix +if the collection comes directly from the xAOD. +The list of triggers must be given as a regular expression using an or (|) if +more than a trigger is requested. To request all triggers, use \*. + + +JetCalibrator +~~~~~~~~~~~~~ + +The JetCalibrator Algorithm handles the calibration, cleaning, and +common uncertainties associated with Jets. It interfaces with many +JetETMiss packages. The output is a shallow copy of the input jet +container (i.e. a new xAOD::JetCollection). A separate shallow copy is +made for each systematic variation requested, and the names of the +containers are saved in a vector for downstream algorithms to use. The +algorithm does not apply any selection to the jets. + +The parameters to control the Algorithm are described in the header +documentation: +https://xaodanahelpers.readthedocs.io/en/latest/JetCalibrator.html + +Calibration +^^^^^^^^^^^ + +Jets are calibrated using JetCalibTools. The option CalibSequence +determines the calibration sequence to be applied. "Insitu" in +automatically added to data samples if it is not provided, and MC jobs +will fail if it is included. Config file options can be provided with +CalibConfigData, CalibConfigAFII, and CalibConfigFullSim. The config +variable to use is determined from metadata. + +1. Sort - Sort the output jets by pT +2. SetAFII - Force AFII configurations (in case metadata isn't working) +3. InputContainer - Jet Collection to use +4. OutputContainer - Output Jet Collection for calibrated jets +5. JetAlgorithm - Input Jet Algorithm +6. OutputAlgo - Output Jet Algorithm + +JES/JER Uncertainties +^^^^^^^^^^^^^^^^^^^^^ + +Outputs new containers for each systematic variation. + +For JES: Uses JetUncertaintiesTool. JES is different for AFII, so +m\_setAFII may be required if metadata isn't working. 1. JESUncertConfig +- Configuration file for JES 2. JESUncertMCType - Type of JES +Uncertainty to use, MC20 or MC21 + +For JER: Uses JERSmearingTool 1. JERUncertConfig - Configuration file +for JER 2. JERFullSys - Run full list of systematics for data and MC. +Not currently recommended by JER Group (10/08/2015). 3. JERApplyNominal +- Apply a nominal JER Smearing. + +Cleaning +^^^^^^^^ + +Cleaning decisions are saved as auxiliary data; No selections are made +to the container. The decision is saved as an auxdecor with names like +clean\_passLooseBadUgly clean\_pass Settings: 1. JetCleanCutLevel - Cut +Level, may be LooseBad or TightBad 2. JetCleanUgly - Clean Ugly Jets (in +gap region) 3. SaveAllCleanDecisions - Save all four decisions +(LooseBad, LooseBadUgly, TightBad, TightBadUgly) 4. CleanParent - Apply +cleaning decision to the jet's parent + +JetSelector +~~~~~~~~~~~ + +Applies cuts on the input jet collection(s). The jets can be decorated +with the decision of the cuts. A new xAOD::JetCollection can be made +from the ones passing the cuts. + +The JVT selection is OFF by default, it can be turned ON with ```m_doJVT```. +The default algorithm is NNJvt. If another algorithm is needed, use corresponding index for the enum here: https://acode-browser1.usatlas.bnl.gov/lxr/source/athena/PhysicsAnalysis/Interfaces/JetAnalysisInterfaces/JetAnalysisInterfaces/IJetJvtEfficiency.h#0022 (note: this link points to the latest r22 version, i.e. master, if a release is used, please check the corresponding enum for the given release: https://gitlab.cern.ch/atlas/athena/-/tags?search=release%2F22.2&sort=updated_desc) +The default JVT working point is ```FixedEffPt```, it can be changed with ```m_WorkingPointJVT```. +JVT is no longer recalculated in JetCalibrator, it is now done in JetSelector. +It can be disabled by setting ```m_recalculateJvtScores``` to ```false```. +Furthermore, the JVT algorithm is now NNJvt (default for R22). + + +JetHists and JetHistsAlgo +~~~~~~~~~~~~~~~~~~~~~~~~~ + +JetHists is a class of histograms for jet variables. In the constructor +one gives a name which is used as the first half of the name of all the +histograms in the class and the detail string which determines which +plots are made. One can declare a JetHists object in the event selection +algorithm and fill the hists with every jet in a collection or pick jets +by hand to fill histograms.This is done in the example event selection +described below. JetHistsAlgo is a algorithm that holds a JetHists +object and fills it with every jet in the user specified container. + +BJetEfficiencyCorrector +~~~~~~~~~~~~~~~~~~~~~~~ + +This Algo wraps two flavor tagging tools - one returns the decision on +if the jet is tagged or not for the given operating point (OP) and the +other returns the efficiency scale factors needed for MC only. Like +other Algos, "All" gives all the systematic variations. Two decorations +are added to the input jets: 1. The B-Tag decision. Decoration name +(default) +"BTag\_:math:`{OP}" 2. The B-Tag efficiency scale factor. If the jet fails the cut the inefficiency scale factor is saved. Decoration name (default) "BTAG_SF_`\ {OP}". +This decoration is not added if the OP has not been calibrated. + +The available **calibrated** operating points in the `August 2015 CDI +file `__ +for *fixed* b-jet efficiencies: \* FixedCutBEff\_60 \* FixedCutBEff\_70 +\* FixedCutBEff\_77 \* FixedCutBEff\_85 + +and the *fixed* cut **un-calibrated** operating points are: \* +FixedCutBEff\_30 \* FixedCutBEff\_50 \* FixedCutBEff\_80 \* +FixedCutBEff\_90 + +Finally, the *flat* efficiency **un-calibrated** operating points are: +\* FlatBEff\_30 \* FlatBEff\_40 \* FlatBEff\_50 \* FlatBEff\_60 \* +FlatBEff\_70 \* FlatBEff\_77 \* FlatBEff\_85 + +These decorations can be added to a TTree via HelpTreeBase. The info +switch looks for "*sfFTagFix*\ " and "*sfFTagFlt*\ " for the fixed and +flat efficiency OPs respectively. "*sfFTagFix607785*\ " will try to add +the decision and efficiency/inefficiency scale factors for the fixed 60, +70, and 85% b-jet efficiency OPs to the tree. The user must also create +and run BJetEfficiencyCorrector for each OP. + +Note: To those paying attention. Currently the two flavor tagging tools +use different names for the same operating point. This is handled +internally in xAH until the flavor tagging group harmonizes the two. + +Muon Related +------------ + +MuonCalibrator +~~~~~~~~~~~~~~ + +MuonEfficiencyCorrector +~~~~~~~~~~~~~~~~~~~~~~~ + +Produces a container of muons decorated with efficiencies and scale factors. +This container is not simply the one in input, but is a deepCopy of that. +This allows flexibility in decorating muons of systematically altered containers. +The output container has a configurable name and is only created for MC events. +When working with systematic uncertainties, a list of systematics is passed +to this algorithm *m_inputAlgoSystNames*\. This algorithm supports comma +separated lists as inputs, which will be considered as a unique list. The +systematic names in this list will be looked for to retrieve the muon containers +to decorate. Systematic variations on the decorations themselves might be +unnecessary for all systematic muon containers and might only be considered +for the nominal container (need of deepCopy). This is the default configuration. +Otherwise the option *m_decorateWithNomOnInputSys*\ can be set to false. +The algorithm features the option *m_sysNamesForParCont*\ which is a list of systematic +names. For each of them, a copy of the nominal muon container is put in the +store carrying the name of the systematic. These containers are only decorated +with the nominal efficiencies and scale factors. The use case of this are MET +systematics for which one does not want systematic variations on efficiencies, +but still wants to retrieve a nominal muon container in the tree algo. Retrieving +the nominal would indeed carry all the unnecessary uncertainties. + + +MuonSelector +~~~~~~~~~~~~ + +MuonHists and MuonHistsAlgo +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Electron Related +---------------- + +ElectronCalibrator +~~~~~~~~~~~~~~~~~~ + +ElectronEfficiencyCorrector +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See the MuonEfficiencyCorrector + +ElectronSelector +~~~~~~~~~~~~~~~~ + +ElectronHists and ElectronHistsAlgo +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Tau Related +----------- + +TauCalibrator +~~~~~~~~~~~~~ + +TauSelector +~~~~~~~~~~~ +Similar to other selectors. Tau identification/selection algorithms working points are +decorated onto the tau automatically. Tha flag m_decorateWithTracks controls the decoration +of the tau track information. It can be dumped in the ntuples by specifying the trackparams +flag in the tau details string of the TreeAlgo. + +TauEfficiencyCorrector +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The TauEfficientyCorrector provides one cumulative decoration with one SF corresponding to +the combination of working points used for the tau selection/identification algorithms. +Several initialisations of the algorithm are needed with different combinations in order +to dump in the ntuples different combined working points. Tau trigger SFs are saved separately +and wrt said cumulative working point which has to be specified in the initialisation of a new +instance of the algorithm together with the trigger menu. + + +TauJetMatching +~~~~~~~~~~~~~~ +This algorithm is introduced to match an arbitrary and configurable collection of jets +with the TauJet object. This is useful for cases where the tau seedJet (LC topo jet) +is not available in xAOD but one would need to get a handle on some original jet info. +The algorithm has a configurable DeltaR matching criterion and for now decorates taus +with the matched jet width. It should be executed before OLR. It can be used +before tau selection and after tau calibration. + + +HelperFunctions +--------------- + +HelperClasses +------------- + +NTuple Creation +--------------- + +HelpTreeBase is a class (not an algorithm) that creates and fills a +TTree. When adding an object type i.e. jet, muon, or event level +quantities, it can be easily configured with "info switches" ( See +HelperClasses ) that take a space separated list of categories. diff --git a/_sources/BJetEfficiencyCorrector.rst.txt b/_sources/BJetEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..c7f7eed842 --- /dev/null +++ b/_sources/BJetEfficiencyCorrector.rst.txt @@ -0,0 +1,8 @@ +*b*-jet +======= + +.. doxygenclass:: BJetEfficiencyCorrector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/BasicEventSelection.rst.txt b/_sources/BasicEventSelection.rst.txt new file mode 100644 index 0000000000..58a697d090 --- /dev/null +++ b/_sources/BasicEventSelection.rst.txt @@ -0,0 +1,8 @@ +Event +===== + +.. doxygenclass:: BasicEventSelection + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Calibrators.rst.txt b/_sources/Calibrators.rst.txt new file mode 100644 index 0000000000..c445559bdb --- /dev/null +++ b/_sources/Calibrators.rst.txt @@ -0,0 +1,12 @@ +Calibrating Objects +=================== + +.. toctree:: + :maxdepth: 2 + + ElectronCalibrator + JetCalibrator + MuonCalibrator + TauCalibrator + PhotonCalibrator + diff --git a/_sources/ClusterHists.rst.txt b/_sources/ClusterHists.rst.txt new file mode 100644 index 0000000000..845a917e1c --- /dev/null +++ b/_sources/ClusterHists.rst.txt @@ -0,0 +1,8 @@ +ClusterHists +============ + +.. doxygenclass:: ClusterHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/ClusterHistsAlgo.rst.txt b/_sources/ClusterHistsAlgo.rst.txt new file mode 100644 index 0000000000..324bb3facd --- /dev/null +++ b/_sources/ClusterHistsAlgo.rst.txt @@ -0,0 +1,8 @@ +ClusterHistsAlgo +================ + +.. doxygenclass:: ClusterHistsAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Community.rst.txt b/_sources/Community.rst.txt new file mode 100644 index 0000000000..087cfa31d6 --- /dev/null +++ b/_sources/Community.rst.txt @@ -0,0 +1,42 @@ +Community +========= + +Tutorials +--------- + +.. toctree:: + :titlesonly: + + (outdated) Brian Tuan's Tutorial + +Email List +---------- + +For other inquiries in which you don't have a Github account or prefer to ask a question to the community at large, please feel free to both subscribe and email to `atlas-sw-xAODAnaHelpersFW `_. + +Who uses us? +------------ + +The following list are packages / analyses searches that depend on xAH. We thank them for their hard work and hope they continue to use us! + +- `ttH->multileptonic final state `__ + + + HTop - former HSG8 group + +- `dijet `__ +- `multijet `__ +- `hh->4b `__ +- `VBF + invisible `__ +- `g->tt susy multi-b-jet `__ +- Jet/MET +- Jet Cleaning +- `jet inputs to reconstruction `__ +- Punch-through studies +- `Multijet balance `__ +- `Standard Model inclusive jet cross section `__ +- `Voronoi Area Pileup Subtraction `__ +- `Trigger-Level Analysis `__ +- `Jet trigger group performance studies `__ +- `Dijet+ISR Analysis `__ +- `SM Full Run 2 Z+HF analysis `__ +- `SM Full Run 2 W+jets analysis `__ diff --git a/_sources/Correctors.rst.txt b/_sources/Correctors.rst.txt new file mode 100644 index 0000000000..cec0f9366c --- /dev/null +++ b/_sources/Correctors.rst.txt @@ -0,0 +1,11 @@ +Efficiency Correcting +===================== + +.. toctree:: + :maxdepth: 2 + + BJetEfficiencyCorrector + ElectronEfficiencyCorrector + MuonEfficiencyCorrector + TauEfficiencyCorrector + diff --git a/_sources/DebugTool.rst.txt b/_sources/DebugTool.rst.txt new file mode 100644 index 0000000000..054496fbac --- /dev/null +++ b/_sources/DebugTool.rst.txt @@ -0,0 +1,8 @@ +Debug Tool +========== + +.. doxygenclass:: DebugTool + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Development.rst.txt b/_sources/Development.rst.txt new file mode 100644 index 0000000000..d7ade419fb --- /dev/null +++ b/_sources/Development.rst.txt @@ -0,0 +1,466 @@ +Development +=========== + +.. warning:: + Never push to main. Always create a new branch for changes, rebase your branch with main ``git pull --rebase origin main`` and use the branch for creating a pull-request to merge with main. This keeps main mergeable for everyone for all development. + +.. toctree:: + :maxdepth: 2 + + HowToDocumentation + Issues + +Development Workflow +-------------------- + +Changes should be tested properly ( "it compiles" is not sufficient ). We use the ``git rebase`` workflow. + +New User +~~~~~~~~ + +.. highlight:: none + +This is for users who do not have write access to ``UCATLAS/xAODAnaHelpers`` to make branches. Instead, they fork and write their changes to their own repository and submit pull-requests. + +- For *very* new users, you may want to setup SSH key access to your personal repository. To do this, follow the instructions at `Generating SSH keys `_. So you go here: https://github.com/UCATLAS/xAODAnaHelpers/ and just click the 'Fork' at top right. This forks a copy into your account (``yourAccount/xAODAnaHelpers``). Next, clone it. Set the upstream:: + + git clone git@github.com:yourAccount/xAODAnaHelpers + cd xAODAnaHelpers + git remote add upstream git@github.com:UCATLAS/xAODAnaHelpers + +Note: If you do not have an ssh-key set up, you may want to use the HTTPS version of the above URL:: + + git remote add upstream https://github.com/UCATLAS/xAODAnaHelpers + +Next, make your changes for the feature/bug/fix:: + + vim Root/JetSelector.cxx + vim Root/HelpTreeBase.cxx + git status # make sure you changed the files you want to change + git diff # make sure the changes are what you want + +Then go ahead and commit your changes:: + + git add Root/JetSelector.cxx + git commit -m "Update with new jet calibration recommendations" + git add Root/HelpTreeBase.cxx + git commit -m "make sure that the tree dumps the systematics for new calibrations" + +When you are ready to submit a pull-request, do the following first:: + + git fetch upstream + git rebase upstream/main + +to make sure your code is up to date with the `upstream repository `__. + +You may want to rebase all of your changes into a single commit if you wish, and that can be done via:: + + git rebase -i HEAD~N + +where ``N`` is the number of commits to rebase. Then you just follow the instructions. Take care not to rebase through commits that are already on main of the upstream repo. Then submit a pull-request! See https://help.github.com/articles/creating-a-pull-request/ for information on this. + +After the pull-request has been merged, you can bring yourself up to date with:: + + git fetch upstream + git rebase upstream/main + +Trusted Dev User +~~~~~~~~~~~~~~~~ + +In this case, you have write access to this repository. Any new feature you wish to add will need to be in a new branch:: + + git checkout -b feature/newFeature + +and then make your commits... then maybe rebase all commits into a few good ones:: + + git rebase -i HEAD~N + +where ``N`` is the number of commits to rebase. And then rebase with main to make sure your branch is as up-to-date as possible when making the pull-request:: + + git pull --rebase origin main + +and push your commits to the remote (setting upstream):: + + git push -u origin feature/newFeature + +and then submit a pull request by going to `xAODAnaHelpers `__, finding your branch, and making a pull request (usually shiny green buttons). When it's been merged, you can run:: + + git checkout main + git pull --rebase origin main + git remote prune origin + +to delete your local copy of the branch after bringing your local copy up to date. + +Helpful Suggestions +------------------- + +Updating changes +~~~~~~~~~~~~~~~~ + +If you're on branch ``myBranch`` and you have commits that you want to +push to the remote ``origin`` - the first thing you should do is always +update so you're current:: + + git pull --rebase + +will do it all. If you want more control, use:: + + git fetch + git rebase origin/main + +or:: + + git fetch origin + git rebase origin/main myBranch + +.. note:: + - ``git fetch`` will fetch from ``origin`` (see ``git remote -v`` for what that's defined as) by default, but you can explicitly provide a different remote repository. + - ``git rebase origin/main`` will rebase the current branch you are on. You can specify another branch if you want. + + +Changing Author Info +~~~~~~~~~~~~~~~~~~~~ + +See https://help.github.com/articles/changing-author-info/ for more information. + +Renaming lots of tags +~~~~~~~~~~~~~~~~~~~~~ + +.. code:: bash + + git tag -l "xAODAnaHelpers*" | + cut -d "-" -f 2-4 | + while read ref + do + git tag "$ref" "xAODAnaHelpers-$ref" + git tag -d "xAODAnaHelpers-$ref" + git push origin ":refs/tags/xAODAnaHelpers-$ref" + git push --tags + done + +Tagging and releasing on svn +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Only a few people should be doing this. Encourage folks to checkout tags +using git. Here are my general steps:: + + git clone git@github.com:UCATLAS/xAODAnaHelpers xAHGIT + svn co svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/trunk xAODAnaHelpers + mv xAHGIT/.git xAODAnaHelpers/.git + rm -rf xAHGIT + cd xAODAnaHelpers + +At this point, I need to reset all changes locally (these are due to svn):: + + git reset HEAD --hard + +and then I can look at the changes with:: + + git status + +If I'm happy with things on the ``git`` side, I move over to svn side with:: + + svn status + +and make sure any new files to add ``svn add newFile`` and remove ``svn del oldFile`` are dealt with. Then I can commit to trunk:: + + svn commit -m "Release a tag for xAH" + +then I can copy trunk to my new tag ``xx-yy-zz``:: + + svn copy svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/trunk svn+ssh://svn.cern.ch/reps/atlasinst/Institutes/UChicago/xAODAnaHelpers/tags/xAODAnaHelpers-XX-YY-ZZ + +and I should be good to go. + +Skimming new test files +~~~~~~~~~~~~~~~~~~~~~~~ + +In order to skim some new test files, I use athena:: + + asetup 20.1.4.7,here + +with the following python file executed via ``athena.py skimming.py`` on an ``input.root`` file + +.. code-block:: python + + from AthenaCommon.AppMgr import ServiceMgr as svcMgr + import AthenaPoolCnvSvc.ReadAthenaPool + + svcMgr.EventSelector.InputCollections = ['input.root'] + + from GaudiSequencer.PyComps import PyEvtFilter + filterseq = CfgMgr.AthSequencer("AthFilterSeq") + #filterseq += PyEvtFilter("MyFilter",evt_list=[18559067]) #will execute main sequence only for these eventnumbers + + # Create a POOL output file with the StoreGate contents: + from OutputStreamAthenaPool.MultipleStreamManager import MSMgr + xaodStream = MSMgr.NewPoolRootStream( "StreamXAOD", "xAOD.root" ) + + DetDescrVersion = 'ATLAS-R2-2015-03-01-00' + include("RecExCond/AllDet_detDescr.py") + + # Set up its contents: + #xaodStream.AcceptAlgs(["MyFilter"]) + xaodStream.GetEventStream().TakeItemsFromInput = True + #needed to have xAOD readable outside athena (but I thought this is not needed any more?) + #theApp.CreateSvc += [ "xAODMaker::EventFormatSvc" ] + xaodStream.AddMetaDataItem(["EventBookkeeperCollection#*"]) + #xaodStream.AddMetaDataItem(["xAOD::EventFormat#EventFormat"]) + + theApp.EvtMax=5 + +which will skim 5 events. I've found that sometimes it will not work because of the wrong geometry information specified, eg:: + + GeoModelSvc ERROR *** *** Geometry configured through jobOptions does not match TagInfo tags! *** *** + GeoModelSvc INFO ** Job Option configuration: + GeoModelSvc INFO * ATLAS tag: ATLAS-R2-2015-01-01-00 + ... + GeoModelSvc INFO ** TAG INFO configuration: + GeoModelSvc INFO * ATLAS tag: ATLAS-R2-2015-03-01-00 + +and I just have to change the line in the above python file:: + + DetDescrVersion = 'ATLAS-R2-2015-03-01-00' + +to match the correct geometry. Ask `Giordon Stark `__ for more information if you're stuck. + +Files with trigger data +~~~~~~~~~~~~~~~~~~~~~~~ + +On tier3, we have MC:: + + /atlas/uct3/data/users/fizisist/xAOD/mc15_13TeV.361023.Pythia8EvtGen_A14NNPDF23LO_jetjet_JZ3W.merge.AOD.e3668_s2576_s2132_r6630_r6264/AOD.05403652._000001.pool.root.1 + +13 TeV data:: + + /atlas/uct3/data/users/fizisist/xAOD/data15_comm.00265573.physics_L1Calo.merge.AOD.x331_m1423/data15_comm.00265573.physics_L1Calo.merge.AOD.x331_m1423._lb0179-lb0183._0001.1 + +which are useful for testing using:: + + test_multiAlgo submitDir /atlas/uct3/data/users/fizisist/xAOD + + +Decorations +~~~~~~~~~~~ + +.. highlight:: c++ + +As a follow-up on the discussions in yesterday's meeting, xAOD decorations can be assigned and read more efficiently defining an decorators/accessors, since auxdata requires a string-comparison search for the correct branch on every call, whereas the static accessor finds this once and then no longer has the overhead. + +You can define a decorator ``static SG::AuxElement::Decorator dec_baseline("baseline");`` which then can be used like ``dec_baseline(input) = isbaseline;`` and then in your code you can replace:: + + input.auxdecor("baseline"); + +by:: + + dec_baseline(input); + +These are the relevant lines of code inside SUSYObjDef \_xAOD: + +- https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/SUSYPhys/SUSYTools/tags/SUSYTools-00-05-00-14/Root/SUSYObjDef\_xAOD.cxx#L17 +- https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/SUSYPhys/SUSYTools/tags/SUSYTools-00-05-00-14/Root/SUSYObjDef\_xAOD.cxx#L595 + +In SUSYToolsTester there is also an example of an AuxElement::Accessor like this:: + + static SG::AuxElement::Accessor acc_truthType("truthType"); + if (acc_truthType.isAvailable(*trackParticle) ) muonTruthType = acc_truthType(*trackParticle); + +in: + +- https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/SUSYPhys/SUSYTools/tags/SUSYTools-00-05-00-14/util/SUSYToolsTester.cxx#L428 + +Note that the difference between accessors and decorators is that accessors are for auxdata branches in general but will not let you modify a const object, whereas Decorators permit adding information to const collections. + +TString versus std::string +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +I've noticed that TString slows us down a little bit, so try to use std::string where possible. Code changes and equivalencies look like:: + + m_inContainerName.IsNull() + m_inContainerName.empty() + + m_event->retrieve(jets, m_inContainerName.Data()); + m_event->retrieve(jets, m_inContainerName); + + ANA_MSG_INFO(m_inContainerName.Data()); + ANA_MSG_INFO(m_inContainerName); + + +Creating a new xAH::Algorithm +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are planning to write an :cpp:class:`xAH::Algorithm`, there are two requirements you must abide by to fit within the |xAH| ecosystem. + +#. Only allow empty constructors, no parameters or arguments passed in. +#. Constructors must initialize an :cpp:class:`xAH::Algorithm` instance passing in the name of itself:: + + ExampleClass :: ExampleClass() : Algorithm("ExampleClass") {} + +The first requirement is necessary to make sure streamable code (such as EventLoop) can handle and set up your algorithms correctly when submitting jobs. The second requirement is currently necessary for |xAH| to keep track of the number of instances of a given class that has been created. This is a registry book-keeping operation that allows users to write smarter algorithms, the kind that know how many instances of itself have been created! + +Adding and Initializing Tools +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is albeit a litle bit trickier for anyone new to how Athena tools work. First, I'll provide header and source code blocks showing an example for a tool, and then I will explain the concepts. + +**Header File**:: + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "JetCalibTools/IJetCalibrationTool.h" + + class JetCalibrator : public xAH::Algorithm { + + public: + //... + + private: + // tools + asg::AnaToolHandle m_JetCalibrationTool_handle{"JetCalibrationTool", this};//! + + } + +**Source File**:: + + // tools + #include "JetCalibTools/JetCalibrationTool.h" + + //... + + EL::StatusCode JetCalibrator :: initialize () { + //... + + // initialize jet calibration tool + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("JetCollection",m_jetAlgo)); + //... other setProperty() calls and other logic can be in here for tool configuration + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_JetCalibrationTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_JetCalibrationTool_handle); + } + + EL::StatusCode JetCalibrator :: execute () { + //... + m_JetCalibrationTool_handle->apply(*jet); + //... + } + + //... + +**Header Discussion** + +First, let's talk about the header file. You need to include the header file for the tool handles ``AsgTools/AnaToolHandle.h``. As this is a templated method, you really don't to try and forward-declare this or you're gonna have a bad time. Next, you'll want to include the header file for the tool's interface class, e.g. ``JetCalibTools/IJetCalibrationTool.h``. + +.. note:: + To find the correct header file for a tool's interface, look in the header file for the tool itself, e.g. ``JetCalibTools/JetCalibrationTool.h``, and cross-check by looking at the classes the tool inherits from. For example, ``JetTileCorrectionTool`` has the ``IJetTileCorrectionTool`` interface class because in its header file:: + + class JetTileCorrectionTool : public virtual IJetTileCorrectionTool, + public asg::AsgMetadataTool + + +You might wonder why we don't just include the tool's header file in our header file. One choice is that the interface header file is smaller and easier to compile quickly. This is roughly equivalent to forward-declaring our tool, where we only include the header file for our tool in the source and put a ``class ClassName;`` in the header. + +Lastly for the header, we make the tool handle a private member of our class. Make sure that this gets constructed with a type only by specifying the tool itself, e.g. ``JetCalibrationTool``. By adding the ``this`` parameter, we make sure that the tool handle is indeed made as a private tool for the given algorithm. + +.. note:: We will prefer the suffix ``_handle`` to refer to the fact that the variable is a tool handle in |xAH|. + +**Source Discussion** + +Next, looking at the source code... we include the header file for our tool. Although this may not always be needed, it is good practice to help others figure out where the tool is. As of writing this documentation, the interface and the tool may be defined in different packages! Moving on, we will want to put tool initializations in ``initialize()`` as this will only get called on files that have events. Files without events will not create a tool, conserving memory and processing power. + +If you need to use/retrieve a tool created in another class, you will need to have the same name in both places for the ToolHandle to find it, and you need to make sure the tool isn't made private (do't use ``this`` for the second parameter for initializatiton). + +If you don't set a name for the tool, only a type, the default name is the type. For example:: + + asg::AnaToolHandle test_handle{"JetCalibrationTool", this}; + ANA_MSG_INFO(test_handle.name()); // will output "JetCalibrationTool" + +.. note:: + + In ASG Software, tools created through AnaToolHandle can be found in the ToolStore via preprending ``ToolSvc.`` to the name of the tool:: + + asg::ToolStore::contains("ToolSvc."+ m_trigDecTool_handle.name()) + + This is a slight gotcha that will trip up people. Because of this, |xAH| prefers the convention of using :code:`isUserConfigured()` instead as this doesn't need the additional ``ToolSvc.`` prepended to the tool name to look it up! + +If it has :code:`isUserConfigured()==0` (e.g. "not configured before": a tool with that type and name has not been created), then let's go ahead and configure it with ``setProperty()``! One thing you should **always** do is set the output level of the tool ``OutputLevel``. It is usually best to set it to the same output level that the algorithm is configured to ``msg().level()`` and is probably the safest prescription. + +.. note:: + For setting properties or managing tools through the tool handle, you access functions through the dot (``.``) operator. For using the tool, you access functions through the arrow (``->``) operator. + +If a tool handle has been configured previously, but not initialized (such as using a tool handle of the same type and name as a previously created tool handle), then all :code:`setProperty()` calls will be further ignored. I can demonstrate this with a neat code example:: + + // set up the players + asg::AnaToolHandle alice{"JetCalibrationTool/MyName"}; + asg::AnaToolHandle bob {"JetCalibrationTool/MyName"}; + + // set configurations on the first handle + ANA_CHECK(alice.setProperty("p1", v1)); // will set the underlying tool MyName->p1 = v1 + ANA_CHECK(alice.setProperty("p2", v2)); // will set the underlying tool MyName->p2 = v2 + ANA_CHECK(alice.retrieve()); // creates the tool MyName + + ANA_CHECK(bob.setProperty("p1", v9)); // will be ignored as bob.isUserConfigured() == 1 [alice owns the tool] + ANA_CHECK(bob.setProperty("p3", v3)); // will be ignored as bob.isUserConfigured() == 1 [alice owns the tool] + ANA_CHECK(bob.retrieve()); // retrieves the existing tool MyName + +AnaToolHandle will also not let us change the configuration of a previously initialized tool (one which :code:`handle.retrieve()` has been called on). In this case, the tool has been :code:`initialized`. Continuing the code example from before, if you were annoyed that the :code:`setProperty()` calls were ignored, you might try setting it again on ``alice``:: + + ANA_CHECK(alice.setProperty("p3", v3)); // will crash as alice.isInitialized() == 1 [alice already created its tool] + +Finally, we :code:`retrieve()` (:code:`initialize()`) the tool of the given type and name from the tool store. :code:`retreive()` and :code:`initialize()` are synonyms and will almost always create a new tool. The only two exceptions are if the user configured the tool (:code:`isUserConfigured()==1`) or if another ToolHandle created the tool as a public tool and holds on to it. But that's it, the memory will be managed for you and you do not need to delete it or do anything else but use it in your code! + +.. note:: + Did you get a bus error, segfault, or abort in the code because of the tools? If so, it is most likely due to a typo in the tool's header file. Please identify which tool causes the error and file an issue so we can inform the tool developers that their tool needs to be fixed. In the meantime, this can be fixed using a macro:: + + ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JVT_tool_handle, CP::JetJvtEfficiency)); + + An example of a reported issue for the above tool is here: https://its.cern.ch/jira/browse/ATLASG-1214. + +Check if a tool exists and reuse it (Trig::TrigDecisionTool) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The TrigDecisionTool is a special case that needs attention. This tool is unique in that the templaed methods require us to use the tool as its own interface. It is also a singleton which means it will complain heavily if it detects more than one instance of itself. How do we deal with this in |xAH|? + +**Header File**:: + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + + class MyAlgorithm : public xAH::Algorithm { + + public: + /** @brief trigDecTool name for configurability if name is not default. If empty, use the default name. If not empty, change the name. */ + std::string m_trigDecTool_name{""}; + + private: + /** @brief Trigger decision tool. + + If you need to use a TDT that was previously created before this algorithm with a different name, set the name in m_trigDecTool_name. + */ + asg::AnaToolHandle m_trigDecTool_handle{"Trig::TrigDecisionTool"}; //! + }; + + +**Source File**:: + + EL::StatusCode MyAlgorithm :: initialize(){ + + // Grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Double-check the name of the tool." ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + } + +The above is an example of how one designs an algorithm that requires the TrigDecisionTool and will crash if it cannot find it. It also prints the name of the tool it is using to make it much easier for a user to debug. By convention in |xAH|, :cpp:member:`BasicEventSelection::m_trigDecTool_name` will default to :code:`"xAH::TrigDecTool"`. All algorithms follow this default if they need the trigger decision tool. If there is an external algorithm that creates it and you want |xAH| to pick it up instead of creating one, this can be done by setting :code:`m_trigDecTool_name` to a non-empty value and you're good to go. For example, :cpp:class:`BasicEventSelection` will create a trigger decision tool if it does not exist:: + + ANA_CHECK( m_trigDecTool_handle.setProperty( "ConfigTool", m_trigConfTool_handle )); + ANA_CHECK( m_trigDecTool_handle.setProperty( "TrigDecisionKey", "xTrigDecision" )); + ANA_CHECK( m_trigDecTool_handle.setProperty( "OutputLevel", msg().level() )); + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + +so that if such a tool already was created before ``BasicEventSelection`` tries to create it, it will retrieve it (and the :code:`setProperty()` calls will be ignored). If it has not been created/configured before, it will configure and then create the tool. No extra logic needed on the users' part. diff --git a/_sources/ElectronCalibrator.rst.txt b/_sources/ElectronCalibrator.rst.txt new file mode 100644 index 0000000000..716b23ae26 --- /dev/null +++ b/_sources/ElectronCalibrator.rst.txt @@ -0,0 +1,8 @@ +:math:`e` +========= + +.. doxygenclass:: ElectronCalibrator + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/ElectronEfficiencyCorrector.rst.txt b/_sources/ElectronEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..025cd4d87a --- /dev/null +++ b/_sources/ElectronEfficiencyCorrector.rst.txt @@ -0,0 +1,8 @@ +:math:`e` +========= + +.. doxygenclass:: ElectronEfficiencyCorrector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/ElectronSelector.rst.txt b/_sources/ElectronSelector.rst.txt new file mode 100644 index 0000000000..d478cd626d --- /dev/null +++ b/_sources/ElectronSelector.rst.txt @@ -0,0 +1,8 @@ +:math:`e` +========= + +.. doxygenclass:: ElectronSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/FAQs.rst.txt b/_sources/FAQs.rst.txt new file mode 100644 index 0000000000..b2da87a6ef --- /dev/null +++ b/_sources/FAQs.rst.txt @@ -0,0 +1,97 @@ +.. _faq: + +xAH FAQ +======= + +This is a list of Frequently Asked Questions about |xAH| and analysis software. Feel free to suggest new entries! + +How do I... +----------- + +... submit a grid (prun) job? + Start with a minimal environment:: + + lsetup panda + + and a minimal configuration script:: + + from xAH_config import xAH_config + c = xAH_config() + c.algorithm("BasicEventSelection", {"m_name": "test", "m_useMetaData": False}) + + Then we can submit a job:: + + xAH_run.py --inputRucio --files "user.lgagnon.370150.Gtt.DAOD_SUSY10.e4049_s2608_r6765_r6282_p2411_tag_10_v1_output_xAOD.root" \ + --config=test.py prun --optGridMergeOutput=1 \ + --optGridNFilesPerJob=1.0 --optGridOutputSampleName=user.gstark.test + +... submit ``xAH_run`` jobs with production privileges? + You can use ``--optSubmitFlags="--official"`` or ``--optOfficial=1`` (?):: + + xAH_run.py --files MultijetAlgo/scripts/grid_samples_EXOT1_data.txt --inputList \ + --config MultijetAlgo/scripts/config_MultijetAlgo.py -f --inputDQ2 prun \ + --optGridOutputSampleName="group.phys-exotics.%in:name[1]%.%in:name[2]%.%in:name[3]%.v0.1_20150921/" \ + --optSubmitFlags="--official" + +... use ``AnaToolHandle`` for ASG CP tools? + Unfortunately there's no much documentation out there, so everything written here comes from direct email question to ASG fellows, or looking at the `source code `_ + + 1. Make the tool handle as a member of a xAH algorithm (NB: remember to set the **interface** class of the CP tool. Just prepend an \`I\` to the tool type):: + + class MyAlgo : public xAH::Algorithm + { + ... + private: + ... + asg::AnaToolHandle m_mytool_handle; //! + + } + + 2. In the xAH algorithm initialisation list, call the tool handle constructor. The argument of the constructor must be a string with the tool type and tool name separated by a slash \`/\` . In general, the tool name in the constructor can be just a dummy string, as it can be changed afterwards:: + + MyAlgo :: MyAlgo (std::string className) : + ... + m_mytool_handle("MyToolType/MyToolName"), + ... + { + ... + } + + 3. In some cases the name of the tool has to be different than the one set in the constructor. E.g., for the efficiency correctors, the tool names must depend on the configuration of the algorithm, which is set only **after** the initialisation list is executed. In such situations, the name of the tool can be modified (typically this would happen in ``EL::initialize()``) with:: + + EL::StatusCode BasicEventSelection :: initialize () + { + ... + m_mytool_handle.make("MyToolType/MyToolNewName"); + ... + } + + 4. In ``EL::initialize()``, set the properties and initialise the tool handle. After ``m_mytool_handle.initialize()`` has been called, it will effectively behave like a pointer to the tool itself:: + + EL::StatusCode BasicEventSelection :: initialize () + { + ... + m_mytool_handle.make("MyToolType/MyToolNewName"); + m_mytool_handle.SetProperty(...); + m_mytool_handle.initialize(); + ... + } + + 5. In the algorithm, use the tool associated to the handle via calls like ``m_mytool_handle->doStuff()``. + + 6. The tool associated to the handle will be automatically destroyed when appropriate. Hence, no need to call ``delete`` anywhere. + + If the same tool (identified by its name) needs to be used in another xAH algorithm downstream, just declare a tool handle member with the same ``IMyToolType``, call its constructor in the initialisation list and (if needed) change its tool name with ``make()``. Then in ``EL::initialize()`` simply call ``m_mytool_handle.initialize()``, without setting any property. It will automagically get the pointer to the correct tool from a registry, and all the tool properties will be preserved from the previous initialisation. + +SLC6 vs SLC7 +----------- + +If you're running into issues with grid submission because of checks for SLC7-compatible machines in `xAH_run.py` preventing you from doing so, then you can either: + +- ssh into lxplus SLC7 (``lxplus.cern.ch``) +- run in a containerized SLC7 environment (``setupATLAS -c slc6``) + +If you think this message is happening in error, `file an issue `_ giving us the output from the following commands: + +- ``lsb_release -d`` +- ``printenv | grep _PLATFORM`` diff --git a/_sources/Getters.rst.txt b/_sources/Getters.rst.txt new file mode 100644 index 0000000000..86c39cf5dc --- /dev/null +++ b/_sources/Getters.rst.txt @@ -0,0 +1,8 @@ +Getting Objects +=============== + +.. toctree:: + :maxdepth: 2 + + HLTJetGetter + diff --git a/_sources/HLTJetGetter.rst.txt b/_sources/HLTJetGetter.rst.txt new file mode 100644 index 0000000000..ac6f03a265 --- /dev/null +++ b/_sources/HLTJetGetter.rst.txt @@ -0,0 +1,9 @@ +HLT Jet Getter +============== + +.. doxygenclass:: HLTJetGetter + :members: + :undoc-members: + :protected-members: + :private-members: + diff --git a/_sources/HelpTreeBase.rst.txt b/_sources/HelpTreeBase.rst.txt new file mode 100644 index 0000000000..d9adec9d09 --- /dev/null +++ b/_sources/HelpTreeBase.rst.txt @@ -0,0 +1,8 @@ +Tree Maker Base Class +===================== + +.. doxygenclass:: HelpTreeBase + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/HelperClasses.rst.txt b/_sources/HelperClasses.rst.txt new file mode 100644 index 0000000000..3771b17aba --- /dev/null +++ b/_sources/HelperClasses.rst.txt @@ -0,0 +1,7 @@ +Helper Classes +============== + +.. doxygennamespace:: HelperClasses + :members: + :protected-members: + :private-members: diff --git a/_sources/HelperFunctions.rst.txt b/_sources/HelperFunctions.rst.txt new file mode 100644 index 0000000000..037f1ef242 --- /dev/null +++ b/_sources/HelperFunctions.rst.txt @@ -0,0 +1,8 @@ +Helper Functions +================ + +.. doxygennamespace:: HelperFunctions + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Histograms.rst.txt b/_sources/Histograms.rst.txt new file mode 100644 index 0000000000..ee990b8003 --- /dev/null +++ b/_sources/Histograms.rst.txt @@ -0,0 +1,62 @@ +Histograms +========== + +There are three generic levels to include when building up an analysis +that involves plotting: \* HistogramManager \* JetHists, ElectronHists, +MuonHists, etc... \* JetHistsAlgo, ElectronHistsAlgo, MuonHistsAlgo, +etc... + +In order: *HistogramManager* should rarely be changed. This manages the +histograms for you in *EventLoop* algorithms by initializing histograms +and adding it to the worker. *JetHists*, etc are plotting classes to +pre-define the set of plots you want to use for a given set of objects +-- as well as how to plot them. Finally, *JetHistsAlgo*, etc... are +*EventLoop* algorithms that you would include in your jobs and run to +actually apply those plots. + + +HistogramManager +---------------- + +This is the base class from which all histogram management classes are made for Muons, Jets, Electrons, etcetera. It is meant to be flexible enough for someone to use it to create their own set of histograms to produce for an algorithm from scratch using the class. + +In particular, the ``book()`` functions are overloaded for good reason - they all do the same thing except the number of arguments supplied tells us what kind of histogram you want to make: 1D, 2D, or 3D. All histograms take in a ``name`` and a ``title`` which get concatenated to provide the ``stored name`` of the histogram ``(name+title)``. If you wish to use TDirectoryFiles automagically, append a forward-slash to the end of the ``name``, such as ``"AntiKt10/"``. The ``book()`` function will create the histogram, set up the title, the labels, append it to ``m_allHists``, and returns a pointer to the newly created histogram. The last argument is ``sumw2`` which tells the function whether to enable ``sumw2()`` for the histogram or not, this defaults to ``true``. The order of the arguments are listed in the table. + +.. doxygenclass:: HistogramManager + :members: + :undoc-members: + :protected-members: + :private-members: + +Classes +------- + +This is a class that predefines all the histograms, defines the *execute* function which fills in the histograms for you, given an object or a collection of objects, and handles a lot of other logic. This class extends *HistogramManager*. + +.. toctree:: + :maxdepth: 2 + + ClusterHists + JetHists + MetHists + MuonHists + TrackHists + VtxHists + +Algorithms +---------- + +This is an EL Algorithm that incorporates the correspondingly-named class. + + +.. toctree:: + :maxdepth: 2 + + ClusterHistsAlgo + JetHistsAlgo + MetHistsAlgo + MuonHistsAlgo + TrackHistsAlgo + + + diff --git a/_sources/HowToDocumentation.rst.txt b/_sources/HowToDocumentation.rst.txt new file mode 100644 index 0000000000..969979de10 --- /dev/null +++ b/_sources/HowToDocumentation.rst.txt @@ -0,0 +1,184 @@ +How to Document Code +==================== + +The documentation for |xAH| uses a slightly non-trivial workflow: + +#. Doxygen_ parses the header and source files to generate an XML tree of the code +#. breathe_ is a sphinx_ wrapper that enables us to parse the XML tree from doxygen +#. sphinx_ is what produces the various output formats such as html, latex, e-pub from source code comments +#. ReadTheDocs.org_ uses ``doxygen``, ``breathe``, and ``sphinx`` to automatically produce our documentation everytime ``main`` changes. + +Our documentation is automatically generated for us so we will always guarantee that our documentation is up-to-date for all users. + +The aim of this document is to help you get started with producing your own documentation locally to help resolve errors, typos, and make sure you're formatting it the way that you want before pushing it to our github repo. + +Setting it up Locally +--------------------- + +Locally, we are going to need doxygen_ to do the initial parsing. Note that out of the box without doxygen, we can parse python scripts, such as xAH_run.py :ref:`xAHRunAPI`, which are included as part of |xAH|. However, if we wish to have all of our C++ code's documentation included, we will need doxygen_ to do parse it. + +Doxygen +~~~~~~~ + +Get doxygen_ however you want. For Macs, we can use:: + + brew install doxygen + +to install it. At this point, one should be able to generate the XML tree by navigating to the ``docs`` folder and running ``doxygen`` with no arguments:: + + cd docs + doxygen + +since we provide a ``Doxyfile`` in the ``docs`` directory with the correct configurations. + +Python Virtual Environment +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Next, I suggest setting up a python virtual environment. Luckily, this solution is the hardest part. Most (rational) people use virtualenvwrapper_ to manage my python dependencies and workspace. It is assumed you already have pip_. + +To get the entire functionality of ``venvwrapper``, we just need to grab the package and update our environment when we want to use it:: + + pip install virtualenvwrapper + echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bash_profile + +.. note:: + + Don't forget to source your profile if you're going to use the same shell:: + + source ~/.bash_profile + +From now on, we will have commands like ``mkvirtualenv``, ``workon``, and ``rmvirtualenv`` in our shell. As a first-time user, you haven't made a virtual environment yet, so the first thing we do is make one:: + + mkvirtualenv xAH + +This will also automatically call ``workon xAH``. This is something we will always run in the future to enter the virtual environment. + +.. note:: + + If you ever forget the name of the virtual environment you made, just run ``workon`` without any arguments. There is also tab completion. + +Python Packages +~~~~~~~~~~~~~~~ + +.. note:: + + If you choose to use a virtual environment, enter it ``workon xAH`` + +This is super easy. We provide a ``requirements.txt`` file:: + + cd docs + pip install -r requirements.txt + +which will install all the required packages for you. As of the time of this document, this contains the following packages: + +.. include:: requirements.txt + :literal: + +Generate Docs Locally +--------------------- + +Now that we have ``doxygen`` and all of the required python packages installed, all you need to do now is process everything:: + + cd docs + make clean + doxygen + make html + open _build/html/index.html + +and we're good to go. Sphinx provides a ``Makefile`` in ``docs/`` to make the html generation much easier to work with. + +You may not always run all of these pieces each time you generate documentation. For example, if you need to make a change to the header/source files of any kind, you will need to re-run ``doxygen``. In the rare case that the html generation isn't working right, you might want to run ``make clean`` so you start over again. If you're only changing the reStructuredText (rst) files in ``docs/`` you might only ever need to run ``make html``. All in all, it doesn't take more than 10-15 seconds to generate the necessary documentation. + +Documenting Code +---------------- + +In most cases, we will want to follow the reStructuredText directives and formatting for doing the code documentation. We just want to use ``doxygen`` + ``breathe`` to expose those comments to ``sphinx`` to parse and display correctly. In what follows, we provide a set of guidelines (really, examples) to make it easier to document our code specifically. + +.. note:: All comments for a given class, function, variable should be prior to the given item you're adding documentation for. + +If you have a question about how to do something, google it in the context of reStructuredText or ask on the mailing list. Also have a look through most of our source code and compare it to the docs to figure out how we do something. + +One-Line Comments +~~~~~~~~~~~~~~~~~ + +One-line comments are very useful in cases where we do not have much to say about something, perhaps because it is a rather trivial item:: + + /** @brief generically the main name assigned to all histograms */ + std::string m_name; + +which will render as + +.. doxygenvariable:: HistogramManager::m_name + :no-link: + +Block Comments +~~~~~~~~~~~~~~ + +Block comments are very useful in all other cases. When in doubt, you can always make a block comment with just a single line, even for a variable. The flexibility allows us to include a lot more detail and formatting such as tables and latex:: + + /** + @brief Destructor, allows the user to delete histograms that are not being recorded. + */ + virtual ~HistogramManager(); + +which will render as + +.. doxygenfunction:: HistogramManager::~HistogramManager + :no-link: + +Doxygen ``rst`` directive +~~~~~~~~~~~~~~~~~~~~~~~~~ + +To tell ``doxygen`` and ``breathe`` that a given block of text should be considered as reStructuredText, we simply need to wrap it: + +.. code-block:: none + + @rst + This is now inside a doxygen directive that tells doxygen not to parse it, so that breathe can parse it for Sphinx. + + @endrst + +which will render as expected if we were writing it inside a standard ``.rst`` file. As usual, we have an example:: + + /** + @brief This is used by any class extending to pre-define a set of histograms to book by default. + @rst + .. note:: The expectation is that the user does not directly use this class but rather inherits from it. + + We expect the user to create a new group of histograms, such as for jets:: + + class JetHists : public HistogramManager + { + public: + JetHists(std::string name, std::string detailStr); + virtual ~JetHists() ; + + StatusCode initialize(); + StatusCode execute( const xAOD::JetContainer* jets, float eventWeight, int pvLoc = -1); + StatusCode execute( const xAOD::Jet* jet, float eventWeight, int pvLoc = -1 ); + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using HistogramManager::execute; // overload + }; + + The above example is taken from our implementation in :cpp:class:`JetHists`. + + @endrst + */ + class HistogramManager {}; + +which will render as + +.. doxygenclass:: HistogramManager + :no-link: + +For everything else... +---------------------- + +These cover the general basics of how to document code for |xAH|. Everything else is specific to how doxygen and Sphinx and breathe work. Most of these are well-supported with a large community, so googling is always very helpful here. Otherwise, feel free to ask on the mailing list. + +.. _Doxygen: http://www.doxygen.org/ +.. _breathe: http://breathe.readthedocs.org/en/latest/ +.. _sphinx: http://sphinx-doc.org/ +.. _ReadTheDocs.org: https://readthedocs.org/ +.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.org/en/latest/ +.. _pip: https://pip.readthedocs.org/en/stable/ diff --git a/_sources/Installing.rst.txt b/_sources/Installing.rst.txt new file mode 100644 index 0000000000..5fef7fb1f7 --- /dev/null +++ b/_sources/Installing.rst.txt @@ -0,0 +1,123 @@ +Installing +========== + +Getting the Source +------------------ + +Start in a work directory + +.. code-block:: bash + + mkdir workdir && cd $_ + +Then clone the source + +.. code-block:: bash + + git clone https://github.com/UCATLAS/xAODAnaHelpers + +.. note:: + + `If you have ssh-keys set up `_, then you can clone over SSH instead of HTTPS: + + .. code-block:: bash + + git clone git@github.com:UCATLAS/xAODAnaHelpers + +At this point, you have the FULL state of the code. You can run ``git log`` to view the recent changes (no more ChangeLog!). + +Checking out a specific tag +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can run ``git tag`` to view all current tags. You can checkout a specific tag (in a detached head state): + +.. code-block:: bash + + cd xAODAnaHelpers + git checkout tags/XX-YY-ZZ + cd ../ + +or you can use: + +.. code-block:: bash + + cd xAODAnaHelpers + git checkout -b XX-YY-ZZ tags/XX-YY-ZZ + cd ../ + +which switches you from main to a branch of the given version. + + +Compiling +--------- + +For all sets of instructions below, make sure you run ``setupATLAS`` first. + +CMake-based (21.2.X) +~~~~~~~~~~~~~~~~~~~~ + +This step requires a little extra work, but compiles significantly faster. First, inside the ``workdir`` directory, we'll create a build and source directory. The source directory will contain all packages we build in CMake: + +.. parsed-literal:: + + mkdir src build + +Then we'll set up a release inside the source: + +.. parsed-literal:: + + cd src + asetup (RELEASE),here + +This also sets up a ``CMakeLists.txt`` file in this top-level directory that searches for all packages you've checked out inside it. At this point, clone/checkout all packages you need such as |xAH|: + +.. parsed-literal:: + + git clone /UCATLAS/xAODAnaHelpers.git + +Next, you will need to change to your build directory that builds all your checked-out packages which is separate from your source code: + +.. parsed-literal:: + + cd ../build + +.. note:: This is inside the ``workdir``, so you will have ``workdir/src/xAODAnaHelpers`` and ``workdir/build`` as paths, for example. + +and then run cmake to generate our makefiles, then compile: + +.. code-block:: bash + + cmake ../src + make + cd ../ + +The last thing you need to do is get your environment set up correctly, so you will need to source ``setup.sh`` (from the top-level directory): + +.. code-block:: bash + + source build/*/setup.sh + +Environment variables like ``${AnalysisBase_PLATFORM}`` (or ``${AnalysisTop_PLATFORM}``) seem to contain the correct variable which represents the architecture of the system, e.g. ``x86_64-slc6-gcc49-opt``. + +Docker +------ + +Assuming you have `docker `_, you can always grab the latest image for a given release (e.g. 21.2.4) like so: + +.. code-block:: bash + + docker pull ucatlas/xah:21.2.4-latest + docker run -it --rm ucatlas/xah:21.2.4-latest bash + +which puts you into the docker image and xAH is precompiled and the environment is set up so you can: + +* compile your package on top of xAH [using cmake, make] +* run vanilla ```xAH_run.py``` with a config on some ROOT files + +For example, if you want to have the docker image have access to ROOT files locally on your computer, you can "mount" a folder in it like so: + +.. code-block:: bash + + docker run -it --rm -v /path/to/data/files:/home/atlas/data ucatlas/xah:21.2.4-latest bash + +and /home/atlas/data inside the docker file will map to /path/to/data/files on your computer (host). diff --git a/_sources/Intro.rst.txt b/_sources/Intro.rst.txt new file mode 100644 index 0000000000..7a29577f4f --- /dev/null +++ b/_sources/Intro.rst.txt @@ -0,0 +1,66 @@ +Introduction +============ + +This package is meant to be the minimal needed to use the CP tools +properly to calibrate, select, and correct the physics objects used for +most physics analyses. Each step of the analysis chain is done by an +EL::Algorithm which utilizes TStore to pass information to the Algos +down the chain. The final product can be a TTree, histograms, or a mini +xAOD (coming soon!). The philosophy adopted is not to remake the EDM or +to alter it but to make minimal wrapper around CP tools to help users +configure them properly and connect the full chain without much hassle. +To this end, some details are hidden for the user and set automatically +in the tools. As much as possible we used the same names as is shipped +with the xAOD objects or the CP tools themselves. The user is not meant +to learn a new EDM but rather to learn the minimal needed to start doing +the fun stuff - Physics!! + +Background +---------- + +An analysis is done in steps with a ``EL::Algorithm`` running for each. +For example, one algo is used to calibrate the jet collection, another +to apply some selection cuts, and then a third algorithm can contain +your analysis code to calculate something with the jets or one of the +general plotting algorithms that will fill a configurable set of plots. +A second jet calibrator and selector can be added to have a second jet +collection at the same time. A base class for a tree has also been +created with some standard branches and a way for the user to add more +as well. The tree is configurable with the same options as the +histograming classes - with a string of categories of interest. Each +algorithm can be configured via a text file read by TEnv. Example for +all are given and one can look for the "configure" function to see what +options are available (also noted below). Development changes and help +requests can be obtained on the e-group "atlas-sw-xAODAnaHelpersFW" or +directly here on GitHub. + +A word on **systematics**. When the object itself is altered (i.e. JES +calibration and JES systematics) a new collection is made and put into +TStore. The name of the nominal collection after calibration is set from +the config file. The name of the systematically varied collection uses +the same name plus the name of the systematic directly from the CP tool. +The next algo in the chain using these objects needs to know which +collections where created. To avoid hardcoding things and all that, when +the systematics are applied a vector is created containing the names of +each systematic. Downstream, algos pick up this vector then know which +collections to run over. Each Algo will loop over all collections before +going to the next step. If selectors are configured with limits in the +number of events passing the cuts, only collections passing the cuts +will be passed to algos downstream. If none pass, the next event is +analyzed. + +Related Packages +---------------- + +Here we list some useful packages that don't depend on xAH, but can be used along with it. + +xAODDumper +~~~~~~~~~~ + +This python package (developed by `Giordon Stark, UChicago `_) contains a useful python script to dump the full content of a generic xAOD file (full breakdown of available containers and attributes, basic plots, size and memory usage). See the dedicated `webpage `_ for more info. + +goodruns +~~~~~~~~ + +This python package (made by Noel Dawe, Univeristy of Melbourne) provides a useful set of tools to handle GoodRunLists, e.g., merging N GRLs into a single one etc. All the details and instructions are well documented `here `_. + diff --git a/_sources/Issues.rst.txt b/_sources/Issues.rst.txt new file mode 100644 index 0000000000..db37890ece --- /dev/null +++ b/_sources/Issues.rst.txt @@ -0,0 +1,12 @@ +Common Issues +============= + +Missing Metadata Information +---------------------------- + +It has been noticed that some of the latest derived xAODs have missing metadata info due to some bug in Derivation Framework. If you are incurring in a nasty crash at runtime, make sure you have set the name of the derivation property DerivationName property of BasicEventSelection. If that does not work then switched off the configuration flag:: + + UseMetadata False + +and try again. + diff --git a/_sources/JetCalibrator.rst.txt b/_sources/JetCalibrator.rst.txt new file mode 100644 index 0000000000..7aa1c2e451 --- /dev/null +++ b/_sources/JetCalibrator.rst.txt @@ -0,0 +1,8 @@ +:math:`j` +========= + +.. doxygenclass:: JetCalibrator + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/JetHists.rst.txt b/_sources/JetHists.rst.txt new file mode 100644 index 0000000000..3fe80f1102 --- /dev/null +++ b/_sources/JetHists.rst.txt @@ -0,0 +1,8 @@ +JetHists +======== + +.. doxygenclass:: JetHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/JetHistsAlgo.rst.txt b/_sources/JetHistsAlgo.rst.txt new file mode 100644 index 0000000000..f8739c9b38 --- /dev/null +++ b/_sources/JetHistsAlgo.rst.txt @@ -0,0 +1,8 @@ +JetHistsAlgo +============ + +.. doxygenclass:: JetHistsAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/JetSelector.rst.txt b/_sources/JetSelector.rst.txt new file mode 100644 index 0000000000..01695babc4 --- /dev/null +++ b/_sources/JetSelector.rst.txt @@ -0,0 +1,8 @@ +:math:`j` +========= + +.. doxygenclass:: JetSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/METConstructor.rst.txt b/_sources/METConstructor.rst.txt new file mode 100644 index 0000000000..e0915f477b --- /dev/null +++ b/_sources/METConstructor.rst.txt @@ -0,0 +1,8 @@ +MET Constructor +=============== + +.. doxygenclass:: METConstructor + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MessagePrinterAlgo.rst.txt b/_sources/MessagePrinterAlgo.rst.txt new file mode 100644 index 0000000000..05545810ba --- /dev/null +++ b/_sources/MessagePrinterAlgo.rst.txt @@ -0,0 +1,5 @@ +MessagePrinterAlgo +================== + +.. doxygenclass:: MessagePrinterAlgo + :members: diff --git a/_sources/MetHists.rst.txt b/_sources/MetHists.rst.txt new file mode 100644 index 0000000000..d528283634 --- /dev/null +++ b/_sources/MetHists.rst.txt @@ -0,0 +1,8 @@ +MetHists +======== + +.. doxygenclass:: MetHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MetHistsAlgo.rst.txt b/_sources/MetHistsAlgo.rst.txt new file mode 100644 index 0000000000..8d76c0e3b5 --- /dev/null +++ b/_sources/MetHistsAlgo.rst.txt @@ -0,0 +1,8 @@ +MetHistsAlgo +============ + +.. doxygenclass:: MetHistsAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MinixAOD.rst.txt b/_sources/MinixAOD.rst.txt new file mode 100644 index 0000000000..9d17397a4e --- /dev/null +++ b/_sources/MinixAOD.rst.txt @@ -0,0 +1,8 @@ +Mini-xAOD +========= + +.. doxygenclass:: MinixAOD + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonCalibrator.rst.txt b/_sources/MuonCalibrator.rst.txt new file mode 100644 index 0000000000..c89c03068d --- /dev/null +++ b/_sources/MuonCalibrator.rst.txt @@ -0,0 +1,8 @@ +:math:`\mu` +=========== + +.. doxygenclass:: MuonCalibrator + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonEfficiencyCorrector.rst.txt b/_sources/MuonEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..8e4b910ac8 --- /dev/null +++ b/_sources/MuonEfficiencyCorrector.rst.txt @@ -0,0 +1,8 @@ +:math:`\mu` +=========== + +.. doxygenclass:: MuonEfficiencyCorrector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonHists.rst.txt b/_sources/MuonHists.rst.txt new file mode 100644 index 0000000000..92f7212477 --- /dev/null +++ b/_sources/MuonHists.rst.txt @@ -0,0 +1,8 @@ +MuonHists +========= + +.. doxygenclass:: MuonHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonHistsAlgo.rst.txt b/_sources/MuonHistsAlgo.rst.txt new file mode 100644 index 0000000000..69e69c5041 --- /dev/null +++ b/_sources/MuonHistsAlgo.rst.txt @@ -0,0 +1,8 @@ +MuonHistsAlgo +============= + +.. doxygenclass:: MuonHistsAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonInFatJetCorrector.rst.txt b/_sources/MuonInFatJetCorrector.rst.txt new file mode 100644 index 0000000000..185e9d77fe --- /dev/null +++ b/_sources/MuonInFatJetCorrector.rst.txt @@ -0,0 +1,8 @@ +fatjet +======= + +.. doxygenclass:: MuonInFatJetCorrector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/MuonSelector.rst.txt b/_sources/MuonSelector.rst.txt new file mode 100644 index 0000000000..4502dbf9eb --- /dev/null +++ b/_sources/MuonSelector.rst.txt @@ -0,0 +1,8 @@ +:math:`\mu` +=========== + +.. doxygenclass:: MuonSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Outputs.rst.txt b/_sources/Outputs.rst.txt new file mode 100644 index 0000000000..3cfd21949d --- /dev/null +++ b/_sources/Outputs.rst.txt @@ -0,0 +1,17 @@ +Producing Outputs +================= + +TTree Outputs +------------- +.. toctree:: + :maxdepth: 2 + + HelpTreeBase + TreeAlgo + +xAOD Outputs +------------ +.. toctree:: + :maxdepth: 2 + + MinixAOD diff --git a/_sources/OverlapRemover.rst.txt b/_sources/OverlapRemover.rst.txt new file mode 100644 index 0000000000..93238feeab --- /dev/null +++ b/_sources/OverlapRemover.rst.txt @@ -0,0 +1,8 @@ +Overlap Removal +=============== + +.. doxygenclass:: OverlapRemover + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/ParticlePIDManager.rst.txt b/_sources/ParticlePIDManager.rst.txt new file mode 100644 index 0000000000..d4b1db0cad --- /dev/null +++ b/_sources/ParticlePIDManager.rst.txt @@ -0,0 +1,21 @@ +Particle PID Manager +==================== + +Electron LH PID Manager +----------------------- + +.. doxygenclass:: ElectronLHPIDManager + :members: + :undoc-members: + :protected-members: + :private-members: + +Electron Cut-Based PID Manager +------------------------------ + +.. doxygenclass:: ElectronCutBasedPIDManager + :members: + :undoc-members: + :protected-members: + :private-members: + diff --git a/_sources/PhotonCalibrator.rst.txt b/_sources/PhotonCalibrator.rst.txt new file mode 100644 index 0000000000..c7d8ef21a9 --- /dev/null +++ b/_sources/PhotonCalibrator.rst.txt @@ -0,0 +1,8 @@ +:math:`\gamma` +============== + +.. doxygenclass:: PhotonCalibrator + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/PhotonSelector.rst.txt b/_sources/PhotonSelector.rst.txt new file mode 100644 index 0000000000..f8c6df8bdb --- /dev/null +++ b/_sources/PhotonSelector.rst.txt @@ -0,0 +1,8 @@ +:math:`\gamma` +============== + +.. doxygenclass:: PhotonSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Selectors.rst.txt b/_sources/Selectors.rst.txt new file mode 100644 index 0000000000..4540691d9c --- /dev/null +++ b/_sources/Selectors.rst.txt @@ -0,0 +1,16 @@ +Selecting Objects +================= + +.. toctree:: + :maxdepth: 2 + + BasicEventSelection + OverlapRemover + ElectronSelector + JetSelector + MuonSelector + PhotonSelector + TauSelector + TrackSelector + TruthSelector + diff --git a/_sources/TauCalibrator.rst.txt b/_sources/TauCalibrator.rst.txt new file mode 100644 index 0000000000..93c983bde3 --- /dev/null +++ b/_sources/TauCalibrator.rst.txt @@ -0,0 +1,8 @@ +:math:`\tau` +============ + +.. doxygenclass:: TauCalibrator + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TauEfficiencyCorrector.rst.txt b/_sources/TauEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..d893de5502 --- /dev/null +++ b/_sources/TauEfficiencyCorrector.rst.txt @@ -0,0 +1,8 @@ +:math:`\tau` +============ + +.. doxygenclass:: TauEfficiencyCorrector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TauJetMatching.rst.txt b/_sources/TauJetMatching.rst.txt new file mode 100644 index 0000000000..be19ca107d --- /dev/null +++ b/_sources/TauJetMatching.rst.txt @@ -0,0 +1,8 @@ +:math:`\tau` +============ + +.. doxygenclass:: TauJetMatching + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TauSelector.rst.txt b/_sources/TauSelector.rst.txt new file mode 100644 index 0000000000..96a19fe292 --- /dev/null +++ b/_sources/TauSelector.rst.txt @@ -0,0 +1,8 @@ +:math:`\tau` +============ + +.. doxygenclass:: TauSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/ToolsUsed.rst.txt b/_sources/ToolsUsed.rst.txt new file mode 100644 index 0000000000..15d8124397 --- /dev/null +++ b/_sources/ToolsUsed.rst.txt @@ -0,0 +1,39 @@ +Tools Used +========== + +This page provides a list of all the tools used in the framework and where to find documentation for that particular tool (eg: their twiki page). See `this twiki `_ for more general details. + +Event Level +----------- + +- `PileupReweightingTool `__ +- `TriggerDecisionTool `__ + +:math:`e` and :math:`\gamma` +---------------------------- + +- `IsolationSelectionTool `__ +- `ElectronPhotonFourMomentumCorrection `__ +- `ElectronPhotonSelectorTools `__ +- `IsolationCorrectionTool `__ + +:math:`\mu` +----------- +- `MuonSelectionTool `__ + +:math:`j` +--------- + +- `JetCalibrationTool `__ +- `JERSmearingTool `__ +- `JetSelectorTools `__ +- `JVT `__ +- `BTaggingEfficiencyTool `__ +- `JetCleaning2016 `__ + + +:math:`\tau` jets +----------------- + +- `TauAnalysisTools `__ + diff --git a/_sources/TrackHists.rst.txt b/_sources/TrackHists.rst.txt new file mode 100644 index 0000000000..83dc0df9f7 --- /dev/null +++ b/_sources/TrackHists.rst.txt @@ -0,0 +1,8 @@ +TrackHists +========== + +.. doxygenclass:: TrackHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TrackHistsAlgo.rst.txt b/_sources/TrackHistsAlgo.rst.txt new file mode 100644 index 0000000000..1d6cdca9af --- /dev/null +++ b/_sources/TrackHistsAlgo.rst.txt @@ -0,0 +1,8 @@ +TrackHistsAlgo +============== + +.. doxygenclass:: TrackHistsAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TrackSelector.rst.txt b/_sources/TrackSelector.rst.txt new file mode 100644 index 0000000000..e622884146 --- /dev/null +++ b/_sources/TrackSelector.rst.txt @@ -0,0 +1,8 @@ +Tracks +====== + +.. doxygenclass:: TrackSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TreeAlgo.rst.txt b/_sources/TreeAlgo.rst.txt new file mode 100644 index 0000000000..f75e1d4f7f --- /dev/null +++ b/_sources/TreeAlgo.rst.txt @@ -0,0 +1,8 @@ +Tree Maker Algorithm +==================== + +.. doxygenclass:: TreeAlgo + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/TruthSelector.rst.txt b/_sources/TruthSelector.rst.txt new file mode 100644 index 0000000000..f2a12b8643 --- /dev/null +++ b/_sources/TruthSelector.rst.txt @@ -0,0 +1,8 @@ +Truth +===== + +.. doxygenclass:: TruthSelector + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/Tutorial_BrianTuan.rst.txt b/_sources/Tutorial_BrianTuan.rst.txt new file mode 100644 index 0000000000..519384e568 --- /dev/null +++ b/_sources/Tutorial_BrianTuan.rst.txt @@ -0,0 +1,468 @@ +Brian Tuan's Tutorial +===================== + +Introduction +------------ + +This tutorial will introduce a new user to analysis of xAOD's on Tier 3 using the RootCore framework. We will first produce a slimmed tree from Monte Carlo on the GRID, then we will retrieve the file to the local disk and produce a weighted histogram of pT from the slimmed tree. The `full source code of the tutorial is here `_, for those looking to get a quick start. + +Setup +----- + +.. highlight:: none + +First, connect to the UC Tier 3 server with X-11 window forwarding +enabled (so that you may use ROOT interactively later):: + + ssh -Y btuan@uct3.uchicago.edu + +Make sure that the following lines are in your ~/.bash\_profile file, which is a script that runs each time you log into the shell. These lines set up the ATLAS software environment where RootCore, among other tools, is located and depends upon:: + + # Setup ATLAS Environment + export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase + alias setupATLAS='source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh' + export ALRB_localConfigDir=$HOME/localConfig + source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh + +Now, setup the RootCore environment and build it. We will use 2.3.21, which, at time of writing is the latest supported release by xAODAnaHelpers. You'll need to perform this step each time you login to the shell:: + + cd ~/work + rcSetup Base,2.3.21 + +To see other available versions of RootCore, type:: + + rcSetup -r + +Make a work directory and checkout the xAODAnaHelpers package. This package contains a few useful tools for any analysis: e.g. event selection, jet cleaning, jet calibration etc. After checking out all the packages, return to the directory that has the "RootCore" folder -- probably your home directory -- and recompile, just to double check that everything works. This may take a while, be patient. + +In general, always check to make sure that your code compiles properly after any changes with ``rc compile``. Any time package dependencies are updated, be sure to run ``rc find_packages`` as well. In addition, if compilation for one of your packages fails, and all code errors seem to be fixed, but RootCore still refuses to compile your package, try running ``rc clean`` then ``rc find_packages && rc compile``. This will clean out all of the old files that may have been improperly compiled. + +It is good practice to repeat this procedure any time you change versions of any packages, RootCore included (though recompiling everything will of course take a while):: + + mkdir work && cd work + git clone https://github.com/UCATLAS/xAODAnaHelpers.git + python xAODAnaHelpers/scripts/checkoutASGtags.py 2.3.21 + rc find_packages && rc compile + +RootCore comes with a script that allows us to easily create a skeleton for your analysis. Do so:: + + . $ROOTCOREDIR/scripts/make_skeleton.sh Tutorial + +Make a directory called run. This is where your script will be located:: + + cd work/Tutorial && mkdir run && cd run + touch makeSlimmedTree.cxx + +Code and Data +------------- + +.. highlight:: c++ + +.. warning:: setConfig and getConfig are eliminated as ``ROOT::TEnv`` support is now deprecated. + +Place the following code in your **``makeSlimmedTree.cxx``**. Skim through it to familiarize yourself with the sequence of the analysis:: + + void makeSlimmedTree (const std::string& submitDir) + { + //=========================================== + // FOR ROOT6 WE DO NOT PUT THIS LINE + // (ROOT6 uses Cling instead of CINT) + // Load the libraries for all packages + // gROOT->Macro("$ROOTCOREDIR/scripts/load_packages.C"); + // Instead on command line do: + // > root -l -b -q '$ROOTCOREDIR/scripts/load_packages.C' 'makeSlimmedTree.cxx ("submitDir")' + // The above works for ROOT6 and ROOT5 + //========================================== + + bool f_grid = false; // decide if we use the GRID to run our analysis. default false. + + // Set up the job for xAOD access: + xAOD::Init().ignore(); + + + /*##################################################### + ############# SampleHandler Configuation ############## + #####################################################*/ + + // create a new sample handler to describe the data files we use. + SH::SampleHandler sh; + + // Use only one of the following three methods to scan for files with SampleHandler + + // (1) use SampleHandler with DQ2 to obtain the desired dataset + // SH::scanDQ2 (sh, "data15_13TeV.00267638.physics_Main.merge.AOD.r6818_p2358/"); + + // (2) use SampleHandler with a dataset list to obtain the desired dataset + const std::string inputFilePath = gSystem->ExpandPathName("$ROOTCOREBIN/data/Tutorial/inDSShort.txt"); + SH::readFileList (sh, "sample", inputFilePath ); + + // (3) use SampleHandler to scan all of the subdirectories of a directory for particular MC single file: + // const char* inputFilePath = gSystem->ExpandPathName ("/export/t3data3/fizisist/"); + // SH::DiskListLocal list (inputFilePath); + // SH::scanDir(sh, list); + + // set the name of the tree in our files. in the xAOD the TTree containing the EDM containers is "CollectionTree" + sh.setMetaString ("nc_tree", "CollectionTree"); + sh.setMetaString("nc_grid_filter", "*"); //Data files on grid to not end in .root + + // print out the samples we found + sh.print (); + + + /*##################################################### + ################## Job Configuration ################## + #####################################################*/ + + // this is the basic description of our job + EL::Job job; + job.sampleHandler (sh); // use SampleHandler in this job + + // job.options()->setDouble (EL::Job::optMaxEvents, 5000); // for testing purposes, limit to run over the first 500 events only! + + // To automatically delete submitDir + job.options()->setDouble(EL::Job::optRemoveSubmitDir, 1); + + // For Trigger + job.options()->setString( EL::Job::optXaodAccessMode, EL::Job::optXaodAccessMode_branch ); + + // Use TTreeCache to precache data files to speed up analysis + job.options()->setDouble (EL::Job::optCacheSize, 10*1024*1024); + job.options()->setDouble (EL::Job::optCacheLearnEntries, 20); + + + /*##################################################### + ############### Output Configuration ################# + #####################################################*/ + + std::string outputName; + std::string userName = "btuan"; + + // if running on GRID, make sure no two runs have the same output name. tag as necessary + std::string outputTag = ".v1/"; + + if(f_grid) // follow GRID naming conventions + outputName = "user."+userName+".%in:name[1]%.%in:name[2]%.%in:name[3]%"+outputTag; + else + outputName = "%in:name%"+outputTag; + + + /*##################################################### + ############## Algorithm Configuration ################ + #####################################################*/ + + // basic event selection : GRL, event cleaning, NPV + BasicEventSelection* baseEventSel = new BasicEventSelection(); + baseEventSel->setName("baseEventSel")->setConfig( "$ROOTCOREBIN/data/Tutorial/baseEventSel.config" ); + + // jet calibrator + std::string systName = "None"; + float systVal = 0; + JetCalibrator* jetCalib = new JetCalibrator(); + jetCalib->setName( "jetCalib" )->setConfig( "$ROOTCOREBIN/data/Tutorial/jetCalib_AntiKt4EMTopo.config")->setSyst( systName, systVal ); + + // jet selector + JetSelector* jetSelect = new JetSelector(); + jetSelect->setName( "jetSelect" )->setConfig( "$ROOTCOREBIN/data/Tutorial/jetSelect.config" ); + + // tree output + TreeAlgo* outTree = new TreeAlgo(); + outTree->setName( "outTree" )->setConfig( "$ROOTCOREBIN/data/Tutorial/outTree.config" ); + + // add algorithms to analysis + job.algsAdd (baseEventSel); + job.algsAdd (jetCalib); + job.algsAdd (jetSelect); + job.algsAdd (outTree); + + + /*##################################################### + ################$ Initialize Driver #####$$$########### + #####################################################*/ + + // here, we choose which driver to use with the boolean set earlier + if (f_grid){ // run using the GRID driver + EL::PrunDriver driver; + + driver.options()->setString("nc_outputSampleName", outputName); + driver.options()->setDouble(EL::Job::optGridNFilesPerJob, 2); + // driver.options()->setDouble(EL::Job::optGridMemory, 10240); //10 GB + + driver.submitOnly(job, submitDir); // submitOnly runs job without opening monitoring loop + } + else { // run using a direct driver + EL::DirectDriver driver; + driver.options()->setString("nc_outputSampleName", outputName); + driver.submit (job, submitDir); + } + + } + +.. highlight:: none + +Update the package dependencies on the line **``PACKAGE_DEP``** in ``cmt/Makefile.RootCore`` to include xAODAnaHelpers:: + + PACKAGE_DEP = xAODAnaHelpers + +Later on, in more driven analyses, you may find yourself adding the EventLoop and EventLoopGrid packages to the dependencies. The xAODAnaHelpers package takes care of all of the event looping for you in this case, so the only dependency is upon that package. + +Since we use the DQ2 SampleHandler to obtain the datasets, you will need to set up a valid VOMS proxy (which you will need anyways to submit the job to the grid) and a DQ2 client if you want to run the job locally. You can also use the XRootD protocol with FAX to obtain the samples. The code for this is commented out in the **``makeSlimmedTree.cxx``** code. The gist of this is the following (on the command line):: + + voms-proxy-init -voms altas + localSetupFAX + fax-get-gLFNs data15_13TeV.00267638.physics_Main.merge.AOD.r6818_p2358 > inDS.txt + localSetupPandaClient + +Make a directory **``Tutorial/data``**. This will be where we put all of the data and configuration files for our package, and for xAODAnaHelpers. Once you run find\_packages and compile with RootCore, you will be able to refer to this data directory with the **``$ROOTCOREBIN``** path variable, which is particularly useful when you have to generalize your code to run on batch machines, grid, etc:: + + mkdir ~/work/Tutorial/data/ + mv inDS.txt ~/work/Tutorial/data/ + +Configuration of xAODAnaHelpers Algorithms +------------------------------------------ + +As mentioned earlier, xAODAnaHelpers provides a series of algorithms that are chained in sequence to provide the desired output. The input and output containers for each of the algorithms in sequence are configured by .config files -- one for each algorithm. Create the following configuration files (as set in the ROOT macro in the run directory) in the data directory:: + + touch ~/work/Tutorial/data/baseEventSel.config + touch ~/work/Tutorial/data/jetCalib_AntiKt4EMTopo.config + touch ~/work/Tutorial/data/jetSelect.config + touch ~/work/Tutorial/data/outTree.config + +Each of these configuration files will set the options for a separate part of the analysis. Include the following in each file. At present, there is no centralized documentation for all of xAODAnaHelpers -- there is some on the GitHub wiki -- but to view the availability of configuration options for each xAODAnaHelpers algorithm, view the header file and source code. + +baseEventSel.config:: + + Debug False + ApplyGRL False + GRL $ROOTCOREBIN/data/Tutorial/data15_13TeV.periodAllYear_DetStatus-v63-pro18-01_DQDefects-00-01-02_PHYS_StandardGRL_All_Good.xml + DoPileupReweighting False + VertexContainer PrimaryVertices + NTrackForPrimaryVertex 2 + TruthLevelOnly False + #Trigger L1_RD0_FILLED + #Trigger L1_.* + #Trigger L1_MBTS_1_1 + #Trigger .* + Trigger .*_MBTS_1_1|.*_RD0_FILLED|L1_J[0-9]*|HLT_j[0-9]*|HLT_noalg_j[0-9]*|L1_XE[0-9]*|HLT_XE[0-9]*|HLT_noalg_XE[0-9]* + StoreTrigDecision True + CutOnTrigger False + StorePassAny True + StorePassL1 True + StorePassHLT True + StoreTrigKeys True + UseMetaData False + ## last option must be followed by a new line ## + +jetCalib\_AntiKt4EMTopo.config:: + + Debug False + InputContainer AntiKt4EMTopoJets + JetAlgorithm AntiKt4EMTopo + # + SaveAllCleanDecisions True + # + OutputContainer Jets_Calib + OutputAlgo Jets_Calib_Algo + configNameAFII JES_Full2012dataset_AFII_January2014.config + configNameFullSim JES_MC15Prerecommendation_April2015.config + configNameData JES_MC15Prerecommendation_April2015.config + #configNameData JES_Full2012dataset_May2014.config + CalibSequence JetArea_Residual_Origin_EtaJES_GSC + # + ## last option must be followed by a new line ## + +jetSelect.config:: + + Debug False + InputContainer Jets_Calib + InputAlgo Jets_Calib_Algo + OutputContainer SignalJets + OutputAlgo SignalJets_Algo + DecorateSelectedObjects False + CreateSelectedContainer True + # save multiple cleaning decisions instead of applying the cleaning + CleanJets False + # + pTMin 20e3 + PassMin 1 + Sort True + UseCutFlow True + # pT cut is > JVF recommended pT cut - to be added ... or JVT? + DoJVF False + pTMaxJVF 50e3 + etaMaxJVF 2.4 + JVFCut 0.5 + ## last option must be followed by a new line ## + +outTree.config:: + + Debug False + EventDetailStr "pileup" + TrigDetailStr True + JetDetailStr "kinematic substructure rapidity energy scales truth LeadingJets" + #JetDetailStr "kinematic" + JetContainerName SignalJets + SameHistsOutDir False + ## last option must be followed by a new line ## + +Almost there! All that's left to do is copy the requisite files into the locations specified by our makeSlimmedTrees.cxx script. + +The atlasstyle package is located here. Download and unzip the package, then place it in the run/ directory. Full support for `ATLAS Style `_ will be incorporated soon. + +Copy the desired GRL to the data/ folder. The Good Runs List is used to specify which events will be kept and which events will be discarded, based on LHC and ATLAS operations (e.g. bad luminosity block, etc.). The minutiae are located `here `_. + +.. note:: + Always use the most updated GRL, and use the same GRL for your luminosity calculations as you do your event selections. This tutorial uses the following `GRL `_. + +Plotting +-------- + +.. highlight:: c++ + +Here is a "quick and dirty" plotting macro to be placed in the **``run/``** folder for a plot. An example better integrating AtlasStyle is in the works and should be updated soon:: + + /** + * Plotter.cxx -- simple plotter for slimmed trees + * + * @author Brian Tuan + * @contact brian.tuan@cern.ch + * @date 21 July 2015 + * + * Run on the command line by: + * root -l '$ROOTCOREDIR/scripts/load_packages.C' '$ROOTCOREBIN/data/Tutorial/atlasstyle/AtlasStyle.C' 'Plotter.cxx( filePath )' + * If no argument indicated, Plotter will default to $PWD/submitDir/data-tree/sample.root + **/ + + #include "atlasstyle/AtlasUtils.h" + #include "atlasstyle/AtlasLabels.h" + #include "atlasstyle/AtlasStyle.h" + + #include "atlasstyle/AtlasUtils.C" + #include "atlasstyle/AtlasLabels.C" + + #include "TCanvas.h" + #include "TFile.h" + #include "TROOT.h" + #include "TH1F.h" + #include "TRandom.h" + #include "TGraphErrors.h" + + void Plotter (const std::string filePath = "submitDir/data-tree/sample.root"){ + + SetAtlasStyle(); + + // TFile* f_input = new TFile(filePath.c_str(), "READ", "file", 1); + TFile* f_input = new TFile("/afs/cern.ch/user/b/btuan/work/Tutorial/run/submitDir/data-tree/sample.root", "READ", "file", 1); + if( !f_input ){ std::cout<<"File not found! Exiting..."<Get("outTree"); // argument must be exact name of tree + + // Create a TTreeReader named "MyTree" from the given TDirectory. + // The TTreeReader gives access to the TTree to the TTreeReaderValue and + // TTreeReaderArray objects. It knows the current entry number and knows + // how to iterate through the TTree. + TTreeReader reader("outTree", f_input); + + // Read a single float value in each tree entry: + TTreeReaderValue evNum(reader, "eventNumber"); + TTreeReaderValue weight(reader, "mcEventWeight"); // weight defaults to 1 if data + + // Read a vector from in each of the tree entries: + TTreeReaderValue> jetPt(reader, "jet_pt"); + TTreeReaderValue> jetEMPt(reader, "jet_emScalePt"); + TTreeReaderValue> jetPUPt(reader, "jet_pileupScalePt"); + TTreeReaderValue> jetPhi(reader, "jet_phi"); + TTreeReaderValue> jetEta(reader, "jet_eta"); + TTreeReaderValue> jetWidth(reader, "jet_Width"); + + // Now iterate through the TTree entries and fill a histogram. + TH1F* h_jetPt = new TH1F("h_jetPt", "pt", 100, 0., 250.); + h_jetPt->SetTitle("AntiKt4 Pt"); + h_jetPt->SetXTitle("Pt (GeV)"); + h_jetPt->SetYTitle("nEvents"); + + while( reader.Next() ) { // dummy iterator just to keep count! + if (reader.GetEntryStatus() != TTreeReader::kEntryValid ){ + switch (reader.GetEntryStatus()) { + case TTreeReader::kEntryValid: + // All good! Nothing to worry about. + break; + case TTreeReader::kEntryNotLoaded: + std::cerr << "Error: TTreeReader has not loaded any data yet!\n"; + break; + case TTreeReader::kEntryNoTree: + std::cerr << "Error: TTreeReader cannot find a tree named \"outTree\"!\n"; + break; + case TTreeReader::kEntryNotFound: + // Can't really happen as TTreeReader::Next() knows when to stop. + std::cerr << "Error: The entry number doe not exist\n"; + break; + case TTreeReader::kEntryChainSetupError: + std::cerr << "Error: TTreeReader cannot access a chain element, e.g. file without the tree\n"; + break; + case TTreeReader::kEntryChainFileError: + std::cerr << "Error: TTreeReader cannot open a chain element, e.g. missing file\n"; + break; + case TTreeReader::kEntryDictionaryError: + std::cerr << "Error: TTreeReader cannot find the dictionary for some data\n"; + break; + } + return false; + } + + // Access the jetPt as an array, whether the TTree stores this as + // a std::vector, std::list, TClonesArray or Jet* C-style array, with + // fixed or variable array size. + if ((*jetPt).size() < 2 || (*jetPt)[0] < 100) //at least two jets, leading jet > 100 GeV + continue; + + // Access the array of taus. + float currentWeight = *weight; + for (int iJets = 0, nJets = (*jetPt).size(); iJets < nJets; ++iJets) + h_jetPt->Fill( (*jetPt)[iJets] , currentWeight); + } + + + TCanvas* c1 = new TCanvas("c1","AntiKt4EMTopoJets pT",50,50,600,600); + TPad* thePad = (TPad*)c1->cd(); + + myText( 0.3, 0.85, 1, "#sqrt{s}= 14 TeV"); + myText( 0.57, 0.85, 1, "|#eta_{jet}|<0.5"); + myMarkerText( 0.55, 0.75, 1, 20, "Data 2009",1.3); + myBoxText( 0.55, 0.67, 0.05, 5, "NLO QCD"); + + ATLASLabel(0.2,0.2,"Preliminary"); + + h_jetPt->Draw(); + + c1->Print("Output.eps"); + c1->Print("Output.png"); + c1->Print("Output.pdf"); + } + +Tips & Tricks +------------- + +Here are a few tips and tricks that should help you avoid most errors, and prove as good practice for any analysis with AnaHelpers. + +Maintaining xAODAnaHelpers +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- xAODAnaHelpers is now hosted on `GitHub `__! This means two things: first, there is a basic documentation available (:ref:`MainPage`) as reference. The documentation is still in progress, but what's already there should help you figure out what's going on with the package. Second, the development page (:ref:`Versions`) will contain information about the latest analysis base release that xAH has been tested to be compatible with. + +- Should you find any errors with xAODAnaHelpers code -- which should be a very rare occurrence, but programmers are still human -- you can immediately report the issue to the entire xAH team in `GitHub issues `_. Issues are tracked publicly, so you can stay posted about the resolution of your issue. + +- Updating the framework should be as simple as calling ``git pull !https://github.com/xAODAnaHelpers`` from within the ``xAODAnaHelpers`` directory. Then, to make sure all the latest Good Runs Lists (GRLs) and configuration information are updated as well, run ``python xAODAnaHelpers/scripts/checkoutASGtags.py $ABver`` where $ABver is the version of your analysis base release, in this case ``2.3.21``. The following lines of code should accomplish the same result automatically: + +.. code-block:: none + + if [ -d $ROOTCOREBIN/../xAODAnaHelpers ] + then cd $ROOTCOREBIN/../ python xAODAnaHelpers/scripts/checkoutASGtags.py $(echo $ROOTCOREDIR \| sed 's/\\/cvmfs\\/atlas\\.cern\\.ch\\/repo\\/sw\\/ASG\\/AnalysisBase\\/\\([0-9]\*[.][0-9]\*[.][0-9]\*\\).\*/\\1 /'); + fi + +This framework will automatically scale everything in to the GeV range for you, but the xAOD format lists all energies in MeV. + +Monitoring loop with pbook show() retry() kill() bigpanda / loadpackages:: + + EL::Driver::wait() + +Debug True gives a verbose mode. diff --git a/_sources/UsingUs.rst.txt b/_sources/UsingUs.rst.txt new file mode 100644 index 0000000000..ee46b11643 --- /dev/null +++ b/_sources/UsingUs.rst.txt @@ -0,0 +1,214 @@ +xAH_run.py +========== + +``xAH_run.py`` is the xAODAnaHelpers macro written fully in python. The +goal is to make it easier for a user to spin up an analysis without +(potentially) writing any C++ code at all! + +Introduction +------------ + +An analysis job is defined by a few key things: +- the files to run over +- where to run the code +- what algorithms to run + +and a few other minor features such as submission directory or how many events to run. Primarily, these three things listed above are all you need to get started. ``xAH_run.py`` manages all of these for you. + +A configuration file, written in `json `_ or `python `_, is used to specify what algorithms to run, and in what order. You pass in a list of files you want to run over to the script itself, as well as where to run the code. It will take care of the rest for you. + +Getting Started +--------------- + +To get started, we assume you are little bit familiar with xAODAnaHelpers and AnalysisBase in general. Recall that when you compile a bunch of packages, you generate a namespace under ``ROOT`` that all your algorithms are loaded into so that one could create an algorithm by something like ``ROOT.AlgorithmName()`` and then start configuring it. In fact, this is how one normally does it within python. Namespaces are automatically linked up by something like ``ROOT.Namespace.AlgorithmName()`` in case you wrapped the entire algorithm in a namespace. + +A simple plotting example +~~~~~~~~~~~~~~~~~~~~~~~~~ + +To get started, let's just ask a simple question: "How can I make plots of Anti-Kt, R=0.4, LC-calibrated jets?" Let's assume ``xAODAnaHelpers`` has already been checked out and everything is compiled. We only need to know the three key things. + +What algorithms to run +^^^^^^^^^^^^^^^^^^^^^^ + +We will run 2 algorithms. First is :class:`BasicEventSelection` to filter/clean events. The second is :class:`JetHistsAlgo` which will allow us to plot the jets we want. So start with the template JSON file: + +.. code:: json + + [ + { "class": "BasicEventSelection", + "configs": { + } + }, + { + "class": "JetHistsAlgo", + "configs": { + } + } + ] + +This gets us started. We make a list of algorithms that we want to run, this list is considered *sorted*. Each list contains a dictionary object, one which defines the ``class`` to run and another which defines a dictionary of configurations to pass into that algorithm. An equivalent script in python looks like + +.. code:: python + + from xAODAnaHelpers import Config + c = Config() + + c.algorithm("BasicEventSelection", {}) + c.algorithm("JetHistsAlgo", {}) + +Next, we should probably add some obvious configurations that work for us. I look up the header files of each and decide to flesh it out as below: + +.. code:: json + + [ + { "class": "BasicEventSelection", + "configs": { + "m_truthLevelOnly": false, + "m_applyGRLCut": true, + "m_GRLxml": "$ROOTCOREBIN/data/xAODAnaHelpers/data12_8TeV.periodAllYear_DetStatus-v61-pro14-02_DQDefects-00-01-00_PHYS_StandardGRL_All_Good.xml", + "m_doPUreweighting": false, + "m_vertexContainerName": "PrimaryVertices", + "m_PVNTrack": 2, + "m_name": "myBaseEventSel" + } + }, + { + "class": "JetHistsAlgo", + "configs": { + "m_inContainerName": "AntiKt4EMTopoJets", + "m_detailStr": "kinematic", + "m_name": "NoPreSel" + } + } + ] + +and I save this into ``xah_run_example.json``. If you want more variables in your plots, add other possibilities in the detailStr field, separated by a space. Equivalently in python + +.. code:: python + + from xAODAnaHelpers import Config + c = Config() + + c.algorithm("BasicEventSelection", {"m_truthLevelOnly": False, + "m_applyGRLCut": True, + "m_GRLxml": "$ROOTCOREBIN/data/xAODAnaHelpers/data12_8TeV.periodAllYear_DetStatus-v61-pro14-02_DQDefects-00-01-00_PHYS_StandardGRL_All_Good.xml", + "m_doPUreweighting": False, + "m_vertexContainerName": "PrimaryVertices", + "m_PVNTrack": 2, + "m_name": "myBaseEventSel"}) + c.algorithm("JetHistsAlgo", {"m_inContainerName": "AntiKt4EMTopoJets", + "m_detailStr": "kinematic", + "m_name": "NoPreSel"}) + +The similarity is on purpose, to make it incredibly easy to switch back and forth between the two formats. + +Running the script +^^^^^^^^^^^^^^^^^^ + +I pretty much have everything I need to work with. So, I run the following command + +.. code:: bash + + xAH_run.py --files file1.root file2.root --config xah_run_example.json direct + +which will run over two ROOT files locally (``direct``), using the configuration we made. Running with the python form of the configuration is just as easy + +.. code:: bash + + xAH_run.py --files file1.root file2.root --config xah_run_example.py direct + + +How to pass command line options straight to the python config file? Let's say you wish to set a variable called ``var`` in your config. Then, you would have to have something like this in your config: + +.. code:: python + + import shlex + import argparse + + parser = argparse.ArgumentParser(description='Test for extra options') + parser.add_argument('-var', action='store') + + # note "args" is already a variable holding the arguments passed into xAH_run.py + inner_args = parser.parse_args(shlex.split(args.extra_options)) + +Then, you can pass that argument with the ``--extraOptions`` flag of ``xAH_run.py``: + +.. code:: bash + + xAH_run.py --files file.root --config YOURCONFIGNAME.py --extraOptions="-var 2" direct + +We're all done! That was easy :beers: . + +Configuring Samples +------------------- + +Sample configuration can be done with a python script like so + +.. code:: python + + from xAODAnaHelpers import Config + c = Config() + + c.sample(410000, foo='bar', hello='world') + c.sample("p9495", foo='bar', hello='world', b=1, c=2.0, d=True) + +where the pattern specified in ``Config::sample`` will be searched for inside the name of the dataset (not the name of the file!). Specifically, we just do something like ``if pattern in sample.name()`` in order to flag that sample. Given this, you can make this pattern generic enough to apply a configuration to a specific p-tag, or to a specific dataset ID (DSID) as well. The above will produce the following output when running + +.. code:: bash + + [WARNING] No matching sample found for pattern 410000 + [INFO ] Setting sample metadata for example.sample.p9495.root + [INFO ] - sample.meta().setDouble(c, 2.0) + [INFO ] - sample.meta().setString(foo, bar) + [INFO ] - sample.meta().setInteger(b, 1) + [INFO ] - sample.meta().setString(hello, world) + [INFO ] - sample.meta().setBool(d, True) + +which should make it easy for you to understand what options are being set and for which sample. + +Configuration Details +--------------------- + +As mentioned previous, there are multiple facets to ``xAH_run.py``. The below details the configurations that are possible for the script itself, not for the algorithms you use. For details on what can be configured, look up the header files of the algorithms themselves. + +For everything listed below, the script contains all this information and is self-documenting. Simply type + +.. code:: bash + + xAH_run.py -h + +to see all the help information. + +.. note:: + The ``{driver}`` option tells the script where to run the code. There are lots of supported drivers and more can be added if you request it. For more information, you can type ``xAH_run.py -h drivers`` of available drivers. + +.. _xAHRunAPI: + +API Reference +------------- + +.. note:: If you are using a CMake-based release, or you have ``argcomplete`` in your python environment, you can enable automatic completion of the options. For example, running something like this:: + + eval "$(register-python-argcomplete xAH_run.py)" + +All of the following properties can be set in a user-specific dotfile located at ``${HOME}/.xah``. It is an `INI file `_, with the `general` section used for the generic options and other sections named after sub-commands. The keys in each section are the options without the preceeding dashes. + +The following example configures the Slurm driver for NERCS' Cori and records usage statistics: +:: + + [general] + stats=1 + + [slurm] + optBatchSharedFileSystem=1 + optBatchWait=1 + optSlurmRunTime=5:00:00 + optSlurmExtraConfigLines=#SBATCH --qos=shared --tasks-per-node=1 --constraint=haswell --image=centos:centos7 --export=NONE + optSlurmWrapperExec=export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/global/project/projectdirs/atlas/scripts/extra_libs_180822; hostname; shifter --module=cvmfs /bin/ + +.. argparse:: + :ref: xAH_run.parser + :prog: xAH_run.py + + --mode : @after + `class access `__ mode or `branch access `__ mode diff --git a/_sources/Utilities.rst.txt b/_sources/Utilities.rst.txt new file mode 100644 index 0000000000..c86adedff7 --- /dev/null +++ b/_sources/Utilities.rst.txt @@ -0,0 +1,13 @@ +Utilities +========= + +.. toctree:: + :maxdepth: 2 + + DebugTool + HelperClasses + HelperFunctions + METConstructor + ParticlePIDManager + xAHAlgorithm + MessagePrinterAlgo diff --git a/_sources/VtxHists.rst.txt b/_sources/VtxHists.rst.txt new file mode 100644 index 0000000000..893118d0d4 --- /dev/null +++ b/_sources/VtxHists.rst.txt @@ -0,0 +1,8 @@ +VtxHists +======== + +.. doxygenclass:: VtxHists + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_sources/api/classBJetEfficiencyCorrector.rst.txt b/_sources/api/classBJetEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..8df840e5d7 --- /dev/null +++ b/_sources/api/classBJetEfficiencyCorrector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classBJetEfficiencyCorrector: + +Class BJetEfficiencyCorrector +============================= + +- Defined in :ref:`file_xAODAnaHelpers_BJetEfficiencyCorrector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: BJetEfficiencyCorrector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classBasicEventSelection.rst.txt b/_sources/api/classBasicEventSelection.rst.txt new file mode 100644 index 0000000000..7a309d7fad --- /dev/null +++ b/_sources/api/classBasicEventSelection.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classBasicEventSelection: + +Class BasicEventSelection +========================= + +- Defined in :ref:`file_xAODAnaHelpers_BasicEventSelection.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: BasicEventSelection + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classClusterHistsAlgo.rst.txt b/_sources/api/classClusterHistsAlgo.rst.txt new file mode 100644 index 0000000000..a3f8ffdcaf --- /dev/null +++ b/_sources/api/classClusterHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classClusterHistsAlgo: + +Class ClusterHistsAlgo +====================== + +- Defined in :ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: ClusterHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classDebugTool.rst.txt b/_sources/api/classDebugTool.rst.txt new file mode 100644 index 0000000000..c3f8b0625b --- /dev/null +++ b/_sources/api/classDebugTool.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classDebugTool: + +Class DebugTool +=============== + +- Defined in :ref:`file_xAODAnaHelpers_DebugTool.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: DebugTool + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classElectronCalibrator.rst.txt b/_sources/api/classElectronCalibrator.rst.txt new file mode 100644 index 0000000000..cea2e28f62 --- /dev/null +++ b/_sources/api/classElectronCalibrator.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classElectronCalibrator: + +Class ElectronCalibrator +======================== + +- Defined in :ref:`file_xAODAnaHelpers_ElectronCalibrator.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: ElectronCalibrator + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classElectronCutBasedPIDManager.rst.txt b/_sources/api/classElectronCutBasedPIDManager.rst.txt new file mode 100644 index 0000000000..3594eb62a2 --- /dev/null +++ b/_sources/api/classElectronCutBasedPIDManager.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classElectronCutBasedPIDManager: + +Class ElectronCutBasedPIDManager +================================ + +- Defined in :ref:`file_xAODAnaHelpers_ParticlePIDManager.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: ElectronCutBasedPIDManager + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classElectronEfficiencyCorrector.rst.txt b/_sources/api/classElectronEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..7f8922362b --- /dev/null +++ b/_sources/api/classElectronEfficiencyCorrector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classElectronEfficiencyCorrector: + +Class ElectronEfficiencyCorrector +================================= + +- Defined in :ref:`file_xAODAnaHelpers_ElectronEfficiencyCorrector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: ElectronEfficiencyCorrector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classElectronHistsAlgo.rst.txt b/_sources/api/classElectronHistsAlgo.rst.txt new file mode 100644 index 0000000000..e054655386 --- /dev/null +++ b/_sources/api/classElectronHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classElectronHistsAlgo: + +Class ElectronHistsAlgo +======================= + +- Defined in :ref:`file_xAODAnaHelpers_ElectronHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public IParticleHistsAlgo`` (:ref:`exhale_class_classIParticleHistsAlgo`) + + +Class Documentation +------------------- + + +.. doxygenclass:: ElectronHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classElectronSelector.rst.txt b/_sources/api/classElectronSelector.rst.txt new file mode 100644 index 0000000000..93e601c658 --- /dev/null +++ b/_sources/api/classElectronSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classElectronSelector: + +Class ElectronSelector +====================== + +- Defined in :ref:`file_xAODAnaHelpers_ElectronSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: ElectronSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHLTJetGetter.rst.txt b/_sources/api/classHLTJetGetter.rst.txt new file mode 100644 index 0000000000..0b540d7b93 --- /dev/null +++ b/_sources/api/classHLTJetGetter.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHLTJetGetter: + +Class HLTJetGetter +================== + +- Defined in :ref:`file_xAODAnaHelpers_HLTJetGetter.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HLTJetGetter + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelpTreeBase.rst.txt b/_sources/api/classHelpTreeBase.rst.txt new file mode 100644 index 0000000000..5690321813 --- /dev/null +++ b/_sources/api/classHelpTreeBase.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classHelpTreeBase: + +Class HelpTreeBase +================== + +- Defined in :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: HelpTreeBase + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1ClusterInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1ClusterInfoSwitch.rst.txt new file mode 100644 index 0000000000..050ae239d3 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1ClusterInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1ClusterInfoSwitch: + +Class ClusterInfoSwitch +======================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::ClusterInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1ElectronInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1ElectronInfoSwitch.rst.txt new file mode 100644 index 0000000000..f63e7b9dfd --- /dev/null +++ b/_sources/api/classHelperClasses_1_1ElectronInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1ElectronInfoSwitch: + +Class ElectronInfoSwitch +======================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::ElectronInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1EnumParser.rst.txt b/_sources/api/classHelperClasses_1_1EnumParser.rst.txt new file mode 100644 index 0000000000..0e523e0b72 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1EnumParser.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classHelperClasses_1_1EnumParser: + +Template Class EnumParser +========================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::EnumParser + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1EventInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1EventInfoSwitch.rst.txt new file mode 100644 index 0000000000..2a252c8472 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1EventInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1EventInfoSwitch: + +Class EventInfoSwitch +===================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::InfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1InfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::EventInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1IParticleInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1IParticleInfoSwitch.rst.txt new file mode 100644 index 0000000000..aef970c612 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1IParticleInfoSwitch.rst.txt @@ -0,0 +1,37 @@ +.. _exhale_class_classHelperClasses_1_1IParticleInfoSwitch: + +Class IParticleInfoSwitch +========================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::InfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1InfoSwitch`) + + +Derived Types +************* + +- ``public HelperClasses::ClusterInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1ClusterInfoSwitch`) +- ``public HelperClasses::ElectronInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1ElectronInfoSwitch`) +- ``public HelperClasses::JetInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1JetInfoSwitch`) +- ``public HelperClasses::MuonInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1MuonInfoSwitch`) +- ``public HelperClasses::PhotonInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1PhotonInfoSwitch`) +- ``public HelperClasses::TauInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1TauInfoSwitch`) +- ``public HelperClasses::TruthInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1TruthInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::IParticleInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1InfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1InfoSwitch.rst.txt new file mode 100644 index 0000000000..f7edfd13e4 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1InfoSwitch.rst.txt @@ -0,0 +1,29 @@ +.. _exhale_class_classHelperClasses_1_1InfoSwitch: + +Class InfoSwitch +================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Derived Types +************* + +- ``public HelperClasses::EventInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1EventInfoSwitch`) +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) +- ``public HelperClasses::METInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1METInfoSwitch`) +- ``public HelperClasses::TrackInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1TrackInfoSwitch`) +- ``public HelperClasses::TriggerInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1TriggerInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::InfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1JetInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1JetInfoSwitch.rst.txt new file mode 100644 index 0000000000..b96ad51bd5 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1JetInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1JetInfoSwitch: + +Class JetInfoSwitch +=================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::JetInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1METInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1METInfoSwitch.rst.txt new file mode 100644 index 0000000000..65a97dba03 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1METInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1METInfoSwitch: + +Class METInfoSwitch +=================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::InfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1InfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::METInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1MuonInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1MuonInfoSwitch.rst.txt new file mode 100644 index 0000000000..5697e11950 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1MuonInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1MuonInfoSwitch: + +Class MuonInfoSwitch +==================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::MuonInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1PhotonInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1PhotonInfoSwitch.rst.txt new file mode 100644 index 0000000000..157aed1c26 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1PhotonInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1PhotonInfoSwitch: + +Class PhotonInfoSwitch +====================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::PhotonInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1TauInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1TauInfoSwitch.rst.txt new file mode 100644 index 0000000000..ff309b35d2 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1TauInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1TauInfoSwitch: + +Class TauInfoSwitch +=================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::TauInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1TrackInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1TrackInfoSwitch.rst.txt new file mode 100644 index 0000000000..4f790912ed --- /dev/null +++ b/_sources/api/classHelperClasses_1_1TrackInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1TrackInfoSwitch: + +Class TrackInfoSwitch +===================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::InfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1InfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::TrackInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1TriggerInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1TriggerInfoSwitch.rst.txt new file mode 100644 index 0000000000..e5ea0e2394 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1TriggerInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1TriggerInfoSwitch: + +Class TriggerInfoSwitch +======================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::InfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1InfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::TriggerInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHelperClasses_1_1TruthInfoSwitch.rst.txt b/_sources/api/classHelperClasses_1_1TruthInfoSwitch.rst.txt new file mode 100644 index 0000000000..e0db4b34c9 --- /dev/null +++ b/_sources/api/classHelperClasses_1_1TruthInfoSwitch.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHelperClasses_1_1TruthInfoSwitch: + +Class TruthInfoSwitch +===================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HelperClasses::IParticleInfoSwitch`` (:ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HelperClasses::TruthInfoSwitch + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classHistogramManager.rst.txt b/_sources/api/classHistogramManager.rst.txt new file mode 100644 index 0000000000..12c17061b8 --- /dev/null +++ b/_sources/api/classHistogramManager.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classHistogramManager: + +Class HistogramManager +====================== + +- Defined in :ref:`file_xAODAnaHelpers_HistogramManager.h` + + +Inheritance Relationships +------------------------- + +Derived Type +************ + +- ``public MetHists`` (:ref:`exhale_class_classMetHists`) + + +Class Documentation +------------------- + + +.. doxygenclass:: HistogramManager + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classIParticleHistsAlgo.rst.txt b/_sources/api/classIParticleHistsAlgo.rst.txt new file mode 100644 index 0000000000..25d7b6d4a9 --- /dev/null +++ b/_sources/api/classIParticleHistsAlgo.rst.txt @@ -0,0 +1,34 @@ +.. _exhale_class_classIParticleHistsAlgo: + +Class IParticleHistsAlgo +======================== + +- Defined in :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Derived Types +************* + +- ``public ElectronHistsAlgo`` (:ref:`exhale_class_classElectronHistsAlgo`) +- ``public JetHistsAlgo`` (:ref:`exhale_class_classJetHistsAlgo`) +- ``public MuonHistsAlgo`` (:ref:`exhale_class_classMuonHistsAlgo`) +- ``public PhotonHistsAlgo`` (:ref:`exhale_class_classPhotonHistsAlgo`) + + +Class Documentation +------------------- + + +.. doxygenclass:: IParticleHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classIsoCloseByCorr.rst.txt b/_sources/api/classIsoCloseByCorr.rst.txt new file mode 100644 index 0000000000..133fbfe5df --- /dev/null +++ b/_sources/api/classIsoCloseByCorr.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classIsoCloseByCorr: + +Class IsoCloseByCorr +==================== + +- Defined in :ref:`file_xAODAnaHelpers_IsoCloseByCorr.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: IsoCloseByCorr + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classJetCalibrator.rst.txt b/_sources/api/classJetCalibrator.rst.txt new file mode 100644 index 0000000000..4fa99c9b76 --- /dev/null +++ b/_sources/api/classJetCalibrator.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classJetCalibrator: + +Class JetCalibrator +=================== + +- Defined in :ref:`file_xAODAnaHelpers_JetCalibrator.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: JetCalibrator + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classJetHistsAlgo.rst.txt b/_sources/api/classJetHistsAlgo.rst.txt new file mode 100644 index 0000000000..bcc0eee2eb --- /dev/null +++ b/_sources/api/classJetHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classJetHistsAlgo: + +Class JetHistsAlgo +================== + +- Defined in :ref:`file_xAODAnaHelpers_JetHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public IParticleHistsAlgo`` (:ref:`exhale_class_classIParticleHistsAlgo`) + + +Class Documentation +------------------- + + +.. doxygenclass:: JetHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classJetSelector.rst.txt b/_sources/api/classJetSelector.rst.txt new file mode 100644 index 0000000000..e47ba53631 --- /dev/null +++ b/_sources/api/classJetSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classJetSelector: + +Class JetSelector +================= + +- Defined in :ref:`file_xAODAnaHelpers_JetSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: JetSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMETConstructor.rst.txt b/_sources/api/classMETConstructor.rst.txt new file mode 100644 index 0000000000..b50e60f4e2 --- /dev/null +++ b/_sources/api/classMETConstructor.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMETConstructor: + +Class METConstructor +==================== + +- Defined in :ref:`file_xAODAnaHelpers_METConstructor.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: METConstructor + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMessagePrinterAlgo.rst.txt b/_sources/api/classMessagePrinterAlgo.rst.txt new file mode 100644 index 0000000000..d2a7ff99b5 --- /dev/null +++ b/_sources/api/classMessagePrinterAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMessagePrinterAlgo: + +Class MessagePrinterAlgo +======================== + +- Defined in :ref:`file_xAODAnaHelpers_MessagePrinterAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MessagePrinterAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMetHists.rst.txt b/_sources/api/classMetHists.rst.txt new file mode 100644 index 0000000000..29402418d5 --- /dev/null +++ b/_sources/api/classMetHists.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMetHists: + +Class MetHists +============== + +- Defined in :ref:`file_xAODAnaHelpers_MetHists.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public HistogramManager`` (:ref:`exhale_class_classHistogramManager`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MetHists + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMetHistsAlgo.rst.txt b/_sources/api/classMetHistsAlgo.rst.txt new file mode 100644 index 0000000000..0f265bb3d1 --- /dev/null +++ b/_sources/api/classMetHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMetHistsAlgo: + +Class MetHistsAlgo +================== + +- Defined in :ref:`file_xAODAnaHelpers_MetHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MetHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMinixAOD.rst.txt b/_sources/api/classMinixAOD.rst.txt new file mode 100644 index 0000000000..c4d058eace --- /dev/null +++ b/_sources/api/classMinixAOD.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMinixAOD: + +Class MinixAOD +============== + +- Defined in :ref:`file_xAODAnaHelpers_MinixAOD.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MinixAOD + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMuonCalibrator.rst.txt b/_sources/api/classMuonCalibrator.rst.txt new file mode 100644 index 0000000000..6dfa6901fe --- /dev/null +++ b/_sources/api/classMuonCalibrator.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMuonCalibrator: + +Class MuonCalibrator +==================== + +- Defined in :ref:`file_xAODAnaHelpers_MuonCalibrator.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MuonCalibrator + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMuonEfficiencyCorrector.rst.txt b/_sources/api/classMuonEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..90bdae255e --- /dev/null +++ b/_sources/api/classMuonEfficiencyCorrector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMuonEfficiencyCorrector: + +Class MuonEfficiencyCorrector +============================= + +- Defined in :ref:`file_xAODAnaHelpers_MuonEfficiencyCorrector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MuonEfficiencyCorrector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMuonHistsAlgo.rst.txt b/_sources/api/classMuonHistsAlgo.rst.txt new file mode 100644 index 0000000000..160ff21ebc --- /dev/null +++ b/_sources/api/classMuonHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMuonHistsAlgo: + +Class MuonHistsAlgo +=================== + +- Defined in :ref:`file_xAODAnaHelpers_MuonHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public IParticleHistsAlgo`` (:ref:`exhale_class_classIParticleHistsAlgo`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MuonHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMuonInFatJetCorrector.rst.txt b/_sources/api/classMuonInFatJetCorrector.rst.txt new file mode 100644 index 0000000000..f0a4b88f40 --- /dev/null +++ b/_sources/api/classMuonInFatJetCorrector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMuonInFatJetCorrector: + +Class MuonInFatJetCorrector +=========================== + +- Defined in :ref:`file_xAODAnaHelpers_MuonInFatJetCorrector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MuonInFatJetCorrector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classMuonSelector.rst.txt b/_sources/api/classMuonSelector.rst.txt new file mode 100644 index 0000000000..ef306beb60 --- /dev/null +++ b/_sources/api/classMuonSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classMuonSelector: + +Class MuonSelector +================== + +- Defined in :ref:`file_xAODAnaHelpers_MuonSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: MuonSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classOverlapRemover.rst.txt b/_sources/api/classOverlapRemover.rst.txt new file mode 100644 index 0000000000..c8d9b33aed --- /dev/null +++ b/_sources/api/classOverlapRemover.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classOverlapRemover: + +Class OverlapRemover +==================== + +- Defined in :ref:`file_xAODAnaHelpers_OverlapRemover.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: OverlapRemover + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classPhotonCalibrator.rst.txt b/_sources/api/classPhotonCalibrator.rst.txt new file mode 100644 index 0000000000..01f3fe9c2f --- /dev/null +++ b/_sources/api/classPhotonCalibrator.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classPhotonCalibrator: + +Class PhotonCalibrator +====================== + +- Defined in :ref:`file_xAODAnaHelpers_PhotonCalibrator.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: PhotonCalibrator + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classPhotonHistsAlgo.rst.txt b/_sources/api/classPhotonHistsAlgo.rst.txt new file mode 100644 index 0000000000..eb03b3bf9a --- /dev/null +++ b/_sources/api/classPhotonHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classPhotonHistsAlgo: + +Class PhotonHistsAlgo +===================== + +- Defined in :ref:`file_xAODAnaHelpers_PhotonHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public IParticleHistsAlgo`` (:ref:`exhale_class_classIParticleHistsAlgo`) + + +Class Documentation +------------------- + + +.. doxygenclass:: PhotonHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classPhotonSelector.rst.txt b/_sources/api/classPhotonSelector.rst.txt new file mode 100644 index 0000000000..a463857fa2 --- /dev/null +++ b/_sources/api/classPhotonSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classPhotonSelector: + +Class PhotonSelector +==================== + +- Defined in :ref:`file_xAODAnaHelpers_PhotonSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: PhotonSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTauCalibrator.rst.txt b/_sources/api/classTauCalibrator.rst.txt new file mode 100644 index 0000000000..c196d2e3fc --- /dev/null +++ b/_sources/api/classTauCalibrator.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTauCalibrator: + +Class TauCalibrator +=================== + +- Defined in :ref:`file_xAODAnaHelpers_TauCalibrator.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TauCalibrator + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTauEfficiencyCorrector.rst.txt b/_sources/api/classTauEfficiencyCorrector.rst.txt new file mode 100644 index 0000000000..95f70a421f --- /dev/null +++ b/_sources/api/classTauEfficiencyCorrector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTauEfficiencyCorrector: + +Class TauEfficiencyCorrector +============================ + +- Defined in :ref:`file_xAODAnaHelpers_TauEfficiencyCorrector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TauEfficiencyCorrector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTauJetMatching.rst.txt b/_sources/api/classTauJetMatching.rst.txt new file mode 100644 index 0000000000..4d97738f35 --- /dev/null +++ b/_sources/api/classTauJetMatching.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTauJetMatching: + +Class TauJetMatching +==================== + +- Defined in :ref:`file_xAODAnaHelpers_TauJetMatching.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TauJetMatching + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTauSelector.rst.txt b/_sources/api/classTauSelector.rst.txt new file mode 100644 index 0000000000..d628bbfac5 --- /dev/null +++ b/_sources/api/classTauSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTauSelector: + +Class TauSelector +================= + +- Defined in :ref:`file_xAODAnaHelpers_TauSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TauSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTrackHistsAlgo.rst.txt b/_sources/api/classTrackHistsAlgo.rst.txt new file mode 100644 index 0000000000..edf5ff7a64 --- /dev/null +++ b/_sources/api/classTrackHistsAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTrackHistsAlgo: + +Class TrackHistsAlgo +==================== + +- Defined in :ref:`file_xAODAnaHelpers_TrackHistsAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TrackHistsAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTrackSelector.rst.txt b/_sources/api/classTrackSelector.rst.txt new file mode 100644 index 0000000000..f3dab955db --- /dev/null +++ b/_sources/api/classTrackSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTrackSelector: + +Class TrackSelector +=================== + +- Defined in :ref:`file_xAODAnaHelpers_TrackSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TrackSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTreeAlgo.rst.txt b/_sources/api/classTreeAlgo.rst.txt new file mode 100644 index 0000000000..dd096006f1 --- /dev/null +++ b/_sources/api/classTreeAlgo.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTreeAlgo: + +Class TreeAlgo +============== + +- Defined in :ref:`file_xAODAnaHelpers_TreeAlgo.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TreeAlgo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTrigMatcher.rst.txt b/_sources/api/classTrigMatcher.rst.txt new file mode 100644 index 0000000000..2e77aeac76 --- /dev/null +++ b/_sources/api/classTrigMatcher.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTrigMatcher: + +Class TrigMatcher +================= + +- Defined in :ref:`file_xAODAnaHelpers_TrigMatcher.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TrigMatcher + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classTruthSelector.rst.txt b/_sources/api/classTruthSelector.rst.txt new file mode 100644 index 0000000000..546b683c52 --- /dev/null +++ b/_sources/api/classTruthSelector.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classTruthSelector: + +Class TruthSelector +=================== + +- Defined in :ref:`file_xAODAnaHelpers_TruthSelector.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: TruthSelector + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classWriter.rst.txt b/_sources/api/classWriter.rst.txt new file mode 100644 index 0000000000..a6be033b05 --- /dev/null +++ b/_sources/api/classWriter.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classWriter: + +Class Writer +============ + +- Defined in :ref:`file_xAODAnaHelpers_Writer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Algorithm`` (:ref:`exhale_class_classxAH_1_1Algorithm`) + + +Class Documentation +------------------- + + +.. doxygenclass:: Writer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/class_view_hierarchy.rst.txt b/_sources/api/class_view_hierarchy.rst.txt new file mode 100644 index 0000000000..1c5dd3d9f6 --- /dev/null +++ b/_sources/api/class_view_hierarchy.rst.txt @@ -0,0 +1,18 @@ + +Class Hierarchy +--------------- + + +.. raw:: html + + + +.. end raw html for treeView + + diff --git a/_sources/api/classxAH_1_1Algorithm.rst.txt b/_sources/api/classxAH_1_1Algorithm.rst.txt new file mode 100644 index 0000000000..766b0c0b9d --- /dev/null +++ b/_sources/api/classxAH_1_1Algorithm.rst.txt @@ -0,0 +1,63 @@ +.. _exhale_class_classxAH_1_1Algorithm: + +Class Algorithm +=============== + +- Defined in :ref:`file_xAODAnaHelpers_Algorithm.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public EL::Algorithm`` + + +Derived Types +************* + +- ``public BJetEfficiencyCorrector`` (:ref:`exhale_class_classBJetEfficiencyCorrector`) +- ``public BasicEventSelection`` (:ref:`exhale_class_classBasicEventSelection`) +- ``public ClusterHistsAlgo`` (:ref:`exhale_class_classClusterHistsAlgo`) +- ``public DebugTool`` (:ref:`exhale_class_classDebugTool`) +- ``public ElectronCalibrator`` (:ref:`exhale_class_classElectronCalibrator`) +- ``public ElectronEfficiencyCorrector`` (:ref:`exhale_class_classElectronEfficiencyCorrector`) +- ``public ElectronSelector`` (:ref:`exhale_class_classElectronSelector`) +- ``public HLTJetGetter`` (:ref:`exhale_class_classHLTJetGetter`) +- ``public IParticleHistsAlgo`` (:ref:`exhale_class_classIParticleHistsAlgo`) +- ``public IsoCloseByCorr`` (:ref:`exhale_class_classIsoCloseByCorr`) +- ``public JetCalibrator`` (:ref:`exhale_class_classJetCalibrator`) +- ``public JetSelector`` (:ref:`exhale_class_classJetSelector`) +- ``public METConstructor`` (:ref:`exhale_class_classMETConstructor`) +- ``public MessagePrinterAlgo`` (:ref:`exhale_class_classMessagePrinterAlgo`) +- ``public MetHistsAlgo`` (:ref:`exhale_class_classMetHistsAlgo`) +- ``public MinixAOD`` (:ref:`exhale_class_classMinixAOD`) +- ``public MuonCalibrator`` (:ref:`exhale_class_classMuonCalibrator`) +- ``public MuonEfficiencyCorrector`` (:ref:`exhale_class_classMuonEfficiencyCorrector`) +- ``public MuonInFatJetCorrector`` (:ref:`exhale_class_classMuonInFatJetCorrector`) +- ``public MuonSelector`` (:ref:`exhale_class_classMuonSelector`) +- ``public OverlapRemover`` (:ref:`exhale_class_classOverlapRemover`) +- ``public PhotonCalibrator`` (:ref:`exhale_class_classPhotonCalibrator`) +- ``public PhotonSelector`` (:ref:`exhale_class_classPhotonSelector`) +- ``public TauCalibrator`` (:ref:`exhale_class_classTauCalibrator`) +- ``public TauEfficiencyCorrector`` (:ref:`exhale_class_classTauEfficiencyCorrector`) +- ``public TauJetMatching`` (:ref:`exhale_class_classTauJetMatching`) +- ``public TauSelector`` (:ref:`exhale_class_classTauSelector`) +- ``public TrackHistsAlgo`` (:ref:`exhale_class_classTrackHistsAlgo`) +- ``public TrackSelector`` (:ref:`exhale_class_classTrackSelector`) +- ``public TreeAlgo`` (:ref:`exhale_class_classTreeAlgo`) +- ``public TrigMatcher`` (:ref:`exhale_class_classTrigMatcher`) +- ``public TruthSelector`` (:ref:`exhale_class_classTruthSelector`) +- ``public Writer`` (:ref:`exhale_class_classWriter`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Algorithm + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Cluster.rst.txt b/_sources/api/classxAH_1_1Cluster.rst.txt new file mode 100644 index 0000000000..3088bbac60 --- /dev/null +++ b/_sources/api/classxAH_1_1Cluster.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Cluster: + +Class Cluster +============= + +- Defined in :ref:`file_xAODAnaHelpers_Cluster.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Cluster + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1ClusterContainer.rst.txt b/_sources/api/classxAH_1_1ClusterContainer.rst.txt new file mode 100644 index 0000000000..ea99abbbf8 --- /dev/null +++ b/_sources/api/classxAH_1_1ClusterContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1ClusterContainer: + +Class ClusterContainer +====================== + +- Defined in :ref:`file_xAODAnaHelpers_ClusterContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Cluster, HelperClasses::ClusterInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::ClusterContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Electron.rst.txt b/_sources/api/classxAH_1_1Electron.rst.txt new file mode 100644 index 0000000000..1a86999cfb --- /dev/null +++ b/_sources/api/classxAH_1_1Electron.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Electron: + +Class Electron +============== + +- Defined in :ref:`file_xAODAnaHelpers_Electron.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Electron + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1ElectronContainer.rst.txt b/_sources/api/classxAH_1_1ElectronContainer.rst.txt new file mode 100644 index 0000000000..c55205dd59 --- /dev/null +++ b/_sources/api/classxAH_1_1ElectronContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1ElectronContainer: + +Class ElectronContainer +======================= + +- Defined in :ref:`file_xAODAnaHelpers_ElectronContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Electron, HelperClasses::ElectronInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::ElectronContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1EventInfo.rst.txt b/_sources/api/classxAH_1_1EventInfo.rst.txt new file mode 100644 index 0000000000..3480830bf5 --- /dev/null +++ b/_sources/api/classxAH_1_1EventInfo.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classxAH_1_1EventInfo: + +Class EventInfo +=============== + +- Defined in :ref:`file_xAODAnaHelpers_EventInfo.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::EventInfo + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1FatJet.rst.txt b/_sources/api/classxAH_1_1FatJet.rst.txt new file mode 100644 index 0000000000..c3b660dcb0 --- /dev/null +++ b/_sources/api/classxAH_1_1FatJet.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1FatJet: + +Class FatJet +============ + +- Defined in :ref:`file_xAODAnaHelpers_FatJet.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::FatJet + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1FatJetContainer.rst.txt b/_sources/api/classxAH_1_1FatJetContainer.rst.txt new file mode 100644 index 0000000000..84b69cf400 --- /dev/null +++ b/_sources/api/classxAH_1_1FatJetContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1FatJetContainer: + +Class FatJetContainer +===================== + +- Defined in :ref:`file_xAODAnaHelpers_FatJetContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< FatJet, HelperClasses::JetInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::FatJetContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Jet.rst.txt b/_sources/api/classxAH_1_1Jet.rst.txt new file mode 100644 index 0000000000..d17f7a2c59 --- /dev/null +++ b/_sources/api/classxAH_1_1Jet.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Jet: + +Class Jet +========= + +- Defined in :ref:`file_xAODAnaHelpers_Jet.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Jet + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1JetContainer.rst.txt b/_sources/api/classxAH_1_1JetContainer.rst.txt new file mode 100644 index 0000000000..b96ca25ad5 --- /dev/null +++ b/_sources/api/classxAH_1_1JetContainer.rst.txt @@ -0,0 +1,35 @@ +.. _exhale_class_classxAH_1_1JetContainer: + +Class JetContainer +================== + +- Defined in :ref:`file_xAODAnaHelpers_JetContainer.h` + + +Nested Relationships +-------------------- + + +Nested Types +************ + +- :ref:`exhale_struct_structxAH_1_1JetContainer_1_1btagOpPoint` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Jet, HelperClasses::JetInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::JetContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1L1JetContainer.rst.txt b/_sources/api/classxAH_1_1L1JetContainer.rst.txt new file mode 100644 index 0000000000..6de15fdc55 --- /dev/null +++ b/_sources/api/classxAH_1_1L1JetContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1L1JetContainer: + +Class L1JetContainer +==================== + +- Defined in :ref:`file_xAODAnaHelpers_L1JetContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Jet, HelperClasses::JetInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::L1JetContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1MetContainer.rst.txt b/_sources/api/classxAH_1_1MetContainer.rst.txt new file mode 100644 index 0000000000..3c5245fa2e --- /dev/null +++ b/_sources/api/classxAH_1_1MetContainer.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classxAH_1_1MetContainer: + +Class MetContainer +================== + +- Defined in :ref:`file_xAODAnaHelpers_MetContainer.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::MetContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Muon.rst.txt b/_sources/api/classxAH_1_1Muon.rst.txt new file mode 100644 index 0000000000..d2a0c3b12c --- /dev/null +++ b/_sources/api/classxAH_1_1Muon.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Muon: + +Class Muon +========== + +- Defined in :ref:`file_xAODAnaHelpers_Muon.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Muon + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1MuonContainer.rst.txt b/_sources/api/classxAH_1_1MuonContainer.rst.txt new file mode 100644 index 0000000000..6540d8d477 --- /dev/null +++ b/_sources/api/classxAH_1_1MuonContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1MuonContainer: + +Class MuonContainer +=================== + +- Defined in :ref:`file_xAODAnaHelpers_MuonContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Muon, HelperClasses::MuonInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::MuonContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1OnlineBeamSpotTool.rst.txt b/_sources/api/classxAH_1_1OnlineBeamSpotTool.rst.txt new file mode 100644 index 0000000000..fa335d238e --- /dev/null +++ b/_sources/api/classxAH_1_1OnlineBeamSpotTool.rst.txt @@ -0,0 +1,26 @@ +.. _exhale_class_classxAH_1_1OnlineBeamSpotTool: + +Class OnlineBeamSpotTool +======================== + +- Defined in :ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h` + + +Nested Relationships +-------------------- + + +Nested Types +************ + +- :ref:`exhale_struct_structxAH_1_1OnlineBeamSpotTool_1_1LBData` + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::OnlineBeamSpotTool + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Particle.rst.txt b/_sources/api/classxAH_1_1Particle.rst.txt new file mode 100644 index 0000000000..816ae69c98 --- /dev/null +++ b/_sources/api/classxAH_1_1Particle.rst.txt @@ -0,0 +1,33 @@ +.. _exhale_class_classxAH_1_1Particle: + +Class Particle +============== + +- Defined in :ref:`file_xAODAnaHelpers_Particle.h` + + +Inheritance Relationships +------------------------- + +Derived Types +************* + +- ``public xAH::Cluster`` (:ref:`exhale_class_classxAH_1_1Cluster`) +- ``public xAH::Electron`` (:ref:`exhale_class_classxAH_1_1Electron`) +- ``public xAH::FatJet`` (:ref:`exhale_class_classxAH_1_1FatJet`) +- ``public xAH::Jet`` (:ref:`exhale_class_classxAH_1_1Jet`) +- ``public xAH::Muon`` (:ref:`exhale_class_classxAH_1_1Muon`) +- ``public xAH::Photon`` (:ref:`exhale_class_classxAH_1_1Photon`) +- ``public xAH::Tau`` (:ref:`exhale_class_classxAH_1_1Tau`) +- ``public xAH::TrackPart`` (:ref:`exhale_class_classxAH_1_1TrackPart`) +- ``public xAH::TruthPart`` (:ref:`exhale_class_classxAH_1_1TruthPart`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Particle + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1ParticleContainer.rst.txt b/_sources/api/classxAH_1_1ParticleContainer.rst.txt new file mode 100644 index 0000000000..43455acdb5 --- /dev/null +++ b/_sources/api/classxAH_1_1ParticleContainer.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classxAH_1_1ParticleContainer: + +Template Class ParticleContainer +================================ + +- Defined in :ref:`file_xAODAnaHelpers_ParticleContainer.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::ParticleContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Photon.rst.txt b/_sources/api/classxAH_1_1Photon.rst.txt new file mode 100644 index 0000000000..a95161680e --- /dev/null +++ b/_sources/api/classxAH_1_1Photon.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Photon: + +Class Photon +============ + +- Defined in :ref:`file_xAODAnaHelpers_Photon.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Photon + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1PhotonContainer.rst.txt b/_sources/api/classxAH_1_1PhotonContainer.rst.txt new file mode 100644 index 0000000000..423e06aa78 --- /dev/null +++ b/_sources/api/classxAH_1_1PhotonContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1PhotonContainer: + +Class PhotonContainer +===================== + +- Defined in :ref:`file_xAODAnaHelpers_PhotonContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Photon, HelperClasses::PhotonInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::PhotonContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1Tau.rst.txt b/_sources/api/classxAH_1_1Tau.rst.txt new file mode 100644 index 0000000000..4bf8f5c41e --- /dev/null +++ b/_sources/api/classxAH_1_1Tau.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1Tau: + +Class Tau +========= + +- Defined in :ref:`file_xAODAnaHelpers_Tau.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::Tau + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1TauContainer.rst.txt b/_sources/api/classxAH_1_1TauContainer.rst.txt new file mode 100644 index 0000000000..cac6df30f5 --- /dev/null +++ b/_sources/api/classxAH_1_1TauContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1TauContainer: + +Class TauContainer +================== + +- Defined in :ref:`file_xAODAnaHelpers_TauContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< Tau, HelperClasses::TauInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::TauContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1TrackContainer.rst.txt b/_sources/api/classxAH_1_1TrackContainer.rst.txt new file mode 100644 index 0000000000..eb8cbed082 --- /dev/null +++ b/_sources/api/classxAH_1_1TrackContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1TrackContainer: + +Class TrackContainer +==================== + +- Defined in :ref:`file_xAODAnaHelpers_TrackContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< TrackPart, HelperClasses::TrackInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::TrackContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1TrackPart.rst.txt b/_sources/api/classxAH_1_1TrackPart.rst.txt new file mode 100644 index 0000000000..dfcad464c7 --- /dev/null +++ b/_sources/api/classxAH_1_1TrackPart.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1TrackPart: + +Class TrackPart +=============== + +- Defined in :ref:`file_xAODAnaHelpers_TrackPart.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::TrackPart + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1TruthContainer.rst.txt b/_sources/api/classxAH_1_1TruthContainer.rst.txt new file mode 100644 index 0000000000..7998c92f25 --- /dev/null +++ b/_sources/api/classxAH_1_1TruthContainer.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1TruthContainer: + +Class TruthContainer +==================== + +- Defined in :ref:`file_xAODAnaHelpers_TruthContainer.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::ParticleContainer< TruthPart, HelperClasses::TruthInfoSwitch >`` (:ref:`exhale_class_classxAH_1_1ParticleContainer`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::TruthContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1TruthPart.rst.txt b/_sources/api/classxAH_1_1TruthPart.rst.txt new file mode 100644 index 0000000000..923c8fb21b --- /dev/null +++ b/_sources/api/classxAH_1_1TruthPart.rst.txt @@ -0,0 +1,25 @@ +.. _exhale_class_classxAH_1_1TruthPart: + +Class TruthPart +=============== + +- Defined in :ref:`file_xAODAnaHelpers_TruthPart.h` + + +Inheritance Relationships +------------------------- + +Base Type +********* + +- ``public xAH::Particle`` (:ref:`exhale_class_classxAH_1_1Particle`) + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::TruthPart + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/classxAH_1_1VertexContainer.rst.txt b/_sources/api/classxAH_1_1VertexContainer.rst.txt new file mode 100644 index 0000000000..d51028606f --- /dev/null +++ b/_sources/api/classxAH_1_1VertexContainer.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_class_classxAH_1_1VertexContainer: + +Class VertexContainer +===================== + +- Defined in :ref:`file_xAODAnaHelpers_VertexContainer.h` + + +Class Documentation +------------------- + + +.. doxygenclass:: xAH::VertexContainer + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.rst.txt b/_sources/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.rst.txt new file mode 100644 index 0000000000..dec456a652 --- /dev/null +++ b/_sources/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5: + +Define EL_RETURN_CHECK +====================== + +- Defined in :ref:`file_xAODAnaHelpers_tools_ReturnCheck.h` + + +Define Documentation +-------------------- + + +.. doxygendefine:: EL_RETURN_CHECK diff --git a/_sources/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.rst.txt b/_sources/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.rst.txt new file mode 100644 index 0000000000..b3261f7320 --- /dev/null +++ b/_sources/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a: + +Define RETURN_CHECK +=================== + +- Defined in :ref:`file_xAODAnaHelpers_tools_ReturnCheck.h` + + +Define Documentation +-------------------- + + +.. doxygendefine:: RETURN_CHECK diff --git a/_sources/api/dir_Root.rst.txt b/_sources/api/dir_Root.rst.txt new file mode 100644 index 0000000000..341952b8db --- /dev/null +++ b/_sources/api/dir_Root.rst.txt @@ -0,0 +1,85 @@ +.. _dir_Root: + + +Directory Root +============== + + +*Directory path:* ``Root`` + + +Files +----- + +- :ref:`file_Root_Algorithm.cxx` +- :ref:`file_Root_BasicEventSelection.cxx` +- :ref:`file_Root_BJetEfficiencyCorrector.cxx` +- :ref:`file_Root_ClusterContainer.cxx` +- :ref:`file_Root_ClusterHists.cxx` +- :ref:`file_Root_ClusterHistsAlgo.cxx` +- :ref:`file_Root_DebugTool.cxx` +- :ref:`file_Root_ElectronCalibrator.cxx` +- :ref:`file_Root_ElectronContainer.cxx` +- :ref:`file_Root_ElectronEfficiencyCorrector.cxx` +- :ref:`file_Root_ElectronHists.cxx` +- :ref:`file_Root_ElectronHistsAlgo.cxx` +- :ref:`file_Root_ElectronSelector.cxx` +- :ref:`file_Root_EventInfo.cxx` +- :ref:`file_Root_FatJetContainer.cxx` +- :ref:`file_Root_HelperClasses.cxx` +- :ref:`file_Root_HelperFunctions.cxx` +- :ref:`file_Root_HelpTreeBase.cxx` +- :ref:`file_Root_HistogramManager.cxx` +- :ref:`file_Root_HLTJetGetter.cxx` +- :ref:`file_Root_HLTJetRoIBuilder.cxx` +- :ref:`file_Root_IParticleHists.cxx` +- :ref:`file_Root_IParticleHistsAlgo.cxx` +- :ref:`file_Root_IsoCloseByCorr.cxx` +- :ref:`file_Root_Jet.cxx` +- :ref:`file_Root_JetCalibrator.cxx` +- :ref:`file_Root_JetContainer.cxx` +- :ref:`file_Root_JetHists.cxx` +- :ref:`file_Root_JetHistsAlgo.cxx` +- :ref:`file_Root_JetSelector.cxx` +- :ref:`file_Root_L1JetContainer.cxx` +- :ref:`file_Root_LinkDef.h` +- :ref:`file_Root_MessagePrinterAlgo.cxx` +- :ref:`file_Root_METConstructor.cxx` +- :ref:`file_Root_MetContainer.cxx` +- :ref:`file_Root_MetHists.cxx` +- :ref:`file_Root_MetHistsAlgo.cxx` +- :ref:`file_Root_MinixAOD.cxx` +- :ref:`file_Root_MuonCalibrator.cxx` +- :ref:`file_Root_MuonContainer.cxx` +- :ref:`file_Root_MuonEfficiencyCorrector.cxx` +- :ref:`file_Root_MuonHists.cxx` +- :ref:`file_Root_MuonHistsAlgo.cxx` +- :ref:`file_Root_MuonInFatJetCorrector.cxx` +- :ref:`file_Root_MuonSelector.cxx` +- :ref:`file_Root_OnlineBeamSpotTool.cxx` +- :ref:`file_Root_OverlapRemover.cxx` +- :ref:`file_Root_ParticlePIDManager.cxx` +- :ref:`file_Root_PhotonCalibrator.cxx` +- :ref:`file_Root_PhotonContainer.cxx` +- :ref:`file_Root_PhotonHists.cxx` +- :ref:`file_Root_PhotonHistsAlgo.cxx` +- :ref:`file_Root_PhotonSelector.cxx` +- :ref:`file_Root_TauCalibrator.cxx` +- :ref:`file_Root_TauContainer.cxx` +- :ref:`file_Root_TauEfficiencyCorrector.cxx` +- :ref:`file_Root_TauJetMatching.cxx` +- :ref:`file_Root_TauSelector.cxx` +- :ref:`file_Root_TrackContainer.cxx` +- :ref:`file_Root_TrackHists.cxx` +- :ref:`file_Root_TrackHistsAlgo.cxx` +- :ref:`file_Root_TrackSelector.cxx` +- :ref:`file_Root_TracksInJetHists.cxx` +- :ref:`file_Root_TreeAlgo.cxx` +- :ref:`file_Root_TrigMatcher.cxx` +- :ref:`file_Root_TruthContainer.cxx` +- :ref:`file_Root_TruthSelector.cxx` +- :ref:`file_Root_VertexContainer.cxx` +- :ref:`file_Root_VtxHists.cxx` +- :ref:`file_Root_Writer.cxx` + + diff --git a/_sources/api/dir_xAODAnaHelpers.rst.txt b/_sources/api/dir_xAODAnaHelpers.rst.txt new file mode 100644 index 0000000000..01e6fa6da4 --- /dev/null +++ b/_sources/api/dir_xAODAnaHelpers.rst.txt @@ -0,0 +1,99 @@ +.. _dir_xAODAnaHelpers: + + +Directory xAODAnaHelpers +======================== + + +*Directory path:* ``xAODAnaHelpers`` + +Subdirectories +-------------- + +- :ref:`dir_xAODAnaHelpers_tools` + + +Files +----- + +- :ref:`file_xAODAnaHelpers_Algorithm.h` +- :ref:`file_xAODAnaHelpers_BasicEventSelection.h` +- :ref:`file_xAODAnaHelpers_BJetEfficiencyCorrector.h` +- :ref:`file_xAODAnaHelpers_Cluster.h` +- :ref:`file_xAODAnaHelpers_ClusterContainer.h` +- :ref:`file_xAODAnaHelpers_ClusterHists.h` +- :ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_DebugTool.h` +- :ref:`file_xAODAnaHelpers_Electron.h` +- :ref:`file_xAODAnaHelpers_ElectronCalibrator.h` +- :ref:`file_xAODAnaHelpers_ElectronContainer.h` +- :ref:`file_xAODAnaHelpers_ElectronEfficiencyCorrector.h` +- :ref:`file_xAODAnaHelpers_ElectronHists.h` +- :ref:`file_xAODAnaHelpers_ElectronHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_ElectronSelector.h` +- :ref:`file_xAODAnaHelpers_EventInfo.h` +- :ref:`file_xAODAnaHelpers_FatJet.h` +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` +- :ref:`file_xAODAnaHelpers_HelperClasses.h` +- :ref:`file_xAODAnaHelpers_HelperFunctions.h` +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` +- :ref:`file_xAODAnaHelpers_HistogramManager.h` +- :ref:`file_xAODAnaHelpers_HLTJetGetter.h` +- :ref:`file_xAODAnaHelpers_HLTJetRoIBuilder.h` +- :ref:`file_xAODAnaHelpers_IParticleHists.h` +- :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_IsoCloseByCorr.h` +- :ref:`file_xAODAnaHelpers_Jet.h` +- :ref:`file_xAODAnaHelpers_JetCalibrator.h` +- :ref:`file_xAODAnaHelpers_JetContainer.h` +- :ref:`file_xAODAnaHelpers_JetHists.h` +- :ref:`file_xAODAnaHelpers_JetHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_JetSelector.h` +- :ref:`file_xAODAnaHelpers_L1JetContainer.h` +- :ref:`file_xAODAnaHelpers_MessagePrinterAlgo.h` +- :ref:`file_xAODAnaHelpers_METConstructor.h` +- :ref:`file_xAODAnaHelpers_MetContainer.h` +- :ref:`file_xAODAnaHelpers_MetHists.h` +- :ref:`file_xAODAnaHelpers_MetHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_MinixAOD.h` +- :ref:`file_xAODAnaHelpers_Muon.h` +- :ref:`file_xAODAnaHelpers_MuonCalibrator.h` +- :ref:`file_xAODAnaHelpers_MuonContainer.h` +- :ref:`file_xAODAnaHelpers_MuonEfficiencyCorrector.h` +- :ref:`file_xAODAnaHelpers_MuonHists.h` +- :ref:`file_xAODAnaHelpers_MuonHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_MuonInFatJetCorrector.h` +- :ref:`file_xAODAnaHelpers_MuonSelector.h` +- :ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h` +- :ref:`file_xAODAnaHelpers_OverlapRemover.h` +- :ref:`file_xAODAnaHelpers_Particle.h` +- :ref:`file_xAODAnaHelpers_ParticleContainer.h` +- :ref:`file_xAODAnaHelpers_ParticlePIDManager.h` +- :ref:`file_xAODAnaHelpers_Photon.h` +- :ref:`file_xAODAnaHelpers_PhotonCalibrator.h` +- :ref:`file_xAODAnaHelpers_PhotonContainer.h` +- :ref:`file_xAODAnaHelpers_PhotonHists.h` +- :ref:`file_xAODAnaHelpers_PhotonHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_PhotonSelector.h` +- :ref:`file_xAODAnaHelpers_Tau.h` +- :ref:`file_xAODAnaHelpers_TauCalibrator.h` +- :ref:`file_xAODAnaHelpers_TauContainer.h` +- :ref:`file_xAODAnaHelpers_TauEfficiencyCorrector.h` +- :ref:`file_xAODAnaHelpers_TauJetMatching.h` +- :ref:`file_xAODAnaHelpers_TauSelector.h` +- :ref:`file_xAODAnaHelpers_TrackContainer.h` +- :ref:`file_xAODAnaHelpers_TrackHists.h` +- :ref:`file_xAODAnaHelpers_TrackHistsAlgo.h` +- :ref:`file_xAODAnaHelpers_TrackPart.h` +- :ref:`file_xAODAnaHelpers_TrackSelector.h` +- :ref:`file_xAODAnaHelpers_TracksInJetHists.h` +- :ref:`file_xAODAnaHelpers_TreeAlgo.h` +- :ref:`file_xAODAnaHelpers_TrigMatcher.h` +- :ref:`file_xAODAnaHelpers_TruthContainer.h` +- :ref:`file_xAODAnaHelpers_TruthPart.h` +- :ref:`file_xAODAnaHelpers_TruthSelector.h` +- :ref:`file_xAODAnaHelpers_VertexContainer.h` +- :ref:`file_xAODAnaHelpers_VtxHists.h` +- :ref:`file_xAODAnaHelpers_Writer.h` + + diff --git a/_sources/api/dir_xAODAnaHelpers_tools.rst.txt b/_sources/api/dir_xAODAnaHelpers_tools.rst.txt new file mode 100644 index 0000000000..9975fe92f8 --- /dev/null +++ b/_sources/api/dir_xAODAnaHelpers_tools.rst.txt @@ -0,0 +1,21 @@ +.. _dir_xAODAnaHelpers_tools: + + +Directory tools +=============== + + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +*Directory path:* ``xAODAnaHelpers/tools`` + + +Files +----- + +- :ref:`file_xAODAnaHelpers_tools_ReturnCheck.h` +- :ref:`file_xAODAnaHelpers_tools_ReturnCheckConfig.h` + + diff --git a/_sources/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.rst.txt b/_sources/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.rst.txt new file mode 100644 index 0000000000..3b4a1c1671 --- /dev/null +++ b/_sources/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf: + +Enum ToolName +============= + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Enum Documentation +------------------ + + +.. doxygenenum:: HelperClasses::ToolName diff --git a/_sources/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.rst.txt b/_sources/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.rst.txt new file mode 100644 index 0000000000..46815394b0 --- /dev/null +++ b/_sources/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf: + +Enum ContainerType +================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperClasses.h` + + +Enum Documentation +------------------ + + +.. doxygenenum:: HelperClasses::ContainerType diff --git a/_sources/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.rst.txt b/_sources/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.rst.txt new file mode 100644 index 0000000000..cc09b00b8a --- /dev/null +++ b/_sources/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e: + +Enum ShowerType +=============== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Enum Documentation +------------------ + + +.. doxygenenum:: HelperFunctions::ShowerType diff --git a/_sources/api/file_Root_Algorithm.cxx.rst.txt b/_sources/api/file_Root_Algorithm.cxx.rst.txt new file mode 100644 index 0000000000..a1e8d25cf1 --- /dev/null +++ b/_sources/api/file_Root_Algorithm.cxx.rst.txt @@ -0,0 +1,52 @@ + +.. _file_Root_Algorithm.cxx: + +File Algorithm.cxx +================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/Algorithm.cxx``) +----------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_Algorithm.cxx.rst + + + + + +Includes +-------- + + +- ``RootCoreUtils/ThrowMsg.h`` + +- ``boost/algorithm/string.hpp`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4` + diff --git a/_sources/api/file_Root_BJetEfficiencyCorrector.cxx.rst.txt b/_sources/api/file_Root_BJetEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..b1e1b58f36 --- /dev/null +++ b/_sources/api/file_Root_BJetEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,68 @@ + +.. _file_Root_BJetEfficiencyCorrector.cxx: + +File BJetEfficiencyCorrector.cxx +================================ + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/BJetEfficiencyCorrector.cxx``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_BJetEfficiencyCorrector.cxx.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PathResolver/PathResolver.h`` + +- ``SampleHandler/MetaFields.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/BJetEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_BJetEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODBTaggingEfficiency/BTaggingEfficiencyTool.h`` + +- ``xAODBTaggingEfficiency/BTaggingSelectionTool.h`` + +- ``xAODJet/JetAuxContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b` + diff --git a/_sources/api/file_Root_BasicEventSelection.cxx.rst.txt b/_sources/api/file_Root_BasicEventSelection.cxx.rst.txt new file mode 100644 index 0000000000..53890728ea --- /dev/null +++ b/_sources/api/file_Root_BasicEventSelection.cxx.rst.txt @@ -0,0 +1,84 @@ + +.. _file_Root_BasicEventSelection.cxx: + +File BasicEventSelection.cxx +============================ + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/BasicEventSelection.cxx``) +--------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_BasicEventSelection.cxx.rst + + + + + +Includes +-------- + + +- ``AsgTools/AsgMetadataTool.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/OutputStream.h`` + +- ``EventLoop/Worker.h`` + +- ``GoodRunsLists/GoodRunsListSelectionTool.h`` + +- ``PATInterfaces/CorrectionCode.h`` + +- ``PileupReweighting/PileupReweightingTool.h`` + +- ``TFile.h`` + +- ``TSystem.h`` + +- ``TTree.h`` + +- ``TTreeFormula.h`` + +- ``TrigConfxAOD/xAODConfigTool.h`` + +- ``xAODAnaHelpers/BasicEventSelection.h`` (:ref:`file_xAODAnaHelpers_BasicEventSelection.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODCore/tools/IOStats.h`` + +- ``xAODCore/tools/ReadStats.h`` + +- ``xAODCutFlow/CutBookkeeper.h`` + +- ``xAODCutFlow/CutBookkeeperContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODMetaData/FileMetaData.h`` + +- ``xAODTracking/VertexContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795` + diff --git a/_sources/api/file_Root_ClusterContainer.cxx.rst.txt b/_sources/api/file_Root_ClusterContainer.cxx.rst.txt new file mode 100644 index 0000000000..84792f2cb5 --- /dev/null +++ b/_sources/api/file_Root_ClusterContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_ClusterContainer.cxx: + +File ClusterContainer.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ClusterContainer.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ClusterContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/ClusterContainer.h`` (:ref:`file_xAODAnaHelpers_ClusterContainer.h`) + + + + + diff --git a/_sources/api/file_Root_ClusterHists.cxx.rst.txt b/_sources/api/file_Root_ClusterHists.cxx.rst.txt new file mode 100644 index 0000000000..438b5d3d22 --- /dev/null +++ b/_sources/api/file_Root_ClusterHists.cxx.rst.txt @@ -0,0 +1,46 @@ + +.. _file_Root_ClusterHists.cxx: + +File ClusterHists.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ClusterHists.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ClusterHists.cxx.rst + + + + + +Includes +-------- + + +- ``math.h`` + +- ``xAODAnaHelpers/ClusterHists.h`` (:ref:`file_xAODAnaHelpers_ClusterHists.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e` + diff --git a/_sources/api/file_Root_ClusterHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_ClusterHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..fba478507b --- /dev/null +++ b/_sources/api/file_Root_ClusterHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_ClusterHistsAlgo.cxx: + +File ClusterHistsAlgo.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ClusterHistsAlgo.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ClusterHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/ClusterHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff` + diff --git a/_sources/api/file_Root_DebugTool.cxx.rst.txt b/_sources/api/file_Root_DebugTool.cxx.rst.txt new file mode 100644 index 0000000000..dee27fbe6d --- /dev/null +++ b/_sources/api/file_Root_DebugTool.cxx.rst.txt @@ -0,0 +1,62 @@ + +.. _file_Root_DebugTool.cxx: + +File DebugTool.cxx +================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/DebugTool.cxx``) +----------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_DebugTool.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``TFile.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/DebugTool.h`` (:ref:`file_xAODAnaHelpers_DebugTool.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf` + diff --git a/_sources/api/file_Root_ElectronCalibrator.cxx.rst.txt b/_sources/api/file_Root_ElectronCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..3af46b54a3 --- /dev/null +++ b/_sources/api/file_Root_ElectronCalibrator.cxx.rst.txt @@ -0,0 +1,74 @@ + +.. _file_Root_ElectronCalibrator.cxx: + +File ElectronCalibrator.cxx +=========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronCalibrator.cxx``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronCalibrator.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/ElectronCalibrator.h`` (:ref:`file_xAODAnaHelpers_ElectronCalibrator.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/Electron.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac` + diff --git a/_sources/api/file_Root_ElectronContainer.cxx.rst.txt b/_sources/api/file_Root_ElectronContainer.cxx.rst.txt new file mode 100644 index 0000000000..acc5c4dda4 --- /dev/null +++ b/_sources/api/file_Root_ElectronContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_ElectronContainer.cxx: + +File ElectronContainer.cxx +========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronContainer.cxx``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/ElectronContainer.h`` (:ref:`file_xAODAnaHelpers_ElectronContainer.h`) + + + + + diff --git a/_sources/api/file_Root_ElectronEfficiencyCorrector.cxx.rst.txt b/_sources/api/file_Root_ElectronEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..3e1439fa4c --- /dev/null +++ b/_sources/api/file_Root_ElectronEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,76 @@ + +.. _file_Root_ElectronEfficiencyCorrector.cxx: + +File ElectronEfficiencyCorrector.cxx +==================================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronEfficiencyCorrector.cxx``) +----------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronEfficiencyCorrector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``iostream`` + +- ``memory`` + +- ``xAODAnaHelpers/ElectronEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_ElectronEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODEgamma/Electron.h`` + +- ``xAODEgamma/ElectronAuxContainer.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85` + diff --git a/_sources/api/file_Root_ElectronHists.cxx.rst.txt b/_sources/api/file_Root_ElectronHists.cxx.rst.txt new file mode 100644 index 0000000000..83e56c4c24 --- /dev/null +++ b/_sources/api/file_Root_ElectronHists.cxx.rst.txt @@ -0,0 +1,48 @@ + +.. _file_Root_ElectronHists.cxx: + +File ElectronHists.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronHists.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronHists.cxx.rst + + + + + +Includes +-------- + + +- ``sstream`` + +- ``xAODAnaHelpers/ElectronHists.h`` (:ref:`file_xAODAnaHelpers_ElectronHists.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d` + diff --git a/_sources/api/file_Root_ElectronHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_ElectronHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..2d4ebccb8b --- /dev/null +++ b/_sources/api/file_Root_ElectronHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_ElectronHistsAlgo.cxx: + +File ElectronHistsAlgo.cxx +========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronHistsAlgo.cxx``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/ElectronHists.h`` (:ref:`file_xAODAnaHelpers_ElectronHists.h`) + +- ``xAODAnaHelpers/ElectronHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_ElectronHistsAlgo.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEgamma/ElectronContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4` + diff --git a/_sources/api/file_Root_ElectronSelector.cxx.rst.txt b/_sources/api/file_Root_ElectronSelector.cxx.rst.txt new file mode 100644 index 0000000000..7a13159582 --- /dev/null +++ b/_sources/api/file_Root_ElectronSelector.cxx.rst.txt @@ -0,0 +1,90 @@ + +.. _file_Root_ElectronSelector.cxx: + +File ElectronSelector.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ElectronSelector.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ElectronSelector.cxx.rst + + + + + +Includes +-------- + + +- ``ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h`` + +- ``ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``IsolationSelection/IsolationSelectionTool.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/MatchFromCompositeTool.h`` + +- ``TriggerMatchingTool/MatchingTool.h`` + +- ``iostream`` + +- ``sstream`` + +- ``tuple`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/ElectronSelector.h`` (:ref:`file_xAODAnaHelpers_ElectronSelector.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEgamma/EgammaDefs.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTracking/TrackParticlexAODHelpers.h`` + +- ``xAODTracking/VertexContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a` + diff --git a/_sources/api/file_Root_EventInfo.cxx.rst.txt b/_sources/api/file_Root_EventInfo.cxx.rst.txt new file mode 100644 index 0000000000..00c93abe88 --- /dev/null +++ b/_sources/api/file_Root_EventInfo.cxx.rst.txt @@ -0,0 +1,47 @@ + +.. _file_Root_EventInfo.cxx: + +File EventInfo.cxx +================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/EventInfo.cxx``) +----------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_EventInfo.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODCaloEvent/CaloClusterContainer.h`` + +- ``xAODEventShape/EventShape.h`` + +- ``xAODTruth/TruthEventContainer.h`` + + + + + diff --git a/_sources/api/file_Root_FatJetContainer.cxx.rst.txt b/_sources/api/file_Root_FatJetContainer.cxx.rst.txt new file mode 100644 index 0000000000..c7dcfea99b --- /dev/null +++ b/_sources/api/file_Root_FatJetContainer.cxx.rst.txt @@ -0,0 +1,43 @@ + +.. _file_Root_FatJetContainer.cxx: + +File FatJetContainer.cxx +======================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/FatJetContainer.cxx``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_FatJetContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/FatJetContainer.h`` (:ref:`file_xAODAnaHelpers_FatJetContainer.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODTruth/TruthEventContainer.h`` + + + + + diff --git a/_sources/api/file_Root_HLTJetGetter.cxx.rst.txt b/_sources/api/file_Root_HLTJetGetter.cxx.rst.txt new file mode 100644 index 0000000000..2f40f6633e --- /dev/null +++ b/_sources/api/file_Root_HLTJetGetter.cxx.rst.txt @@ -0,0 +1,68 @@ + +.. _file_Root_HLTJetGetter.cxx: + +File HLTJetGetter.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HLTJetGetter.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HLTJetGetter.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``TrigConfxAOD/xAODConfigTool.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``iostream`` + +- ``vector`` + +- ``xAODAnaHelpers/HLTJetGetter.h`` (:ref:`file_xAODAnaHelpers_HLTJetGetter.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetAuxContainer.h`` + +- ``xAODJet/JetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b` + diff --git a/_sources/api/file_Root_HLTJetRoIBuilder.cxx.rst.txt b/_sources/api/file_Root_HLTJetRoIBuilder.cxx.rst.txt new file mode 100644 index 0000000000..b60aceffe8 --- /dev/null +++ b/_sources/api/file_Root_HLTJetRoIBuilder.cxx.rst.txt @@ -0,0 +1,31 @@ + +.. _file_Root_HLTJetRoIBuilder.cxx: + +File HLTJetRoIBuilder.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HLTJetRoIBuilder.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HLTJetRoIBuilder.cxx.rst + + + + + + + + + diff --git a/_sources/api/file_Root_HelpTreeBase.cxx.rst.txt b/_sources/api/file_Root_HelpTreeBase.cxx.rst.txt new file mode 100644 index 0000000000..7c46920e72 --- /dev/null +++ b/_sources/api/file_Root_HelpTreeBase.cxx.rst.txt @@ -0,0 +1,63 @@ + +.. _file_Root_HelpTreeBase.cxx: + +File HelpTreeBase.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HelpTreeBase.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HelpTreeBase.cxx.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``AsgMessaging/StatusCode.h`` + +- ``TrigConfxAOD/xAODConfigTool.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``exception`` + +- ``iostream`` + +- ``sstream`` + +- ``xAODAnaHelpers/HelpTreeBase.h`` (:ref:`file_xAODAnaHelpers_HelpTreeBase.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODBTagging/BTagging.h`` + +- ``xAODJet/JetConstituentVector.h`` + +- ``xAODPrimitives/IsolationType.h`` + +- ``xAODTracking/TrackParticle.h`` + +- ``xAODTracking/TrackSummaryAccessors_v1.h`` + + + + + diff --git a/_sources/api/file_Root_HelperClasses.cxx.rst.txt b/_sources/api/file_Root_HelperClasses.cxx.rst.txt new file mode 100644 index 0000000000..0f99bc34d3 --- /dev/null +++ b/_sources/api/file_Root_HelperClasses.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_HelperClasses.cxx: + +File HelperClasses.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HelperClasses.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HelperClasses.cxx.rst + + + + + +Includes +-------- + + +- ``ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h`` + +- ``ElectronPhotonSelectorTools/LikelihoodEnums.h`` + +- ``ElectronPhotonSelectorTools/egammaPIDdefs.h`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODMuon/Muon.h`` + +- ``xAODPrimitives/IsolationType.h`` + +- ``xAODTau/TauDefs.h`` + + + + + + +Namespaces +---------- + + +- :ref:`namespace_HelperClasses` + diff --git a/_sources/api/file_Root_HelperFunctions.cxx.rst.txt b/_sources/api/file_Root_HelperFunctions.cxx.rst.txt new file mode 100644 index 0000000000..4ec9e24a1f --- /dev/null +++ b/_sources/api/file_Root_HelperFunctions.cxx.rst.txt @@ -0,0 +1,55 @@ + +.. _file_Root_HelperFunctions.cxx: + +File HelperFunctions.cxx +======================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HelperFunctions.cxx``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HelperFunctions.cxx.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``JetEDM/JetConstituentFiller.h`` + +- ``SampleHandler/MetaFields.h`` + +- ``SampleHandler/MetaObject.h`` + +- ``SampleHandler/SampleGrid.h`` + +- ``fastjet/ClusterSequence.hh`` + +- ``fastjet/PseudoJet.hh`` + +- ``fastjet/tools/Filter.hh`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODBase/IParticleContainer.h`` + + + + + diff --git a/_sources/api/file_Root_HistogramManager.cxx.rst.txt b/_sources/api/file_Root_HistogramManager.cxx.rst.txt new file mode 100644 index 0000000000..79738bd2d7 --- /dev/null +++ b/_sources/api/file_Root_HistogramManager.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_HistogramManager.cxx: + +File HistogramManager.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/HistogramManager.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_HistogramManager.cxx.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MsgStream.h`` + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + + + + + diff --git a/_sources/api/file_Root_IParticleHists.cxx.rst.txt b/_sources/api/file_Root_IParticleHists.cxx.rst.txt new file mode 100644 index 0000000000..159e885752 --- /dev/null +++ b/_sources/api/file_Root_IParticleHists.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_IParticleHists.cxx: + +File IParticleHists.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/IParticleHists.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_IParticleHists.cxx.rst + + + + + +Includes +-------- + + +- ``sstream`` + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + + + + + diff --git a/_sources/api/file_Root_IParticleHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_IParticleHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..cf9a0cdf56 --- /dev/null +++ b/_sources/api/file_Root_IParticleHistsAlgo.cxx.rst.txt @@ -0,0 +1,60 @@ + +.. _file_Root_IParticleHistsAlgo.cxx: + +File IParticleHistsAlgo.cxx +=========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/IParticleHistsAlgo.cxx``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_IParticleHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105` + diff --git a/_sources/api/file_Root_IsoCloseByCorr.cxx.rst.txt b/_sources/api/file_Root_IsoCloseByCorr.cxx.rst.txt new file mode 100644 index 0000000000..da68c2fc9f --- /dev/null +++ b/_sources/api/file_Root_IsoCloseByCorr.cxx.rst.txt @@ -0,0 +1,74 @@ + +.. _file_Root_IsoCloseByCorr.cxx: + +File IsoCloseByCorr.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/IsoCloseByCorr.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_IsoCloseByCorr.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``iostream`` + +- ``sstream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/IsoCloseByCorr.h`` (:ref:`file_xAODAnaHelpers_IsoCloseByCorr.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/Electron.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/Photon.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODMuon/Muon.h`` + +- ``xAODMuon/MuonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065` + diff --git a/_sources/api/file_Root_Jet.cxx.rst.txt b/_sources/api/file_Root_Jet.cxx.rst.txt new file mode 100644 index 0000000000..516a77e6b2 --- /dev/null +++ b/_sources/api/file_Root_Jet.cxx.rst.txt @@ -0,0 +1,37 @@ + +.. _file_Root_Jet.cxx: + +File Jet.cxx +============ + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/Jet.cxx``) +----------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_Jet.cxx.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + + + + + diff --git a/_sources/api/file_Root_JetCalibrator.cxx.rst.txt b/_sources/api/file_Root_JetCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..071b06f150 --- /dev/null +++ b/_sources/api/file_Root_JetCalibrator.cxx.rst.txt @@ -0,0 +1,82 @@ + +.. _file_Root_JetCalibrator.cxx: + +File JetCalibrator.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/JetCalibrator.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_JetCalibrator.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``JetCalibTools/JetCalibrationTool.h`` + +- ``JetSelectorTools/JetCleaningTool.h`` + +- ``JetUncertainties/JetUncertaintiesTool.h`` + +- ``METUtilities/METHelpers.h`` + +- ``TSystem.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/JetCalibrator.h`` (:ref:`file_xAODAnaHelpers_JetCalibrator.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7` + diff --git a/_sources/api/file_Root_JetContainer.cxx.rst.txt b/_sources/api/file_Root_JetContainer.cxx.rst.txt new file mode 100644 index 0000000000..9e89d80d0c --- /dev/null +++ b/_sources/api/file_Root_JetContainer.cxx.rst.txt @@ -0,0 +1,47 @@ + +.. _file_Root_JetContainer.cxx: + +File JetContainer.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/JetContainer.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_JetContainer.cxx.rst + + + + + +Includes +-------- + + +- ``exception`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/JetContainer.h`` (:ref:`file_xAODAnaHelpers_JetContainer.h`) + +- ``xAODBTagging/BTaggingUtilities.h`` + +- ``xAODTruth/TruthEventContainer.h`` + + + + + diff --git a/_sources/api/file_Root_JetHists.cxx.rst.txt b/_sources/api/file_Root_JetHists.cxx.rst.txt new file mode 100644 index 0000000000..1d34c2d7f5 --- /dev/null +++ b/_sources/api/file_Root_JetHists.cxx.rst.txt @@ -0,0 +1,43 @@ + +.. _file_Root_JetHists.cxx: + +File JetHists.cxx +================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/JetHists.cxx``) +---------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_JetHists.cxx.rst + + + + + +Includes +-------- + + +- ``math.h`` + +- ``sstream`` + +- ``xAODAnaHelpers/JetHists.h`` (:ref:`file_xAODAnaHelpers_JetHists.h`) + +- ``xAODBTagging/BTaggingUtilities.h`` + + + + + diff --git a/_sources/api/file_Root_JetHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_JetHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..7d423070e0 --- /dev/null +++ b/_sources/api/file_Root_JetHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_JetHistsAlgo.cxx: + +File JetHistsAlgo.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/JetHistsAlgo.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_JetHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/JetHists.h`` (:ref:`file_xAODAnaHelpers_JetHists.h`) + +- ``xAODAnaHelpers/JetHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_JetHistsAlgo.h`) + +- ``xAODJet/JetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d` + diff --git a/_sources/api/file_Root_JetSelector.cxx.rst.txt b/_sources/api/file_Root_JetSelector.cxx.rst.txt new file mode 100644 index 0000000000..b760145a92 --- /dev/null +++ b/_sources/api/file_Root_JetSelector.cxx.rst.txt @@ -0,0 +1,90 @@ + +.. _file_Root_JetSelector.cxx: + +File JetSelector.cxx +==================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/JetSelector.cxx``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_JetSelector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``JetMomentTools/JetForwardJvtTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``TriggerMatchingTool/MatchFromCompositeTool.h`` + +- ``TriggerMatchingTool/MatchingTool.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/JetSelector.h`` (:ref:`file_xAODAnaHelpers_JetSelector.h`) + +- ``xAODBTaggingEfficiency/BTaggingSelectionTool.h`` + +- ``xAODCore/AuxContainerBase.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetAuxContainer.h`` + +- ``xAODJet/JetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a` + diff --git a/_sources/api/file_Root_L1JetContainer.cxx.rst.txt b/_sources/api/file_Root_L1JetContainer.cxx.rst.txt new file mode 100644 index 0000000000..241829a3ca --- /dev/null +++ b/_sources/api/file_Root_L1JetContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_L1JetContainer.cxx: + +File L1JetContainer.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/L1JetContainer.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_L1JetContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/L1JetContainer.h`` (:ref:`file_xAODAnaHelpers_L1JetContainer.h`) + + + + + diff --git a/_sources/api/file_Root_LinkDef.h.rst.txt b/_sources/api/file_Root_LinkDef.h.rst.txt new file mode 100644 index 0000000000..123a8926ce --- /dev/null +++ b/_sources/api/file_Root_LinkDef.h.rst.txt @@ -0,0 +1,113 @@ + +.. _file_Root_LinkDef.h: + +File LinkDef.h +============== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/LinkDef.h``) +------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_LinkDef.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/BJetEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_BJetEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/BasicEventSelection.h`` (:ref:`file_xAODAnaHelpers_BasicEventSelection.h`) + +- ``xAODAnaHelpers/ClusterHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h`) + +- ``xAODAnaHelpers/DebugTool.h`` (:ref:`file_xAODAnaHelpers_DebugTool.h`) + +- ``xAODAnaHelpers/ElectronCalibrator.h`` (:ref:`file_xAODAnaHelpers_ElectronCalibrator.h`) + +- ``xAODAnaHelpers/ElectronEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_ElectronEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/ElectronHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_ElectronHistsAlgo.h`) + +- ``xAODAnaHelpers/ElectronSelector.h`` (:ref:`file_xAODAnaHelpers_ElectronSelector.h`) + +- ``xAODAnaHelpers/HLTJetGetter.h`` (:ref:`file_xAODAnaHelpers_HLTJetGetter.h`) + +- ``xAODAnaHelpers/HLTJetRoIBuilder.h`` (:ref:`file_xAODAnaHelpers_HLTJetRoIBuilder.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + +- ``xAODAnaHelpers/JetCalibrator.h`` (:ref:`file_xAODAnaHelpers_JetCalibrator.h`) + +- ``xAODAnaHelpers/JetHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_JetHistsAlgo.h`) + +- ``xAODAnaHelpers/JetSelector.h`` (:ref:`file_xAODAnaHelpers_JetSelector.h`) + +- ``xAODAnaHelpers/METConstructor.h`` (:ref:`file_xAODAnaHelpers_METConstructor.h`) + +- ``xAODAnaHelpers/MessagePrinterAlgo.h`` (:ref:`file_xAODAnaHelpers_MessagePrinterAlgo.h`) + +- ``xAODAnaHelpers/MetHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_MetHistsAlgo.h`) + +- ``xAODAnaHelpers/MinixAOD.h`` (:ref:`file_xAODAnaHelpers_MinixAOD.h`) + +- ``xAODAnaHelpers/MuonCalibrator.h`` (:ref:`file_xAODAnaHelpers_MuonCalibrator.h`) + +- ``xAODAnaHelpers/MuonEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_MuonEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/MuonHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_MuonHistsAlgo.h`) + +- ``xAODAnaHelpers/MuonInFatJetCorrector.h`` (:ref:`file_xAODAnaHelpers_MuonInFatJetCorrector.h`) + +- ``xAODAnaHelpers/MuonSelector.h`` (:ref:`file_xAODAnaHelpers_MuonSelector.h`) + +- ``xAODAnaHelpers/OverlapRemover.h`` (:ref:`file_xAODAnaHelpers_OverlapRemover.h`) + +- ``xAODAnaHelpers/PhotonCalibrator.h`` (:ref:`file_xAODAnaHelpers_PhotonCalibrator.h`) + +- ``xAODAnaHelpers/PhotonHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_PhotonHistsAlgo.h`) + +- ``xAODAnaHelpers/PhotonSelector.h`` (:ref:`file_xAODAnaHelpers_PhotonSelector.h`) + +- ``xAODAnaHelpers/TauCalibrator.h`` (:ref:`file_xAODAnaHelpers_TauCalibrator.h`) + +- ``xAODAnaHelpers/TauEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_TauEfficiencyCorrector.h`) + +- ``xAODAnaHelpers/TauJetMatching.h`` (:ref:`file_xAODAnaHelpers_TauJetMatching.h`) + +- ``xAODAnaHelpers/TauSelector.h`` (:ref:`file_xAODAnaHelpers_TauSelector.h`) + +- ``xAODAnaHelpers/TrackHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_TrackHistsAlgo.h`) + +- ``xAODAnaHelpers/TrackSelector.h`` (:ref:`file_xAODAnaHelpers_TrackSelector.h`) + +- ``xAODAnaHelpers/TreeAlgo.h`` (:ref:`file_xAODAnaHelpers_TreeAlgo.h`) + +- ``xAODAnaHelpers/TrigMatcher.h`` (:ref:`file_xAODAnaHelpers_TrigMatcher.h`) + +- ``xAODAnaHelpers/TruthSelector.h`` (:ref:`file_xAODAnaHelpers_TruthSelector.h`) + +- ``xAODAnaHelpers/Writer.h`` (:ref:`file_xAODAnaHelpers_Writer.h`) + + + + + diff --git a/_sources/api/file_Root_METConstructor.cxx.rst.txt b/_sources/api/file_Root_METConstructor.cxx.rst.txt new file mode 100644 index 0000000000..06cafc17a5 --- /dev/null +++ b/_sources/api/file_Root_METConstructor.cxx.rst.txt @@ -0,0 +1,88 @@ + +.. _file_Root_METConstructor.cxx: + +File METConstructor.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/METConstructor.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_METConstructor.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``METUtilities/CutsMETMaker.h`` + +- ``METUtilities/METHelpers.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``TEnv.h`` + +- ``TSystem.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/METConstructor.h`` (:ref:`file_xAODAnaHelpers_METConstructor.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMissingET/MissingETAssociationMap.h`` + +- ``xAODMissingET/MissingETAuxContainer.h`` + +- ``xAODMissingET/MissingETComposition.h`` + +- ``xAODMissingET/MissingETContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a` + diff --git a/_sources/api/file_Root_MessagePrinterAlgo.cxx.rst.txt b/_sources/api/file_Root_MessagePrinterAlgo.cxx.rst.txt new file mode 100644 index 0000000000..6a0eb416aa --- /dev/null +++ b/_sources/api/file_Root_MessagePrinterAlgo.cxx.rst.txt @@ -0,0 +1,50 @@ + +.. _file_Root_MessagePrinterAlgo.cxx: + +File MessagePrinterAlgo.cxx +=========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MessagePrinterAlgo.cxx``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MessagePrinterAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/OutputStream.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/MessagePrinterAlgo.h`` (:ref:`file_xAODAnaHelpers_MessagePrinterAlgo.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b` + diff --git a/_sources/api/file_Root_MetContainer.cxx.rst.txt b/_sources/api/file_Root_MetContainer.cxx.rst.txt new file mode 100644 index 0000000000..44ab696f7d --- /dev/null +++ b/_sources/api/file_Root_MetContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_MetContainer.cxx: + +File MetContainer.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MetContainer.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MetContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/MetContainer.h`` (:ref:`file_xAODAnaHelpers_MetContainer.h`) + + + + + diff --git a/_sources/api/file_Root_MetHists.cxx.rst.txt b/_sources/api/file_Root_MetHists.cxx.rst.txt new file mode 100644 index 0000000000..2b66e95ae1 --- /dev/null +++ b/_sources/api/file_Root_MetHists.cxx.rst.txt @@ -0,0 +1,41 @@ + +.. _file_Root_MetHists.cxx: + +File MetHists.cxx +================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MetHists.cxx``) +---------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MetHists.cxx.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``sstream`` + +- ``xAODAnaHelpers/MetHists.h`` (:ref:`file_xAODAnaHelpers_MetHists.h`) + + + + + diff --git a/_sources/api/file_Root_MetHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_MetHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..87a09cb96f --- /dev/null +++ b/_sources/api/file_Root_MetHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_MetHistsAlgo.cxx: + +File MetHistsAlgo.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MetHistsAlgo.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MetHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MetHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_MetHistsAlgo.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a` + diff --git a/_sources/api/file_Root_MinixAOD.cxx.rst.txt b/_sources/api/file_Root_MinixAOD.cxx.rst.txt new file mode 100644 index 0000000000..01471b5059 --- /dev/null +++ b/_sources/api/file_Root_MinixAOD.cxx.rst.txt @@ -0,0 +1,102 @@ + +.. _file_Root_MinixAOD.cxx: + +File MinixAOD.cxx +================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MinixAOD.cxx``) +---------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MinixAOD.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/OutputStream.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MinixAOD.h`` (:ref:`file_xAODAnaHelpers_MinixAOD.h`) + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODCore/AuxContainerBase.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/ElectronAuxContainer.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/Photon.h`` + +- ``xAODEgamma/PhotonAuxContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetAuxContainer.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMissingET/MissingET.h`` + +- ``xAODMissingET/MissingETAuxContainer.h`` + +- ``xAODMissingET/MissingETContainer.h`` + +- ``xAODMuon/Muon.h`` + +- ``xAODMuon/MuonAuxContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetAuxContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463` + diff --git a/_sources/api/file_Root_MuonCalibrator.cxx.rst.txt b/_sources/api/file_Root_MuonCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..42b6779b90 --- /dev/null +++ b/_sources/api/file_Root_MuonCalibrator.cxx.rst.txt @@ -0,0 +1,76 @@ + +.. _file_Root_MuonCalibrator.cxx: + +File MuonCalibrator.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonCalibrator.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonCalibrator.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PATInterfaces/CorrectionCode.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MuonCalibrator.h`` (:ref:`file_xAODAnaHelpers_MuonCalibrator.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODMuon/Muon.h`` + +- ``xAODMuon/MuonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f` + diff --git a/_sources/api/file_Root_MuonContainer.cxx.rst.txt b/_sources/api/file_Root_MuonContainer.cxx.rst.txt new file mode 100644 index 0000000000..fad13f9d94 --- /dev/null +++ b/_sources/api/file_Root_MuonContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_MuonContainer.cxx: + +File MuonContainer.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonContainer.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/MuonContainer.h`` (:ref:`file_xAODAnaHelpers_MuonContainer.h`) + + + + + diff --git a/_sources/api/file_Root_MuonEfficiencyCorrector.cxx.rst.txt b/_sources/api/file_Root_MuonEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..8128e40732 --- /dev/null +++ b/_sources/api/file_Root_MuonEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,84 @@ + +.. _file_Root_MuonEfficiencyCorrector.cxx: + +File MuonEfficiencyCorrector.cxx +================================ + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonEfficiencyCorrector.cxx``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonEfficiencyCorrector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``MuonEfficiencyCorrections/MuonEfficiencyScaleFactors.h`` + +- ``MuonEfficiencyCorrections/MuonTriggerScaleFactors.h`` + +- ``algorithm`` + +- ``iostream`` + +- ``map`` + +- ``random`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MuonEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_MuonEfficiencyCorrector.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODMuon/Muon.h`` + +- ``xAODMuon/MuonAuxContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031` + diff --git a/_sources/api/file_Root_MuonHists.cxx.rst.txt b/_sources/api/file_Root_MuonHists.cxx.rst.txt new file mode 100644 index 0000000000..10068a4648 --- /dev/null +++ b/_sources/api/file_Root_MuonHists.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_MuonHists.cxx: + +File MuonHists.cxx +================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonHists.cxx``) +----------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonHists.cxx.rst + + + + + +Includes +-------- + + +- ``sstream`` + +- ``xAODAnaHelpers/MuonHists.h`` (:ref:`file_xAODAnaHelpers_MuonHists.h`) + + + + + diff --git a/_sources/api/file_Root_MuonHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_MuonHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..b540ff4ced --- /dev/null +++ b/_sources/api/file_Root_MuonHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_MuonHistsAlgo.cxx: + +File MuonHistsAlgo.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonHistsAlgo.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MuonHists.h`` (:ref:`file_xAODAnaHelpers_MuonHists.h`) + +- ``xAODAnaHelpers/MuonHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_MuonHistsAlgo.h`) + +- ``xAODMuon/MuonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686` + diff --git a/_sources/api/file_Root_MuonInFatJetCorrector.cxx.rst.txt b/_sources/api/file_Root_MuonInFatJetCorrector.cxx.rst.txt new file mode 100644 index 0000000000..226509d463 --- /dev/null +++ b/_sources/api/file_Root_MuonInFatJetCorrector.cxx.rst.txt @@ -0,0 +1,66 @@ + +.. _file_Root_MuonInFatJetCorrector.cxx: + +File MuonInFatJetCorrector.cxx +============================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonInFatJetCorrector.cxx``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonInFatJetCorrector.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Algorithm.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/Worker.h`` + +- ``MuonSelectorTools/MuonSelectionTool.h`` + +- ``iostream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MuonInFatJetCorrector.h`` (:ref:`file_xAODAnaHelpers_MuonInFatJetCorrector.h`) + +- ``xAODJet/JetContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTruth/TruthParticleContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b` + diff --git a/_sources/api/file_Root_MuonSelector.cxx.rst.txt b/_sources/api/file_Root_MuonSelector.cxx.rst.txt new file mode 100644 index 0000000000..6798def32b --- /dev/null +++ b/_sources/api/file_Root_MuonSelector.cxx.rst.txt @@ -0,0 +1,88 @@ + +.. _file_Root_MuonSelector.cxx: + +File MuonSelector.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/MuonSelector.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_MuonSelector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``IsolationSelection/IsolationSelectionTool.h`` + +- ``MuonSelectorTools/MuonSelectionTool.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``TrigConfxAOD/xAODConfigTool.h`` + +- ``TriggerMatchingTool/MatchFromCompositeTool.h`` + +- ``TriggerMatchingTool/MatchingTool.h`` + +- ``iostream`` + +- ``tuple`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/MuonSelector.h`` (:ref:`file_xAODAnaHelpers_MuonSelector.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTracking/TrackParticlexAODHelpers.h`` + +- ``xAODTracking/VertexContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86` + diff --git a/_sources/api/file_Root_OnlineBeamSpotTool.cxx.rst.txt b/_sources/api/file_Root_OnlineBeamSpotTool.cxx.rst.txt new file mode 100644 index 0000000000..409ec27efe --- /dev/null +++ b/_sources/api/file_Root_OnlineBeamSpotTool.cxx.rst.txt @@ -0,0 +1,47 @@ + +.. _file_Root_OnlineBeamSpotTool.cxx: + +File OnlineBeamSpotTool.cxx +=========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/OnlineBeamSpotTool.cxx``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_OnlineBeamSpotTool.cxx.rst + + + + + +Includes +-------- + + +- ``PathResolver/PathResolver.h`` + +- ``TFile.h`` + +- ``TSystem.h`` + +- ``TTree.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/OnlineBeamSpotTool.h`` (:ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h`) + + + + + diff --git a/_sources/api/file_Root_OverlapRemover.cxx.rst.txt b/_sources/api/file_Root_OverlapRemover.cxx.rst.txt new file mode 100644 index 0000000000..6cc24519d6 --- /dev/null +++ b/_sources/api/file_Root_OverlapRemover.cxx.rst.txt @@ -0,0 +1,82 @@ + +.. _file_Root_OverlapRemover.cxx: + +File OverlapRemover.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/OverlapRemover.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_OverlapRemover.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``iostream`` + +- ``sstream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/OverlapRemover.h`` (:ref:`file_xAODAnaHelpers_OverlapRemover.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/Electron.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/Photon.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMuon/Muon.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0` + diff --git a/_sources/api/file_Root_ParticlePIDManager.cxx.rst.txt b/_sources/api/file_Root_ParticlePIDManager.cxx.rst.txt new file mode 100644 index 0000000000..2abe2b9340 --- /dev/null +++ b/_sources/api/file_Root_ParticlePIDManager.cxx.rst.txt @@ -0,0 +1,44 @@ + +.. _file_Root_ParticlePIDManager.cxx: + +File ParticlePIDManager.cxx +=========================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/ParticlePIDManager.cxx``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_ParticlePIDManager.cxx.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/ParticlePIDManager.h`` (:ref:`file_xAODAnaHelpers_ParticlePIDManager.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7` + diff --git a/_sources/api/file_Root_PhotonCalibrator.cxx.rst.txt b/_sources/api/file_Root_PhotonCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..ff28f9df40 --- /dev/null +++ b/_sources/api/file_Root_PhotonCalibrator.cxx.rst.txt @@ -0,0 +1,88 @@ + +.. _file_Root_PhotonCalibrator.cxx: + +File PhotonCalibrator.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/PhotonCalibrator.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_PhotonCalibrator.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EGammaVariableCorrection/ElectronPhotonVariableCorrectionTool.h`` + +- ``ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h`` + +- ``ElectronPhotonSelectorTools/AsgPhotonIsEMSelector.h`` + +- ``ElectronPhotonSelectorTools/egammaPIDdefs.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PATCore/PATCoreEnums.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/PhotonCalibrator.h`` (:ref:`file_xAODAnaHelpers_PhotonCalibrator.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEgamma/EgammaDefs.h`` + +- ``xAODEgamma/EgammaxAODHelpers.h`` + +- ``xAODEgamma/Photon.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52` + diff --git a/_sources/api/file_Root_PhotonContainer.cxx.rst.txt b/_sources/api/file_Root_PhotonContainer.cxx.rst.txt new file mode 100644 index 0000000000..1cacaa28b9 --- /dev/null +++ b/_sources/api/file_Root_PhotonContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_PhotonContainer.cxx: + +File PhotonContainer.cxx +======================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/PhotonContainer.cxx``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_PhotonContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/PhotonContainer.h`` (:ref:`file_xAODAnaHelpers_PhotonContainer.h`) + + + + + diff --git a/_sources/api/file_Root_PhotonHists.cxx.rst.txt b/_sources/api/file_Root_PhotonHists.cxx.rst.txt new file mode 100644 index 0000000000..f10278a484 --- /dev/null +++ b/_sources/api/file_Root_PhotonHists.cxx.rst.txt @@ -0,0 +1,48 @@ + +.. _file_Root_PhotonHists.cxx: + +File PhotonHists.cxx +==================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/PhotonHists.cxx``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_PhotonHists.cxx.rst + + + + + +Includes +-------- + + +- ``sstream`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/PhotonHists.h`` (:ref:`file_xAODAnaHelpers_PhotonHists.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0` + diff --git a/_sources/api/file_Root_PhotonHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_PhotonHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..f8f77153cd --- /dev/null +++ b/_sources/api/file_Root_PhotonHistsAlgo.cxx.rst.txt @@ -0,0 +1,56 @@ + +.. _file_Root_PhotonHistsAlgo.cxx: + +File PhotonHistsAlgo.cxx +======================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/PhotonHistsAlgo.cxx``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_PhotonHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/PhotonHists.h`` (:ref:`file_xAODAnaHelpers_PhotonHists.h`) + +- ``xAODAnaHelpers/PhotonHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_PhotonHistsAlgo.h`) + +- ``xAODEgamma/PhotonContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6` + diff --git a/_sources/api/file_Root_PhotonSelector.cxx.rst.txt b/_sources/api/file_Root_PhotonSelector.cxx.rst.txt new file mode 100644 index 0000000000..6dd51d8718 --- /dev/null +++ b/_sources/api/file_Root_PhotonSelector.cxx.rst.txt @@ -0,0 +1,72 @@ + +.. _file_Root_PhotonSelector.cxx: + +File PhotonSelector.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/PhotonSelector.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_PhotonSelector.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``IsolationSelection/IsolationSelectionTool.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/PhotonSelector.h`` (:ref:`file_xAODAnaHelpers_PhotonSelector.h`) + +- ``xAODEgamma/EgammaDefs.h`` + +- ``xAODEgamma/EgammaxAODHelpers.h`` + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e` + diff --git a/_sources/api/file_Root_TauCalibrator.cxx.rst.txt b/_sources/api/file_Root_TauCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..b4a31c8ed1 --- /dev/null +++ b/_sources/api/file_Root_TauCalibrator.cxx.rst.txt @@ -0,0 +1,78 @@ + +.. _file_Root_TauCalibrator.cxx: + +File TauCalibrator.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TauCalibrator.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TauCalibrator.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PATInterfaces/CorrectionCode.h`` + +- ``iostream`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TauCalibrator.h`` (:ref:`file_xAODAnaHelpers_TauCalibrator.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetContainer.h`` + +- ``xAODTau/TauxAODHelpers.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c` + diff --git a/_sources/api/file_Root_TauContainer.cxx.rst.txt b/_sources/api/file_Root_TauContainer.cxx.rst.txt new file mode 100644 index 0000000000..58c72f667a --- /dev/null +++ b/_sources/api/file_Root_TauContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_TauContainer.cxx: + +File TauContainer.cxx +===================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TauContainer.cxx``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TauContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/TauContainer.h`` (:ref:`file_xAODAnaHelpers_TauContainer.h`) + + + + + diff --git a/_sources/api/file_Root_TauEfficiencyCorrector.cxx.rst.txt b/_sources/api/file_Root_TauEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..6e2c7aded7 --- /dev/null +++ b/_sources/api/file_Root_TauEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,80 @@ + +.. _file_Root_TauEfficiencyCorrector.cxx: + +File TauEfficiencyCorrector.cxx +=============================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TauEfficiencyCorrector.cxx``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TauEfficiencyCorrector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/DataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``algorithm`` + +- ``iostream`` + +- ``map`` + +- ``random`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TauEfficiencyCorrector.h`` (:ref:`file_xAODAnaHelpers_TauEfficiencyCorrector.h`) + +- ``xAODBase/IParticle.h`` + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetAuxContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c` + diff --git a/_sources/api/file_Root_TauJetMatching.cxx.rst.txt b/_sources/api/file_Root_TauJetMatching.cxx.rst.txt new file mode 100644 index 0000000000..d9d7448a46 --- /dev/null +++ b/_sources/api/file_Root_TauJetMatching.cxx.rst.txt @@ -0,0 +1,68 @@ + +.. _file_Root_TauJetMatching.cxx: + +File TauJetMatching.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TauJetMatching.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TauJetMatching.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``TLorentzVector.h`` + +- ``iostream`` + +- ``map`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TauJetMatching.h`` (:ref:`file_xAODAnaHelpers_TauJetMatching.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37` + diff --git a/_sources/api/file_Root_TauSelector.cxx.rst.txt b/_sources/api/file_Root_TauSelector.cxx.rst.txt new file mode 100644 index 0000000000..dead271a44 --- /dev/null +++ b/_sources/api/file_Root_TauSelector.cxx.rst.txt @@ -0,0 +1,80 @@ + +.. _file_Root_TauSelector.cxx: + +File TauSelector.cxx +==================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TauSelector.cxx``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TauSelector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``TauAnalysisTools/TauSelectionTool.h`` + +- ``TriggerMatchingTool/MatchFromCompositeTool.h`` + +- ``TriggerMatchingTool/MatchingTool.h`` + +- ``iostream`` + +- ``map`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TauSelector.h`` (:ref:`file_xAODAnaHelpers_TauSelector.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTau/TauJetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7` + diff --git a/_sources/api/file_Root_TrackContainer.cxx.rst.txt b/_sources/api/file_Root_TrackContainer.cxx.rst.txt new file mode 100644 index 0000000000..86767e9884 --- /dev/null +++ b/_sources/api/file_Root_TrackContainer.cxx.rst.txt @@ -0,0 +1,43 @@ + +.. _file_Root_TrackContainer.cxx: + +File TrackContainer.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TrackContainer.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TrackContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TrackContainer.h`` (:ref:`file_xAODAnaHelpers_TrackContainer.h`) + +- ``xAODTracking/TrackParticle.h`` + + + + + diff --git a/_sources/api/file_Root_TrackHists.cxx.rst.txt b/_sources/api/file_Root_TrackHists.cxx.rst.txt new file mode 100644 index 0000000000..6c8c65ca71 --- /dev/null +++ b/_sources/api/file_Root_TrackHists.cxx.rst.txt @@ -0,0 +1,48 @@ + +.. _file_Root_TrackHists.cxx: + +File TrackHists.cxx +=================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TrackHists.cxx``) +------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TrackHists.cxx.rst + + + + + +Includes +-------- + + +- ``math.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TrackHists.h`` (:ref:`file_xAODAnaHelpers_TrackHists.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f` + diff --git a/_sources/api/file_Root_TrackHistsAlgo.cxx.rst.txt b/_sources/api/file_Root_TrackHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..221385a0ce --- /dev/null +++ b/_sources/api/file_Root_TrackHistsAlgo.cxx.rst.txt @@ -0,0 +1,58 @@ + +.. _file_Root_TrackHistsAlgo.cxx: + +File TrackHistsAlgo.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TrackHistsAlgo.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TrackHistsAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TrackHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_TrackHistsAlgo.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTracking/VertexContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9` + diff --git a/_sources/api/file_Root_TrackSelector.cxx.rst.txt b/_sources/api/file_Root_TrackSelector.cxx.rst.txt new file mode 100644 index 0000000000..9f3925e1ab --- /dev/null +++ b/_sources/api/file_Root_TrackSelector.cxx.rst.txt @@ -0,0 +1,66 @@ + +.. _file_Root_TrackSelector.cxx: + +File TrackSelector.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TrackSelector.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TrackSelector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/Worker.h`` + +- ``InDetTrackSelectionTool/InDetTrackSelectionTool.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TrackSelector.h`` (:ref:`file_xAODAnaHelpers_TrackSelector.h`) + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6` + diff --git a/_sources/api/file_Root_TracksInJetHists.cxx.rst.txt b/_sources/api/file_Root_TracksInJetHists.cxx.rst.txt new file mode 100644 index 0000000000..bb328dce83 --- /dev/null +++ b/_sources/api/file_Root_TracksInJetHists.cxx.rst.txt @@ -0,0 +1,50 @@ + +.. _file_Root_TracksInJetHists.cxx: + +File TracksInJetHists.cxx +========================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TracksInJetHists.cxx``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TracksInJetHists.cxx.rst + + + + + +Includes +-------- + + +- ``math.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TracksInJetHists.h`` (:ref:`file_xAODAnaHelpers_TracksInJetHists.h`) + +- ``xAODTracking/TrackParticle.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c` + diff --git a/_sources/api/file_Root_TreeAlgo.cxx.rst.txt b/_sources/api/file_Root_TreeAlgo.cxx.rst.txt new file mode 100644 index 0000000000..e00fb1a004 --- /dev/null +++ b/_sources/api/file_Root_TreeAlgo.cxx.rst.txt @@ -0,0 +1,68 @@ + +.. _file_Root_TreeAlgo.cxx: + +File TreeAlgo.cxx +================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TreeAlgo.cxx``) +---------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TreeAlgo.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/OutputStream.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TreeAlgo.h`` (:ref:`file_xAODAnaHelpers_TreeAlgo.h`) + +- ``xAODCaloEvent/CaloClusterContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODTracking/VertexContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb` + diff --git a/_sources/api/file_Root_TrigMatcher.cxx.rst.txt b/_sources/api/file_Root_TrigMatcher.cxx.rst.txt new file mode 100644 index 0000000000..0e9252fc1c --- /dev/null +++ b/_sources/api/file_Root_TrigMatcher.cxx.rst.txt @@ -0,0 +1,68 @@ + +.. _file_Root_TrigMatcher.cxx: + +File TrigMatcher.cxx +==================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TrigMatcher.cxx``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TrigMatcher.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``TriggerMatchingTool/MatchFromCompositeTool.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TrigMatcher.h`` (:ref:`file_xAODAnaHelpers_TrigMatcher.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988` + diff --git a/_sources/api/file_Root_TruthContainer.cxx.rst.txt b/_sources/api/file_Root_TruthContainer.cxx.rst.txt new file mode 100644 index 0000000000..acea21fcbc --- /dev/null +++ b/_sources/api/file_Root_TruthContainer.cxx.rst.txt @@ -0,0 +1,45 @@ + +.. _file_Root_TruthContainer.cxx: + +File TruthContainer.cxx +======================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TruthContainer.cxx``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TruthContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TruthContainer.h`` (:ref:`file_xAODAnaHelpers_TruthContainer.h`) + +- ``xAODTruth/TruthParticle.h`` + +- ``xAODTruth/TruthVertex.h`` + + + + + diff --git a/_sources/api/file_Root_TruthSelector.cxx.rst.txt b/_sources/api/file_Root_TruthSelector.cxx.rst.txt new file mode 100644 index 0000000000..bd93df4c0a --- /dev/null +++ b/_sources/api/file_Root_TruthSelector.cxx.rst.txt @@ -0,0 +1,78 @@ + +.. _file_Root_TruthSelector.cxx: + +File TruthSelector.cxx +====================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/TruthSelector.cxx``) +--------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_TruthSelector.cxx.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``EventLoop/Job.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``TFile.h`` + +- ``TObjArray.h`` + +- ``TObjString.h`` + +- ``iostream`` + +- ``sstream`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/TruthSelector.h`` (:ref:`file_xAODAnaHelpers_TruthSelector.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTruth/TruthParticleContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0` + diff --git a/_sources/api/file_Root_VertexContainer.cxx.rst.txt b/_sources/api/file_Root_VertexContainer.cxx.rst.txt new file mode 100644 index 0000000000..e65fbdd175 --- /dev/null +++ b/_sources/api/file_Root_VertexContainer.cxx.rst.txt @@ -0,0 +1,39 @@ + +.. _file_Root_VertexContainer.cxx: + +File VertexContainer.cxx +======================== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/VertexContainer.cxx``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_VertexContainer.cxx.rst + + + + + +Includes +-------- + + +- ``iostream`` + +- ``xAODAnaHelpers/VertexContainer.h`` (:ref:`file_xAODAnaHelpers_VertexContainer.h`) + + + + + diff --git a/_sources/api/file_Root_VtxHists.cxx.rst.txt b/_sources/api/file_Root_VtxHists.cxx.rst.txt new file mode 100644 index 0000000000..b2eaefa79d --- /dev/null +++ b/_sources/api/file_Root_VtxHists.cxx.rst.txt @@ -0,0 +1,48 @@ + +.. _file_Root_VtxHists.cxx: + +File VtxHists.cxx +================= + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/VtxHists.cxx``) +---------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_VtxHists.cxx.rst + + + + + +Includes +-------- + + +- ``math.h`` + +- ``xAODAnaHelpers/VtxHists.h`` (:ref:`file_xAODAnaHelpers_VtxHists.h`) + +- ``xAODTracking/TrackParticle.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427` + diff --git a/_sources/api/file_Root_Writer.cxx.rst.txt b/_sources/api/file_Root_Writer.cxx.rst.txt new file mode 100644 index 0000000000..8c52ce58c3 --- /dev/null +++ b/_sources/api/file_Root_Writer.cxx.rst.txt @@ -0,0 +1,60 @@ + +.. _file_Root_Writer.cxx: + +File Writer.cxx +=============== + +|exhale_lsh| :ref:`Parent directory ` (``Root``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``Root/Writer.cxx``) +-------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_Root_Writer.cxx.rst + + + + + +Includes +-------- + + +- ``EventLoop/Job.h`` + +- ``EventLoop/OutputStream.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/Writer.h`` (:ref:`file_xAODAnaHelpers_Writer.h`) + +- ``xAODCore/ShallowCopy.h`` + +- ``xAODJet/JetAuxContainer.h`` + +- ``xAODJet/JetContainer.h`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc` + diff --git a/_sources/api/file_view_hierarchy.rst.txt b/_sources/api/file_view_hierarchy.rst.txt new file mode 100644 index 0000000000..0338d3261f --- /dev/null +++ b/_sources/api/file_view_hierarchy.rst.txt @@ -0,0 +1,18 @@ + +File Hierarchy +-------------- + + +.. raw:: html + + + +.. end raw html for treeView + + diff --git a/_sources/api/file_xAODAnaHelpers_Algorithm.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Algorithm.h.rst.txt new file mode 100644 index 0000000000..400f44fefe --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Algorithm.h.rst.txt @@ -0,0 +1,155 @@ + +.. _file_xAODAnaHelpers_Algorithm.h: + +File Algorithm.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Algorithm.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Algorithm.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``AsgMessaging/MsgStream.h`` + +- ``AsgMessaging/MsgStreamMacros.h`` + +- ``AsgMessaging/StatusCode.h`` + +- ``AsgTools/AnaToolHandle.h`` + +- ``AsgTools/ToolStore.h`` + +- ``EventLoop/Algorithm.h`` + +- ``EventLoop/StatusCode.h`` + +- ``EventLoop/Worker.h`` + +- ``PathResolver/PathResolver.h`` + +- ``string`` + +- ``xAODMetaData/FileMetaData.h`` + +- ``xAODRootAccess/Init.h`` + +- ``xAODRootAccess/TEvent.h`` + +- ``xAODRootAccess/TStore.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_BasicEventSelection.h` + +- :ref:`file_xAODAnaHelpers_BJetEfficiencyCorrector.h` + +- :ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_DebugTool.h` + +- :ref:`file_xAODAnaHelpers_ElectronCalibrator.h` + +- :ref:`file_xAODAnaHelpers_ElectronEfficiencyCorrector.h` + +- :ref:`file_xAODAnaHelpers_ElectronSelector.h` + +- :ref:`file_xAODAnaHelpers_HLTJetGetter.h` + +- :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_IsoCloseByCorr.h` + +- :ref:`file_xAODAnaHelpers_JetCalibrator.h` + +- :ref:`file_xAODAnaHelpers_JetHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_JetSelector.h` + +- :ref:`file_xAODAnaHelpers_MessagePrinterAlgo.h` + +- :ref:`file_xAODAnaHelpers_METConstructor.h` + +- :ref:`file_xAODAnaHelpers_MetHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_MinixAOD.h` + +- :ref:`file_xAODAnaHelpers_MuonCalibrator.h` + +- :ref:`file_xAODAnaHelpers_MuonEfficiencyCorrector.h` + +- :ref:`file_xAODAnaHelpers_MuonInFatJetCorrector.h` + +- :ref:`file_xAODAnaHelpers_MuonSelector.h` + +- :ref:`file_xAODAnaHelpers_OverlapRemover.h` + +- :ref:`file_xAODAnaHelpers_PhotonCalibrator.h` + +- :ref:`file_xAODAnaHelpers_PhotonSelector.h` + +- :ref:`file_xAODAnaHelpers_TauCalibrator.h` + +- :ref:`file_xAODAnaHelpers_TauEfficiencyCorrector.h` + +- :ref:`file_xAODAnaHelpers_TauJetMatching.h` + +- :ref:`file_xAODAnaHelpers_TauSelector.h` + +- :ref:`file_xAODAnaHelpers_TrackHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_TrackSelector.h` + +- :ref:`file_xAODAnaHelpers_TreeAlgo.h` + +- :ref:`file_xAODAnaHelpers_TrigMatcher.h` + +- :ref:`file_xAODAnaHelpers_TruthSelector.h` + +- :ref:`file_xAODAnaHelpers_Writer.h` + +- :ref:`file_Root_Algorithm.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Algorithm` + diff --git a/_sources/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..384d1c63b7 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt @@ -0,0 +1,70 @@ + +.. _file_xAODAnaHelpers_BJetEfficiencyCorrector.h: + +File BJetEfficiencyCorrector.h +============================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/BJetEfficiencyCorrector.h``) +--------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst + + + + + +Includes +-------- + + +- ``FTagAnalysisInterfaces/IBTaggingEfficiencyTool.h`` + +- ``FTagAnalysisInterfaces/IBTaggingSelectionTool.h`` + +- ``PATInterfaces/ISystematicsTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_BJetEfficiencyCorrector.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classBJetEfficiencyCorrector` + diff --git a/_sources/api/file_xAODAnaHelpers_BasicEventSelection.h.rst.txt b/_sources/api/file_xAODAnaHelpers_BasicEventSelection.h.rst.txt new file mode 100644 index 0000000000..e25d09b2a3 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_BasicEventSelection.h.rst.txt @@ -0,0 +1,85 @@ + +.. _file_xAODAnaHelpers_BasicEventSelection.h: + +File BasicEventSelection.h +========================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Algorithm performing general basic cuts for an analysis (GRL, Event Cleaning, Min nr. Tracks for PV candidate). + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/BasicEventSelection.h``) +----------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_BasicEventSelection.h.rst + + + +Detailed Description +-------------------- + +Gabriel Facini gabriel.facini@cern.ch + +Marco Milesi marco.milesi@cern.ch + +Jeff Dandoy jeff.dandoy@cern.ch + +John Alison john.alison@cern.ch + + + + + + +Includes +-------- + + +- ``AsgAnalysisInterfaces/IGoodRunsListSelectionTool.h`` + +- ``AsgAnalysisInterfaces/IPileupReweightingTool.h`` + +- ``AsgTools/AnaToolHandle.h`` + +- ``PATInterfaces/IWeightTool.h`` + +- ``TH1D.h`` + +- ``TrigConfInterfaces/ITrigConfigTool.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_BasicEventSelection.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classBasicEventSelection` + diff --git a/_sources/api/file_xAODAnaHelpers_Cluster.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Cluster.h.rst.txt new file mode 100644 index 0000000000..42bfbeaa5f --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Cluster.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_Cluster.h: + +File Cluster.h +============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Cluster.h``) +----------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Cluster.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ClusterContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Cluster` + diff --git a/_sources/api/file_xAODAnaHelpers_ClusterContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ClusterContainer.h.rst.txt new file mode 100644 index 0000000000..d703bd45b7 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ClusterContainer.h.rst.txt @@ -0,0 +1,80 @@ + +.. _file_xAODAnaHelpers_ClusterContainer.h: + +File ClusterContainer.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ClusterContainer.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ClusterContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/Cluster.h`` (:ref:`file_xAODAnaHelpers_Cluster.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODCaloEvent/CaloClusterContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_ClusterContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1ClusterContainer` + + +Typedefs +-------- + + +- :ref:`exhale_typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb` + diff --git a/_sources/api/file_xAODAnaHelpers_ClusterHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ClusterHists.h.rst.txt new file mode 100644 index 0000000000..bac4656c5c --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ClusterHists.h.rst.txt @@ -0,0 +1,47 @@ + +.. _file_xAODAnaHelpers_ClusterHists.h: + +File ClusterHists.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ClusterHists.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ClusterHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODCaloEvent/CaloClusterContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ClusterHistsAlgo.h` + +- :ref:`file_Root_ClusterHists.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..513f77604a --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt @@ -0,0 +1,54 @@ + +.. _file_xAODAnaHelpers_ClusterHistsAlgo.h: + +File ClusterHistsAlgo.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ClusterHistsAlgo.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/ClusterHists.h`` (:ref:`file_xAODAnaHelpers_ClusterHists.h`) + + + +Included By +----------- + + +- :ref:`file_Root_ClusterHistsAlgo.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classClusterHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_DebugTool.h.rst.txt b/_sources/api/file_xAODAnaHelpers_DebugTool.h.rst.txt new file mode 100644 index 0000000000..d97376061f --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_DebugTool.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_DebugTool.h: + +File DebugTool.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/DebugTool.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_DebugTool.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_DebugTool.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classDebugTool` + diff --git a/_sources/api/file_xAODAnaHelpers_Electron.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Electron.h.rst.txt new file mode 100644 index 0000000000..d111177057 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Electron.h.rst.txt @@ -0,0 +1,59 @@ + +.. _file_xAODAnaHelpers_Electron.h: + +File Electron.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Electron.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Electron.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ElectronContainer.h` + +- :ref:`file_xAODAnaHelpers_ElectronHists.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Electron` + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt new file mode 100644 index 0000000000..0b1162534d --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt @@ -0,0 +1,64 @@ + +.. _file_xAODAnaHelpers_ElectronCalibrator.h: + +File ElectronCalibrator.h +========================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronCalibrator.h``) +---------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.rst + + + + + +Includes +-------- + + +- ``ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h`` + +- ``IsolationCorrections/IsolationCorrectionTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_ElectronCalibrator.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classElectronCalibrator` + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronContainer.h.rst.txt new file mode 100644 index 0000000000..a9a32ff517 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronContainer.h.rst.txt @@ -0,0 +1,73 @@ + +.. _file_xAODAnaHelpers_ElectronContainer.h: + +File ElectronContainer.h +======================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronContainer.h``) +--------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/Electron.h`` (:ref:`file_xAODAnaHelpers_Electron.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODEgamma/ElectronContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_ElectronContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1ElectronContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..d8949a391f --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt @@ -0,0 +1,77 @@ + +.. _file_xAODAnaHelpers_ElectronEfficiencyCorrector.h: + +File ElectronEfficiencyCorrector.h +================================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Interface to the tools of the ElectronEfficiencyCorrection package. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronEfficiencyCorrector.h``) +------------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst + + + +Detailed Description +-------------------- + +Marco Milesi marco.milesi@cern.ch + + + + + + +Includes +-------- + + +- ``ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODEgamma/ElectronContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_ElectronEfficiencyCorrector.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classElectronEfficiencyCorrector` + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronHists.h.rst.txt new file mode 100644 index 0000000000..97d1f26f80 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronHists.h.rst.txt @@ -0,0 +1,53 @@ + +.. _file_xAODAnaHelpers_ElectronHists.h: + +File ElectronHists.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronHists.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronHists.h.rst + + + + + +Includes +-------- + + +- ``AthContainers/DataVector.h`` + +- ``xAODAnaHelpers/Electron.h`` (:ref:`file_xAODAnaHelpers_Electron.h`) + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + +- ``xAODEgamma/ElectronContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_ElectronHists.cxx` + +- :ref:`file_Root_ElectronHistsAlgo.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..fcc1459f8e --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_ElectronHistsAlgo.h: + +File ElectronHistsAlgo.h +======================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronHistsAlgo.h``) +--------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + + + +Included By +----------- + + +- :ref:`file_Root_ElectronHistsAlgo.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classElectronHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_ElectronSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ElectronSelector.h.rst.txt new file mode 100644 index 0000000000..db45fa2846 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ElectronSelector.h.rst.txt @@ -0,0 +1,92 @@ + +.. _file_xAODAnaHelpers_ElectronSelector.h: + +File ElectronSelector.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Interface to the tools of the ElectronPhotonSelectorTools package. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ElectronSelector.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ElectronSelector.h.rst + + + +Detailed Description +-------------------- + +Marco Milesi marco.milesi@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``EgammaAnalysisInterfaces/IAsgDeadHVCellRemovalTool.h`` + +- ``IsolationSelection/IIsolationSelectionTool.h`` + +- ``TH1D.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/IMatchScoringTool.h`` + +- ``TriggerMatchingTool/IMatchingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/ParticlePIDManager.h`` (:ref:`file_xAODAnaHelpers_ParticlePIDManager.h`) + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODTracking/Vertex.h`` + + + +Included By +----------- + + +- :ref:`file_Root_ElectronSelector.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_CP` + + +Classes +------- + + +- :ref:`exhale_class_classElectronSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_EventInfo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_EventInfo.h.rst.txt new file mode 100644 index 0000000000..e2f8e0350f --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_EventInfo.h.rst.txt @@ -0,0 +1,77 @@ + +.. _file_xAODAnaHelpers_EventInfo.h: + +File EventInfo.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/EventInfo.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_EventInfo.h.rst + + + + + +Includes +-------- + + +- ``TTree.h`` + +- ``string`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTracking/VertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ElectronHists.h` + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_xAODAnaHelpers_IParticleHists.h` + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_xAODAnaHelpers_MuonHists.h` + +- :ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h` + +- :ref:`file_Root_EventInfo.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1EventInfo` + diff --git a/_sources/api/file_xAODAnaHelpers_FatJet.h.rst.txt b/_sources/api/file_xAODAnaHelpers_FatJet.h.rst.txt new file mode 100644 index 0000000000..98617b1c31 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_FatJet.h.rst.txt @@ -0,0 +1,59 @@ + +.. _file_xAODAnaHelpers_FatJet.h: + +File FatJet.h +============= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/FatJet.h``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_FatJet.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1FatJet` + diff --git a/_sources/api/file_xAODAnaHelpers_FatJetContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_FatJetContainer.h.rst.txt new file mode 100644 index 0000000000..c2f63fbb08 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_FatJetContainer.h.rst.txt @@ -0,0 +1,77 @@ + +.. _file_xAODAnaHelpers_FatJetContainer.h: + +File FatJetContainer.h +====================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/FatJetContainer.h``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_FatJetContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/FatJet.h`` (:ref:`file_xAODAnaHelpers_FatJet.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/JetContainer.h`` (:ref:`file_xAODAnaHelpers_JetContainer.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODJet/JetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_FatJetContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1FatJetContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_HLTJetGetter.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HLTJetGetter.h.rst.txt new file mode 100644 index 0000000000..26876b1c39 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HLTJetGetter.h.rst.txt @@ -0,0 +1,61 @@ + +.. _file_xAODAnaHelpers_HLTJetGetter.h: + +File HLTJetGetter.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HLTJetGetter.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HLTJetGetter.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_HLTJetGetter.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_Trig` + +- :ref:`namespace_TrigConf` + + +Classes +------- + + +- :ref:`exhale_class_classHLTJetGetter` + diff --git a/_sources/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt new file mode 100644 index 0000000000..556a19eeae --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt @@ -0,0 +1,50 @@ + +.. _file_xAODAnaHelpers_HLTJetRoIBuilder.h: + +File HLTJetRoIBuilder.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +This class builds HLT jets and thier associated objects. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HLTJetRoIBuilder.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst + + + +Detailed Description +-------------------- + +John Alison john.alison@cern.ch + + + + + + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + + + diff --git a/_sources/api/file_xAODAnaHelpers_HelpTreeBase.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HelpTreeBase.h.rst.txt new file mode 100644 index 0000000000..aea3164ea3 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HelpTreeBase.h.rst.txt @@ -0,0 +1,126 @@ + +.. _file_xAODAnaHelpers_HelpTreeBase.h: + +File HelpTreeBase.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HelpTreeBase.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HelpTreeBase.h.rst + + + + + +Includes +-------- + + +- ``TFile.h`` + +- ``TTree.h`` + +- ``map`` + +- ``xAODAnaHelpers/ClusterContainer.h`` (:ref:`file_xAODAnaHelpers_ClusterContainer.h`) + +- ``xAODAnaHelpers/ElectronContainer.h`` (:ref:`file_xAODAnaHelpers_ElectronContainer.h`) + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/FatJetContainer.h`` (:ref:`file_xAODAnaHelpers_FatJetContainer.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/JetContainer.h`` (:ref:`file_xAODAnaHelpers_JetContainer.h`) + +- ``xAODAnaHelpers/L1JetContainer.h`` (:ref:`file_xAODAnaHelpers_L1JetContainer.h`) + +- ``xAODAnaHelpers/MetContainer.h`` (:ref:`file_xAODAnaHelpers_MetContainer.h`) + +- ``xAODAnaHelpers/MuonContainer.h`` (:ref:`file_xAODAnaHelpers_MuonContainer.h`) + +- ``xAODAnaHelpers/PhotonContainer.h`` (:ref:`file_xAODAnaHelpers_PhotonContainer.h`) + +- ``xAODAnaHelpers/TauContainer.h`` (:ref:`file_xAODAnaHelpers_TauContainer.h`) + +- ``xAODAnaHelpers/TrackContainer.h`` (:ref:`file_xAODAnaHelpers_TrackContainer.h`) + +- ``xAODAnaHelpers/TruthContainer.h`` (:ref:`file_xAODAnaHelpers_TruthContainer.h`) + +- ``xAODAnaHelpers/VertexContainer.h`` (:ref:`file_xAODAnaHelpers_VertexContainer.h`) + +- ``xAODCaloEvent/CaloClusterContainer.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMissingET/MissingETContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODRootAccess/TEvent.h`` + +- ``xAODRootAccess/TStore.h`` + +- ``xAODTau/TauJetContainer.h`` + +- ``xAODTracking/TrackParticleContainer.h`` + +- ``xAODTrigger/JetRoIContainer.h`` + +- ``xAODTruth/TruthParticleContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_TreeAlgo.h` + +- :ref:`file_Root_HelpTreeBase.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_Trig` + +- :ref:`namespace_TrigConf` + + +Classes +------- + + +- :ref:`exhale_class_classHelpTreeBase` + + +Typedefs +-------- + + +- :ref:`exhale_typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb` + diff --git a/_sources/api/file_xAODAnaHelpers_HelperClasses.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HelperClasses.h.rst.txt new file mode 100644 index 0000000000..4afba52c78 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HelperClasses.h.rst.txt @@ -0,0 +1,194 @@ + +.. _file_xAODAnaHelpers_HelperClasses.h: + +File HelperClasses.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HelperClasses.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HelperClasses.h.rst + + + + + +Includes +-------- + + +- ``AthContainers/ConstDataVector.h`` + +- ``RootCoreUtils/ThrowMsg.h`` + +- ``TString.h`` + +- ``iostream`` + +- ``map`` + +- ``sstream`` + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODRootAccess/TEvent.h`` + +- ``xAODRootAccess/TStore.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ClusterContainer.h` + +- :ref:`file_xAODAnaHelpers_ElectronContainer.h` + +- :ref:`file_xAODAnaHelpers_EventInfo.h` + +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` + +- :ref:`file_xAODAnaHelpers_HelperFunctions.h` + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_xAODAnaHelpers_IParticleHists.h` + +- :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_JetContainer.h` + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_xAODAnaHelpers_L1JetContainer.h` + +- :ref:`file_xAODAnaHelpers_MetContainer.h` + +- :ref:`file_xAODAnaHelpers_MetHists.h` + +- :ref:`file_xAODAnaHelpers_MuonContainer.h` + +- :ref:`file_xAODAnaHelpers_ParticleContainer.h` + +- :ref:`file_xAODAnaHelpers_ParticlePIDManager.h` + +- :ref:`file_xAODAnaHelpers_PhotonContainer.h` + +- :ref:`file_xAODAnaHelpers_TauContainer.h` + +- :ref:`file_xAODAnaHelpers_TrackContainer.h` + +- :ref:`file_xAODAnaHelpers_TruthContainer.h` + +- :ref:`file_xAODAnaHelpers_VertexContainer.h` + +- :ref:`file_Root_BJetEfficiencyCorrector.cxx` + +- :ref:`file_Root_DebugTool.cxx` + +- :ref:`file_Root_ElectronCalibrator.cxx` + +- :ref:`file_Root_ElectronEfficiencyCorrector.cxx` + +- :ref:`file_Root_ElectronSelector.cxx` + +- :ref:`file_Root_HelperClasses.cxx` + +- :ref:`file_Root_IParticleHistsAlgo.cxx` + +- :ref:`file_Root_IsoCloseByCorr.cxx` + +- :ref:`file_Root_JetSelector.cxx` + +- :ref:`file_Root_METConstructor.cxx` + +- :ref:`file_Root_MinixAOD.cxx` + +- :ref:`file_Root_MuonCalibrator.cxx` + +- :ref:`file_Root_MuonEfficiencyCorrector.cxx` + +- :ref:`file_Root_MuonInFatJetCorrector.cxx` + +- :ref:`file_Root_MuonSelector.cxx` + +- :ref:`file_Root_OverlapRemover.cxx` + +- :ref:`file_Root_PhotonCalibrator.cxx` + +- :ref:`file_Root_TauCalibrator.cxx` + +- :ref:`file_Root_TauEfficiencyCorrector.cxx` + +- :ref:`file_Root_TauJetMatching.cxx` + +- :ref:`file_Root_TauSelector.cxx` + +- :ref:`file_Root_TreeAlgo.cxx` + +- :ref:`file_Root_TruthSelector.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_HelperClasses` + + +Classes +------- + + +- :ref:`exhale_class_classHelperClasses_1_1ClusterInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1ElectronInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1EnumParser` + +- :ref:`exhale_class_classHelperClasses_1_1EventInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1InfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1IParticleInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1JetInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1METInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1MuonInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1PhotonInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1TauInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1TrackInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1TriggerInfoSwitch` + +- :ref:`exhale_class_classHelperClasses_1_1TruthInfoSwitch` + + +Enums +----- + + +- :ref:`exhale_enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf` + +- :ref:`exhale_enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf` + diff --git a/_sources/api/file_xAODAnaHelpers_HelperFunctions.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HelperFunctions.h.rst.txt new file mode 100644 index 0000000000..2cc1865d47 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HelperFunctions.h.rst.txt @@ -0,0 +1,320 @@ + +.. _file_xAODAnaHelpers_HelperFunctions.h: + +File HelperFunctions.h +====================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HelperFunctions.h``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HelperFunctions.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``AsgMessaging/MsgStream.h`` + +- ``AsgMessaging/StatusCode.h`` + +- ``AthContainers/ConstDataVector.h`` + +- ``AthContainers/normalizedTypeinfoName.h`` + +- ``PATInterfaces/ISystematicsTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``SampleHandler/SampleHandler.h`` + +- ``TBranch.h`` + +- ``TFile.h`` + +- ``TH1D.h`` + +- ``TObjArray.h`` + +- ``TTree.h`` + +- ``cxxabi.h`` + +- ``fastjet/JetDefinition.hh`` + +- ``typeinfo`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODJet/JetContainer.h`` + +- ``xAODTracking/VertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` + +- :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_JetContainer.h` + +- :ref:`file_xAODAnaHelpers_L1JetContainer.h` + +- :ref:`file_xAODAnaHelpers_ParticleContainer.h` + +- :ref:`file_xAODAnaHelpers_ParticlePIDManager.h` + +- :ref:`file_xAODAnaHelpers_TrackContainer.h` + +- :ref:`file_xAODAnaHelpers_TruthContainer.h` + +- :ref:`file_xAODAnaHelpers_VertexContainer.h` + +- :ref:`file_Root_Algorithm.cxx` + +- :ref:`file_Root_BasicEventSelection.cxx` + +- :ref:`file_Root_BJetEfficiencyCorrector.cxx` + +- :ref:`file_Root_ClusterHistsAlgo.cxx` + +- :ref:`file_Root_DebugTool.cxx` + +- :ref:`file_Root_ElectronCalibrator.cxx` + +- :ref:`file_Root_ElectronEfficiencyCorrector.cxx` + +- :ref:`file_Root_ElectronHists.cxx` + +- :ref:`file_Root_ElectronHistsAlgo.cxx` + +- :ref:`file_Root_ElectronSelector.cxx` + +- :ref:`file_Root_EventInfo.cxx` + +- :ref:`file_Root_FatJetContainer.cxx` + +- :ref:`file_Root_HelperFunctions.cxx` + +- :ref:`file_Root_HelpTreeBase.cxx` + +- :ref:`file_Root_HLTJetGetter.cxx` + +- :ref:`file_Root_IParticleHistsAlgo.cxx` + +- :ref:`file_Root_IsoCloseByCorr.cxx` + +- :ref:`file_Root_JetCalibrator.cxx` + +- :ref:`file_Root_JetContainer.cxx` + +- :ref:`file_Root_JetHistsAlgo.cxx` + +- :ref:`file_Root_JetSelector.cxx` + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_METConstructor.cxx` + +- :ref:`file_Root_MetHistsAlgo.cxx` + +- :ref:`file_Root_MinixAOD.cxx` + +- :ref:`file_Root_MuonCalibrator.cxx` + +- :ref:`file_Root_MuonEfficiencyCorrector.cxx` + +- :ref:`file_Root_MuonHistsAlgo.cxx` + +- :ref:`file_Root_MuonInFatJetCorrector.cxx` + +- :ref:`file_Root_MuonSelector.cxx` + +- :ref:`file_Root_OverlapRemover.cxx` + +- :ref:`file_Root_PhotonCalibrator.cxx` + +- :ref:`file_Root_PhotonHists.cxx` + +- :ref:`file_Root_PhotonHistsAlgo.cxx` + +- :ref:`file_Root_PhotonSelector.cxx` + +- :ref:`file_Root_TauCalibrator.cxx` + +- :ref:`file_Root_TauEfficiencyCorrector.cxx` + +- :ref:`file_Root_TauJetMatching.cxx` + +- :ref:`file_Root_TauSelector.cxx` + +- :ref:`file_Root_TrackContainer.cxx` + +- :ref:`file_Root_TrackHists.cxx` + +- :ref:`file_Root_TrackHistsAlgo.cxx` + +- :ref:`file_Root_TrackSelector.cxx` + +- :ref:`file_Root_TracksInJetHists.cxx` + +- :ref:`file_Root_TreeAlgo.cxx` + +- :ref:`file_Root_TrigMatcher.cxx` + +- :ref:`file_Root_TruthContainer.cxx` + +- :ref:`file_Root_TruthSelector.cxx` + +- :ref:`file_Root_Writer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_HelperFunctions` + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_struct_structHelperFunctions_1_1pt__sort` + + +Enums +----- + + +- :ref:`exhale_enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e` + + +Functions +--------- + + +- :ref:`exhale_function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444` + +- :ref:`exhale_function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b` + +- :ref:`exhale_function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971` + +- :ref:`exhale_function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be` + +- :ref:`exhale_function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60` + +- :ref:`exhale_function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742` + +- :ref:`exhale_function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906` + +- :ref:`exhale_function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260` + +- :ref:`exhale_function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1` + +- :ref:`exhale_function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23` + +- :ref:`exhale_function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2` + +- :ref:`exhale_function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2` + +- :ref:`exhale_function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49` + +- :ref:`exhale_function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51` + +- :ref:`exhale_function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168` + +- :ref:`exhale_function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8` + +- :ref:`exhale_function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f` + +- :ref:`exhale_function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191` + +- :ref:`exhale_function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2` + +- :ref:`exhale_function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3` + +- :ref:`exhale_function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4` + +- :ref:`exhale_function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452` + +- :ref:`exhale_function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832` + +- :ref:`exhale_function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691` + +- :ref:`exhale_function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710` + +- :ref:`exhale_function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b` + +- :ref:`exhale_function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a` + +- :ref:`exhale_function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c` + +- :ref:`exhale_function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab` + +- :ref:`exhale_function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db` + +- :ref:`exhale_function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d` + +- :ref:`exhale_function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0` + +- :ref:`exhale_function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f` + +- :ref:`exhale_function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d` + +- :ref:`exhale_function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b` + +- :ref:`exhale_function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401` + +- :ref:`exhale_function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76` + +- :ref:`exhale_function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2` + +- :ref:`exhale_function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03` + +- :ref:`exhale_function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61` + + +Variables +--------- + + +- :ref:`exhale_variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac` + +- :ref:`exhale_variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f` + +- :ref:`exhale_variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397` + +- :ref:`exhale_variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d` + diff --git a/_sources/api/file_xAODAnaHelpers_HistogramManager.h.rst.txt b/_sources/api/file_xAODAnaHelpers_HistogramManager.h.rst.txt new file mode 100644 index 0000000000..896670ecbf --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_HistogramManager.h.rst.txt @@ -0,0 +1,94 @@ + +.. _file_xAODAnaHelpers_HistogramManager.h: + +File HistogramManager.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Manage your histograms. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/HistogramManager.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_HistogramManager.h.rst + + + +Detailed Description +-------------------- + +See AUTHORS.md + +BugNo known bugs + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``AsgMessaging/StatusCode.h`` + +- ``EventLoop/IWorker.h`` + +- ``TH1.h`` + +- ``TH1F.h`` + +- ``TH2F.h`` + +- ``TH3F.h`` + +- ``TProfile.h`` + +- ``ctype.h`` + +- ``xAODRootAccess/TEvent.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ClusterHists.h` + +- :ref:`file_xAODAnaHelpers_IParticleHists.h` + +- :ref:`file_xAODAnaHelpers_MetHists.h` + +- :ref:`file_xAODAnaHelpers_TrackHists.h` + +- :ref:`file_xAODAnaHelpers_TracksInJetHists.h` + +- :ref:`file_xAODAnaHelpers_VtxHists.h` + +- :ref:`file_Root_HistogramManager.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classHistogramManager` + diff --git a/_sources/api/file_xAODAnaHelpers_IParticleHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_IParticleHists.h.rst.txt new file mode 100644 index 0000000000..f74c4474ad --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_IParticleHists.h.rst.txt @@ -0,0 +1,65 @@ + +.. _file_xAODAnaHelpers_IParticleHists.h: + +File IParticleHists.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/IParticleHists.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_IParticleHists.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODBase/IParticleContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ElectronHists.h` + +- :ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_xAODAnaHelpers_MuonHists.h` + +- :ref:`file_xAODAnaHelpers_PhotonHists.h` + +- :ref:`file_Root_IParticleHists.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..ca60ff506d --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt @@ -0,0 +1,70 @@ + +.. _file_xAODAnaHelpers_IParticleHistsAlgo.h: + +File IParticleHistsAlgo.h +========================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/IParticleHistsAlgo.h``) +---------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``SampleHandler/MetaFields.h`` + +- ``SampleHandler/MetaObject.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ElectronHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_JetHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_MuonHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_PhotonHistsAlgo.h` + +- :ref:`file_Root_IParticleHistsAlgo.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classIParticleHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt b/_sources/api/file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt new file mode 100644 index 0000000000..e75e096770 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt @@ -0,0 +1,78 @@ + +.. _file_xAODAnaHelpers_IsoCloseByCorr.h: + +File IsoCloseByCorr.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/IsoCloseByCorr.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.rst + + + + + +Includes +-------- + + +- ``AssociationUtils/OverlapRemovalInit.h`` + +- ``AssociationUtils/OverlapRemovalTool.h`` + +- ``AssociationUtils/ToolBox.h`` + +- ``InDetTrackSelectionTool/InDetTrackSelectionTool.h`` + +- ``IsolationSelection/IsolationCloseByCorrectionTool.h`` + +- ``IsolationSelection/IsolationSelectionTool.h`` + +- ``TH1D.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_IsoCloseByCorr.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classIsoCloseByCorr` + diff --git a/_sources/api/file_xAODAnaHelpers_Jet.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Jet.h.rst.txt new file mode 100644 index 0000000000..19829ab5fa --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Jet.h.rst.txt @@ -0,0 +1,69 @@ + +.. _file_xAODAnaHelpers_Jet.h: + +File Jet.h +========== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Jet.h``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Jet.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/MuonContainer.h`` (:ref:`file_xAODAnaHelpers_MuonContainer.h`) + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_FatJet.h` + +- :ref:`file_xAODAnaHelpers_IParticleHists.h` + +- :ref:`file_xAODAnaHelpers_JetContainer.h` + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_xAODAnaHelpers_L1JetContainer.h` + +- :ref:`file_Root_Jet.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Jet` + diff --git a/_sources/api/file_xAODAnaHelpers_JetCalibrator.h.rst.txt b/_sources/api/file_xAODAnaHelpers_JetCalibrator.h.rst.txt new file mode 100644 index 0000000000..e962858274 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_JetCalibrator.h.rst.txt @@ -0,0 +1,70 @@ + +.. _file_xAODAnaHelpers_JetCalibrator.h: + +File JetCalibrator.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/JetCalibrator.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_JetCalibrator.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``JetCPInterfaces/ICPJetUncertaintiesTool.h`` + +- ``JetCPInterfaces/IJetTileCorrectionTool.h`` + +- ``JetCalibTools/IJetCalibrationTool.h`` + +- ``JetInterface/IJetSelector.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODCore/ShallowCopy.h`` + + + +Included By +----------- + + +- :ref:`file_Root_JetCalibrator.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classJetCalibrator` + diff --git a/_sources/api/file_xAODAnaHelpers_JetContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_JetContainer.h.rst.txt new file mode 100644 index 0000000000..dbf883a603 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_JetContainer.h.rst.txt @@ -0,0 +1,81 @@ + +.. _file_xAODAnaHelpers_JetContainer.h: + +File JetContainer.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/JetContainer.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_JetContainer.h.rst + + + + + +Includes +-------- + + +- ``InDetTrackSelectionTool/InDetTrackSelectionTool.h`` + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODJet/JetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_JetContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_struct_structxAH_1_1JetContainer_1_1btagOpPoint` + +- :ref:`exhale_class_classxAH_1_1JetContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_JetHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_JetHists.h.rst.txt new file mode 100644 index 0000000000..11b8404e57 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_JetHists.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_JetHists.h: + +File JetHists.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/JetHists.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_JetHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + +- ``xAODAnaHelpers/OnlineBeamSpotTool.h`` (:ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h`) + +- ``xAODAnaHelpers/TracksInJetHists.h`` (:ref:`file_xAODAnaHelpers_TracksInJetHists.h`) + +- ``xAODJet/JetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_JetHists.cxx` + +- :ref:`file_Root_JetHistsAlgo.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..e8ae9b770e --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt @@ -0,0 +1,54 @@ + +.. _file_xAODAnaHelpers_JetHistsAlgo.h: + +File JetHistsAlgo.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/JetHistsAlgo.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + + + +Included By +----------- + + +- :ref:`file_Root_JetHistsAlgo.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classJetHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_JetSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_JetSelector.h.rst.txt new file mode 100644 index 0000000000..602b7d5c37 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_JetSelector.h.rst.txt @@ -0,0 +1,97 @@ + +.. _file_xAODAnaHelpers_JetSelector.h: + +File JetSelector.h +================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Select jets and apply JVT corrections. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/JetSelector.h``) +--------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_JetSelector.h.rst + + + +Detailed Description +-------------------- + +Gabriel Facini gabriel.facini@cern.ch + +Jeff Dandoy jeff.dandoy@cern.ch + +Marco Milesi marco.milesi@cern.ch + +John Alison john.alison@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``FTagAnalysisInterfaces/IBTaggingSelectionTool.h`` + +- ``JetAnalysisInterfaces/IJvtEfficiencyTool.h`` + +- ``JetInterface/IJetModifier.h`` + +- ``JetMomentTools/JetVertexNNTagger.h`` + +- ``PATCore/IAsgSelectionTool.h`` + +- ``ParticleJetTools/JetPileupLabelingTool.h`` + +- ``TH1D.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/IMatchScoringTool.h`` + +- ``TriggerMatchingTool/IMatchingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_JetSelector.cxx` + +- :ref:`file_Root_LinkDef.h` + + + + +Classes +------- + + +- :ref:`exhale_class_classJetSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_L1JetContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_L1JetContainer.h.rst.txt new file mode 100644 index 0000000000..0d952fabd2 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_L1JetContainer.h.rst.txt @@ -0,0 +1,81 @@ + +.. _file_xAODAnaHelpers_L1JetContainer.h: + +File L1JetContainer.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/L1JetContainer.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_L1JetContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/Jet.h`` (:ref:`file_xAODAnaHelpers_Jet.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODTrigger/JetRoIContainer.h`` + +- ``xAODTrigger/gFexJetRoIContainer.h`` + +- ``xAODTrigger/jFexLRJetRoIContainer.h`` + +- ``xAODTrigger/jFexSRJetRoIContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_L1JetContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1L1JetContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_METConstructor.h.rst.txt b/_sources/api/file_xAODAnaHelpers_METConstructor.h.rst.txt new file mode 100644 index 0000000000..dfcc6c7022 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_METConstructor.h.rst.txt @@ -0,0 +1,70 @@ + +.. _file_xAODAnaHelpers_METConstructor.h: + +File METConstructor.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/METConstructor.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_METConstructor.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``METInterface/IMETMaker.h`` + +- ``METInterface/IMETSignificance.h`` + +- ``METInterface/IMETSystematicsTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``TauAnalysisTools/ITauSelectionTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODRootAccess/Init.h`` + +- ``xAODRootAccess/TEvent.h`` + +- ``xAODRootAccess/TStore.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_METConstructor.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMETConstructor` + diff --git a/_sources/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt new file mode 100644 index 0000000000..6a4b787110 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt @@ -0,0 +1,58 @@ + +.. _file_xAODAnaHelpers_MessagePrinterAlgo.h: + +File MessagePrinterAlgo.h +========================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MessagePrinterAlgo.h``) +---------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessagePrinter.h`` + +- ``AsgMessaging/MessagePrinterOverlay.h`` + +- ``memory`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MessagePrinterAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMessagePrinterAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_MetContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MetContainer.h.rst.txt new file mode 100644 index 0000000000..0de4b8e90a --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MetContainer.h.rst.txt @@ -0,0 +1,65 @@ + +.. _file_xAODAnaHelpers_MetContainer.h: + +File MetContainer.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MetContainer.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MetContainer.h.rst + + + + + +Includes +-------- + + +- ``TTree.h`` + +- ``string`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODMissingET/MissingETContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_MetContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1MetContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_MetHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MetHists.h.rst.txt new file mode 100644 index 0000000000..f1a83fb124 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MetHists.h.rst.txt @@ -0,0 +1,56 @@ + +.. _file_xAODAnaHelpers_MetHists.h: + +File MetHists.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MetHists.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MetHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODMissingET/MissingETContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_MetHistsAlgo.h` + +- :ref:`file_Root_MetHists.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMetHists` + diff --git a/_sources/api/file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..ce9d7c7a0d --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt @@ -0,0 +1,54 @@ + +.. _file_xAODAnaHelpers_MetHistsAlgo.h: + +File MetHistsAlgo.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MetHistsAlgo.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/MetHists.h`` (:ref:`file_xAODAnaHelpers_MetHists.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MetHistsAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMetHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_MinixAOD.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MinixAOD.h.rst.txt new file mode 100644 index 0000000000..836e6409e1 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MinixAOD.h.rst.txt @@ -0,0 +1,60 @@ + +.. _file_xAODAnaHelpers_MinixAOD.h: + +File MinixAOD.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MinixAOD.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MinixAOD.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODCutFlow/CutBookkeeper.h`` + +- ``xAODCutFlow/CutBookkeeperAuxContainer.h`` + +- ``xAODCutFlow/CutBookkeeperContainer.h`` + +- ``xAODMetaDataCnv/FileMetaDataTool.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MinixAOD.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMinixAOD` + diff --git a/_sources/api/file_xAODAnaHelpers_Muon.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Muon.h.rst.txt new file mode 100644 index 0000000000..e685471b73 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Muon.h.rst.txt @@ -0,0 +1,59 @@ + +.. _file_xAODAnaHelpers_Muon.h: + +File Muon.h +=========== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Muon.h``) +-------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Muon.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_MuonContainer.h` + +- :ref:`file_xAODAnaHelpers_MuonHists.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Muon` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonCalibrator.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonCalibrator.h.rst.txt new file mode 100644 index 0000000000..be09e4d804 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonCalibrator.h.rst.txt @@ -0,0 +1,58 @@ + +.. _file_xAODAnaHelpers_MuonCalibrator.h: + +File MuonCalibrator.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonCalibrator.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonCalibrator.h.rst + + + + + +Includes +-------- + + +- ``AsgAnalysisInterfaces/IPileupReweightingTool.h`` + +- ``AsgTools/AnaToolHandle.h`` + +- ``MuonMomentumCorrections/MuonCalibTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MuonCalibrator.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMuonCalibrator` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonContainer.h.rst.txt new file mode 100644 index 0000000000..27f4cde0a8 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonContainer.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_MuonContainer.h: + +File MuonContainer.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonContainer.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/Muon.h`` (:ref:`file_xAODAnaHelpers_Muon.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODMuon/MuonContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_xAODAnaHelpers_Jet.h` + +- :ref:`file_Root_MuonContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1MuonContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..779b20e11b --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt @@ -0,0 +1,90 @@ + +.. _file_xAODAnaHelpers_MuonEfficiencyCorrector.h: + +File MuonEfficiencyCorrector.h +============================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Interface to the tools of the MuonEfficiencyCorrections package. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonEfficiencyCorrector.h``) +--------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst + + + +Detailed Description +-------------------- + +Marco Milesi marco.milesi@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``MuonAnalysisInterfaces/IMuonEfficiencyScaleFactors.h`` + +- ``MuonAnalysisInterfaces/IMuonTriggerScaleFactors.h`` + +- ``PATInterfaces/ISystematicsTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``PileupReweighting/PileupReweightingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MuonEfficiencyCorrector.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_CP` + + +Classes +------- + + +- :ref:`exhale_class_classMuonEfficiencyCorrector` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonHists.h.rst.txt new file mode 100644 index 0000000000..c5a9512467 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonHists.h.rst.txt @@ -0,0 +1,51 @@ + +.. _file_xAODAnaHelpers_MuonHists.h: + +File MuonHists.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonHists.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + +- ``xAODAnaHelpers/Muon.h`` (:ref:`file_xAODAnaHelpers_Muon.h`) + +- ``xAODMuon/MuonContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_MuonHists.cxx` + +- :ref:`file_Root_MuonHistsAlgo.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..a152fcdced --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_MuonHistsAlgo.h: + +File MuonHistsAlgo.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonHistsAlgo.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MuonHistsAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMuonHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt new file mode 100644 index 0000000000..078be6cefc --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_MuonInFatJetCorrector.h: + +File MuonInFatJetCorrector.h +============================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonInFatJetCorrector.h``) +------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MuonInFatJetCorrector.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classMuonInFatJetCorrector` + diff --git a/_sources/api/file_xAODAnaHelpers_MuonSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_MuonSelector.h.rst.txt new file mode 100644 index 0000000000..f56272eccd --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_MuonSelector.h.rst.txt @@ -0,0 +1,90 @@ + +.. _file_xAODAnaHelpers_MuonSelector.h: + +File MuonSelector.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Interface to the tools of the MuonSelectorTools package. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/MuonSelector.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_MuonSelector.h.rst + + + +Detailed Description +-------------------- + +Marco Milesi marco.milesi@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``IsolationSelection/IIsolationSelectionTool.h`` + +- ``MuonAnalysisInterfaces/IMuonSelectionTool.h`` + +- ``TH1D.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/IMatchScoringTool.h`` + +- ``TriggerMatchingTool/IMatchingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTracking/Vertex.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_MuonSelector.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_CP` + + +Classes +------- + + +- :ref:`exhale_class_classMuonSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt b/_sources/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt new file mode 100644 index 0000000000..914fad5d94 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt @@ -0,0 +1,67 @@ + +.. _file_xAODAnaHelpers_OnlineBeamSpotTool.h: + +File OnlineBeamSpotTool.h +========================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/OnlineBeamSpotTool.h``) +---------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst + + + + + +Includes +-------- + + +- ``map`` + +- ``vector`` + +- ``xAODAnaHelpers/EventInfo.h`` (:ref:`file_xAODAnaHelpers_EventInfo.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_Root_OnlineBeamSpotTool.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_struct_structxAH_1_1OnlineBeamSpotTool_1_1LBData` + +- :ref:`exhale_class_classxAH_1_1OnlineBeamSpotTool` + diff --git a/_sources/api/file_xAODAnaHelpers_OverlapRemover.h.rst.txt b/_sources/api/file_xAODAnaHelpers_OverlapRemover.h.rst.txt new file mode 100644 index 0000000000..0ec3500a1e --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_OverlapRemover.h.rst.txt @@ -0,0 +1,89 @@ + +.. _file_xAODAnaHelpers_OverlapRemover.h: + +File OverlapRemover.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +|xAH| algorithm to perform overlap removal between reconstructed physics objects. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/OverlapRemover.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_OverlapRemover.h.rst + + + +Detailed Description +-------------------- + +Marco Milesi marco.milesi@cern.ch + +Jeff Dandoy + + + + + + +Includes +-------- + + +- ``AssociationUtils/OverlapRemovalInit.h`` + +- ``AssociationUtils/OverlapRemovalTool.h`` + +- ``AssociationUtils/ToolBox.h`` + +- ``TH1D.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODBase/IParticleContainer.h`` + +- ``xAODBase/IParticleHelpers.h`` + +- ``xAODEgamma/ElectronContainer.h`` + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODMuon/MuonContainer.h`` + +- ``xAODTau/TauJetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_OverlapRemover.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classOverlapRemover` + diff --git a/_sources/api/file_xAODAnaHelpers_Particle.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Particle.h.rst.txt new file mode 100644 index 0000000000..31842612ba --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Particle.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_Particle.h: + +File Particle.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Particle.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Particle.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_Cluster.h` + +- :ref:`file_xAODAnaHelpers_Electron.h` + +- :ref:`file_xAODAnaHelpers_FatJet.h` + +- :ref:`file_xAODAnaHelpers_Jet.h` + +- :ref:`file_xAODAnaHelpers_Muon.h` + +- :ref:`file_xAODAnaHelpers_ParticleContainer.h` + +- :ref:`file_xAODAnaHelpers_Photon.h` + +- :ref:`file_xAODAnaHelpers_Tau.h` + +- :ref:`file_xAODAnaHelpers_TrackPart.h` + +- :ref:`file_xAODAnaHelpers_TruthPart.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Particle` + diff --git a/_sources/api/file_xAODAnaHelpers_ParticleContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ParticleContainer.h.rst.txt new file mode 100644 index 0000000000..13971d00fa --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ParticleContainer.h.rst.txt @@ -0,0 +1,91 @@ + +.. _file_xAODAnaHelpers_ParticleContainer.h: + +File ParticleContainer.h +======================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ParticleContainer.h``) +--------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ParticleContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + +- ``xAODBase/IParticle.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ClusterContainer.h` + +- :ref:`file_xAODAnaHelpers_ElectronContainer.h` + +- :ref:`file_xAODAnaHelpers_FatJetContainer.h` + +- :ref:`file_xAODAnaHelpers_IParticleHists.h` + +- :ref:`file_xAODAnaHelpers_JetContainer.h` + +- :ref:`file_xAODAnaHelpers_L1JetContainer.h` + +- :ref:`file_xAODAnaHelpers_MuonContainer.h` + +- :ref:`file_xAODAnaHelpers_PhotonContainer.h` + +- :ref:`file_xAODAnaHelpers_TauContainer.h` + +- :ref:`file_xAODAnaHelpers_TrackContainer.h` + +- :ref:`file_xAODAnaHelpers_TruthContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1ParticleContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt b/_sources/api/file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt new file mode 100644 index 0000000000..ce7aae3eb6 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt @@ -0,0 +1,81 @@ + +.. _file_xAODAnaHelpers_ParticlePIDManager.h: + +File ParticlePIDManager.h +========================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/ParticlePIDManager.h``) +---------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + +- ``AsgMessaging/StatusCode.h`` + +- ``ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h`` + +- ``ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h`` + +- ``ElectronPhotonSelectorTools/LikelihoodEnums.h`` + +- ``ElectronPhotonSelectorTools/egammaPIDdefs.h`` + +- ``TObject.h`` + +- ``string`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODEgamma/Electron.h`` + +- ``xAODEgamma/ElectronContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_ElectronSelector.h` + +- :ref:`file_Root_ParticlePIDManager.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classElectronCutBasedPIDManager` + + +Functions +--------- + + +- :ref:`exhale_function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164` + diff --git a/_sources/api/file_xAODAnaHelpers_Photon.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Photon.h.rst.txt new file mode 100644 index 0000000000..57dd5b8ca2 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Photon.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_Photon.h: + +File Photon.h +============= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Photon.h``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Photon.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_PhotonContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Photon` + diff --git a/_sources/api/file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt b/_sources/api/file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt new file mode 100644 index 0000000000..0cd6ea8247 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_PhotonCalibrator.h: + +File PhotonCalibrator.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/PhotonCalibrator.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``EgammaAnalysisInterfaces/IAsgPhotonEfficiencyCorrectionTool.h`` + +- ``IsolationCorrections/IIsolationCorrectionTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODEventInfo/EventInfo.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_PhotonCalibrator.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_CP` + + +Classes +------- + + +- :ref:`exhale_class_classPhotonCalibrator` + diff --git a/_sources/api/file_xAODAnaHelpers_PhotonContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_PhotonContainer.h.rst.txt new file mode 100644 index 0000000000..d7b9732abf --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_PhotonContainer.h.rst.txt @@ -0,0 +1,80 @@ + +.. _file_xAODAnaHelpers_PhotonContainer.h: + +File PhotonContainer.h +====================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/PhotonContainer.h``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_PhotonContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODAnaHelpers/Photon.h`` (:ref:`file_xAODAnaHelpers_Photon.h`) + +- ``xAODEgamma/PhotonContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_PhotonContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1PhotonContainer` + + +Typedefs +-------- + + +- :ref:`exhale_typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb` + diff --git a/_sources/api/file_xAODAnaHelpers_PhotonHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_PhotonHists.h.rst.txt new file mode 100644 index 0000000000..2c61b5c028 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_PhotonHists.h.rst.txt @@ -0,0 +1,49 @@ + +.. _file_xAODAnaHelpers_PhotonHists.h: + +File PhotonHists.h +================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/PhotonHists.h``) +--------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_PhotonHists.h.rst + + + + + +Includes +-------- + + +- ``AthContainers/DataVector.h`` + +- ``xAODAnaHelpers/IParticleHists.h`` (:ref:`file_xAODAnaHelpers_IParticleHists.h`) + +- ``xAODEgamma/PhotonContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_PhotonHists.cxx` + +- :ref:`file_Root_PhotonHistsAlgo.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..0f27864911 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_PhotonHistsAlgo.h: + +File PhotonHistsAlgo.h +====================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/PhotonHistsAlgo.h``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/IParticleHistsAlgo.h`` (:ref:`file_xAODAnaHelpers_IParticleHistsAlgo.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_PhotonHistsAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classPhotonHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_PhotonSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_PhotonSelector.h.rst.txt new file mode 100644 index 0000000000..0ca5a41621 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_PhotonSelector.h.rst.txt @@ -0,0 +1,65 @@ + +.. _file_xAODAnaHelpers_PhotonSelector.h: + +File PhotonSelector.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/PhotonSelector.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_PhotonSelector.h.rst + + + + + +Includes +-------- + + +- ``TH1D.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODEgamma/PhotonContainer.h`` + +- ``xAODTracking/VertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_PhotonSelector.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_CP` + + +Classes +------- + + +- :ref:`exhale_class_classPhotonSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_Tau.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Tau.h.rst.txt new file mode 100644 index 0000000000..160b240a8d --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Tau.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_Tau.h: + +File Tau.h +========== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Tau.h``) +------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Tau.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_TauContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1Tau` + diff --git a/_sources/api/file_xAODAnaHelpers_TauCalibrator.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TauCalibrator.h.rst.txt new file mode 100644 index 0000000000..18b78056b9 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TauCalibrator.h.rst.txt @@ -0,0 +1,56 @@ + +.. _file_xAODAnaHelpers_TauCalibrator.h: + +File TauCalibrator.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TauCalibrator.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TauCalibrator.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``TauAnalysisTools/ITauSmearingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TauCalibrator.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTauCalibrator` + diff --git a/_sources/api/file_xAODAnaHelpers_TauContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TauContainer.h.rst.txt new file mode 100644 index 0000000000..81d2d9c652 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TauContainer.h.rst.txt @@ -0,0 +1,73 @@ + +.. _file_xAODAnaHelpers_TauContainer.h: + +File TauContainer.h +=================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TauContainer.h``) +---------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TauContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODAnaHelpers/Tau.h`` (:ref:`file_xAODAnaHelpers_Tau.h`) + +- ``xAODTau/TauJetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_TauContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1TauContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..ddece47b03 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt @@ -0,0 +1,85 @@ + +.. _file_xAODAnaHelpers_TauEfficiencyCorrector.h: + +File TauEfficiencyCorrector.h +============================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +Interface to the tools of the TauEfficiencyCorrections package. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TauEfficiencyCorrector.h``) +-------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst + + + +Detailed Description +-------------------- + +Federico Scutti federico.scutti@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``PATInterfaces/ISystematicsTool.h`` + +- ``PATInterfaces/SystematicRegistry.h`` + +- ``PATInterfaces/SystematicSet.h`` + +- ``PATInterfaces/SystematicVariation.h`` + +- ``PATInterfaces/SystematicsUtil.h`` + +- ``PileupReweighting/PileupReweightingTool.h`` + +- ``TauAnalysisTools/ITauEfficiencyCorrectionsTool.h`` + +- ``TauAnalysisTools/ITauSelectionTool.h`` + +- ``TauAnalysisTools/TauEfficiencyCorrectionsTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TauEfficiencyCorrector.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTauEfficiencyCorrector` + diff --git a/_sources/api/file_xAODAnaHelpers_TauJetMatching.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TauJetMatching.h.rst.txt new file mode 100644 index 0000000000..ce08058b30 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TauJetMatching.h.rst.txt @@ -0,0 +1,60 @@ + +.. _file_xAODAnaHelpers_TauJetMatching.h: + +File TauJetMatching.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TauJetMatching.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TauJetMatching.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODJet/Jet.h`` + +- ``xAODJet/JetContainer.h`` + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TauJetMatching.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTauJetMatching` + diff --git a/_sources/api/file_xAODAnaHelpers_TauSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TauSelector.h.rst.txt new file mode 100644 index 0000000000..c7d2c3cecb --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TauSelector.h.rst.txt @@ -0,0 +1,70 @@ + +.. _file_xAODAnaHelpers_TauSelector.h: + +File TauSelector.h +================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TauSelector.h``) +--------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TauSelector.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``TH1D.h`` + +- ``TauAnalysisTools/ITauSelectionTool.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/IMatchScoringTool.h`` + +- ``TriggerMatchingTool/IMatchingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODTau/TauJet.h`` + +- ``xAODTau/TauJetContainer.h`` + +- ``xAODTau/TauTrack.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TauSelector.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTauSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_TrackContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrackContainer.h.rst.txt new file mode 100644 index 0000000000..4cd18f8148 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrackContainer.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_TrackContainer.h: + +File TrackContainer.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrackContainer.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrackContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODAnaHelpers/TrackPart.h`` (:ref:`file_xAODAnaHelpers_TrackPart.h`) + +- ``xAODTracking/TrackParticle.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_TrackContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1TrackContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_TrackHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrackHists.h.rst.txt new file mode 100644 index 0000000000..71c7fc9208 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrackHists.h.rst.txt @@ -0,0 +1,53 @@ + +.. _file_xAODAnaHelpers_TrackHists.h: + +File TrackHists.h +================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrackHists.h``) +-------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrackHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODEventInfo/EventInfo.h`` + +- ``xAODTracking/TrackParticleContainer.h`` + +- ``xAODTracking/Vertex.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_TrackHistsAlgo.h` + +- :ref:`file_xAODAnaHelpers_TracksInJetHists.h` + +- :ref:`file_Root_TrackHists.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..6a2c8d43dc --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt @@ -0,0 +1,54 @@ + +.. _file_xAODAnaHelpers_TrackHistsAlgo.h: + +File TrackHistsAlgo.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrackHistsAlgo.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/TrackHists.h`` (:ref:`file_xAODAnaHelpers_TrackHists.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TrackHistsAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTrackHistsAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_TrackPart.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrackPart.h.rst.txt new file mode 100644 index 0000000000..a3b3de10dd --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrackPart.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_TrackPart.h: + +File TrackPart.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrackPart.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrackPart.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_TrackContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1TrackPart` + diff --git a/_sources/api/file_xAODAnaHelpers_TrackSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrackSelector.h.rst.txt new file mode 100644 index 0000000000..550dcbb8b0 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrackSelector.h.rst.txt @@ -0,0 +1,62 @@ + +.. _file_xAODAnaHelpers_TrackSelector.h: + +File TrackSelector.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrackSelector.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrackSelector.h.rst + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``InDetTrackSelectionTool/IInDetTrackSelectionTool.h`` + +- ``TH1D.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODTracking/TrackParticleContainer.h`` + +- ``xAODTracking/VertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TrackSelector.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTrackSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_TracksInJetHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TracksInJetHists.h.rst.txt new file mode 100644 index 0000000000..a99c47ec9d --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TracksInJetHists.h.rst.txt @@ -0,0 +1,49 @@ + +.. _file_xAODAnaHelpers_TracksInJetHists.h: + +File TracksInJetHists.h +======================= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TracksInJetHists.h``) +-------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TracksInJetHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODAnaHelpers/TrackHists.h`` (:ref:`file_xAODAnaHelpers_TrackHists.h`) + +- ``xAODJet/Jet.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_JetHists.h` + +- :ref:`file_Root_TracksInJetHists.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_TreeAlgo.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TreeAlgo.h.rst.txt new file mode 100644 index 0000000000..05345b86d0 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TreeAlgo.h.rst.txt @@ -0,0 +1,56 @@ + +.. _file_xAODAnaHelpers_TreeAlgo.h: + +File TreeAlgo.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TreeAlgo.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TreeAlgo.h.rst + + + + + +Includes +-------- + + +- ``TTree.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODAnaHelpers/HelpTreeBase.h`` (:ref:`file_xAODAnaHelpers_HelpTreeBase.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TreeAlgo.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTreeAlgo` + diff --git a/_sources/api/file_xAODAnaHelpers_TrigMatcher.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TrigMatcher.h.rst.txt new file mode 100644 index 0000000000..f8873f6ebc --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TrigMatcher.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_TrigMatcher.h: + +File TrigMatcher.h +================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + + +|xAH| algorithm to match reconstructed physics objects to trigger objects using the Trig::MatchingTool. + + + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TrigMatcher.h``) +--------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TrigMatcher.h.rst + + + +Detailed Description +-------------------- + +Karol Krizka kkrizka@cern.ch + + + + + + +Includes +-------- + + +- ``AsgTools/AnaToolHandle.h`` + +- ``TH1D.h`` + +- ``TrigDecisionTool/TrigDecisionTool.h`` + +- ``TriggerMatchingTool/IMatchScoringTool.h`` + +- ``TriggerMatchingTool/IMatchingTool.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TrigMatcher.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTrigMatcher` + diff --git a/_sources/api/file_xAODAnaHelpers_TruthContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TruthContainer.h.rst.txt new file mode 100644 index 0000000000..abc8166913 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TruthContainer.h.rst.txt @@ -0,0 +1,75 @@ + +.. _file_xAODAnaHelpers_TruthContainer.h: + +File TruthContainer.h +===================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TruthContainer.h``) +------------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TruthContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODAnaHelpers/ParticleContainer.h`` (:ref:`file_xAODAnaHelpers_ParticleContainer.h`) + +- ``xAODAnaHelpers/TruthPart.h`` (:ref:`file_xAODAnaHelpers_TruthPart.h`) + +- ``xAODTruth/TruthParticle.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_TruthContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1TruthContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_TruthPart.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TruthPart.h.rst.txt new file mode 100644 index 0000000000..8a2f60ac01 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TruthPart.h.rst.txt @@ -0,0 +1,57 @@ + +.. _file_xAODAnaHelpers_TruthPart.h: + +File TruthPart.h +================ + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TruthPart.h``) +------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TruthPart.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Particle.h`` (:ref:`file_xAODAnaHelpers_Particle.h`) + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_TruthContainer.h` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1TruthPart` + diff --git a/_sources/api/file_xAODAnaHelpers_TruthSelector.h.rst.txt b/_sources/api/file_xAODAnaHelpers_TruthSelector.h.rst.txt new file mode 100644 index 0000000000..77a3e83f7a --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_TruthSelector.h.rst.txt @@ -0,0 +1,60 @@ + +.. _file_xAODAnaHelpers_TruthSelector.h: + +File TruthSelector.h +==================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/TruthSelector.h``) +----------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_TruthSelector.h.rst + + + + + +Includes +-------- + + +- ``TH1D.h`` + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + +- ``xAODBTaggingEfficiency/BTaggingSelectionTool.h`` + +- ``xAODTruth/TruthParticle.h`` + +- ``xAODTruth/TruthParticleContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_TruthSelector.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classTruthSelector` + diff --git a/_sources/api/file_xAODAnaHelpers_VertexContainer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_VertexContainer.h.rst.txt new file mode 100644 index 0000000000..df7bdfa21c --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_VertexContainer.h.rst.txt @@ -0,0 +1,73 @@ + +.. _file_xAODAnaHelpers_VertexContainer.h: + +File VertexContainer.h +====================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/VertexContainer.h``) +------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_VertexContainer.h.rst + + + + + +Includes +-------- + + +- ``TLorentzVector.h`` + +- ``TTree.h`` + +- ``string`` + +- ``vector`` + +- ``xAODAnaHelpers/HelperClasses.h`` (:ref:`file_xAODAnaHelpers_HelperClasses.h`) + +- ``xAODAnaHelpers/HelperFunctions.h`` (:ref:`file_xAODAnaHelpers_HelperFunctions.h`) + +- ``xAODTracking/VertexContainer.h`` + +- ``xAODTruth/TruthVertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + +- :ref:`file_Root_VertexContainer.cxx` + + + + +Namespaces +---------- + + +- :ref:`namespace_xAH` + + +Classes +------- + + +- :ref:`exhale_class_classxAH_1_1VertexContainer` + diff --git a/_sources/api/file_xAODAnaHelpers_VtxHists.h.rst.txt b/_sources/api/file_xAODAnaHelpers_VtxHists.h.rst.txt new file mode 100644 index 0000000000..f21a757732 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_VtxHists.h.rst.txt @@ -0,0 +1,51 @@ + +.. _file_xAODAnaHelpers_VtxHists.h: + +File VtxHists.h +=============== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/VtxHists.h``) +------------------------------------------ + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_VtxHists.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/HistogramManager.h`` (:ref:`file_xAODAnaHelpers_HistogramManager.h`) + +- ``xAODTracking/TrackParticle.h`` + +- ``xAODTracking/TrackParticleContainer.h`` + +- ``xAODTracking/Vertex.h`` + +- ``xAODTracking/VertexContainer.h`` + + + +Included By +----------- + + +- :ref:`file_Root_VtxHists.cxx` + + + diff --git a/_sources/api/file_xAODAnaHelpers_Writer.h.rst.txt b/_sources/api/file_xAODAnaHelpers_Writer.h.rst.txt new file mode 100644 index 0000000000..e03f783740 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_Writer.h.rst.txt @@ -0,0 +1,52 @@ + +.. _file_xAODAnaHelpers_Writer.h: + +File Writer.h +============= + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/Writer.h``) +---------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_Writer.h.rst + + + + + +Includes +-------- + + +- ``xAODAnaHelpers/Algorithm.h`` (:ref:`file_xAODAnaHelpers_Algorithm.h`) + + + +Included By +----------- + + +- :ref:`file_Root_LinkDef.h` + +- :ref:`file_Root_Writer.cxx` + + + + +Classes +------- + + +- :ref:`exhale_class_classWriter` + diff --git a/_sources/api/file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt b/_sources/api/file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt new file mode 100644 index 0000000000..9d9c320530 --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt @@ -0,0 +1,46 @@ + +.. _file_xAODAnaHelpers_tools_ReturnCheck.h: + +File ReturnCheck.h +================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers/tools``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/tools/ReturnCheck.h``) +--------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.rst + + + + + +Includes +-------- + + +- ``AsgMessaging/MessageCheck.h`` + + + + + + +Defines +------- + + +- :ref:`exhale_define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5` + +- :ref:`exhale_define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a` + diff --git a/_sources/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt b/_sources/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt new file mode 100644 index 0000000000..76c5ecdedc --- /dev/null +++ b/_sources/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt @@ -0,0 +1,51 @@ + +.. _file_xAODAnaHelpers_tools_ReturnCheckConfig.h: + +File ReturnCheckConfig.h +======================== + +|exhale_lsh| :ref:`Parent directory ` (``xAODAnaHelpers/tools``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. contents:: Contents + :local: + :backlinks: none + +Definition (``xAODAnaHelpers/tools/ReturnCheckConfig.h``) +--------------------------------------------------------- + + +.. toctree:: + :maxdepth: 1 + + program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst + + + + + +Includes +-------- + + +- ``int fSuccess = gSystem-`` + + + + + + +Functions +--------- + + +- :ref:`exhale_function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e` + + +Variables +--------- + + +- :ref:`exhale_variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba` + diff --git a/_sources/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.rst.txt b/_sources/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.rst.txt new file mode 100644 index 0000000000..aac69a907c --- /dev/null +++ b/_sources/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4: + +Function ClassImp(xAH::Algorithm) +================================= + +- Defined in :ref:`file_Root_Algorithm.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(xAH::Algorithm) diff --git a/_sources/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.rst.txt b/_sources/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.rst.txt new file mode 100644 index 0000000000..f2fc7383f8 --- /dev/null +++ b/_sources/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b: + +Function ClassImp(BJetEfficiencyCorrector) +========================================== + +- Defined in :ref:`file_Root_BJetEfficiencyCorrector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(BJetEfficiencyCorrector) diff --git a/_sources/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.rst.txt b/_sources/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.rst.txt new file mode 100644 index 0000000000..4ea92c3439 --- /dev/null +++ b/_sources/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795: + +Function ClassImp(BasicEventSelection) +====================================== + +- Defined in :ref:`file_Root_BasicEventSelection.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(BasicEventSelection) diff --git a/_sources/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.rst.txt b/_sources/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.rst.txt new file mode 100644 index 0000000000..96b0992c08 --- /dev/null +++ b/_sources/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff: + +Function ClassImp(ClusterHistsAlgo) +=================================== + +- Defined in :ref:`file_Root_ClusterHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(ClusterHistsAlgo) diff --git a/_sources/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.rst.txt b/_sources/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.rst.txt new file mode 100644 index 0000000000..dc3a7c1902 --- /dev/null +++ b/_sources/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e: + +Function ANA_MSG_SOURCE(msgClusterHists, "ClusterHists") +======================================================== + +- Defined in :ref:`file_Root_ClusterHists.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_SOURCE(msgClusterHists, "ClusterHists") diff --git a/_sources/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.rst.txt b/_sources/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.rst.txt new file mode 100644 index 0000000000..dc0ad8d086 --- /dev/null +++ b/_sources/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf: + +Function ClassImp(DebugTool) +============================ + +- Defined in :ref:`file_Root_DebugTool.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(DebugTool) diff --git a/_sources/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.rst.txt b/_sources/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.rst.txt new file mode 100644 index 0000000000..ce1c7d908c --- /dev/null +++ b/_sources/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac: + +Function ClassImp(ElectronCalibrator) +===================================== + +- Defined in :ref:`file_Root_ElectronCalibrator.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(ElectronCalibrator) diff --git a/_sources/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.rst.txt b/_sources/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.rst.txt new file mode 100644 index 0000000000..4f21fbe777 --- /dev/null +++ b/_sources/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85: + +Function ClassImp(ElectronEfficiencyCorrector) +============================================== + +- Defined in :ref:`file_Root_ElectronEfficiencyCorrector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(ElectronEfficiencyCorrector) diff --git a/_sources/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.rst.txt b/_sources/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.rst.txt new file mode 100644 index 0000000000..58634b0063 --- /dev/null +++ b/_sources/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4: + +Function ClassImp(ElectronHistsAlgo) +==================================== + +- Defined in :ref:`file_Root_ElectronHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(ElectronHistsAlgo) diff --git a/_sources/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.rst.txt b/_sources/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.rst.txt new file mode 100644 index 0000000000..b48e0462c5 --- /dev/null +++ b/_sources/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d: + +Function ANA_MSG_SOURCE(msgElectronHists, "ElectronHists") +========================================================== + +- Defined in :ref:`file_Root_ElectronHists.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_SOURCE(msgElectronHists, "ElectronHists") diff --git a/_sources/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.rst.txt b/_sources/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.rst.txt new file mode 100644 index 0000000000..f32607d3e3 --- /dev/null +++ b/_sources/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a: + +Function ClassImp(ElectronSelector) +=================================== + +- Defined in :ref:`file_Root_ElectronSelector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(ElectronSelector) diff --git a/_sources/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.rst.txt b/_sources/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.rst.txt new file mode 100644 index 0000000000..3e36171d39 --- /dev/null +++ b/_sources/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b: + +Function ClassImp(HLTJetGetter) +=============================== + +- Defined in :ref:`file_Root_HLTJetGetter.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(HLTJetGetter) diff --git a/_sources/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.rst.txt b/_sources/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.rst.txt new file mode 100644 index 0000000000..bae7fd50c2 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832: + +Template Function HelperFunctions::makeDeepCopy +=============================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::makeDeepCopy(xAOD::TStore *, std::string, const T1 *) diff --git a/_sources/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.rst.txt b/_sources/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.rst.txt new file mode 100644 index 0000000000..b3ee39e5b7 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51: + +Function HelperFunctions::getPrimaryVertexZ +=========================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getPrimaryVertexZ(const xAOD::Vertex *) diff --git a/_sources/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.rst.txt b/_sources/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.rst.txt new file mode 100644 index 0000000000..76b7428441 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2: + +Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer \*) +========================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *) diff --git a/_sources/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.rst.txt b/_sources/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.rst.txt new file mode 100644 index 0000000000..c24dfc6433 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61: + +Function xAH::addRucio +====================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: xAH::addRucio(SH::SampleHandler&, const std::string&, const std::string&) diff --git a/_sources/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.rst.txt b/_sources/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.rst.txt new file mode 100644 index 0000000000..4c7cf37849 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2: + +Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer \*, MsgStream&) +============================================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *, MsgStream&) diff --git a/_sources/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.rst.txt b/_sources/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.rst.txt new file mode 100644 index 0000000000..729d043e3d --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f: + +Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent \*, xAOD::TStore \*) +============================================================================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *) diff --git a/_sources/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.rst.txt b/_sources/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.rst.txt new file mode 100644 index 0000000000..2b7b3257dc --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60: + +Function HelperFunctions::dPhi +============================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::dPhi(float, float) diff --git a/_sources/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.rst.txt b/_sources/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.rst.txt new file mode 100644 index 0000000000..ad25c27db4 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444: + +Template Function HelperFunctions::__attribute__ +================================================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::__attribute__((deprecated("retrieve(..., bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882"))) diff --git a/_sources/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.rst.txt b/_sources/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.rst.txt new file mode 100644 index 0000000000..5cd5d25298 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a: + +Function HelperFunctions::passPrimaryVertexSelection +==================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::passPrimaryVertexSelection(const xAOD::VertexContainer *, int) diff --git a/_sources/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.rst.txt b/_sources/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.rst.txt new file mode 100644 index 0000000000..de344837ac --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d: + +Template Function HelperFunctions::sort_container_pt(const T \*) +================================================================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::sort_container_pt(const T *) diff --git a/_sources/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.rst.txt b/_sources/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.rst.txt new file mode 100644 index 0000000000..4d2d70ad35 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8: + +Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent \*, xAOD::TStore \*, MsgStream&) +========================================================================================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&) diff --git a/_sources/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.rst.txt b/_sources/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.rst.txt new file mode 100644 index 0000000000..ba6ecb15ca --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b: + +Function HelperFunctions::sort_pt +================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::sort_pt(const xAOD::IParticle *, const xAOD::IParticle *) diff --git a/_sources/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.rst.txt b/_sources/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.rst.txt new file mode 100644 index 0000000000..1fc6c22eef --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3: + +Function HelperFunctions::jetReclustering +========================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::jetReclustering(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm) diff --git a/_sources/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.rst.txt b/_sources/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.rst.txt new file mode 100644 index 0000000000..585cf3ffd5 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971: + +Template Function HelperFunctions::connectBranch +================================================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::connectBranch(std::string, TTree *, const std::string&, std::vector **) diff --git a/_sources/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.rst.txt b/_sources/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.rst.txt new file mode 100644 index 0000000000..53d6fb0502 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2: + +Template Function HelperFunctions::type_name +============================================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::type_name(bool) diff --git a/_sources/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.rst.txt b/_sources/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.rst.txt new file mode 100644 index 0000000000..e0742a76f7 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0: + +Template Function HelperFunctions::retrieve(T \*&, std::string, xAOD::TEvent \*, xAOD::TStore \*) +================================================================================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *) diff --git a/_sources/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.rst.txt b/_sources/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.rst.txt new file mode 100644 index 0000000000..f72321173d --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742: + +Function HelperFunctions::found_non_dummy_sys +============================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::found_non_dummy_sys(std::vector *) diff --git a/_sources/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.rst.txt b/_sources/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.rst.txt new file mode 100644 index 0000000000..21df17699d --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906: + +Template Function HelperFunctions::getLink +========================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getLink(const xAOD::IParticle *, std::string) diff --git a/_sources/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.rst.txt b/_sources/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.rst.txt new file mode 100644 index 0000000000..80e0307769 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710: + +Template Function HelperFunctions::makeSubsetCont(T1 \*&, T2 \*&, const std::string&, HelperClasses::ToolName) +============================================================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::makeSubsetCont(T1 *&, T2 *&, const std::string&, HelperClasses::ToolName) diff --git a/_sources/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.rst.txt b/_sources/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.rst.txt new file mode 100644 index 0000000000..f19618939c --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260: + +Function HelperFunctions::getListofSystematics +============================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getListofSystematics(const CP::SystematicSet, std::string, float, MsgStream&) diff --git a/_sources/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.rst.txt b/_sources/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.rst.txt new file mode 100644 index 0000000000..c079078fb8 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4: + +Function HelperFunctions::jetTrimming(const xAOD::JetContainer \*, double, double, fastjet::JetAlgorithm) +========================================================================================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::jetTrimming(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm) diff --git a/_sources/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.rst.txt b/_sources/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.rst.txt new file mode 100644 index 0000000000..aef0e096ee --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b: + +Function HelperFunctions::applyPrimaryVertexSelection +===================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::applyPrimaryVertexSelection(const xAOD::JetContainer *, const xAOD::VertexContainer *) diff --git a/_sources/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.rst.txt b/_sources/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.rst.txt new file mode 100644 index 0000000000..47dd071c03 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db: + +Function HelperFunctions::replaceString +======================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::replaceString(std::string, const std::string&, const std::string&) diff --git a/_sources/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.rst.txt b/_sources/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.rst.txt new file mode 100644 index 0000000000..844ee794cf --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191: + +Function HelperFunctions::isAvailableMetaData +============================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::isAvailableMetaData(TTree *) diff --git a/_sources/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.rst.txt b/_sources/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.rst.txt new file mode 100644 index 0000000000..7437d4b349 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1: + +Function HelperFunctions::getMCShowerType +========================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getMCShowerType(const std::string&, const std::string&) diff --git a/_sources/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.rst.txt b/_sources/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.rst.txt new file mode 100644 index 0000000000..d41827f8eb --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691: + +Template Function HelperFunctions::makeSubsetCont(T1 \*&, T2 \*&, MsgStream&, const std::string&, HelperClasses::ToolName) +========================================================================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::makeSubsetCont(T1 *&, T2 *&, MsgStream&, const std::string&, HelperClasses::ToolName) diff --git a/_sources/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.rst.txt b/_sources/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.rst.txt new file mode 100644 index 0000000000..94db37f2db --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b: + +Function HelperFunctions::msg +============================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::msg(MSG::Level) diff --git a/_sources/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.rst.txt b/_sources/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.rst.txt new file mode 100644 index 0000000000..defc833d9d --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03: + +Function HelperFunctions::writeSystematicsListHist +================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::writeSystematicsListHist(const std::vector&, std::string, TFile *) diff --git a/_sources/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.rst.txt b/_sources/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.rst.txt new file mode 100644 index 0000000000..d0a83f0678 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f: + +Template Function HelperFunctions::sort_container_pt(T \*) +========================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::sort_container_pt(T *) diff --git a/_sources/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.rst.txt b/_sources/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.rst.txt new file mode 100644 index 0000000000..c83a79c3b4 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be: + +Function HelperFunctions::countPrimaryVertices +============================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::countPrimaryVertices(const xAOD::VertexContainer *, int) diff --git a/_sources/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.rst.txt b/_sources/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.rst.txt new file mode 100644 index 0000000000..0f21867d9d --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab: + +Template Function HelperFunctions::remove_duplicates +==================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::remove_duplicates(std::vector&) diff --git a/_sources/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.rst.txt b/_sources/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.rst.txt new file mode 100644 index 0000000000..9a03752391 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401: + +Function HelperFunctions::SplitString +===================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::SplitString(TString&, const char) diff --git a/_sources/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.rst.txt b/_sources/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.rst.txt new file mode 100644 index 0000000000..833ce12946 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76: + +Function HelperFunctions::string_pos +==================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::string_pos(const std::string&, const std::string&, unsigned int) diff --git a/_sources/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.rst.txt b/_sources/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.rst.txt new file mode 100644 index 0000000000..57931b62e8 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2: + +Function HelperFunctions::isFilePrimaryxAOD +=========================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::isFilePrimaryxAOD(TFile *) diff --git a/_sources/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.rst.txt b/_sources/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.rst.txt new file mode 100644 index 0000000000..37185f0279 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d: + +Template Function HelperFunctions::retrieve(T \*&, std::string, xAOD::TEvent \*, xAOD::TStore \*, MsgStream&) +============================================================================================================= + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&) diff --git a/_sources/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.rst.txt b/_sources/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.rst.txt new file mode 100644 index 0000000000..32119affd9 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23: + +Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer \*, MsgStream&) +====================================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *, MsgStream&) diff --git a/_sources/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.rst.txt b/_sources/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.rst.txt new file mode 100644 index 0000000000..073c2fc6e8 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452: + +Function HelperFunctions::jetTrimming(const xAOD::Jet \*, double, double, fastjet::JetAlgorithm) +================================================================================================ + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::jetTrimming(const xAOD::Jet *, double, double, fastjet::JetAlgorithm) diff --git a/_sources/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.rst.txt b/_sources/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.rst.txt new file mode 100644 index 0000000000..8bd8706742 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c: + +Template Function HelperFunctions::recordOutput +=============================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::recordOutput(xAOD::TEvent *, xAOD::TStore *, std::string) diff --git a/_sources/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.rst.txt b/_sources/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.rst.txt new file mode 100644 index 0000000000..a2c3b2c4f7 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168: + +Function HelperFunctions::has_exact +=================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::has_exact(const std::string, const std::string) diff --git a/_sources/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.rst.txt b/_sources/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.rst.txt new file mode 100644 index 0000000000..4f0cc980a1 --- /dev/null +++ b/_sources/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49: + +Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer \*) +================================================================================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *) diff --git a/_sources/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.rst.txt b/_sources/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.rst.txt new file mode 100644 index 0000000000..3976f7d8ba --- /dev/null +++ b/_sources/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105: + +Function ClassImp(IParticleHistsAlgo) +===================================== + +- Defined in :ref:`file_Root_IParticleHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(IParticleHistsAlgo) diff --git a/_sources/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.rst.txt b/_sources/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.rst.txt new file mode 100644 index 0000000000..1453775d4c --- /dev/null +++ b/_sources/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065: + +Function ClassImp(IsoCloseByCorr) +================================= + +- Defined in :ref:`file_Root_IsoCloseByCorr.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(IsoCloseByCorr) diff --git a/_sources/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.rst.txt b/_sources/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.rst.txt new file mode 100644 index 0000000000..be71947413 --- /dev/null +++ b/_sources/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7: + +Function ClassImp(JetCalibrator) +================================ + +- Defined in :ref:`file_Root_JetCalibrator.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(JetCalibrator) diff --git a/_sources/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.rst.txt b/_sources/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.rst.txt new file mode 100644 index 0000000000..c750f8f91f --- /dev/null +++ b/_sources/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d: + +Function ClassImp(JetHistsAlgo) +=============================== + +- Defined in :ref:`file_Root_JetHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(JetHistsAlgo) diff --git a/_sources/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.rst.txt b/_sources/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.rst.txt new file mode 100644 index 0000000000..e770b89978 --- /dev/null +++ b/_sources/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a: + +Function ClassImp(JetSelector) +============================== + +- Defined in :ref:`file_Root_JetSelector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(JetSelector) diff --git a/_sources/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.rst.txt b/_sources/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.rst.txt new file mode 100644 index 0000000000..c8dd695e14 --- /dev/null +++ b/_sources/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a: + +Function ClassImp(METConstructor) +================================= + +- Defined in :ref:`file_Root_METConstructor.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(METConstructor) diff --git a/_sources/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.rst.txt b/_sources/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.rst.txt new file mode 100644 index 0000000000..e9c4eb0ee6 --- /dev/null +++ b/_sources/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b: + +Function ClassImp(MessagePrinterAlgo) +===================================== + +- Defined in :ref:`file_Root_MessagePrinterAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MessagePrinterAlgo) diff --git a/_sources/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.rst.txt b/_sources/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.rst.txt new file mode 100644 index 0000000000..a27fa5bf80 --- /dev/null +++ b/_sources/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a: + +Function ClassImp(MetHistsAlgo) +=============================== + +- Defined in :ref:`file_Root_MetHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MetHistsAlgo) diff --git a/_sources/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.rst.txt b/_sources/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.rst.txt new file mode 100644 index 0000000000..545b69013f --- /dev/null +++ b/_sources/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463: + +Function ClassImp(MinixAOD) +=========================== + +- Defined in :ref:`file_Root_MinixAOD.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MinixAOD) diff --git a/_sources/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.rst.txt b/_sources/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.rst.txt new file mode 100644 index 0000000000..dd3c64d9e6 --- /dev/null +++ b/_sources/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f: + +Function ClassImp(MuonCalibrator) +================================= + +- Defined in :ref:`file_Root_MuonCalibrator.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MuonCalibrator) diff --git a/_sources/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.rst.txt b/_sources/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.rst.txt new file mode 100644 index 0000000000..6e78e123dd --- /dev/null +++ b/_sources/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031: + +Function ClassImp(MuonEfficiencyCorrector) +========================================== + +- Defined in :ref:`file_Root_MuonEfficiencyCorrector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MuonEfficiencyCorrector) diff --git a/_sources/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.rst.txt b/_sources/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.rst.txt new file mode 100644 index 0000000000..ced03b36bf --- /dev/null +++ b/_sources/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686: + +Function ClassImp(MuonHistsAlgo) +================================ + +- Defined in :ref:`file_Root_MuonHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MuonHistsAlgo) diff --git a/_sources/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.rst.txt b/_sources/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.rst.txt new file mode 100644 index 0000000000..a20f9d1b1c --- /dev/null +++ b/_sources/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b: + +Function ClassImp(MuonInFatJetCorrector) +======================================== + +- Defined in :ref:`file_Root_MuonInFatJetCorrector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MuonInFatJetCorrector) diff --git a/_sources/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.rst.txt b/_sources/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.rst.txt new file mode 100644 index 0000000000..db017a4c7c --- /dev/null +++ b/_sources/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86: + +Function ClassImp(MuonSelector) +=============================== + +- Defined in :ref:`file_Root_MuonSelector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(MuonSelector) diff --git a/_sources/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.rst.txt b/_sources/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.rst.txt new file mode 100644 index 0000000000..2d90388823 --- /dev/null +++ b/_sources/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0: + +Function ClassImp(OverlapRemover) +================================= + +- Defined in :ref:`file_Root_OverlapRemover.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(OverlapRemover) diff --git a/_sources/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.rst.txt b/_sources/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.rst.txt new file mode 100644 index 0000000000..b796bef0dd --- /dev/null +++ b/_sources/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7: + +Function ANA_MSG_SOURCE(msgPIDManager, "PIDManager") +==================================================== + +- Defined in :ref:`file_Root_ParticlePIDManager.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_SOURCE(msgPIDManager, "PIDManager") diff --git a/_sources/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.rst.txt b/_sources/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.rst.txt new file mode 100644 index 0000000000..b94ec761db --- /dev/null +++ b/_sources/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164: + +Function ANA_MSG_HEADER +======================= + +- Defined in :ref:`file_xAODAnaHelpers_ParticlePIDManager.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_HEADER(msgPIDManager) diff --git a/_sources/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.rst.txt b/_sources/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.rst.txt new file mode 100644 index 0000000000..b008ab5049 --- /dev/null +++ b/_sources/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52: + +Function ClassImp(PhotonCalibrator) +=================================== + +- Defined in :ref:`file_Root_PhotonCalibrator.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(PhotonCalibrator) diff --git a/_sources/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.rst.txt b/_sources/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.rst.txt new file mode 100644 index 0000000000..2c2dd674a8 --- /dev/null +++ b/_sources/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6: + +Function ClassImp(PhotonHistsAlgo) +================================== + +- Defined in :ref:`file_Root_PhotonHistsAlgo.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(PhotonHistsAlgo) diff --git a/_sources/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.rst.txt b/_sources/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.rst.txt new file mode 100644 index 0000000000..5b4bae7a76 --- /dev/null +++ b/_sources/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0: + +Function ANA_MSG_SOURCE(msgPhotonHists, "PhotonHists") +====================================================== + +- Defined in :ref:`file_Root_PhotonHists.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_SOURCE(msgPhotonHists, "PhotonHists") diff --git a/_sources/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.rst.txt b/_sources/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.rst.txt new file mode 100644 index 0000000000..5d93dc60d9 --- /dev/null +++ b/_sources/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e: + +Function ClassImp(PhotonSelector) +================================= + +- Defined in :ref:`file_Root_PhotonSelector.cxx` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ClassImp(PhotonSelector) diff --git a/_sources/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.rst.txt b/_sources/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.rst.txt new file mode 100644 index 0000000000..4969a05e90 --- /dev/null +++ b/_sources/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e: + +Function ANA_MSG_ERROR +====================== + +- Defined in :ref:`file_xAODAnaHelpers_tools_ReturnCheckConfig.h` + + +Function Documentation +---------------------- + + +.. doxygenfunction:: ANA_MSG_ERROR("Could not find the " "configuration file:"< +
  • + +
  • + + +.. end raw html for treeView + + diff --git a/_sources/api/program_listing_file_Root_Algorithm.cxx.rst.txt b/_sources/api/program_listing_file_Root_Algorithm.cxx.rst.txt new file mode 100644 index 0000000000..6993fdbb65 --- /dev/null +++ b/_sources/api/program_listing_file_Root_Algorithm.cxx.rst.txt @@ -0,0 +1,205 @@ + +.. _program_listing_file_Root_Algorithm.cxx: + +Program Listing for File Algorithm.cxx +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/Algorithm.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + + // RCU include for throwing an exception+message + #include + + // for isMC() + #include + #include "xAODEventInfo/EventInfo.h" + + #include + + std::map xAH::Algorithm::m_instanceRegistry = {}; + + // this is needed to distribute the algorithm to the workers + ClassImp(xAH::Algorithm) + + xAH::Algorithm::Algorithm(std::string className) : + m_className(className) + { + } + + xAH::Algorithm::~Algorithm() + { + } + + StatusCode xAH::Algorithm::algInitialize(){ + // register an instance of the the class + registerInstance(); + // set the name this way as duplicate names are handled automatically + m_name = name(); + // names will be BasicEventSelection.baseEventSel for example + msg().setName(m_className + "." + m_name); + // deprecating m_debug, but this is around for backwards compatibility + m_debug = msgLvl(MSG::DEBUG); + // deprecating m_verbose, but this is around for backwards compatibility + m_verbose = msgLvl(MSG::VERBOSE); + + + //Backwards compatibility + m_forceFastSim = m_forceFastSim || m_setAFII || m_setAF3; + + //Return a failure if there's contradictory flags (2 or more are true) + if( m_forceData ? (m_forceFastSim || m_forceFullSim) : (m_forceFastSim && m_forceFullSim) ){ + ANA_MSG_ERROR("Multiple input-type flags are set, be sure only one of m_forceData(" << m_forceData << "), m_forceFastSim(" << m_forceFastSim << "), and m_forceFullSim(" << m_forceFullSim << ") are true."); + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; + } + + StatusCode xAH::Algorithm::algFinalize(){ + unregisterInstance(); + return StatusCode::SUCCESS; + } + + StatusCode xAH::Algorithm::parseSystValVector(){ + + std::stringstream ss(m_systValVectorString); + float systVal; + while( ss >> systVal ){ + m_systValVector.push_back(systVal); + if (ss.peek() == ',') + ss.ignore(); + } + ss.str(""); + + return StatusCode::SUCCESS; + } + + bool xAH::Algorithm::isMC(){ + + // If decision is established, return the decision + if(m_isMC == 0 || m_isMC == 1) return m_isMC; + + // If overriding decision by boolean flags + if( m_forceData ){ + m_isMC = 0; + return m_isMC; + }else if ( m_forceFullSim || m_forceFastSim ){ + m_isMC = 1; + return m_isMC; + } + + const xAOD::EventInfo* ei(nullptr); + // couldn't retrieve it + if(!HelperFunctions::retrieve(ei, m_eventInfoContainerName, m_event, m_store, msg()).isSuccess()){ + RCU_THROW_MSG( "Could not retrieve eventInfo container (" + m_eventInfoContainerName+") for isMC() check."); + } + + static SG::AuxElement::ConstAccessor eventType("eventTypeBitmask"); + if(!eventType.isAvailable(*ei)){ + RCU_THROW_MSG( "eventType is not available for isMC() check."); + } + + // reached here, return True or False since we have all we need + m_isMC = (static_cast(eventType(*ei)) & xAOD::EventInfo::IS_SIMULATION); + return m_isMC; + } + + bool xAH::Algorithm::isFastSim(){ + + // If decision is established, return the decision + if(m_isFastSim == 0 || m_isFastSim == 1) return m_isFastSim; + + // If overriding decision by boolean flags + if( m_forceData || m_forceFullSim ){ + m_isFastSim = 0; + return m_isFastSim; + }else if ( m_forceFastSim ){ + m_isFastSim = 1; + return m_isFastSim; + } + + std::string SimulationFlavour; + const xAOD::FileMetaData* fmd = nullptr; + ANA_CHECK( wk()->xaodEvent()->retrieveMetaInput(fmd, "FileMetaData") ); + fmd->value(xAOD::FileMetaData::simFlavour, SimulationFlavour); + + boost::to_upper(SimulationFlavour); + m_isFastSim = SimulationFlavour.find("ATLFAST") != std::string::npos; + + return m_isFastSim; + } + + bool xAH::Algorithm::isAF3(){ + + // If already set return + if (m_isAF3==0 || m_isAF3==1){ + return m_isAF3; + } + // If full sim, return empty string (call function first to make sure Force options are considered) + bool isFaS = isFastSim(); + if (!isFaS){ + m_isAF3 = 0; + return m_isAF3; + } + + if (m_setAF3){ + m_isAF3 = 1; + return m_isAF3; + } + + std::string SimulationFlavour; + const xAOD::FileMetaData* fmd = nullptr; + if( wk()->xaodEvent()->retrieveMetaInput(fmd, "FileMetaData") != StatusCode::SUCCESS){ + ANA_MSG_ERROR("Cannot retreve File Metadata to find simulation flavour"); + return false; + } + fmd->value(xAOD::FileMetaData::simFlavour, SimulationFlavour); + + boost::to_upper(SimulationFlavour); + if(SimulationFlavour.find("ATLFASTII") != std::string::npos){ + m_isAF3 = 0; + } else if (SimulationFlavour.find("ATLFAST3") != std::string::npos){ + m_isAF3 = 1; + } else { + ANA_MSG_ERROR("Unexpected Simulation type: "<< SimulationFlavour); + return false; + } + + return m_isAF3; + } + + bool xAH::Algorithm::isPHYS(){ + TTree* metaData = dynamic_cast( wk()->inputFile()->Get("MetaData") ); + if(metaData){ + metaData->LoadTree(0); + return (metaData->GetBranch("StreamDAOD_PHYS") || metaData->GetBranch("StreamDAOD_LLP1") || metaData->GetBranch("StreamDAOD_PHYSLITE")); + } else { + ANA_MSG_ERROR("MetaData tree missing from input file!"); + return 0; + } + } + + void xAH::Algorithm::registerInstance(){ + if(m_registered) return; + m_instanceRegistry[m_className]++; + m_registered = true; + } + + int xAH::Algorithm::numInstances(){ + if(m_instanceRegistry.find(m_className) == m_instanceRegistry.end()){ + ANA_MSG_ERROR("numInstances: we seem to have recorded zero instances of " << m_className << ". This should not happen."); + return 0; + } + return m_instanceRegistry.at(m_className); + } + + void xAH::Algorithm::unregisterInstance(){ + if(m_instanceRegistry.find(m_className) == m_instanceRegistry.end()){ + ANA_MSG_ERROR("unregisterInstance: we seem to have recorded zero instances of " << m_className << ". This should not happen."); + } + m_instanceRegistry[m_className]--; + } diff --git a/_sources/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.rst.txt b/_sources/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..c89da9d553 --- /dev/null +++ b/_sources/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,828 @@ + +.. _program_listing_file_Root_BJetEfficiencyCorrector.cxx: + +Program Listing for File BJetEfficiencyCorrector.cxx +==================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/BJetEfficiencyCorrector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /************************************************** + * + * Interface to CP BJet Efficiency Correction Tool. + * + * John Alison (john.alison@cern.ch) + * Gabriel Facini (gabriel.facini@cern.ch) + * + * + **************************************************/ + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + #include + + #include "PathResolver/PathResolver.h" + + //EDM + #include "xAODJet/JetAuxContainer.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/BJetEfficiencyCorrector.h" + + #include + + // tools + #include "xAODBTaggingEfficiency/BTaggingSelectionTool.h" + #include "xAODBTaggingEfficiency/BTaggingEfficiencyTool.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(BJetEfficiencyCorrector) + + + BJetEfficiencyCorrector :: BJetEfficiencyCorrector () : + Algorithm("BJetEfficiencyCorrector") + { + } + + + EL::StatusCode BJetEfficiencyCorrector :: setupJob (EL::Job& job) + { + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "BJetEfficiencyCorrector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BJetEfficiencyCorrector :: histInitialize () + { + ANA_CHECK( xAH::Algorithm::algInitialize()); + + m_corrFileName = PathResolverFindCalibFile(m_corrFileName); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BJetEfficiencyCorrector :: fileExecute () + { + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BJetEfficiencyCorrector :: changeInput (bool /*firstFile*/) + { + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode BJetEfficiencyCorrector :: initialize () + { + ANA_MSG_INFO( "Initializing BJetEfficiencyCorrector Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + // several lists of systematics could be configured + // this is the case when MET sys should be added + // to the OR ones + + // parse and split by comma + std::string token; + std::istringstream ss(m_inputAlgo); + while (std::getline(ss, token, ',')) { + m_inputAlgoList.push_back(token); + } + + m_decorSF = m_decor + "_SF"; + m_decorWeight = m_decor + "_Weight"; + m_decorQuantile = m_decor + "_Quantile"; + + bool opOK(false),taggerOK(false); + m_getScaleFactors = false; + m_useContinuous = false; + // not calibrated yet + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTagCalib2017 + // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/BTaggingBenchmarksRelease21 + + // All working points are calibrated (but not all taggers, see next check) + if (m_operatingPt == "FixedCutBEff_60" and (m_taggerName != "GN2v01")) { opOK = true; m_getScaleFactors = true; } + if (m_operatingPt == "FixedCutBEff_65") { + if(m_taggerName == "GN2v01"){ + opOK = true; m_getScaleFactors = true; + } + } + if (m_operatingPt == "FixedCutBEff_70") { opOK = true; m_getScaleFactors = true; } + if (m_operatingPt == "FixedCutBEff_77") { opOK = true; m_getScaleFactors = true; } + if (m_operatingPt == "FixedCutBEff_85") { opOK = true; m_getScaleFactors = true; } + if (m_operatingPt == "FixedCutBEff_90" and (m_taggerName == "GN2v01")) { opOK = true; m_getScaleFactors = true; } + if (m_operatingPt == "Continuous" ) { opOK = true; m_getScaleFactors = true; + m_useContinuous = true; + ANA_MSG_DEBUG(" Using continuous b-tagging"); } + + // No official calibrations in rel22 yet + if (m_taggerName == "DL1r") { taggerOK = true; m_getScaleFactors = false; } + if (m_taggerName == "DL1dv00") { taggerOK = true; m_getScaleFactors = false; } + if (m_taggerName == "DL1dv01") { taggerOK = true; m_getScaleFactors = true; } + if (m_taggerName == "GN120220509") { taggerOK = true; m_getScaleFactors = false; } + if (m_taggerName == "GN2v00LegacyWP") { taggerOK = true; m_getScaleFactors = false; } + if (m_taggerName == "GN2v00NewAliasWP") { taggerOK = true; m_getScaleFactors = false; } + if (m_taggerName == "GN2v01") { taggerOK = true; m_getScaleFactors = true; } + + if( !opOK || !taggerOK ) { + ANA_MSG_ERROR( "Requested tagger/operating point is not known to xAH. Arrow v Indian? " << m_taggerName << "/" << m_operatingPt); + return EL::StatusCode::FAILURE; + } + + // make unique name + m_decor += "_" + m_taggerName + "_" + m_operatingPt; + m_decorSF += "_" + m_taggerName + "_" + m_operatingPt; + m_outputSystName += "_" + m_taggerName + "_" + m_operatingPt; + m_decorWeight += "_" + m_taggerName + "_" + m_operatingPt; + m_decorQuantile += "_" + m_taggerName + "_" + m_operatingPt; + + if(!m_useContinuous){ + ANA_MSG_INFO( "Decision Decoration Name : " << m_decor); + ANA_MSG_INFO( "Scale Factor Decoration Name : " << m_decorSF); + } else { + ANA_MSG_INFO( "Weight Decoration Name: " << m_decorWeight); + ANA_MSG_INFO( "Quantile Decoration Name: " << m_decorQuantile); + ANA_MSG_INFO( "Scale Factor Decoration Name : " << m_decorSF); + } + + // now take this name and convert it to the cut value for the CDI file + // if using the fixed efficiency points + if(m_operatingPtCDI.empty()) m_operatingPtCDI = m_operatingPt; + ANA_MSG_INFO("Using Standard OperatingPoint for CDI BTag Efficiency of " << m_operatingPtCDI); + + m_runAllSyst = (m_systName.find("All") != std::string::npos); + + if( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + if ( !isMC() && m_getScaleFactors ) { + ANA_MSG_WARNING( "Attempting to run BTagging Jet Scale Factors on data. Turning off scale factors." ); + m_getScaleFactors = false; + } + if ( m_tagDecisionOnly && m_getScaleFactors ) { + ANA_MSG_WARNING( "BTagging scale factors have been manually disabled. This is not recommended!" ); + m_getScaleFactors = false; + } + + // initialize the BJetSelectionTool + // A few which are not configurable as of yet.... + // is there a reason to have this configurable here??...I think no (GF to self) + ANA_CHECK( m_BJetSelectTool_handle.setProperty("FlvTagCutDefinitionsFileName",m_corrFileName.c_str())); + // configurable parameters + ANA_CHECK( m_BJetSelectTool_handle.setProperty("TaggerName", m_taggerName)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("OperatingPoint", m_operatingPt)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("JetAuthor", m_jetAuthor)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("MinPt", m_minPt)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("ErrorOnTagWeightFailure", m_errorOnTagWeightFailure)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_BJetSelectTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_BJetSelectTool_handle); + + // Configure the BJetEfficiencyCorrectionTool + if( m_getScaleFactors ) { + + // initialize the BJetEfficiencyCorrectionTool + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("TaggerName", m_taggerName )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("SystematicsStrategy", m_systematicsStrategy)); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("OperatingPoint", m_operatingPtCDI )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("JetAuthor", m_jetAuthor )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("MinPt", m_minPt )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("ScaleFactorFileName", m_corrFileName )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("UseDevelopmentFile", m_useDevelopmentFile )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("ConeFlavourLabel", m_coneFlavourLabel )); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("OutputLevel", msg().level() )); + + if(!m_EfficiencyCalibration.empty()){ + std::string calibration=m_EfficiencyCalibration; + if(m_EfficiencyCalibration=="auto") + { + std::string gridName=wk()->metaData()->castString(SH::MetaFields::gridName); + + HelperFunctions::ShowerType sampleShowerType=HelperFunctions::Unknown; + if(!gridName.empty()) + { // Do not trust sample name on the grid, in case there are multiple samples per job + std::stringstream ss(gridName); + std::string sampleName; + while(std::getline(ss,sampleName,',')) + { + HelperFunctions::ShowerType mySampleShowerType=HelperFunctions::getMCShowerType(sampleName,m_taggerName); + if(mySampleShowerType!=sampleShowerType && sampleShowerType!=HelperFunctions::Unknown) + ANA_MSG_ERROR("Cannot have different shower types per grid task."); + sampleShowerType=mySampleShowerType; + } + } + else // Use sample name when running locally + { + gridName=wk()->metaData()->castString(SH::MetaFields::sampleName); + sampleShowerType=HelperFunctions::getMCShowerType(gridName,m_taggerName); + } + + if(m_taggerName=="DL1dv01"){ + if(m_isRun3){ + switch(sampleShowerType) + { + case HelperFunctions::Pythia8: + calibration="601229"; + break; + case HelperFunctions::Herwig7p2: + calibration="601414"; + break; + case HelperFunctions::Sherpa2212: + calibration="700660"; + break; + default: + if (m_allowCalibrationFallback) { + ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="default"; + break; + } + else { + ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << "."); + return EL::StatusCode::FAILURE; + break; + } + } + } else { + + switch(sampleShowerType) + { + case HelperFunctions::Pythia8: + calibration="410470"; + break; + case HelperFunctions::Herwig7p1: + calibration="411233"; + break; + case HelperFunctions::Herwig7p2: + calibration="600666"; + break; + case HelperFunctions::Sherpa221: + calibration="410250"; + break; + case HelperFunctions::Sherpa2210: + calibration="700122"; + break; + case HelperFunctions::Sherpa2212: + calibration="700660"; + break; + case HelperFunctions::AmcPy8: + calibration="410464"; + break; + case HelperFunctions::AmcH7: + calibration="412116"; + break; + default: + if (m_allowCalibrationFallback) { + ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="default"; + break; + } + else { + ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << "."); + return EL::StatusCode::FAILURE; + break; + } + } + } + } else if(m_taggerName=="GN2v01"){ + if(m_isRun3){ + switch(sampleShowerType) + { + case HelperFunctions::Pythia8_517: + calibration="601398"; + break; + case HelperFunctions::Pythia8: + calibration="601229"; + break; + case HelperFunctions::Herwig7p2: + calibration="601414"; + break; + case HelperFunctions::Sherpa2214: + calibration="700808"; + break; + case HelperFunctions::Sherpa_Unknown: + ANA_MSG_WARNING("Unknown Sherpa version MC shower type for sample " << gridName << ", falling back to MC-MC SFs for Sherpa 2.2.11-2.2.16."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="700808"; + break; + default: + if (m_allowCalibrationFallback) { + ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="default"; + break; + } + else { + ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << "."); + return EL::StatusCode::FAILURE; + break; + } + } + } else { + + switch(sampleShowerType) + { + case HelperFunctions::Pythia8_517: + calibration="410480"; + break; + case HelperFunctions::Pythia8: + calibration="410470"; + break; + case HelperFunctions::Herwig7p1: + calibration="411233"; + break; + case HelperFunctions::Herwig7p2: + calibration="600666"; + break; + case HelperFunctions::Sherpa2214: + calibration="700660"; + break; + case HelperFunctions::Sherpa_Unknown: + ANA_MSG_WARNING("Unknown Sherpa version MC shower type for sample " << gridName << ", falling back to MC-MC SFs for Sherpa 2.2.11-2.2.16."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="700660"; + break; + default: + if (m_allowCalibrationFallback) { + ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="default"; + break; + } + else { + ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << "."); + return EL::StatusCode::FAILURE; + break; + } + } + } + } else { + if (m_allowCalibrationFallback) { + ANA_MSG_WARNING("Cannot determine MC shower type for tagger " << m_taggerName << ", only GN2v01 and DL1dv01 are supported. Falling back to 'default'."); + ANA_MSG_WARNING("Please double-check if this is appropriate for your sample and tagger, otherwise you have specify the MC-to-MC calibration manually!"); + calibration="default"; + } else { + ANA_MSG_ERROR("Cannot determine MC shower type for tagger " << m_taggerName << "."); + return EL::StatusCode::FAILURE; + } + } + } else { makeMCIndexMap(m_EfficiencyCalibration); } + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyBCalibrations" , calibration)); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyCCalibrations" , calibration)); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyTCalibrations" , calibration)); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyLightCalibrations", calibration)); + } + + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionB" , m_EigenvectorReductionB) ); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionC" , m_EigenvectorReductionC) ); + ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionLight" , m_EigenvectorReductionLight) ); + + ANA_CHECK( m_BJetEffSFTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_BJetEffSFTool_handle); + + } else { + ANA_MSG_WARNING( "Input operating point is not calibrated - no SFs will be obtained"); + } + + // + // Print out + // + if( !m_systName.empty() && m_getScaleFactors ) { + ANA_MSG_DEBUG("-----------------------------------------------------"); + const std::map > allowed_variations = m_BJetEffSFTool_handle->listSystematics(); + ANA_MSG_DEBUG("Allowed systematics variations for tool " << m_BJetEffSFTool_handle.typeAndName() << ":"); + for (auto var : allowed_variations) { + ANA_MSG_DEBUG(std::setw(40) << std::left << var.first.name() << ":"); + for (auto flv : var.second) ANA_MSG_DEBUG("\t" << flv); + } + ANA_MSG_DEBUG("-----------------------------------------------------"); + } + + + // Get a list of affecting systematics + if( m_getScaleFactors ) { + CP::SystematicSet affectSysts = m_BJetEffSFTool_handle->affectingSystematics(); + // Convert into a simple list + std::vector affectSystList = CP::make_systematics_vector(affectSysts); + if( !m_systName.empty() ) { + for ( const auto& syst_it : affectSystList ){ + ANA_MSG_DEBUG(" tool can be affected by systematic: " << syst_it.name()); + } + } + + if( m_systName.empty() ) + ANA_MSG_INFO(" Running w/ nominal configuration!"); + + // Get a list of recommended systematics + CP::SystematicSet recSyst = m_BJetEffSFTool_handle->recommendedSystematics(); + m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + } + + if( m_runAllSyst ){ + ANA_MSG_INFO(" Running w/ All systematics"); + } + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_outputSystName, fileMD); + } + + // Get DSID to Generator map (if needed) + if (m_setMapIndex){ + ANA_MSG_DEBUG("Fill DSID->Generator map"); + // open input file + std::ifstream file; + std::string fn = PathResolverFindCalibFile(m_DSIDtoGenerator_filename); + //file.open(gSystem->ExpandPathName(m_DSIDtoGenerator_filename.c_str())); + file.open(fn.c_str()); + if (!file.good()) { + ANA_MSG_ERROR("Can't open file " << m_DSIDtoGenerator_filename.c_str()); + return EL::StatusCode::FAILURE; + } + // process file + while (!file.eof()) { + // read line + std::string lineString; + getline(file, lineString); + // store in map + std::stringstream line(lineString); + int dsid; + std::string gen; + line >> dsid >> gen; + if (m_DSIDtoGenerator.count(dsid) != 0) { + ANA_MSG_WARNING("Skipping duplicated DSID for line " << lineString.c_str()); + continue; + } + m_DSIDtoGenerator[dsid] = gen; + } + file.close(); + } + + ANA_MSG_INFO( "BJetEfficiencyCorrector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode BJetEfficiencyCorrector :: execute () + { + ANA_MSG_DEBUG( "Applying BJetEfficiencyCorrector for " << m_taggerName << " tagger... "); + + // + // retrieve event + // + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + ANA_MSG_DEBUG("\n\n eventNumber: " << eventInfo->eventNumber() << std::endl ); + + // if m_inputAlgo == "" --> input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + std::vector* systNames_ptr(nullptr); + if ( !m_inputAlgo.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputAlgo, 0, m_store, msg()) ); + + std::vector systNames{""}; + if (systNames_ptr) systNames = *systNames_ptr; + + // loop over systematic sets available + for ( const std::string& systName : systNames ) { + + bool doNominal = (systName == ""); + + // input jets + const xAOD::JetContainer* inJets(nullptr); + + // some systematics might have rejected the event + if ( m_store->contains( m_inContainerName+systName ) ) { + // Check the existence of the container + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName+systName, m_event, m_store, msg()) ); + + ANA_CHECK( executeEfficiencyCorrection( inJets, eventInfo, doNominal ) ); + } + + } + + ANA_MSG_DEBUG( "Leave Efficency Selection... "); + + return EL::StatusCode::SUCCESS; + + } + + + + + EL::StatusCode BJetEfficiencyCorrector :: executeEfficiencyCorrection(const xAOD::JetContainer* inJets, + const xAOD::EventInfo* eventInfo, + bool doNominal) + { + ANA_MSG_DEBUG("Applying BJet Cuts and Efficiency Correction (when applicable...) "); + + SG::AuxElement::Decorator< char > dec_isBTag( m_decor ); + SG::AuxElement::Decorator< std::vector > dec_sfBTag( m_decorSF ); + + SG::AuxElement::Decorator< char > dec_isBTagOR( m_decor+"OR" ); + + // for continuous b-tagging only + SG::AuxElement::Decorator< float > dec_Weight( m_decorWeight ); + SG::AuxElement::Decorator< int > dec_Quantile( m_decorQuantile ); + + // + // run the btagging decision or get weight and quantile if running continuous + // + for( const xAOD::Jet* jet_itr : *(inJets)){ + + if(abs(jet_itr->eta()) > 2.5){ + if(!m_useContinuous){ + dec_isBTag( *jet_itr ) = 0; + dec_isBTagOR( *jet_itr ) = 0; + }else{ + dec_Quantile( *jet_itr ) = -1; + } + if(m_useContinuous || m_alwaysGetTagWeight) dec_Weight( *jet_itr) = 1; + continue; + } + + if(!m_useContinuous){ + // get tagging decision + ANA_MSG_DEBUG(" Getting tagging decision "); + + // Add decorator for decision + if( m_BJetSelectTool_handle->accept( *jet_itr ) ) + dec_isBTag( *jet_itr ) = 1; + else + dec_isBTag( *jet_itr ) = 0; + + // Add pT-dependent b-tag decision decorator (intended for use in OR) + if ((m_orBJetPtUpperThres < 0 || m_orBJetPtUpperThres > (*jet_itr).pt()/1000.) // passes pT criteria + && m_BJetSelectTool_handle->accept( *jet_itr ) ) + dec_isBTagOR( *jet_itr ) = 1; + else + dec_isBTagOR( *jet_itr ) = 0; + } + else{ + ANA_MSG_DEBUG(" Getting Quantile"); + int quantile = m_BJetSelectTool_handle->getQuantile(*jet_itr); + ANA_MSG_DEBUG( "quantile: " << quantile ); + dec_Quantile( *jet_itr ) = quantile; + } + if(m_useContinuous || m_alwaysGetTagWeight){ + ANA_MSG_DEBUG(" Getting TaggerWeight"); + + double tagWeight; + if( m_BJetSelectTool_handle->getTaggerWeight( *jet_itr, tagWeight)!=CP::CorrectionCode::Ok ){ + ANA_MSG_ERROR(" Error retrieving b-tagger weight "); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "tagWeight: " << tagWeight ); + dec_Weight( *jet_itr) = tagWeight; + } + } + + // + // get the scale factors for all jets + // + if(m_getScaleFactors) + { // loop over available systematics + for(const CP::SystematicSet& syst_it : m_systList) + { + // If not nominal input jet collection, dont calculate systematics + if ( !doNominal ) + { + if( syst_it.name() != "" ) + { // if not nominal btag decision + ANA_MSG_DEBUG("Not running B-tag systematics when doing JES systematics"); + continue; + } + } + + // configure tool with syst variation + if (m_BJetEffSFTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS) + { + ANA_MSG_ERROR( "Failed to configure BJetEfficiencyCorrections for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG("Successfully configured BJetEfficiencyCorrections for systematic: " << syst_it.name()); + + for( const xAOD::Jet* jet_itr : *(inJets)) + { + if(abs(jet_itr->eta()) > 2.5){ + if(!dec_sfBTag.isAvailable( *jet_itr )) + dec_sfBTag ( *jet_itr ) = std::vector({1.}); + continue; + } + if(m_setMapIndex){ // select an efficiency map for use in MC/MC and inefficiency scale factors, based on user specified selection of efficiency maps + auto FlavLabel = getFlavorLabel(*jet_itr); + auto DSID = eventInfo->mcChannelNumber(); + auto MCindex = getMCIndex(DSID); + ANA_CHECK( m_BJetEffSFTool_handle->setMapIndex(FlavLabel,MCindex)); + } + // get the scale factor + float SF(-1.0); + CP::CorrectionCode BJetEffCode; + // if passes cut take the efficiency scale factor + // if failed cut take the inefficiency scale factor + // for continuous take efficiency, as inefficiency should not be used + if(m_useContinuous) + { + BJetEffCode = m_BJetEffSFTool_handle->getScaleFactor( *jet_itr, SF ); + } + else + { + if( dec_isBTag( *jet_itr ) ) + BJetEffCode = m_BJetEffSFTool_handle->getScaleFactor( *jet_itr, SF ); + else + BJetEffCode = m_BJetEffSFTool_handle->getInefficiencyScaleFactor( *jet_itr, SF ); + } + + if (BJetEffCode == CP::CorrectionCode::Error) + { + ANA_MSG_ERROR( "Error in getEfficiencyScaleFactor"); + return EL::StatusCode::FAILURE; + } + else if (BJetEffCode == CP::CorrectionCode::OutOfValidityRange) + { + ANA_MSG_DEBUG( "Jet is out of validity range"); + } + + // Save it to the vector + if( !dec_sfBTag .isAvailable( *jet_itr )) + dec_sfBTag ( *jet_itr ) = std::vector(); + + + dec_sfBTag( *jet_itr ).push_back(SF); + } + } + } + else + { + for( const xAOD::Jet* jet_itr : *(inJets)) + { + if( !dec_sfBTag .isAvailable( *jet_itr )) + dec_sfBTag ( *jet_itr ) = std::vector({1.}); + } + } + + // + // Store list of available systematics + // + if(doNominal){ + auto sysVariationNames = std::make_unique< std::vector< std::string > >(); + if(m_getScaleFactors) { + for(const auto& syst_it : m_systList) + sysVariationNames->push_back(syst_it.name()); + } + else { + sysVariationNames->push_back(""); + } + + ANA_MSG_DEBUG("Size is " << sysVariationNames->size()); + for(auto sysName : *sysVariationNames) ANA_MSG_DEBUG(sysName); + + ANA_CHECK( m_store->record( std::move(sysVariationNames), m_outputSystName)); + } + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode BJetEfficiencyCorrector :: postExecute () + { + ANA_MSG_DEBUG("Calling postExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BJetEfficiencyCorrector :: finalize () + { + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BJetEfficiencyCorrector :: histFinalize () + { + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + + return EL::StatusCode::SUCCESS; + } + + void BJetEfficiencyCorrector :: makeMCIndexMap (std::string effCalib) + { + ANA_MSG_DEBUG( "Calling makeMCIndexMap()"); + + // Interprete m_EfficiencyCalibration string to identify the corresponding indexes + char delim = ';'; + std::vector samples; + std::stringstream ss(effCalib); + std::string item; + while (std::getline(ss, item, delim)) { + samples.push_back(item); + } + + // Find index for Pythia8, Sherpa 2.2, Herwig7 and aMC@NLO+Pythia8 + for (unsigned int i = 0; i < samples.size(); ++i){ + if (samples.at(i) == "410470") m_MCIndexes["Pythia8"] = i; + if (samples.at(i) == "700122") m_MCIndexes["Sherpa2210"] = i; + if (samples.at(i) == "410250") m_MCIndexes["Sherpa22"] = i; + if (samples.at(i) == "600666") m_MCIndexes["Herwig721"] = i; + if (samples.at(i) == "410558") m_MCIndexes["Herwig7"] = i; + if (samples.at(i) == "410464") m_MCIndexes["aMC@NLO"] = i; + } + + } + + unsigned int BJetEfficiencyCorrector :: getMCIndex (int dsid) + { + ANA_MSG_DEBUG( "Calling getMCIndex"); + + auto name = m_DSIDtoGenerator[dsid]; + + if(m_EfficiencyCalibration=="auto") { + return 0; // there is only one index when m_EfficiencyCalibration == 'auto' + } else { + // Pythia 8 + if ((name.find("Pythia8_") != std::string::npos) || + (name.find("Pythia8B_") != std::string::npos) || + (name.find("MGPy8EG_") != std::string::npos) || + (name.find("MadGraphPythia8_") != std::string::npos) || + (name.find("MadGraphPythia8EvtGen_") != std::string::npos) || + (name.find("PowhegPythia8EvtGen_CT10_") != std::string::npos) || + (name.find("PowhegPythia8EvtGen_") != std::string::npos) || + (name.find("Pythia8EvtGen_") != std::string::npos) || + (name.find("Pythia8EG_") != std::string::npos) || + (name.find("PwPy8EG_CT10_") != std::string::npos) || + (name.find("PowhegPythia8_") != std::string::npos) || + (name.find("PowhegPythia8EG_") != std::string::npos) || + (name.find("PhPy8EG_CT10_") != std::string::npos) || + (name.find("Py8EG_") != std::string::npos) || + (name.find("Py8") != std::string::npos)) { return m_MCIndexes["Pythia8"]; } + + // Sherpa 2.2.10 + if ((name.find("Sh_2210") != std::string::npos)){ return m_MCIndexes["Sherpa2210"]; } + + // Sherpa 2.2.11 + if ((name.find("Sh_2211") != std::string::npos)){ return m_MCIndexes["Sherpa2210"]; } // MC-MC SFs from Sherpa 2.2.10 is the best we can use for Sherpa 2.2.11 (for now) + + // Sherpa 2.2 + if ((name.find("Sh_22") != std::string::npos) || + (name.find("Sherpa_NNPDF30NNLO") != std::string::npos) || + (name.find("Sherpa_221_NNPDF30NNLO") != std::string::npos)){ return m_MCIndexes["Sherpa22"]; } + + // Herwig 7.2.1 + if ( (name.find("Herwig721") != std::string::npos) ){ return m_MCIndexes["Herwig721"]; } + + // Herwig 7 + if ( (name.find("Herwig") != std::string::npos) ){ return m_MCIndexes["Herwig"]; } + + // aMC@NLO+Pythia8 + if ( (name.find("aMC@NLO+Pythia8") != std::string::npos) ){ return m_MCIndexes["aMC@NLO"]; } + + // for all other samples, use the default map (pythia8). + ANA_MSG_WARNING( "MC index not recognized, using default (0)." ); + return 0; + } + } + + std::string BJetEfficiencyCorrector :: getFlavorLabel (const xAOD::Jet &jet) const + { + int label; + bool status = jet.getAttribute( "HadronConeExclTruthLabelID", label ); + if(status){ + if ((label == 5) || (label == -5)){ return "B"; + } else if ((label == 4) || (label == -4)){ return "C"; + } else if ((label == 15) || (label == -15)){ return "T"; + } else { return "Light";} + } else { + ANA_MSG_WARNING( "HadronConeExclTruthLabelID was not found, using Light as jet flavour for retrieving b-tagging SF." ); + return "Light"; + } + } + diff --git a/_sources/api/program_listing_file_Root_BasicEventSelection.cxx.rst.txt b/_sources/api/program_listing_file_Root_BasicEventSelection.cxx.rst.txt new file mode 100644 index 0000000000..9b51828387 --- /dev/null +++ b/_sources/api/program_listing_file_Root_BasicEventSelection.cxx.rst.txt @@ -0,0 +1,1476 @@ + +.. _program_listing_file_Root_BasicEventSelection.cxx: + +Program Listing for File BasicEventSelection.cxx +================================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/BasicEventSelection.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // EL include(s): + #include + #include + #include "EventLoop/OutputStream.h" + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODTracking/VertexContainer.h" + #include "xAODCutFlow/CutBookkeeper.h" + #include "xAODCutFlow/CutBookkeeperContainer.h" + + // package include(s): + #include + #include + + #include "PATInterfaces/CorrectionCode.h" + //#include "AsgMessaging/StatusCode.h" + + // tools + #include "GoodRunsLists/GoodRunsListSelectionTool.h" + #include "PileupReweighting/PileupReweightingTool.h" + #include "TrigConfxAOD/xAODConfigTool.h" + //#include "PMGTools/PMGSherpa22VJetsWeightTool.h" + + // For reading metadata + #include "AsgTools/AsgMetadataTool.h" + #include "xAODMetaData/FileMetaData.h" + + // ROOT include(s): + #include "TFile.h" + #include "TTree.h" + #include "TTreeFormula.h" + #include "TSystem.h" + #include "xAODCore/tools/IOStats.h" + #include "xAODCore/tools/ReadStats.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(BasicEventSelection) + + BasicEventSelection :: BasicEventSelection () : + Algorithm("BasicEventSelection") + { + } + + + EL::StatusCode BasicEventSelection :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + // + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD(); + // let's initialize the algorithm to use the xAODRootAccess package + xAOD::Init("BasicEventSelection").ignore(); // call before opening first file + + EL::OutputStream outForCFlow(m_cutFlowStreamName); + if(!job.outputHas(m_cutFlowStreamName) ){ job.outputAdd ( outForCFlow ); } + + EL::OutputStream outForMetadata(m_metaDataStreamName); + if(!job.outputHas(m_metaDataStreamName) ){ job.outputAdd ( outForMetadata ); } + + EL::OutputStream outForDuplicates(m_duplicatesStreamName); + if(!job.outputHas(m_duplicatesStreamName) ){ job.outputAdd ( outForDuplicates ); } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BasicEventSelection :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + // write the metadata hist to this file so algos downstream can pick up the pointer + TFile *fileMD = wk()->getOutputFile (m_metaDataStreamName); + fileMD->cd(); + + // event counts from meta data + if ( !m_histEventCount ) { + m_histEventCount = new TH1D("MetaData_EventCount", "MetaData_EventCount", 6, 0.5, 6.5); + m_histEventCount -> GetXaxis() -> SetBinLabel(1, "nEvents initial"); + m_histEventCount -> GetXaxis() -> SetBinLabel(2, "nEvents selected"); + m_histEventCount -> GetXaxis() -> SetBinLabel(3, "sumOfWeights initial"); + m_histEventCount -> GetXaxis() -> SetBinLabel(4, "sumOfWeights selected"); + m_histEventCount -> GetXaxis() -> SetBinLabel(5, "sumOfWeightsSquared initial"); + m_histEventCount -> GetXaxis() -> SetBinLabel(6, "sumOfWeightsSquared selected"); + } + + TFile *fileSumW = wk()->getOutputFile (m_metaDataStreamName); + fileSumW->cd(); + + // event counts from meta data + if ( !m_histSumW ) { + m_histSumW = new TH1D("MetaData_SumW", "MetaData_SumW", 1, -0.5, 0.5); + m_histSumW->SetCanExtend(TH1::kAllAxes); + } + + ANA_MSG_INFO( "Creating histograms"); + + // write the cutflows to this file so algos downstream can pick up the pointer + // + TFile *fileCF = wk()->getOutputFile (m_cutFlowStreamName); + fileCF->cd(); + + // Note: the following code is needed for anyone developing/running in ROOT 6.04.10+ + // Bin extension is not done anymore via TH1::SetBit(TH1::kCanRebin), but with TH1::SetCanExtend(TH1::kAllAxes) + + //initialise event cutflow, which will be picked ALSO by the algos downstream where an event selection is applied (or at least can be applied) + // + // use 1,1,2 so Fill(bin) and GetBinContent(bin) refer to the same bin + // + m_cutflowHist = new TH1D("cutflow", "cutflow", 1, 1, 2); + m_cutflowHist->SetCanExtend(TH1::kAllAxes); + // use 1,1,2 so Fill(bin) and GetBinContent(bin) refer to the same bin + // + m_cutflowHistW = new TH1D("cutflow_weighted", "cutflow_weighted", 1, 1, 2); + m_cutflowHistW->SetCanExtend(TH1::kAllAxes); + + // initialise object cutflows, which will be picked by the object selector algos downstream and filled. + // + m_el_cutflowHist_1 = new TH1D("cutflow_electrons_1", "cutflow_electrons_1", 1, 1, 2); + m_el_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_el_cutflowHist_2 = new TH1D("cutflow_electrons_2", "cutflow_electrons_2", 1, 1, 2); + m_el_cutflowHist_2->SetCanExtend(TH1::kAllAxes); + m_mu_cutflowHist_1 = new TH1D("cutflow_muons_1", "cutflow_muons_1", 1, 1, 2); + m_mu_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_mu_cutflowHist_2 = new TH1D("cutflow_muons_2", "cutflow_muons_2", 1, 1, 2); + m_mu_cutflowHist_2->SetCanExtend(TH1::kAllAxes); + m_ph_cutflowHist_1 = new TH1D("cutflow_photons_1", "cutflow_photons_1", 1, 1, 2); + m_ph_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_tau_cutflowHist_1 = new TH1D("cutflow_taus_1", "cutflow_taus_1", 1, 1, 2); + m_tau_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_tau_cutflowHist_2 = new TH1D("cutflow_taus_2", "cutflow_taus_2", 1, 1, 2); + m_tau_cutflowHist_2->SetCanExtend(TH1::kAllAxes); + m_jet_cutflowHist_1 = new TH1D("cutflow_jets_1", "cutflow_jets_1", 1, 1, 2); + m_jet_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_trk_cutflowHist_1 = new TH1D("cutflow_trks_1", "cutflow_trks_1", 1, 1, 2); + m_trk_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + m_truth_cutflowHist_1 = new TH1D("cutflow_truths_1", "cutflow_truths_1", 1, 1, 2); + m_truth_cutflowHist_1->SetCanExtend(TH1::kAllAxes); + + // start labelling the bins for the event cutflow + // + m_cutflow_all = m_cutflowHist->GetXaxis()->FindBin("all"); + m_cutflowHistW->GetXaxis()->FindBin("all"); + + m_cutflow_init = m_cutflowHist->GetXaxis()->FindBin("init"); + m_cutflowHistW->GetXaxis()->FindBin("init"); + + // extra cutflows + // create histograms when m_doRunByRunCutflows is set to true + // later check if !isMC() for filling so that these only get + // filled when running on data + if (m_doRunByRunCutflows) { + m_runByrun_beforeCuts = new TH1D("runByrun_cutflow_beforeCuts", "Run-by-Run cutflow before cuts", 1, 1, 2); + m_runByrun_beforeCuts->SetCanExtend(TH1::kAllAxes); + + m_runByrun_afterCuts = new TH1D("runByrun_cutflow_afterCuts", "Run-by-Run cutflow after cuts", 1, 1, 2); + m_runByrun_afterCuts->SetCanExtend(TH1::kAllAxes); + } + + ANA_MSG_INFO( "Finished creating histograms"); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode BasicEventSelection :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + // get TEvent and TStore - must be done here b/c we need to retrieve CutBookkeepers container from TEvent! + // + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // get the MetaData tree once a new file is opened, with + // + TTree* MetaData = dynamic_cast( wk()->inputFile()->Get("MetaData") ); + if ( !MetaData ) { + ANA_MSG_ERROR( "MetaData tree not found! Exiting."); + return EL::StatusCode::FAILURE; + } + MetaData->LoadTree(0); + + //--------------------------- + // Meta data - CutBookkepers + //--------------------------- + // + // Metadata for intial N (weighted) events are used to correctly normalise MC + // if running on a MC DAOD which had some skimming applied at the derivation stage + + //check if file is from a DxAOD + bool m_isDerivation = !MetaData->GetBranch("StreamAOD"); + + if ( m_useMetaData ) { + + // Check for potential file corruption + // + // If there are some Incomplete CBK, throw a WARNING, + // unless ALL of them have inputStream == "unknownStream" + // + const xAOD::CutBookkeeperContainer* incompleteCBC(nullptr); + if ( !m_event->retrieveMetaInput(incompleteCBC, "IncompleteCutBookkeepers").isSuccess() ) { + ANA_MSG_ERROR("Failed to retrieve IncompleteCutBookkeepers from MetaData! Exiting."); + return EL::StatusCode::FAILURE; + } + bool allFromUnknownStream(true); + if ( incompleteCBC->size() != 0 ) { + + std::string stream(""); + for ( auto cbk : *incompleteCBC ) { + ANA_MSG_INFO("Incomplete cbk name: " << cbk->name() << " - stream: " << cbk->inputStream()); + if ( cbk->inputStream() != "unknownStream" ) { + allFromUnknownStream = false; + stream = cbk->inputStream(); + break; + } + } + if ( !allFromUnknownStream ) { ANA_MSG_WARNING("Found incomplete CBK from stream: " << stream << ". This is not necessarily a sign of file corruption (incomplete CBK appear when 'maxevents' is set in the AOD jo, for instance), but you may still want to check input file for potential corruption..." ); } + + } + + // Now, let's find the actual information + // + const xAOD::CutBookkeeperContainer* completeCBC(nullptr); + if ( !m_event->retrieveMetaInput(completeCBC, "CutBookkeepers").isSuccess() ) { + ANA_MSG_ERROR("Failed to retrieve CutBookkeepers from MetaData! Exiting."); + return EL::StatusCode::FAILURE; + } + + // Find the smallest cycle number, the original first processing step/cycle + int minCycle(10000); + for ( auto cbk : *completeCBC ) { + if ( !( cbk->name().empty() ) && ( minCycle > cbk->cycle() ) ){ minCycle = cbk->cycle(); } + } + + // Now, let's actually find the right one that contains all the needed info... + const xAOD::CutBookkeeper* allEventsCBK(nullptr); + const xAOD::CutBookkeeper* DxAODEventsCBK(nullptr); + + if ( m_isDerivation ) { + if(m_derivationName != ""){ + ANA_MSG_INFO("Override auto config to look at DAOD made by Derivation Algorithm: " << m_derivationName); + }else{ + ANA_MSG_INFO("Will autoconfig to look at DAOD made by Derivation Algorithm."); + } + } + + int maxCycle(-1); + for ( const xAOD::CutBookkeeper* cbk: *completeCBC ) + { + // Find initial book keeper + ANA_MSG_INFO("Complete cbk name: " << cbk->name() << " - stream: " << cbk->inputStream() ); + if( cbk->cycle() > maxCycle && cbk->name() == "AllExecutedEvents" && cbk->inputStream() == "StreamAOD" ) + { + allEventsCBK = cbk; + maxCycle = cbk->cycle(); + } + + // Find derivation book keeper + if ( m_isDerivation ) + { + + if(m_derivationName != "") + { + if ( cbk->name() == m_derivationName ) + DxAODEventsCBK = cbk; + } + else if( cbk->name().find("Kernel") != std::string::npos ) + { + ANA_MSG_INFO("Auto config found DAOD made by Derivation Algorithm: " << cbk->name()); + DxAODEventsCBK = cbk; + } + } // is derivation + + // Find and record AOD-level sumW information for all alternate weights + // The nominal AllExecutedEvents will be filled later, due to posibility of multiple CBK entries + if(cbk->name().substr(0,37) == "AllExecutedEvents_NonNominalMCWeight_" && cbk->name().length()!=17 && cbk->inputStream() == "StreamAOD") + { + // Extract weight index from name + int32_t idx=std::stoi(cbk->name().substr(37)); + + // Fill histogram, making sure that there is space + // Note will fill bin index = idx+1 + while(idx>=m_histSumW->GetNbinsX()) + m_histSumW->LabelsInflate("X"); + m_histSumW->Fill(idx, cbk->sumOfEventWeights()); + } + } + + if(allEventsCBK == nullptr) { + ANA_MSG_WARNING("No allEventsCBK found (this is expected for DataScouting, otherwise not). Event numbers set to 0."); + m_MD_initialNevents = 0; + m_MD_initialSumW = 0; + m_MD_initialSumWSquared = 0; + } + else { + m_MD_initialNevents = allEventsCBK->nAcceptedEvents(); + m_MD_initialSumW = allEventsCBK->sumOfEventWeights(); + m_MD_initialSumWSquared = allEventsCBK->sumOfEventWeightsSquared(); + } + + if ( m_isDerivation && !DxAODEventsCBK ) { + ANA_MSG_ERROR( "No CutBookkeeper corresponds to the selected Derivation Framework algorithm name. Check it with your DF experts! Aborting."); + return EL::StatusCode::FAILURE; + } + + m_MD_finalNevents = ( m_isDerivation ) ? DxAODEventsCBK->nAcceptedEvents() : m_MD_initialNevents; + m_MD_finalSumW = ( m_isDerivation ) ? DxAODEventsCBK->sumOfEventWeights() : m_MD_initialSumW; + m_MD_finalSumWSquared = ( m_isDerivation ) ? DxAODEventsCBK->sumOfEventWeightsSquared() : m_MD_initialSumWSquared; + + // Write metadata event bookkeepers to histogram + // + ANA_MSG_INFO( "Meta data from this file:"); + ANA_MSG_INFO( "Initial events = " << static_cast(m_MD_initialNevents) ); + ANA_MSG_INFO( "Selected events = " << static_cast(m_MD_finalNevents) ); + ANA_MSG_INFO( "Initial sum of weights = " << m_MD_initialSumW); + ANA_MSG_INFO( "Selected sum of weights = " << m_MD_finalSumW); + ANA_MSG_INFO( "Initial sum of weights squared = " << m_MD_initialSumWSquared); + ANA_MSG_INFO( "Selected sum of weights squared = " << m_MD_finalSumWSquared); + + m_cutflowHist ->Fill(m_cutflow_all, m_MD_initialNevents); + m_cutflowHistW->Fill(m_cutflow_all, m_MD_initialSumW); + + m_histSumW->Fill(0., m_MD_initialSumW); + + m_histEventCount -> Fill(1, m_MD_initialNevents); + m_histEventCount -> Fill(2, m_MD_finalNevents); + m_histEventCount -> Fill(3, m_MD_initialSumW); + m_histEventCount -> Fill(4, m_MD_finalSumW); + m_histEventCount -> Fill(5, m_MD_initialSumWSquared); + m_histEventCount -> Fill(6, m_MD_finalSumWSquared); + } + + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode BasicEventSelection :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BasicEventSelection :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing BasicEventSelection... "); + + // if truth level make sure parameters are set properly + if( m_truthLevelOnly ) { + ANA_MSG_INFO( "Truth only! Turn off trigger stuff"); + m_triggerSelection = ""; + m_extraTriggerSelection = ""; + m_applyTriggerCut = m_storeTrigDecisions = m_storePassL1 = m_storePassHLT = m_storeTrigKeys = false; + ANA_MSG_INFO( "Truth only! Turn off GRL"); + m_applyGRLCut = false; + ANA_MSG_INFO( "Truth only! Turn off Pile-up Reweight"); + m_doPUreweighting = false; + m_doPUreweightingSys = false; + } + + // get TEvent and TStore + // + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + ANA_MSG_DEBUG( "Is MC? " << isMC() ); + + //Protection in case GRL does not apply to this run + // + if ( m_applyGRLCut ) { + std::string runNumString = std::to_string(eventInfo->runNumber()); + if ( m_GRLExcludeList.find( runNumString ) != std::string::npos ) { + ANA_MSG_INFO( "RunNumber is in GRLExclusion list, setting applyGRL to false"); + m_applyGRLCut = false; + } + } + + m_cleanPowheg = false; + if ( eventInfo->runNumber() == 426005 ) { // Powheg+Pythia J5 + m_cleanPowheg = true; + ANA_MSG_INFO( "This is J5 Powheg - cleaning that nasty huge weight event"); + } + + + // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#Sherpa_v2_2_0_V_jets_NJet_reweig + //m_reweightSherpa22 = false; + //if( isMC() && + // ( (eventInfo->mcChannelNumber() >= 363331 && eventInfo->mcChannelNumber() <= 363483 ) || + // (eventInfo->mcChannelNumber() >= 363102 && eventInfo->mcChannelNumber() <= 363122 ) || + // (eventInfo->mcChannelNumber() >= 363361 && eventInfo->mcChannelNumber() <= 363435 ) ) ){ + // ANA_MSG_INFO( "This is Sherpa 2.2 dataset and should be reweighted. An extra weight will be saved to EventInfo called \"weight_Sherpa22\"."); + // m_reweightSherpa22 = true; + + // //Choose Jet Truth container, WZ has more information and is favored by the tool + // std::string pmg_TruthJetContainer = ""; + // if( m_event->contains("AntiKt4TruthWZJets") ){ + // pmg_TruthJetContainer = "AntiKt4TruthWZJets"; + // } else if( m_event->contains("AntiKt4TruthJets") ){ + // pmg_TruthJetContainer = "AntiKt4TruthJets"; + // } else { + // ANA_MSG_WARNING( "No Truth Jet Container found for Sherpa 22 reweighting, weight_Sherpa22 will not be set."); + // m_reweightSherpa22 = false; + // } + + // //Initialize Tool + // if( m_reweightSherpa22 ){ + + // ANA_CHECK( m_reweightSherpa22_tool_handle.setProperty( "TruthJetContainer", pmg_TruthJetContainer )); + // ANA_CHECK( m_reweightSherpa22_tool_handle.setProperty( "OutputLevel", msg().level() )); + // ANA_CHECK( m_reweightSherpa22_tool_handle.retrieve()); + // ANA_MSG_DEBUG("Retrieved tool: " << m_reweightSherpa22_tool_handle); + + // } + //}//if isMC and a Sherpa 2.2 sample + + ANA_MSG_INFO( "Setting up histograms based on isMC()"); + + if ( ( !isMC() && m_checkDuplicatesData ) || ( isMC() && m_checkDuplicatesMC ) ) { + m_cutflow_duplicates = m_cutflowHist->GetXaxis()->FindBin("Duplicates"); + m_cutflowHistW->GetXaxis()->FindBin("Duplicates"); + } + + if ( !isMC() ) { + if ( m_applyGRLCut ) { + m_cutflow_grl = m_cutflowHist->GetXaxis()->FindBin("GRL"); + m_cutflowHistW->GetXaxis()->FindBin("GRL"); + } + m_cutflow_lar = m_cutflowHist->GetXaxis()->FindBin("LAr"); + m_cutflowHistW->GetXaxis()->FindBin("LAr"); + m_cutflow_tile = m_cutflowHist->GetXaxis()->FindBin("tile"); + m_cutflowHistW->GetXaxis()->FindBin("tile"); + m_cutflow_SCT = m_cutflowHist->GetXaxis()->FindBin("SCT"); + m_cutflowHistW->GetXaxis()->FindBin("SCT"); + m_cutflow_core = m_cutflowHist->GetXaxis()->FindBin("core"); + m_cutflowHistW->GetXaxis()->FindBin("core"); + } + if ( m_applyJetCleaningEventFlag ) { + m_cutflow_jetcleaning = m_cutflowHist->GetXaxis()->FindBin("JetCleaning"); + m_cutflowHistW->GetXaxis()->FindBin("JetCleaning"); + } + if ( !isMC() ) { + if ( m_applyIsBadBatmanFlag ) { + m_cutflow_isbadbatman = m_cutflowHist->GetXaxis()->FindBin("IsBadBatman"); + m_cutflowHistW->GetXaxis()->FindBin("IsBadBatman"); + } + } + m_cutflow_npv = m_cutflowHist->GetXaxis()->FindBin("NPV"); + m_cutflowHistW->GetXaxis()->FindBin("NPV"); + if ( !m_triggerSelection.empty() && m_applyTriggerCut ) { + m_cutflow_trigger = m_cutflowHist->GetXaxis()->FindBin("Trigger"); + m_cutflowHistW->GetXaxis()->FindBin("Trigger"); + } + + ANA_MSG_INFO( "Histograms set up!"); + + // ------------------------------------------------------------------------------------------------- + + // Create TTree for bookeeeping duplicated events + // + TFile *fileDPL = wk()->getOutputFile (m_duplicatesStreamName); + fileDPL->cd(); + + m_duplicatesTree = new TTree("duplicates","Info on duplicated events"); + m_duplicatesTree->Branch("runNumber", &m_duplRunNumber, "runNumber/I"); + m_duplicatesTree->Branch("eventNumber", &m_duplEventNumber, "eventNumber/L"); + + // ------------------------------------------------------------------------------------------------- + + ANA_MSG_INFO( "Setting Up Tools"); + + // 1. + // initialize the GoodRunsListSelectionTool + // + + if(m_applyGRLCut){ + std::vector vecStringGRL; + + std::string grl; + std::istringstream ss(m_GRLxml); + while ( std::getline(ss, grl, ',') ) { + std::string file = PathResolverFindCalibFile(grl); + ANA_MSG_DEBUG("Found GRL: " << file); + vecStringGRL.push_back(file); + } + + ANA_CHECK( m_grl_handle.setProperty("GoodRunsListVec", vecStringGRL)); + ANA_CHECK( m_grl_handle.setProperty("PassThrough", false)); + ANA_CHECK( m_grl_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_grl_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_grl_handle); + } + + // 2. + // initialize the Trig::TrigDecisionTool + // + if( !m_triggerSelection.empty() || !m_extraTriggerSelection.empty() || + m_applyTriggerCut || m_storeTrigDecisions || m_storePassL1 || m_storePassHLT || m_storeTrigKeys ) { + + ANA_CHECK( m_trigConfTool_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_trigConfTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigConfTool_handle); + + ANA_CHECK( m_trigDecTool_handle.setProperty( "ConfigTool", m_trigConfTool_handle )); + ANA_CHECK( m_trigDecTool_handle.setProperty( "TrigDecisionKey", "xTrigDecision" )); + ANA_CHECK( m_trigDecTool_handle.setProperty( "OutputLevel", msg().level() )); + + if ( m_useRun3navigation ) + { + ANA_CHECK( m_trigDecTool_handle.setProperty( "NavigationFormat", "TrigComposite") ); + ANA_CHECK( m_trigDecTool_handle.setProperty( "HLTSummary", m_HLTSummary) ); + } else { + ANA_CHECK( m_trigDecTool_handle.setProperty( "NavigationFormat", "TriggerElement") ); + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + // parse extra triggers list and split by comma + std::string token; + std::istringstream ss(m_extraTriggerSelection); + while (std::getline(ss, token, ',')) { + m_extraTriggerSelectionList.push_back(token); + } + }//end trigger configuration + + // 3. + // initialize the CP::PileupReweightingTool + // + + if ( m_doPUreweighting ) { + + std::vector PRWFiles; + std::vector lumiCalcFiles; + + std::string tmp_lumiCalcFileNames = m_lumiCalcFileNames; + std::string tmp_PRWFileNames = m_PRWFileNames; + + // Parse all comma seperated files + // + while ( tmp_PRWFileNames.size() > 0) { + size_t pos = tmp_PRWFileNames.find_first_of(','); + if ( pos == std::string::npos ) { + pos = tmp_PRWFileNames.size(); + PRWFiles.push_back(tmp_PRWFileNames.substr(0, pos)); + tmp_PRWFileNames.erase(0, pos); + } else { + PRWFiles.push_back(tmp_PRWFileNames.substr(0, pos)); + tmp_PRWFileNames.erase(0, pos+1); + } + } + while ( tmp_lumiCalcFileNames.size() > 0) { + size_t pos = tmp_lumiCalcFileNames.find_first_of(','); + if ( pos == std::string::npos ) { + pos = tmp_lumiCalcFileNames.size(); + lumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos)); + tmp_lumiCalcFileNames.erase(0, pos); + } else { + lumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos)); + tmp_lumiCalcFileNames.erase(0, pos+1); + } + } + + // Find trigger specific lumicalc files + if ( !isMC() ) { + for ( const std::string &lumiCalcFile : lumiCalcFiles) { + size_t pos = lumiCalcFile.find_first_of(':'); + if ( pos != std::string::npos ) { + m_triggerUnprescaleList.push_back(lumiCalcFile.substr(pos + 1)); + } + } + + if ( !m_triggerUnprescaleList.empty() ) { + ANA_MSG_INFO("*** Trigger chains used for data unprescaling:"); + for ( const std::string &trigger : m_triggerUnprescaleList ) { + ANA_MSG_INFO( "\t " << trigger ); + } + } + } + + if(m_autoconfigPRW) + { ANA_CHECK( autoconfigurePileupRWTool() ); } + else + { + if ( isMC() ) { + ANA_MSG_INFO( "Adding Pileup files for CP::PileupReweightingTool:"); + for( unsigned int i=0; i < PRWFiles.size(); ++i){ + ANA_MSG_INFO( "\t- " << PRWFiles.at(i).c_str()); + } + ANA_CHECK( m_pileup_tool_handle.setProperty("ConfigFiles", PRWFiles)); + } + + ANA_MSG_INFO( "Adding LumiCalc files for CP::PileupReweightingTool:"); + for( unsigned int i=0; i < lumiCalcFiles.size(); ++i){ + ANA_MSG_INFO( "\t- " << lumiCalcFiles.at(i).c_str()); + } + ANA_CHECK( m_pileup_tool_handle.setProperty("LumiCalcFiles", lumiCalcFiles)); + } + ANA_CHECK( m_pileup_tool_handle.setProperty("UsePeriodConfig", m_periodConfig) ); + ANA_CHECK( m_pileup_tool_handle.setProperty("OutputLevel", msg().level() )); + if ( !m_triggerUnprescaleList.empty() ) { + // We need to make an instance of ITrigDecisionTool: + asg::AnaToolHandle iTrigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool"}; + if ( !iTrigDecTool_handle.isUserConfigured() ) { + ANA_MSG_FATAL("A configured " << iTrigDecTool_handle.typeAndName() << " must have been previously created!"); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( iTrigDecTool_handle.retrieve() ); + ANA_CHECK( m_pileup_tool_handle.setProperty("TrigDecisionTool", iTrigDecTool_handle )); + } + ANA_CHECK( m_pileup_tool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle); + } + + // As a check, let's see the number of events in our file (long long int) + // + ANA_MSG_INFO( "Number of events in file = " << m_event->getEntries()); + + // Initialize counter for number of entries + m_eventCounter = 0; + + ANA_MSG_INFO( "BasicEventSelection succesfully initialized!"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BasicEventSelection :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Basic Event Selection"); + + // Print every 1000 entries, so we know where we are: + // + if ( (m_eventCounter % 1000) == 0 ) { + ANA_MSG_INFO( "Entry number = " << m_eventCounter); + ANA_MSG_VERBOSE( "Store Content:"); + if(msgLvl(MSG::VERBOSE)) m_store->print(); + ANA_MSG_VERBOSE( "End Content"); + } + + //----------------------------------------- + // Print triggers used for first entry only + // and fill the trigger expression for + // unprescaling data + //----------------------------------------- + + std::string TriggerExpression = ""; + + if ( !m_triggerSelection.empty() ) { + if (m_eventCounter == 0) { + if (m_eventCounter == 0) ANA_MSG_INFO( "*** Triggers used (in OR) are:\n"); + auto printingTriggerChainGroup = m_trigDecTool_handle->getChainGroup(m_triggerSelection); + std::vector triggersUsed = printingTriggerChainGroup->getListOfTriggers(); + for ( unsigned int iTrigger = 0; iTrigger < triggersUsed.size(); ++iTrigger ) { + if (m_eventCounter == 0) ANA_MSG_INFO("\t" << triggersUsed.at(iTrigger).c_str()); + TriggerExpression.append(triggersUsed.at(iTrigger).c_str()); + if ( iTrigger != triggersUsed.size() - 1) TriggerExpression.append(" || "); + } + } + } + + if ( m_eventCounter == 0 && !m_extraTriggerSelection.empty() ) { + ANA_MSG_INFO( "*** Extra Trigger Info Saved are :\n"); + for ( const std::string &trigName : m_extraTriggerSelectionList ) { + ANA_MSG_INFO("\t" << trigName.c_str()); + + ANA_MSG_INFO("\tEvaluates to:"); + auto printingTriggerChainGroup = m_trigDecTool_handle->getChainGroup(trigName); + std::vector triggersUsed = printingTriggerChainGroup->getListOfTriggers(); + for ( unsigned int iTrigger = 0; iTrigger < triggersUsed.size(); ++iTrigger ) { + ANA_MSG_INFO("\t- "<< triggersUsed.at(iTrigger).c_str()); + } + } + } + + + + ++m_eventCounter; + + //------------------ + // Grab event + //------------------ + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + //------------------------------------------------------------------------------------------ + // Declare an 'eventInfo' decorator with the MC event weight + //------------------------------------------------------------------------------------------ + static SG::AuxElement::Decorator< float > mcEvtWeightDecor("mcEventWeight"); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + + float mcEvtWeight(1.0); + + // Check if need to create xAH event weight + // + if ( !mcEvtWeightDecor.isAvailable(*eventInfo) ) { + if ( isMC() ) { + const std::vector< float > weights = eventInfo->mcEventWeights(); // The weight (and systs) of all the MC events used in the simulation + if ( weights.size() > 0 ) mcEvtWeight = weights[0]; + + //for ( auto& it : weights ) { ANA_MSG_INFO( "event weight: %2f.", it ); } + + // kill the powheg event with a huge weight + if( m_cleanPowheg ) { + if( eventInfo->eventNumber() == 1652845 ) { + ANA_MSG_INFO("Dropping huge weight event. Weight should be 352220000"); + ANA_MSG_INFO("WEIGHT : " << mcEvtWeight); + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; // go to next event + } + } + } + // Decorate event with the *total* MC event weight + // + mcEvtWeightDecor(*eventInfo) = mcEvtWeight; + } else { + mcEvtWeight = mcEvtWeightAcc(*eventInfo); + } + + //------------------------------------------------------------------------------------------ + // Fill cutflows for run-by-run checks on data before cuts + //------------------------------------------------------------------------------------------ + uint32_t runNumberForCutflow = (uint32_t) eventInfo->runNumber(); + if (m_doRunByRunCutflows && !isMC()) { + m_runByrun_beforeCuts->Fill(TString(std::to_string(runNumberForCutflow)), 1.); + } + + //------------------------------------------------------------------------------------------ + // Declare an 'eventInfo' decorator with the Sherpa 2.2 reweight to multijet truth + // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#Sherpa_v2_2_0_V_jets_NJet_reweig + //------------------------------------------------------------------------------------------ + + //if ( m_reweightSherpa22 ){ + // static SG::AuxElement::Decorator< float > weight_Sherpa22Decor("weight_Sherpa22"); + // // Check if weight needs to be added + // if ( !weight_Sherpa22Decor.isAvailable(*eventInfo) ) { + + // float weight_Sherpa22 = -999.; + // weight_Sherpa22 = m_reweightSherpa22_tool_handle->getWeight(); + // weight_Sherpa22Decor( *eventInfo ) = weight_Sherpa22; + // ANA_MSG_DEBUG("Setting Sherpa 2.2 reweight to " << weight_Sherpa22); + + // } // If not already decorated + //} // if m_reweightSherpa22 + + + //------------------------------------------------------------------------------------------ + // Fill initial bin of cutflow + //------------------------------------------------------------------------------------------ + + if( !m_useMetaData ) + { + m_cutflowHist ->Fill( m_cutflow_all, 1 ); + m_cutflowHistW->Fill( m_cutflow_all, mcEvtWeight); + + m_histEventCount -> Fill(1, 1); + m_histEventCount -> Fill(2, 1); + m_histEventCount -> Fill(3, mcEvtWeight); + m_histEventCount -> Fill(4, mcEvtWeight); + m_histEventCount -> Fill(5, mcEvtWeight*mcEvtWeight); + m_histEventCount -> Fill(6, mcEvtWeight*mcEvtWeight); + } + + m_cutflowHist ->Fill( m_cutflow_init, 1 ); + m_cutflowHistW->Fill( m_cutflow_init, mcEvtWeight); + + //-------------------------------------------------------------------------------------------------------- + // Check current event is not a duplicate + // This is done by checking against the std::set of filled for all previous events + //-------------------------------------------------------------------------------------------------------- + + if ( ( !isMC() && m_checkDuplicatesData ) || ( isMC() && m_checkDuplicatesMC ) ) { + + std::pair thispair = std::make_pair(eventInfo->runNumber(),eventInfo->eventNumber()); + + if ( m_RunNr_VS_EvtNr.find(thispair) != m_RunNr_VS_EvtNr.end() ) { + + ANA_MSG_WARNING("Found duplicated event! runNumber = " << static_cast(eventInfo->runNumber()) << ", eventNumber = " << static_cast(eventInfo->eventNumber()) << ". Skipping this event"); + + // Bookkeep info in duplicates TTree + // + m_duplRunNumber = eventInfo->runNumber(); + m_duplEventNumber = eventInfo->eventNumber(); + + m_duplicatesTree->Fill(); + + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; // go to next event + } + + m_RunNr_VS_EvtNr.insert(thispair); + + m_cutflowHist ->Fill( m_cutflow_duplicates, 1 ); + m_cutflowHistW->Fill( m_cutflow_duplicates, mcEvtWeight); + + } + + //------------------------------------------------------------------------------------------ + // Update Pile-Up Reweighting + //------------------------------------------------------------------------------------------ + if ( m_doPUreweighting ) { + m_pileup_tool_handle->applySystematicVariation(CP::SystematicSet()).ignore(); + ANA_CHECK(m_pileup_tool_handle->apply( *eventInfo )); // NB: this call automatically decorates eventInfo with: + // 1.) the PU weight ("PileupWeight") + // 2.) the corrected mu ("corrected_averageInteractionsPerCrossing") + // 3.) the random run number ("RandomRunNumber") + // 4.) the random lumiblock number ("RandomLumiBlockNumber") + // static SG::AuxElement::Decorator< float > correctedAvgMu("corrected_averageInteractionsPerCrossing"); + static SG::AuxElement::Decorator< float > correctedAndScaledAvgMu("correctedScaled_averageInteractionsPerCrossing"); + static SG::AuxElement::Decorator< float > correctedMu("corrected_actualInteractionsPerCrossing"); + static SG::AuxElement::Decorator< float > correctedAndScaledMu("correctedScaled_actualInteractionsPerCrossing"); + + correctedAndScaledAvgMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedAverageInteractionsPerCrossing( *eventInfo, true ); + correctedMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedActualInteractionsPerCrossing( *eventInfo ); + correctedAndScaledMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedActualInteractionsPerCrossing( *eventInfo, true ); + + if ( isMC() && m_doPUreweightingSys ) { + CP::SystematicSet tmpSet;tmpSet.insert(CP::SystematicVariation("PRW_DATASF",1)); + m_pileup_tool_handle->applySystematicVariation( tmpSet ).ignore(); + eventInfo->auxdecor< float >( "PileupWeight_UP" )= m_pileup_tool_handle->getCombinedWeight( *eventInfo ); + tmpSet.clear();tmpSet.insert(CP::SystematicVariation("PRW_DATASF",-1)); + m_pileup_tool_handle->applySystematicVariation( tmpSet ).ignore(); + eventInfo->auxdecor< float >( "PileupWeight_DOWN")= m_pileup_tool_handle->getCombinedWeight( *eventInfo ); + } + } + + if ( m_actualMuMin > 0 ) { + // apply minimum pile-up cut + if ( eventInfo->actualInteractionsPerCrossing() < m_actualMuMin ) { // veto event + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + } + + if ( m_actualMuMax > 0 ) { + // apply maximum pile-up cut + if ( eventInfo->actualInteractionsPerCrossing() > m_actualMuMax ) { // veto event + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + } + + + //------------------------------------------------------ + // If data, check if event passes GRL and event cleaning + //------------------------------------------------------ + if ( !isMC() ) { + + // Get the streams that the event was put in + if (m_checkStreams){ + const std::vector< xAOD::EventInfo::StreamTag > streams = eventInfo->streamTags(); + + for ( auto& stream : streams ) { + ANA_MSG_DEBUG( "event has fired stream: " << stream.name() ); + } + } + + // GRL + if ( m_applyGRLCut ) { + if ( !m_grl_handle->passRunLB( *eventInfo ) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; // go to next event + } + m_cutflowHist ->Fill( m_cutflow_grl, 1 ); + m_cutflowHistW->Fill( m_cutflow_grl, mcEvtWeight); + } + + //------------------------------------------------------------ + // Apply event cleaning to remove events due to + // problematic regions of the detector, and incomplete events. + // Apply to data. + //------------------------------------------------------------ + + if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error ) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + m_cutflowHist ->Fill( m_cutflow_lar, 1 ); + m_cutflowHistW->Fill( m_cutflow_lar, mcEvtWeight); + + if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::Tile)==xAOD::EventInfo::Error ) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + m_cutflowHist ->Fill( m_cutflow_tile, 1 ); + m_cutflowHistW->Fill( m_cutflow_tile, mcEvtWeight); + + if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::SCT)==xAOD::EventInfo::Error) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + m_cutflowHist ->Fill( m_cutflow_SCT, 1 ); + m_cutflowHistW->Fill( m_cutflow_SCT, mcEvtWeight); + + if ( m_applyCoreFlagsCut && (eventInfo->isEventFlagBitSet(xAOD::EventInfo::Core, 18) ) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + m_cutflowHist ->Fill( m_cutflow_core, 1 ); + m_cutflowHistW->Fill( m_cutflow_core, mcEvtWeight); + + } + + // more info: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017 + if ( m_applyJetCleaningEventFlag && eventInfo->isAvailable("DFCommonJets_eventClean_LooseBad") ) { + if(eventInfo->auxdataConst("DFCommonJets_eventClean_LooseBad")<1) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + } + m_cutflowHist ->Fill( m_cutflow_jetcleaning, 1 ); + m_cutflowHistW->Fill( m_cutflow_jetcleaning, mcEvtWeight); + + // n.b. this cut should only be applied in 2015+16 data, and not to MC! + // details here: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017#IsBadBatMan_Event_Flag_and_EMEC + if ( m_applyIsBadBatmanFlag && eventInfo->isAvailable("DFCommonJets_isBadBatman") && !isMC() ) { + if(eventInfo->auxdataConst("DFCommonJets_isBadBatman")>0) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + } + m_cutflowHist ->Fill( m_cutflow_isbadbatman, 1 ); + m_cutflowHistW->Fill( m_cutflow_isbadbatman, mcEvtWeight); + + //----------------------------- + // Primary Vertex 'quality' cut + //----------------------------- + + const xAOD::VertexContainer* vertices(nullptr); + if ( !m_truthLevelOnly && m_applyPrimaryVertexCut ) { + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + + if ( !HelperFunctions::passPrimaryVertexSelection( vertices, m_PVNTrack ) ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + } + m_cutflowHist ->Fill( m_cutflow_npv, 1 ); + m_cutflowHistW->Fill( m_cutflow_npv, mcEvtWeight); + + //--------------------- + // Trigger decision cut + //--------------------- + + if ( !m_triggerSelection.empty() || m_storeTrigDecisions ) { + + auto triggerChainGroup = m_trigDecTool_handle->getChainGroup(m_triggerSelection); + + if ( m_applyTriggerCut ) { + + // additional DEBUG logging to validate conditional logic + ANA_MSG_DEBUG("Applying trigger cut corresponding to chain group " << m_triggerSelection); + ANA_MSG_DEBUG("Is Trigger-Level Analysis (TLA) data = " << int(m_isTLAData)); + ANA_MSG_DEBUG("Trigger chain group is passed = " << int(m_isTLAData ? triggerChainGroup->isPassed(TrigDefs::requireDecision) : triggerChainGroup->isPassed())); + + // different behaviour for isPassed depending on whether you are running on TLA data or not + // if running on TLA data, we only store the HLT part of the trigger decision i.e. the L1 part + // will always be "false", so we need to use TrigDefs::requireDecision to limit the decision + // to being satisfied by the HLT leg(s) of the trigger chain + // TODO: check performance of this method when using trigger chains with the SAME HLT leg but different L1 seed + // e.g. HLT_j20_pf_ftf_L1J100 vs. HLT_j20_pf_ftf_L1HT190-J15s5pETA21 + if ( (m_isTLAData && !triggerChainGroup->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && !triggerChainGroup->isPassed()) ) { + // if (!triggerChainGroup->isPassed(TrigDefs::requireDecision)) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + m_cutflowHist ->Fill( m_cutflow_trigger, 1 ); + m_cutflowHistW->Fill( m_cutflow_trigger, mcEvtWeight); + + } + + // save passed triggers in eventInfo + // + if ( m_storeTrigDecisions ) { + + std::vector passedTriggers; + std::vector disabledTriggers; + std::vector triggerPrescales; + std::vector triggerPrescalesLumi; + std::vector isPassedBitsNames; + std::vector isPassedBits; + + // Save info for the triggers used to skim events + // + for ( auto &trigName : triggerChainGroup->getListOfTriggers() ) { + auto trigChain = m_trigDecTool_handle->getChainGroup( trigName ); + if ( (m_isTLAData && trigChain->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && trigChain->isPassed()) ) { + passedTriggers.push_back( trigName ); + triggerPrescales.push_back( trigChain->getPrescale() ); + + bool doLumiPrescale = std::find(m_triggerUnprescaleList.begin(), m_triggerUnprescaleList.end(), trigName) != m_triggerUnprescaleList.end(); + if ( doLumiPrescale ) { + triggerPrescalesLumi.push_back( m_pileup_tool_handle->getDataWeight( *eventInfo, trigName, true ) ); + } else { + triggerPrescalesLumi.push_back( -1 ); + } + } + isPassedBitsNames.push_back( trigName ); + isPassedBits .push_back( m_trigDecTool_handle->isPassedBits(trigName) ); + if(trigChain->getPrescale()<1) disabledTriggers.push_back( trigName ); + } + + // Save info for extra triggers + // + if ( !m_extraTriggerSelection.empty() ) { + + for ( const std::string &trigName : m_extraTriggerSelectionList ) { + auto trigChain = m_trigDecTool_handle->getChainGroup( trigName ); + if ( (m_isTLAData && trigChain->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && trigChain->isPassed()) ) { + passedTriggers.push_back( trigName ); + triggerPrescales.push_back( trigChain->getPrescale() ); + + bool doLumiPrescale = true; + for ( const std::string &trigPart : trigChain->getListOfTriggers() ) { + if (std::find(m_triggerUnprescaleList.begin(), m_triggerUnprescaleList.end(), trigPart) == m_triggerUnprescaleList.end()) doLumiPrescale = false; + } + if ( doLumiPrescale ) { + triggerPrescalesLumi.push_back( m_pileup_tool_handle->getDataWeight( *eventInfo, trigName, true ) ); + } else { + triggerPrescalesLumi.push_back( -1 ); + } + } + + isPassedBitsNames.push_back( trigName ); + isPassedBits .push_back( m_trigDecTool_handle->isPassedBits(trigName) ); + if(trigChain->getPrescale()<1) disabledTriggers.push_back( trigName ); + } + } + + static SG::AuxElement::Decorator< std::vector< std::string > > dec_passedTriggers("passedTriggers"); + dec_passedTriggers ( *eventInfo ) = passedTriggers; + static SG::AuxElement::Decorator< std::vector< std::string > > dec_disabledTriggers("disabledTriggers"); + dec_disabledTriggers( *eventInfo ) = disabledTriggers; + static SG::AuxElement::Decorator< std::vector< float > > dec_triggerPrescales("triggerPrescales"); + dec_triggerPrescales( *eventInfo ) = triggerPrescales; + static SG::AuxElement::Decorator< std::vector< float > > dec_triggerPrescalesLumi("triggerPrescalesLumi"); + dec_triggerPrescalesLumi( *eventInfo ) = triggerPrescalesLumi; + static SG::AuxElement::Decorator< std::vector< unsigned int > > dec_isPassedBits("isPassedBits"); + dec_isPassedBits( *eventInfo ) = isPassedBits; + static SG::AuxElement::Decorator< std::vector< std::string > > dec_isPassedBitsNames("isPassedBitsNames"); + dec_isPassedBitsNames( *eventInfo ) = isPassedBitsNames; + + } + + if ( m_storePrescaleWeight ) { + static SG::AuxElement::Decorator< float > weight_prescale("weight_prescale"); + weight_prescale(*eventInfo) = triggerChainGroup->getPrescale(); + } + + if ( m_storePassL1 ) { + static SG::AuxElement::Decorator< int > passL1("passL1"); + passL1(*eventInfo) = ( m_triggerSelection.find("L1_") != std::string::npos ) ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str()) : -1; + } + if ( m_storePassHLT ) { + static SG::AuxElement::Decorator< int > passHLT("passHLT"); + if (!m_isTLAData) { + passHLT(*eventInfo) = ( m_triggerSelection.find("HLT_") != std::string::npos ) ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str()) : -1; + } else { + passHLT(*eventInfo) = ( m_triggerSelection.find("HLT_") != std::string::npos ) ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str(), TrigDefs::requireDecision) : -1; + } + } + + } // if giving a specific list of triggers to look at + + if ( m_storeTrigKeys ) { + static SG::AuxElement::Decorator< int > masterKey("masterKey"); + masterKey(*eventInfo) = m_trigConfTool_handle->masterKey(); + static SG::AuxElement::Decorator< int > L1PSKey("L1PSKey"); + L1PSKey(*eventInfo) = m_trigConfTool_handle->lvl1PrescaleKey(); + static SG::AuxElement::Decorator< int > HLTPSKey("HLTPSKey"); + HLTPSKey(*eventInfo) = m_trigConfTool_handle->hltPrescaleKey(); + } + + // Calculate distance to previous empty BCID and previous unpaired BCID, and save as decorations + if( m_calcBCIDInfo && !isMC() && m_trigConfTool_handle.isInitialized() ){ + //Distance to previous empty BCID + for (int i = eventInfo->bcid() - 1; i >= 0; i--){ + //get the bunch group pattern for bunch crossing i + uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i]; + bool isEmpty = (bgPattern >> 3) & 0x1; + if (isEmpty){ + static SG::AuxElement::Decorator< int > DistEmptyBCID("DistEmptyBCID"); + DistEmptyBCID(*eventInfo) = eventInfo->bcid()-i; + break; + } + }//for each bcid + //Distance to previous unpaired crossing + for (int i = eventInfo->bcid() - 1; i >= 0; i--){ + //get the bunch group pattern for bunch crossing i + uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i]; + bool isUnpaired = !((bgPattern >> 1) & 0x1); + if (isUnpaired){ + static SG::AuxElement::Decorator< int > DistLastUnpairedBCID("DistLastUnpairedBCID"); + DistLastUnpairedBCID(*eventInfo) = eventInfo->bcid()-i; + break; + } + }//for each bcid + //Distance to next unpaired crossing + for (int i = eventInfo->bcid() + 1; i <= 3654; i++){ + //get the bunch group pattern for bunch crossing i + uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i]; + bool isUnpaired = !((bgPattern >> 1) & 0x1); + if (isUnpaired){ + static SG::AuxElement::Decorator< int > DistNextUnpairedBCID("DistNextUnpairedBCID"); + DistNextUnpairedBCID(*eventInfo) = i-eventInfo->bcid(); + break; + } + }// for each bcid + + }//if data + + //------------------------------------------------------------------------------------------ + // Fill cutflows for run-by-run checks on data after cuts + //------------------------------------------------------------------------------------------ + if (m_doRunByRunCutflows && !isMC()) { + m_runByrun_afterCuts->Fill(TString(std::to_string(runNumberForCutflow)), 1.); + } + + return EL::StatusCode::SUCCESS; + } + + // "Borrowed" from SUSYTools + // https://gitlab.cern.ch/atlas/athena/blob/3be30397de7c6cfdc15de38f532fdb4b9f338297/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx#L700 + StatusCode BasicEventSelection::autoconfigurePileupRWTool() + { + + // Don't do this if we aren't supposed to + if (! (isMC() && m_autoconfigPRW )) + return StatusCode::SUCCESS; + + const xAOD::EventInfo* eventInfo = 0; + ANA_CHECK( m_event->retrieve( eventInfo, "EventInfo" ) ); + + // Determine simulation flavour + std::string SimulationFlavour = isFastSim() ? ( isAF3() ? "AF3" : "AFII" ) : "FS"; + + // Extract campaign automatically from Run Number + std::string mcCampaignMD = ""; + + uint32_t runNum = eventInfo->runNumber(); + + switch(runNum) + { + case 284500 : + mcCampaignMD="mc20a"; + break; + case 300000 : + mcCampaignMD="mc20d"; + break; + case 310000 : + mcCampaignMD="mc20e"; + break; + case 410000 : + mcCampaignMD="mc23a"; + break; + case 450000 : + mcCampaignMD="mc23d"; + break; + default : + ANA_MSG_ERROR( "Could not determine mc campaign from run number! Impossible to autoconfigure PRW. Aborting." ); + return StatusCode::FAILURE; + break; + } + + std::string mcCampaignMD_v2 = ""; + const xAOD::FileMetaData* fmd(nullptr); + if ( !m_event->retrieveMetaInput(fmd, "FileMetaData").isSuccess() || !fmd->value(xAOD::FileMetaData::mcCampaign, mcCampaignMD_v2) ) { + ANA_MSG_WARNING("Failed to retrieve FileMetaData from MetaData! Using MC campaign from run number. PLEASE DOUBLE-CHECK this is the correct campaign for your samples!"); + } else { + fmd->value(xAOD::FileMetaData::mcCampaign, mcCampaignMD_v2); + + if(mcCampaignMD!=mcCampaignMD_v2){ + std::string MetadataAndRunConflict(""); + MetadataAndRunConflict += "autoconfigurePileupRWTool(): access to FileMetaData indicates a " + mcCampaignMD_v2; + MetadataAndRunConflict += " sample, but the run number indiciates " +mcCampaignMD; + MetadataAndRunConflict += ". Prioritizing the value from FileMetaData. This could occur if you are using an MC campaign with outdated pile-up reweighting. PLEASE DOUBLE-CHECK your samples!"; + ANA_MSG_WARNING( MetadataAndRunConflict ); + mcCampaignMD=mcCampaignMD_v2; + } + } + ANA_MSG_INFO( "Determined MC campaign to be " << mcCampaignMD); + + // Extract campaign from user configuration + std::string tmp_mcCampaign = m_mcCampaign; + std::vector mcCampaignList; + while ( tmp_mcCampaign.size() > 0) { + size_t pos = tmp_mcCampaign.find_first_of(','); + if ( pos == std::string::npos ) { + pos = tmp_mcCampaign.size(); + mcCampaignList.push_back(tmp_mcCampaign.substr(0, pos)); + tmp_mcCampaign.erase(0, pos); + } + else { + mcCampaignList.push_back(tmp_mcCampaign.substr(0, pos)); + tmp_mcCampaign.erase(0, pos+1); + } + } + + // Sanity checks + bool mc2XX_GoodFromProperty = !mcCampaignList.empty(); + bool mc2XX_GoodFromMetadata = false; + for(const auto& mcCampaignP : mcCampaignList) mc2XX_GoodFromProperty &= ( mcCampaignP == "mc20a" || mcCampaignP == "mc20d" || mcCampaignP == "mc20e" || mcCampaignP == "mc23a" || mcCampaignP == "mc23c" || mcCampaignP == "mc23d"); + if( mcCampaignMD == "mc20a" || mcCampaignMD == "mc20d" || mcCampaignMD == "mc20e" || mcCampaignMD == "mc23a" || mcCampaignMD == "mc23c" || mcCampaignMD == "mc23d") mc2XX_GoodFromMetadata = true; + + if( !mc2XX_GoodFromMetadata && !mc2XX_GoodFromProperty ) { + // :: + std::string MetadataAndPropertyBAD(""); + MetadataAndPropertyBAD += "autoconfigurePileupRWTool(): access to FileMetaData failed, but don't panic. You can try to manually set the 'mcCampaign' BasicEventSelection property to "; + MetadataAndPropertyBAD += "'mc20a', 'mc20c', 'mc20d', 'mc20e', 'mc20f', 'mc23a', 'mc23c', or 'mc23d' and restart your job. If you set it to any other string, you will still incur in this error."; + ANA_MSG_ERROR( MetadataAndPropertyBAD ); + return StatusCode::FAILURE; + // :: + } + + if ( mc2XX_GoodFromProperty && mc2XX_GoodFromMetadata) { + bool MDinP=false; + for(const auto& mcCampaignP : mcCampaignList) MDinP |= (mcCampaignMD==mcCampaignP); + if( !MDinP ) { + // :: + std::string MetadataAndPropertyConflict(""); + MetadataAndPropertyConflict += "autoconfigurePileupRWTool(): access to FileMetaData indicates a " + mcCampaignMD; + MetadataAndPropertyConflict += " sample, but the 'mcCampaign' property passed to BasicEventSelection is set to '" +m_mcCampaign; + MetadataAndPropertyConflict += "'. Prioritizing the value set by user: PLEASE DOUBLE-CHECK the value you set the 'mcCampaign' property to!"; + ANA_MSG_WARNING( MetadataAndPropertyConflict ); + // :: + } + else { + // :: + std::string NoMetadataButPropertyOK(""); + NoMetadataButPropertyOK += "autoconfigurePileupRWTool(): access to FileMetaData succeeded, but the 'mcCampaign' property is passed to BasicEventSelection as '"; + NoMetadataButPropertyOK += m_mcCampaign; + NoMetadataButPropertyOK += "'. Autoconfiguring PRW accordingly."; + ANA_MSG_WARNING( NoMetadataButPropertyOK ); + // :: + } + } + + // :: + // Retrieve the input file + if(!mc2XX_GoodFromProperty) { + mcCampaignList.clear(); + mcCampaignList.push_back(mcCampaignMD); + } + ANA_MSG_INFO( "Setting MC campgains for CP::PileupReweightingTool:"); + for(const auto& mcCampaign : mcCampaignList) + ANA_MSG_INFO( "\t" << mcCampaign.c_str() ); + + // + float dsid = -999; + dsid = eventInfo->mcChannelNumber(); + int DSID_INT = (int) dsid; + + std::vector prwConfigFiles; + for(const auto& mcCampaign : mcCampaignList) + { + std::string prwConfigFile; + // If requested set the PRW file to common PRW file of the processed MC campaign + if (m_useCommonPRWFiles) { + if (mcCampaign == "mc20a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20a);} + else if (mcCampaign == "mc20d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20d);} + else if (mcCampaign == "mc20e") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20e);} + else if (mcCampaign == "mc23a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23a);} + else if (mcCampaign == "mc23c") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23c);} + else if (mcCampaign == "mc23d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23d);} + else { + ANA_MSG_ERROR("autoconfigurePileupRWTool(): no common PRW file known for MC campaign: " << mcCampaign); + return StatusCode::FAILURE; + } + } else { + prwConfigFile = PathResolverFindCalibFile("dev/PileupReweighting/share/DSID" + std::to_string(DSID_INT/1000) +"xxx/pileup_" + mcCampaign + "_dsid" + std::to_string(DSID_INT) + "_" + SimulationFlavour + ".root"); + } + TFile testF(prwConfigFile.data(),"read"); + if(testF.IsZombie()) + { + ANA_MSG_ERROR("autoconfigurePileupRWTool(): Missing PRW config file for DSID " << std::to_string(DSID_INT) << " in campaign " << mcCampaign); + return StatusCode::FAILURE; + } + else + prwConfigFiles.push_back( prwConfigFile ); + } + + // Add actualMu config files + for(const auto& mcCampaign : mcCampaignList) + { + if( !m_prwActualMu2016File.empty() && mcCampaign == "mc20a" ) + prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2016File)); + if( !m_prwActualMu2017File.empty() && (mcCampaign == "mc20c" || mcCampaign=="mc20d") ) + prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2017File)); + if( !m_prwActualMu2018File.empty() && (mcCampaign == "mc20e" || mcCampaign=="mc20f") ) + prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2018File)); + if( !m_prwActualMu2022File.empty() && mcCampaign == "mc23a" ) + prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2022File)); + if( !m_prwActualMu2023File.empty() && (mcCampaign == "mc23c" || mcCampaign=="mc23d") ) + prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2023File)); + } + + // also need to handle lumicalc files: only use 2015+2016 with mc20a + // and only use 2017 with mc20d and 2018 data with mc20e + // according to instructions on https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ExtendedPileupReweighting#Tool_Properties + + // Parse lumicalc file names + std::vector allLumiCalcFiles; + std::string tmp_lumiCalcFileNames = m_lumiCalcFileNames; + while ( tmp_lumiCalcFileNames.size() > 0) { + size_t pos = tmp_lumiCalcFileNames.find_first_of(','); + if ( pos == std::string::npos ) { + pos = tmp_lumiCalcFileNames.size(); + allLumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos)); + tmp_lumiCalcFileNames.erase(0, pos); + } else { + allLumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos)); + tmp_lumiCalcFileNames.erase(0, pos+1); + } + } + + std::vector lumiCalcFiles; + for(const auto& mcCampaign : mcCampaignList) + { + for(const auto& filename : allLumiCalcFiles) + { + // looking for things of format "stuff/data15_13TeV/stuff" etc + size_t pos = filename.find("data"); + std::string year = filename.substr(pos+4, 2); + + if (mcCampaign == "mc20a") { + if (year == "15" || year == "16") { + lumiCalcFiles.push_back(filename); + } + } else if (mcCampaign == "mc20d") { + if (year == "17") { + lumiCalcFiles.push_back(filename); + } + } else if (mcCampaign == "mc20e") { + if (year == "18") { + lumiCalcFiles.push_back(filename); + } + } else if (mcCampaign == "mc23a") { + if (year == "22") { + lumiCalcFiles.push_back(filename); + } + } else if (mcCampaign == "mc23c" || mcCampaign == "mc23d") { + if (year == "23") { + lumiCalcFiles.push_back(filename); + } + } else { + ANA_MSG_ERROR( "No lumicalc file is suitable for your mc campaign!" ); + } + } + } + + // Set everything and report on it. + ANA_MSG_INFO( "Adding Pileup files for CP::PileupReweightingTool:"); + for( unsigned int i=0; i < prwConfigFiles.size(); ++i) { + ANA_MSG_INFO("\t- " << prwConfigFiles.at(i).c_str()); + } + ANA_CHECK( m_pileup_tool_handle.setProperty("ConfigFiles", prwConfigFiles)); + + ANA_MSG_INFO( "Adding LumiCalc files for CP::PileupReweightingTool:"); + for( unsigned int i=0; i < lumiCalcFiles.size(); ++i) { + ANA_MSG_INFO("\t- " << lumiCalcFiles.at(i).c_str()); + } + ANA_CHECK( m_pileup_tool_handle.setProperty("LumiCalcFiles", lumiCalcFiles)); + + // Return gracefully + return StatusCode::SUCCESS; + } + + + EL::StatusCode BasicEventSelection :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BasicEventSelection :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Number of processed events \t= " << m_eventCounter); + + m_RunNr_VS_EvtNr.clear(); + + if ( m_trigDecTool_handle.isInitialized() ){ + if (asg::ToolStore::contains("ToolSvc.TrigDecisionTool") ){ + m_trigDecTool_handle->finalize(); + asg::ToolStore::remove("ToolSvc.TrigDecisionTool").ignore(); + } + } + + //after execution loop + if(m_printBranchList){ + xAOD::IOStats::instance().stats().printSmartSlimmingBranchList(); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode BasicEventSelection :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_ClusterContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_ClusterContainer.cxx.rst.txt new file mode 100644 index 0000000000..27938efe35 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ClusterContainer.cxx.rst.txt @@ -0,0 +1,66 @@ + +.. _program_listing_file_Root_ClusterContainer.cxx: + +Program Listing for File ClusterContainer.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ClusterContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/ClusterContainer.h" + + #include + + using namespace xAH; + using std::vector; + using std::string; + + ClusterContainer::ClusterContainer(const std::string& name, const std::string& detailStr, float units, bool mc) + : ParticleContainer(name, detailStr, units, mc, true) + { + } + + ClusterContainer::~ClusterContainer() + { + } + + void ClusterContainer::setTree(TTree *tree) + { + // Connect branches + ParticleContainer::setTree(tree); + tree->SetBranchStatus ("nclus" , 1); + tree->SetBranchAddress ("nclus" , &m_n); + } + + void ClusterContainer::updateParticle(uint idx, Cluster& cluster) + { + ParticleContainer::updateParticle(idx,cluster); + } + + + void ClusterContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + return; + } + + + + void ClusterContainer::clear() + { + ParticleContainer::clear(); + } + + + void ClusterContainer::FillCluster( const xAOD::CaloCluster* cluster ){ + return FillCluster(static_cast(cluster)); + } + + void ClusterContainer::FillCluster( const xAOD::IParticle* particle ) + { + ParticleContainer::FillParticle(particle); + return; + } diff --git a/_sources/api/program_listing_file_Root_ClusterHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_ClusterHists.cxx.rst.txt new file mode 100644 index 0000000000..83f125f096 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ClusterHists.cxx.rst.txt @@ -0,0 +1,74 @@ + +.. _program_listing_file_Root_ClusterHists.cxx: + +Program Listing for File ClusterHists.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ClusterHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/ClusterHists.h" + + #include + + ANA_MSG_SOURCE(msgClusterHists, "ClusterHists") + + ClusterHists :: ClusterHists (std::string name, std::string detailStr) : + HistogramManager(name, detailStr) + { + } + + ClusterHists :: ~ClusterHists () {} + + StatusCode ClusterHists::initialize() { + + // These plots are always made + m_ccl_n = book(m_name, "n", "cluster multiplicity", 80, 0, 800); + m_ccl_e = book(m_name, "e", "cluster e [GeV]", 100, -5, 15); + m_ccl_eta = book(m_name, "eta", "cluster #eta", 80, -4, 4); + m_ccl_phi = book(m_name, "phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi()); + + // 2D plots + m_ccl_eta_vs_phi = book(m_name, "eta_vs_phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi(), "cluster #eta", 80, -4, 4); + m_ccl_e_vs_eta = book(m_name, "e_vs_eta", "cluster #eta", 80, -4, 4, "cluster e [GeV]", 100, -5, 15); + m_ccl_e_vs_phi = book(m_name, "e_vs_phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi(), "cluster e [GeV]", 100, -5, 15); + + // if worker is passed to the class add histograms to the output + return StatusCode::SUCCESS; + } + + StatusCode ClusterHists::execute( const xAOD::CaloClusterContainer* ccls, float eventWeight ) { + using namespace msgClusterHists; + xAOD::CaloClusterContainer::const_iterator ccl_itr = ccls->begin(); + xAOD::CaloClusterContainer::const_iterator ccl_end = ccls->end(); + for( ; ccl_itr != ccl_end; ++ccl_itr ) { + ANA_CHECK( this->execute( (*ccl_itr), eventWeight )); + } + + m_ccl_n -> Fill( ccls->size(), eventWeight ); + + return StatusCode::SUCCESS; + } + + StatusCode ClusterHists::execute( const xAOD::CaloCluster* ccl, float eventWeight ) { + + //basic + float cclE = ccl->e()/1e3; + float cclEta = ccl->eta(); + float cclPhi = ccl->phi(); + + m_ccl_e -> Fill( cclE, eventWeight ); + m_ccl_eta -> Fill( cclEta, eventWeight ); + m_ccl_phi -> Fill( cclPhi, eventWeight ); + + // 2D plots + m_ccl_eta_vs_phi -> Fill( cclPhi, cclEta, eventWeight ); + m_ccl_e_vs_eta -> Fill( cclEta, cclE, eventWeight ); + m_ccl_e_vs_phi -> Fill( cclPhi, cclE, eventWeight ); + + return StatusCode::SUCCESS; + + } diff --git a/_sources/api/program_listing_file_Root_ClusterHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_ClusterHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..cb6e6ec33c --- /dev/null +++ b/_sources/api/program_listing_file_Root_ClusterHistsAlgo.cxx.rst.txt @@ -0,0 +1,98 @@ + +.. _program_listing_file_Root_ClusterHistsAlgo.cxx: + +Program Listing for File ClusterHistsAlgo.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ClusterHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + #include "AthContainers/ConstDataVector.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(ClusterHistsAlgo) + + ClusterHistsAlgo :: ClusterHistsAlgo () : + Algorithm("ClusterHistsAlgo") + { + } + + EL::StatusCode ClusterHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + + // let's initialize the algorithm to use the xAODRootAccess package + xAOD::Init("ClusterHistsAlgo").ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ClusterHistsAlgo :: histInitialize () + { + + ANA_MSG_INFO( m_name ); + ANA_CHECK( xAH::Algorithm::algInitialize()); + // needed here and not in initalize since this is called first + if( m_inContainerName.empty() || m_detailStr.empty() ){ + ANA_MSG_ERROR( "One or more required configuration values are empty"); + return EL::StatusCode::FAILURE; + } + + + // declare class and add histograms to output + m_plots = new ClusterHists(m_name, m_detailStr); + ANA_CHECK( m_plots -> initialize()); + m_plots -> record( wk() ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ClusterHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode ClusterHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + + EL::StatusCode ClusterHistsAlgo :: initialize () + { + ANA_MSG_INFO( "ClusterHistsAlgo"); + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ClusterHistsAlgo :: execute () + { + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + + float eventWeight(1); + if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) { + eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" ); + } + + const xAOD::CaloClusterContainer* ccls(nullptr); + ANA_CHECK( HelperFunctions::retrieve(ccls, m_inContainerName, m_event, m_store, msg()) ); + + ANA_CHECK( m_plots->execute( ccls, eventWeight )); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ClusterHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode ClusterHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; } + EL::StatusCode ClusterHistsAlgo :: histFinalize () + { + // clean up memory + if(m_plots) delete m_plots; + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_DebugTool.cxx.rst.txt b/_sources/api/program_listing_file_Root_DebugTool.cxx.rst.txt new file mode 100644 index 0000000000..4622ff1126 --- /dev/null +++ b/_sources/api/program_listing_file_Root_DebugTool.cxx.rst.txt @@ -0,0 +1,146 @@ + +.. _program_listing_file_Root_DebugTool.cxx: + +Program Listing for File DebugTool.cxx +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/DebugTool.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /************************************ + * + * Debug tool + * + * J.Alison (john.alison@cern.ch) + * + ************************************/ + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + //#include "PATInterfaces/SystematicVariation.h" + //#include "PATInterfaces/SystematicRegistry.h" + //#include "PATInterfaces/SystematicCode.h" + + // package include(s): + //#include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/DebugTool.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + // external tools include(s): + + // ROOT include(s): + #include "TFile.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(DebugTool) + + + DebugTool :: DebugTool () : + Algorithm("DebugTool") + { + } + + EL::StatusCode DebugTool :: setupJob (EL::Job& job) + { + ANA_MSG_INFO( "Calling setupJob"); + job.useXAOD (); + xAOD::Init( "DebugTool" ).ignore(); // call before opening first file + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: histInitialize () + { + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: fileExecute () + { + ANA_MSG_INFO( "Calling fileExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: changeInput (bool /*firstFile*/) + { + ANA_MSG_INFO( "Calling changeInput"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: initialize () + { + ANA_MSG_INFO( " "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: execute () + { + ANA_MSG_INFO( m_name); + + // + // look what we have in TStore + // + if ( m_printStore ) { + m_store->print(); + } + + return EL::StatusCode::SUCCESS; + + } + + + EL::StatusCode DebugTool :: postExecute () + { + ANA_MSG_DEBUG("Calling postExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: finalize () + { + ANA_MSG_INFO( m_name ); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode DebugTool :: histFinalize () + { + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + + diff --git a/_sources/api/program_listing_file_Root_ElectronCalibrator.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..0ccf14e703 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronCalibrator.cxx.rst.txt @@ -0,0 +1,397 @@ + +.. _program_listing_file_Root_ElectronCalibrator.cxx: + +Program Listing for File ElectronCalibrator.cxx +=============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronCalibrator.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************* + * + * Interface to CP Electron calibration tool(s). + * + * The tool applies: + * + * -) scale corrections for DATA + * -) smearing corrections for MC + * (data VS. MC check is done by the CP tool internally) + * + * M. Milesi (marco.milesi@cern.ch) + * + *******************************************************/ + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/Electron.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/ElectronCalibrator.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(ElectronCalibrator) + + + ElectronCalibrator :: ElectronCalibrator () : + Algorithm("ElectronCalibrator") + { + } + + + EL::StatusCode ElectronCalibrator :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "ElectronCalibrator" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing ElectronCalibrator Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + // shallow copies are made with this output container name + m_outSCContainerName = m_outContainerName + "ShallowCopy"; + m_outSCAuxContainerName = m_outSCContainerName + "Aux."; // the period is very important! + + m_numEvent = 0; + m_numObject = 0; + + // initialize the CP::EgammaCalibrationAndSmearingTool + // + if ( asg::ToolStore::contains("EgammaCalibrationAndSmearingTool") ) { + m_EgammaCalibrationAndSmearingTool = asg::ToolStore::get("EgammaCalibrationAndSmearingTool"); + } else { + m_EgammaCalibrationAndSmearingTool = new CP::EgammaCalibrationAndSmearingTool("EgammaCalibrationAndSmearingTool"); + } + m_EgammaCalibrationAndSmearingTool->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("ESModel", m_esModel)); + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("decorrelationModel", m_decorrelationModel)); + + // + // For AFII samples + // + if ( isFastSim() ){ + ANA_MSG_INFO( "Setting simulation flavour to Fast Sim"); + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 1)); + } + else { + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 0)); + } + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->initialize()); + + // Get a list of recommended systematics for this tool + // + //const CP::SystematicSet recSyst = CP::SystematicSet(); + const CP::SystematicSet& recSyst = m_EgammaCalibrationAndSmearingTool->recommendedSystematics(); + + ANA_MSG_INFO(" Initializing Electron Calibrator Systematics :"); + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + + ANA_MSG_INFO("Will be using EgammaCalibrationAndSmearingTool systematic:"); + auto SystElectronsNames = std::make_unique< std::vector< std::string > >(); + for ( const auto& syst_it : m_systList ) { + if ( m_systName.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + SystElectronsNames->push_back(syst_it.name()); + ANA_MSG_INFO("\t " << syst_it.name()); + } + + ANA_CHECK(m_store->record(std::move(SystElectronsNames), "ele_Syst"+m_name )); + + // *********************************************************** + + // initialize the CP::IsolationCorrectionTool + // + if ( m_applyIsolationCorrection ) { + if ( asg::ToolStore::contains("IsolationCorrectionTool") ) { + m_IsolationCorrectionTool = asg::ToolStore::get("IsolationCorrectionTool"); + } else { + m_IsolationCorrectionTool = new CP::IsolationCorrectionTool("IsolationCorrectionTool"); + } + m_IsolationCorrectionTool->msg().setLevel( MSG::INFO ); // DEBUG, VERBOSE, INFO + ANA_CHECK( m_IsolationCorrectionTool->setProperty("IsMC", isMC() )); + ANA_CHECK( m_IsolationCorrectionTool->initialize()); + ANA_MSG_INFO( "Applying electron isolation correction" ); + } + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD); + } + + // *********************************************************** + + ANA_MSG_INFO( "ElectronCalibrator Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode ElectronCalibrator :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG("Applying Electron Calibration ... "); + + m_numEvent++; + + // get the collection from TEvent or TStore + // + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + const xAOD::ElectronContainer* inElectrons(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName, m_event, m_store, msg()) ); + + // loop over available systematics - remember syst == EMPTY_STRING --> baseline + // prepare a vector of the names of CDV containers + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + + // discard photon systematics + // + //if ( (syst_it.name()).find("PH_", 0) != std::string::npos ) { continue; } + + std::string outSCContainerName(m_outSCContainerName); + std::string outSCAuxContainerName(m_outSCAuxContainerName); + std::string outContainerName(m_outContainerName); + + // always append the name of the variation, including nominal which is an empty string + // + outSCContainerName += syst_it.name(); + outSCAuxContainerName += syst_it.name(); + outContainerName += syst_it.name(); + vecOutContainerNames->push_back( syst_it.name() ); + + // apply syst + // + if ( m_EgammaCalibrationAndSmearingTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure EgammaCalibrationAndSmearingTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + + // create shallow copy for calibration - one per syst + // + std::pair< xAOD::ElectronContainer*, xAOD::ShallowAuxContainer* > calibElectronsSC = xAOD::shallowCopyContainer( *inElectrons ); + + // create ConstDataVector to be eventually stored in TStore + // + ConstDataVector* calibElectronsCDV = new ConstDataVector(SG::VIEW_ELEMENTS); + calibElectronsCDV->reserve( calibElectronsSC.first->size() ); + + // now calibrate! + // + unsigned int idx(0); + for ( auto elSC_itr : *(calibElectronsSC.first) ) { + + // set smearing seeding if needed - no need for this after Base,2.1.26 + // m_EgammaCalibrationAndSmearingTool->setRandomSeed(eventInfo->eventNumber() + 100 * idx); + // + ANA_MSG_DEBUG("Checking electron "<pt() > 7e3 && !(elSC_itr->caloCluster()) ){ + ANA_MSG_DEBUG( "electron " << idx << ", raw pt = " << elSC_itr->pt() * 1e-3 << " GeV, does not have caloCluster()! " ); + } + + // apply calibration (w/ syst) and leakage correction to calo based iso vars + // + if ( elSC_itr->caloCluster() && elSC_itr->trackParticle() ) { // NB: derivations might remove CC and tracks for low pt electrons + if ( m_EgammaCalibrationAndSmearingTool->applyCorrection( *elSC_itr ) != CP::CorrectionCode::Ok ) { + ANA_MSG_WARNING( "Problem in CP::EgammaCalibrationAndSmearingTool::applyCorrection()"); + } + + if ( m_applyIsolationCorrection ) { + if ( elSC_itr->pt() > 7e3 && m_IsolationCorrectionTool->CorrectLeakage( *elSC_itr ) != CP::CorrectionCode::Ok ) { + ANA_MSG_WARNING( "Problem in CP::IsolationCorrectionTool::CorrectLeakage()"); + } + } + } + + ANA_MSG_DEBUG( "Calibrated pt with systematic: " << syst_it.name() <<" , pt = " << elSC_itr->pt() * 1e-3 << " GeV"); + + ++idx; + + } // close calibration loop + + if ( !xAOD::setOriginalObjectLink(*inElectrons, *(calibElectronsSC.first)) ) { + ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed."); + } + + // save pointers in ConstDataVector with same order + // + ANA_CHECK( HelperFunctions::makeSubsetCont(calibElectronsSC.first, calibElectronsCDV, msg())); + + // Sort after copying to CDV. + if ( m_sort ) { + std::sort( calibElectronsCDV->begin(), calibElectronsCDV->end(), HelperFunctions::sort_pt ); + } + + // add SC container to TStore + // + ANA_CHECK( m_store->record( calibElectronsSC.first, outSCContainerName )); + ANA_CHECK( m_store->record( calibElectronsSC.second, outSCAuxContainerName )); + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( calibElectronsCDV, outContainerName)); + + } // close loop on systematics + + // add vector to TStore + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + // look what we have in TStore + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ElectronCalibrator :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( m_EgammaCalibrationAndSmearingTool ) { delete m_EgammaCalibrationAndSmearingTool; m_EgammaCalibrationAndSmearingTool = nullptr; } + if ( m_IsolationCorrectionTool ) { delete m_IsolationCorrectionTool; m_IsolationCorrectionTool = nullptr; } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronCalibrator :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_ElectronContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronContainer.cxx.rst.txt new file mode 100644 index 0000000000..fc8b9b19ab --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronContainer.cxx.rst.txt @@ -0,0 +1,1005 @@ + +.. _program_listing_file_Root_ElectronContainer.cxx: + +Program Listing for File ElectronContainer.cxx +============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/ElectronContainer.h" + + #include + + using namespace xAH; + using std::vector; + using std::string; + + ElectronContainer::ElectronContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs) + : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs) + { + + if ( m_infoSwitch.m_kinematic ) { + m_caloCluster_eta = new std::vector (); + m_charge = new std::vector (); + } + + if ( m_infoSwitch.m_trigger ){ + m_isTrigMatched = new std::vector (); + m_isTrigMatchedToChain = new std::vector > (); + m_listTrigChains = new std::vector > (); + } + + if ( m_infoSwitch.m_isolation ) { + m_isIsolated = new std::map< std::string, std::vector< int >* >(); + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + (*m_isIsolated)[ isol ] = new std::vector; + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20 = new std::vector (); + m_neflowisol20 = new std::vector (); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 = new std::vector (); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 = new std::vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 = new std::vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 = new std::vector (); + } + if ( m_infoSwitch.m_closeByCorr ) { + m_topoetcone20_CloseByCorr = new std::vector (); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr = new std::vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr = new std::vector (); + } + + if ( m_infoSwitch.m_PID ) { + m_PID = new std::map< std::string, std::vector< int >* >(); + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + (*m_PID)[ PID ] = new std::vector; + } + } + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + m_TrigEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_TrigMCEff = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_PIDEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_IsoEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + (*m_PIDEff_SF) [ PID ] = new std::vector< std::vector< float > >; + for (auto& iso : m_infoSwitch.m_isolWPs) { + if(!iso.empty()) + (*m_IsoEff_SF) [ PID+iso ] = new std::vector< std::vector< float > >; + for (auto& trig : m_infoSwitch.m_trigWPs) { + (*m_TrigEff_SF)[ trig+PID+iso ] = new std::vector< std::vector< float > >; + (*m_TrigMCEff )[ trig+PID+iso ] = new std::vector< std::vector< float > >; + } + } + } + + + m_RecoEff_SF = new std::vector< std::vector< float > > (); + } + + if ( m_infoSwitch.m_recoparams ) { + m_author = new std::vector (); + m_OQ = new std::vector (); + } + + if ( m_infoSwitch.m_trackparams ) { + m_trkd0 = new std::vector (); + m_trkd0sig = new std::vector (); + m_trkz0 = new std::vector (); + m_trkz0sintheta = new std::vector (); + m_trkphi0 = new std::vector (); + m_trktheta = new std::vector (); + m_trkcharge = new std::vector (); + m_trkqOverP = new std::vector (); + } + + if ( m_infoSwitch.m_trackhitcont ) { + m_trknSiHits = new std::vector (); + m_trknPixHits = new std::vector (); + m_trknPixHoles = new std::vector (); + m_trknSCTHits = new std::vector (); + m_trknSCTHoles = new std::vector (); + m_trknTRTHits = new std::vector (); + m_trknTRTHoles = new std::vector (); + m_trknBLayerHits = new std::vector (); + m_trknInnermostPixLayHits = new std::vector (); + m_trkPixdEdX = new std::vector (); + } + + if ( m_infoSwitch.m_promptlepton ) { + m_PromptLeptonInput_DL1mu = new std::vector (); + m_PromptLeptonInput_DRlj = new std::vector (); + m_PromptLeptonInput_LepJetPtFrac = new std::vector (); + m_PromptLeptonInput_PtFrac = new std::vector (); + m_PromptLeptonInput_PtRel = new std::vector (); + m_PromptLeptonInput_TrackJetNTrack = new std::vector (); + m_PromptLeptonInput_ip2 = new std::vector (); + m_PromptLeptonInput_ip3 = new std::vector (); + m_PromptLeptonInput_rnnip = new std::vector (); + m_PromptLeptonInput_sv1_jf_ntrkv = new std::vector (); + m_PromptLeptonIso = new std::vector (); + m_PromptLeptonVeto = new std::vector (); + } + + + if ( m_infoSwitch.m_passSel ) { + m_passSel = new std::vector(); + } + if ( m_infoSwitch.m_passOR ) { + m_passOR = new std::vector(); + } + + if ( m_infoSwitch.m_doLRT ) { + m_isLRT = new std::vector(); + } + + } + + ElectronContainer::~ElectronContainer() + { + if ( m_infoSwitch.m_kinematic ) { + delete m_caloCluster_eta; + delete m_charge; + } + + if ( m_infoSwitch.m_trigger ){ + delete m_isTrigMatched ; + delete m_isTrigMatchedToChain; + delete m_listTrigChains ; + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + delete (*m_isIsolated)[ isol ]; + } + } + delete m_isIsolated; + } + + if ( m_infoSwitch.m_isolationKinematics ) { + delete m_topoetcone20 ; + delete m_neflowisol20 ; + delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ; + delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ; + } + if ( m_infoSwitch.m_closeByCorr ) { + delete m_topoetcone20_CloseByCorr ; + delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ; + } + + if ( m_infoSwitch.m_PID ) { + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + delete (*m_PID)[ PID ]; + } + } + delete m_PID; + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + delete (*m_PIDEff_SF) [ PID ]; + for (auto& iso : m_infoSwitch.m_isolWPs) { + if(!iso.empty()) + delete (*m_IsoEff_SF) [ PID+iso ]; + for (auto& trig : m_infoSwitch.m_trigWPs) { + delete (*m_TrigEff_SF)[ trig+PID+iso ]; + delete (*m_TrigMCEff )[ trig+PID+iso ]; + } + } + } + delete m_TrigEff_SF ; + delete m_TrigMCEff ; + delete m_PIDEff_SF ; + delete m_IsoEff_SF ; + delete m_RecoEff_SF ; + } + + if ( m_infoSwitch.m_recoparams ) { + delete m_author ; + delete m_OQ ; + } + + if ( m_infoSwitch.m_trackparams ) { + delete m_trkd0 ; + delete m_trkd0sig ; + delete m_trkz0 ; + delete m_trkz0sintheta ; + delete m_trkphi0 ; + delete m_trktheta ; + delete m_trkcharge ; + delete m_trkqOverP ; + } + + if ( m_infoSwitch.m_trackhitcont ) { + delete m_trknSiHits ; + delete m_trknPixHits ; + delete m_trknPixHoles ; + delete m_trknSCTHits ; + delete m_trknSCTHoles ; + delete m_trknTRTHits ; + delete m_trknTRTHoles ; + delete m_trknBLayerHits ; + delete m_trknInnermostPixLayHits ; + delete m_trkPixdEdX ; + } + + if ( m_infoSwitch.m_promptlepton ) { + delete m_PromptLeptonInput_DL1mu ; + delete m_PromptLeptonInput_DRlj ; + delete m_PromptLeptonInput_LepJetPtFrac ; + delete m_PromptLeptonInput_PtFrac ; + delete m_PromptLeptonInput_PtRel ; + delete m_PromptLeptonInput_TrackJetNTrack ; + delete m_PromptLeptonInput_ip2 ; + delete m_PromptLeptonInput_ip3 ; + delete m_PromptLeptonInput_rnnip ; + delete m_PromptLeptonInput_sv1_jf_ntrkv ; + delete m_PromptLeptonIso ; + delete m_PromptLeptonVeto ; + } + + if ( m_infoSwitch.m_passSel ) { + delete m_passSel; + } + if ( m_infoSwitch.m_passOR ) { + delete m_passOR; + } + + if ( m_infoSwitch.m_doLRT ) { + delete m_isLRT; + } + + } + + void ElectronContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + if ( m_infoSwitch.m_kinematic ) { + connectBranch(tree,"caloCluster_eta", &m_caloCluster_eta); + connectBranch(tree,"charge", &m_charge); + } + + if ( m_infoSwitch.m_trigger ){ + connectBranch (tree,"isTrigMatched", &m_isTrigMatched); + connectBranch >(tree,"isTrigMatchedToChain", &m_isTrigMatchedToChain); + connectBranch > (tree,"listTrigChains", &m_listTrigChains); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + tree->SetBranchStatus ( (m_name + "_isIsolated_" + isol).c_str() , 1); + tree->SetBranchAddress( (m_name + "_isIsolated_" + isol).c_str() , & (*m_isIsolated)[ isol ] ); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + connectBranch(tree, "topoetcone20", &m_topoetcone20); + connectBranch(tree, "neflowisol20", &m_neflowisol20); + connectBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500", &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500); + connectBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000); + connectBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500); + connectBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000); + } + if ( m_infoSwitch.m_closeByCorr ) { + connectBranch(tree, "topoetcone20_CloseByCorr", &m_topoetcone20_CloseByCorr) ; + connectBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr", &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr) ; + connectBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr) ; + } + + if ( m_infoSwitch.m_PID ) { + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + tree->SetBranchStatus ( (m_name + "_" + PID).c_str() , 1); + tree->SetBranchAddress( (m_name + "_" + PID).c_str() , &(*m_PID)[ PID ] ); + } + } + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + tree->SetBranchStatus ( (m_name+"_PIDEff_SF_" + PID).c_str() , 1); + tree->SetBranchAddress( (m_name+"_PIDEff_SF_" + PID).c_str() , & (*m_PIDEff_SF)[ PID ] ); + + for (auto& isol : m_infoSwitch.m_isolWPs) { + if(!isol.empty()) { + tree->SetBranchStatus ( (m_name+"_IsoEff_SF_" + PID + "_isol" + isol).c_str() , 1); + tree->SetBranchAddress( (m_name+"_IsoEff_SF_" + PID + "_isol" + isol).c_str() , & (*m_IsoEff_SF)[ PID+isol ] ); + } + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->SetBranchStatus ( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , 1 ); + tree->SetBranchAddress( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , & (*m_TrigEff_SF)[ trig+PID+isol ] ); + + tree->SetBranchStatus ( (m_name+"_TrigMCEff_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , 1 ); + tree->SetBranchAddress( (m_name+"_TrigMCEff_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , & (*m_TrigMCEff) [ trig+PID+isol ] ); + } + } + } + + connectBranch >(tree, "RecoEff_SF" , &m_RecoEff_SF ); + } + + if ( m_infoSwitch.m_recoparams ) { + connectBranch(tree, "author", &m_author); + connectBranch(tree, "OQ", &m_OQ); + } + + if ( m_infoSwitch.m_trackparams ) { + connectBranch(tree, "trkd0", &m_trkd0); + connectBranch(tree, "trkd0sig", &m_trkd0sig); + connectBranch(tree, "trkz0", &m_trkz0); + connectBranch(tree, "trkz0sintheta", &m_trkz0sintheta); + connectBranch(tree, "trkphi0", &m_trkphi0); + connectBranch(tree, "trktheta", &m_trktheta); + connectBranch(tree, "trkcharge", &m_trkcharge); + connectBranch(tree, "trkqOverP", &m_trkqOverP); + } + + if ( m_infoSwitch.m_trackhitcont ) { + connectBranch(tree, "trknSiHits", &m_trknSiHits); + connectBranch(tree, "trknPixHits", &m_trknPixHits); + connectBranch(tree, "trknPixHoles", &m_trknPixHoles); + connectBranch(tree, "trknSCTHits", &m_trknSCTHits); + connectBranch(tree, "trknSCTHoles", &m_trknSCTHoles); + connectBranch(tree, "trknTRTHits", &m_trknTRTHits); + connectBranch(tree, "trknTRTHoles", &m_trknTRTHoles); + connectBranch(tree, "trknBLayerHits",&m_trknBLayerHits); + connectBranch(tree, "trknInnermostPixLayHits", &m_trknInnermostPixLayHits); + connectBranch(tree, "trkPixdEdX", &m_trkPixdEdX); + } + + if ( m_infoSwitch.m_promptlepton ) { + connectBranch(tree, "PromptLeptonInput_DL1mu", &m_PromptLeptonInput_DL1mu); + connectBranch(tree, "PromptLeptonInput_DRlj", &m_PromptLeptonInput_DRlj); + connectBranch(tree, "PromptLeptonInput_LepJetPtFrac", &m_PromptLeptonInput_LepJetPtFrac); + connectBranch(tree, "PromptLeptonInput_PtFrac", &m_PromptLeptonInput_PtFrac); + connectBranch(tree, "PromptLeptonInput_PtRel", &m_PromptLeptonInput_PtRel); + connectBranch (tree, "PromptLeptonInput_TrackJetNTrack", &m_PromptLeptonInput_TrackJetNTrack); + connectBranch(tree, "PromptLeptonInput_ip2", &m_PromptLeptonInput_ip2); + connectBranch(tree, "PromptLeptonInput_ip3", &m_PromptLeptonInput_ip3); + connectBranch(tree, "PromptLeptonInput_rnnip", &m_PromptLeptonInput_rnnip); + connectBranch (tree, "PromptLeptonInput_sv1_jf_ntrkv", &m_PromptLeptonInput_sv1_jf_ntrkv); + connectBranch(tree, "PromptLeptonIso", &m_PromptLeptonIso); + connectBranch(tree, "PromptLeptonVeto", &m_PromptLeptonVeto); + } + + if(m_infoSwitch.m_passSel) connectBranch(tree,"passSel",&m_passSel); + if(m_infoSwitch.m_passOR) connectBranch(tree,"passOR",&m_passOR); + + if(m_infoSwitch.m_doLRT) connectBranch(tree,"isLRT",&m_isLRT); + + } + + void ElectronContainer::updateParticle(uint idx, Electron& elec) + { + ParticleContainer::updateParticle(idx,elec); + + if ( m_infoSwitch.m_kinematic ) { + elec.caloCluster_eta = m_caloCluster_eta -> at(idx); + elec.charge = m_charge -> at(idx); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + elec.isTrigMatched = m_isTrigMatched ->at(idx); + elec.isTrigMatchedToChain = m_isTrigMatchedToChain ->at(idx); + elec.listTrigChains = m_listTrigChains ->at(idx); + } + + // isolation + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + elec.isIsolated[isol] = (*m_isIsolated)[ isol ]->at(idx); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + elec.topoetcone20 = m_topoetcone20 ->at(idx); + elec.neflowisol20 = m_neflowisol20 ->at(idx); + elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 = m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->at(idx); + elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 = m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ->at(idx); + elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->at(idx); + elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ->at(idx); + } + if ( m_infoSwitch.m_closeByCorr ) { + elec.topoetcone20_CloseByCorr = m_topoetcone20_CloseByCorr ->at(idx); + elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr = m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ->at(idx); + elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr = m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ->at(idx); + } + + // quality + if ( m_infoSwitch.m_PID ) { + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + elec.PID[PID] = (*m_PID)[ PID ]->at(idx); + } + } + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + elec.PIDEff_SF[ PID ] = (*m_PIDEff_SF) [ PID ]->at(idx); + for (auto& iso : m_infoSwitch.m_isolWPs) { + if(!iso.empty()) + elec.IsoEff_SF[ PID+iso ] = (*m_IsoEff_SF) [ PID+iso ]->at(idx); + for (auto& trig : m_infoSwitch.m_trigWPs) { + elec.TrigEff_SF[ trig+PID+iso ] = (*m_TrigEff_SF)[ trig+PID+iso ]->at(idx); + elec.TrigMCEff [ trig+PID+iso ] = (*m_TrigMCEff )[ trig+PID+iso ]->at(idx); + } + } + } + + elec.RecoEff_SF = m_RecoEff_SF ->at(idx); + + } + + // reco parameters + if ( m_infoSwitch.m_recoparams ) { + elec.author = m_author ->at(idx); + elec.OQ = m_OQ ->at(idx); + } + + // track parameters + if ( m_infoSwitch.m_trackparams ) { + elec.trkd0 = m_trkd0 ->at(idx); + elec.trkd0sig = m_trkd0sig ->at(idx); + elec.trkz0 = m_trkz0 ->at(idx); + elec.trkz0sintheta = m_trkz0sintheta ->at(idx); + elec.trkphi0 = m_trkphi0 ->at(idx); + elec.trktheta = m_trktheta ->at(idx); + elec.trkcharge = m_trkcharge ->at(idx); + elec.trkqOverP = m_trkqOverP ->at(idx); + } + + // track hit content + if ( m_infoSwitch.m_trackhitcont ) { + elec.trknSiHits = m_trknSiHits ->at(idx); + elec.trknPixHits = m_trknPixHits ->at(idx); + elec.trknPixHoles = m_trknPixHoles ->at(idx); + elec.trknSCTHits = m_trknSCTHits ->at(idx); + elec.trknSCTHoles = m_trknSCTHoles ->at(idx); + elec.trknTRTHits = m_trknTRTHits ->at(idx); + elec.trknTRTHoles = m_trknTRTHoles ->at(idx); + elec.trknBLayerHits = m_trknBLayerHits ->at(idx); + elec.trknInnermostPixLayHits = m_trknInnermostPixLayHits ->at(idx); // not available in DC14 + elec.trkPixdEdX = m_trkPixdEdX ->at(idx); // not available in DC14 + } + + // prompt lepton + if ( m_infoSwitch.m_promptlepton ) { + elec.PromptLeptonInput_DL1mu = m_PromptLeptonInput_DL1mu ->at(idx); + elec.PromptLeptonInput_DRlj = m_PromptLeptonInput_DRlj ->at(idx); + elec.PromptLeptonInput_LepJetPtFrac = m_PromptLeptonInput_LepJetPtFrac ->at(idx); + elec.PromptLeptonInput_PtFrac = m_PromptLeptonInput_PtFrac ->at(idx); + elec.PromptLeptonInput_PtRel = m_PromptLeptonInput_PtRel ->at(idx); + elec.PromptLeptonInput_TrackJetNTrack = m_PromptLeptonInput_TrackJetNTrack ->at(idx); + elec.PromptLeptonInput_ip2 = m_PromptLeptonInput_ip2 ->at(idx); + elec.PromptLeptonInput_ip3 = m_PromptLeptonInput_ip3 ->at(idx); + elec.PromptLeptonInput_rnnip = m_PromptLeptonInput_rnnip ->at(idx); + elec.PromptLeptonInput_sv1_jf_ntrkv = m_PromptLeptonInput_sv1_jf_ntrkv ->at(idx); + elec.PromptLeptonIso = m_PromptLeptonIso ->at(idx); + elec.PromptLeptonVeto = m_PromptLeptonVeto ->at(idx); + } + + if ( m_infoSwitch.m_passSel ) elec.passSel = m_passSel->at(idx); + if ( m_infoSwitch.m_passOR ) elec.passOR = m_passOR->at(idx); + + if ( m_infoSwitch.m_doLRT ) elec.isLRT = m_isLRT->at(idx); + + } + + + void ElectronContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + if ( m_infoSwitch.m_kinematic ) { + setBranch(tree,"caloCluster_eta", m_caloCluster_eta); + setBranch(tree,"charge", m_charge); + } + + if ( m_infoSwitch.m_trigger ){ + setBranch (tree,"isTrigMatched", m_isTrigMatched); + setBranch >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain); + setBranch > (tree,"listTrigChains", m_listTrigChains); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + setBranch(tree, "isIsolated_" + isol, (*m_isIsolated)[isol]); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + setBranch(tree, "topoetcone20", m_topoetcone20); + setBranch(tree, "neflowisol20", m_neflowisol20); + setBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500", m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500); + setBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000); + setBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500", m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500); + setBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000); + } + if ( m_infoSwitch.m_closeByCorr ) { + setBranch(tree, "topoetcone20_CloseByCorr", m_topoetcone20_CloseByCorr ); + setBranch(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr", m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ); + setBranch(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr", m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ); + } + + if ( m_infoSwitch.m_PID ) { + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + setBranch(tree, PID, (*m_PID)[PID]); + } + } + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + tree->Branch( (m_name+"_PIDEff_SF_" + PID).c_str() , (*m_PIDEff_SF)[ PID ] ); + for (auto& isol : m_infoSwitch.m_isolWPs) { + if(!isol.empty()) + tree->Branch( (m_name+"_IsoEff_SF_" + PID + "_isol" + isol).c_str() , (*m_IsoEff_SF)[ PID+isol ] ); + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->Branch( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , (*m_TrigEff_SF)[ trig+PID+isol ] ); + tree->Branch( (m_name+"_TrigMCEff_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , (*m_TrigMCEff) [ trig+PID+isol ] ); + } + } + } + + setBranch >(tree, "RecoEff_SF" , m_RecoEff_SF ); + } + + if ( m_infoSwitch.m_recoparams ) { + setBranch(tree, "author", m_author); + setBranch(tree, "OQ", m_OQ); + } + + if ( m_infoSwitch.m_trackparams ) { + setBranch(tree, "trkd0", m_trkd0); + setBranch(tree, "trkd0sig", m_trkd0sig); + setBranch(tree, "trkz0", m_trkz0); + setBranch(tree, "trkz0sintheta", m_trkz0sintheta); + setBranch(tree, "trkphi0", m_trkphi0); + setBranch(tree, "trktheta", m_trktheta); + setBranch(tree, "trkcharge", m_trkcharge); + setBranch(tree, "trkqOverP", m_trkqOverP); + } + + if ( m_infoSwitch.m_trackhitcont ) { + setBranch(tree, "trknSiHits", m_trknSiHits); + setBranch(tree, "trknPixHits", m_trknPixHits); + setBranch(tree, "trknPixHoles", m_trknPixHoles); + setBranch(tree, "trknSCTHits", m_trknSCTHits); + setBranch(tree, "trknSCTHoles", m_trknSCTHoles); + setBranch(tree, "trknTRTHits", m_trknTRTHits); + setBranch(tree, "trknTRTHoles", m_trknTRTHoles); + setBranch(tree, "trknBLayerHits",m_trknBLayerHits); + setBranch(tree, "trknInnermostPixLayHits", m_trknInnermostPixLayHits); + setBranch(tree, "trkPixdEdX", m_trkPixdEdX); + } + + if ( m_infoSwitch.m_promptlepton ) { + setBranch(tree, "PromptLeptonInput_DL1mu", m_PromptLeptonInput_DL1mu); + setBranch(tree, "PromptLeptonInput_DRlj", m_PromptLeptonInput_DRlj); + setBranch(tree, "PromptLeptonInput_LepJetPtFrac", m_PromptLeptonInput_LepJetPtFrac); + setBranch(tree, "PromptLeptonInput_PtFrac", m_PromptLeptonInput_PtFrac); + setBranch(tree, "PromptLeptonInput_PtRel", m_PromptLeptonInput_PtRel); + setBranch (tree, "PromptLeptonInput_TrackJetNTrack", m_PromptLeptonInput_TrackJetNTrack); + setBranch(tree, "PromptLeptonInput_ip2", m_PromptLeptonInput_ip2); + setBranch(tree, "PromptLeptonInput_ip3", m_PromptLeptonInput_ip3); + setBranch(tree, "PromptLeptonInput_rnnip", m_PromptLeptonInput_rnnip); + setBranch (tree, "PromptLeptonInput_sv1_jf_ntrkv", m_PromptLeptonInput_sv1_jf_ntrkv); + setBranch(tree, "PromptLeptonIso", m_PromptLeptonIso); + setBranch(tree, "PromptLeptonVeto", m_PromptLeptonVeto); + } + + if ( m_infoSwitch.m_passSel ) { + setBranch(tree,"passSel",m_passSel); + } + if ( m_infoSwitch.m_passOR ) { + setBranch(tree,"passOR",m_passOR); + } + + if ( m_infoSwitch.m_doLRT ) { + setBranch(tree,"isLRT",m_isLRT); + } + + return; + } + + + + void ElectronContainer::clear() + { + + ParticleContainer::clear(); + + if ( m_infoSwitch.m_kinematic ) { + m_caloCluster_eta ->clear(); + m_charge ->clear(); + } + + if ( m_infoSwitch.m_trigger ){ + m_isTrigMatched ->clear(); + m_isTrigMatchedToChain ->clear(); + m_listTrigChains ->clear(); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + (*m_isIsolated)[ isol ]->clear(); + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20 ->clear(); + m_neflowisol20 ->clear(); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->clear(); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ->clear(); + } + if ( m_infoSwitch.m_closeByCorr ) { + m_topoetcone20_CloseByCorr ->clear(); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ->clear(); + } + + if ( m_infoSwitch.m_PID ) { + for (auto& PID : m_infoSwitch.m_PIDWPs) { + (*m_PID)[ PID ]->clear(); + } + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + (*m_PIDEff_SF)[ PID ]->clear(); + for (auto& isol : m_infoSwitch.m_isolWPs) { + if(!isol.empty()) + (*m_IsoEff_SF)[ PID+isol ]->clear(); + for (auto& trig : m_infoSwitch.m_trigWPs) { + (*m_TrigEff_SF)[ trig+PID+isol ]->clear(); + (*m_TrigMCEff)[ trig+PID+isol ]->clear(); + } + } + } + + m_RecoEff_SF->clear(); + + } + + if ( m_infoSwitch.m_recoparams ) { + m_author -> clear(); + m_OQ -> clear(); + } + + if ( m_infoSwitch.m_trackparams ) { + m_trkd0 -> clear(); + m_trkd0sig -> clear(); + m_trkz0 -> clear(); + m_trkz0sintheta -> clear(); + m_trkphi0 -> clear(); + m_trktheta -> clear(); + m_trkcharge -> clear(); + m_trkqOverP -> clear(); + } + + if ( m_infoSwitch.m_trackhitcont ) { + m_trknSiHits -> clear(); + m_trknPixHits -> clear(); + m_trknPixHoles -> clear(); + m_trknSCTHits -> clear(); + m_trknSCTHoles -> clear(); + m_trknTRTHits -> clear(); + m_trknTRTHoles -> clear(); + m_trknBLayerHits -> clear(); + m_trknInnermostPixLayHits -> clear(); + m_trkPixdEdX -> clear(); + } + + if ( m_infoSwitch.m_promptlepton ) { + m_PromptLeptonInput_DL1mu -> clear(); + m_PromptLeptonInput_DRlj -> clear(); + m_PromptLeptonInput_LepJetPtFrac -> clear(); + m_PromptLeptonInput_PtFrac -> clear(); + m_PromptLeptonInput_PtRel -> clear(); + m_PromptLeptonInput_TrackJetNTrack -> clear(); + m_PromptLeptonInput_ip2 -> clear(); + m_PromptLeptonInput_ip3 -> clear(); + m_PromptLeptonInput_rnnip -> clear(); + m_PromptLeptonInput_sv1_jf_ntrkv -> clear(); + m_PromptLeptonIso -> clear(); + m_PromptLeptonVeto -> clear(); + } + + if ( m_infoSwitch.m_passSel ){ + m_passSel->clear(); + } + if ( m_infoSwitch.m_passOR ){ + m_passOR->clear(); + } + + if ( m_infoSwitch.m_doLRT ) { + m_isLRT->clear(); + } + + } + + + void ElectronContainer::FillElectron( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex ){ + return FillElectron(static_cast(elec), primaryVertex); + } + + void ElectronContainer::FillElectron( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex ) + { + + ParticleContainer::FillParticle(particle); + + const xAOD::Electron* elec=dynamic_cast(particle); + + const xAOD::TrackParticle* trk = elec->trackParticle(); + + if ( m_infoSwitch.m_kinematic ) { + float calo_eta = ( elec->caloCluster() ) ? elec->caloCluster()->etaBE(2) : -999.0; + m_caloCluster_eta->push_back( calo_eta ); + + m_charge->push_back( elec->charge() ); + } + + if ( m_infoSwitch.m_trigger ) { + + // retrieve map w/ + // + static SG::AuxElement::Accessor< std::map > isTrigMatchedMapElAcc("isTrigMatchedMapEl"); + + std::vector matches; + std::vector trigChains; + + if ( isTrigMatchedMapElAcc.isAvailable( *elec ) ) { + // loop over map and fill branches + // + for ( auto const &it : (isTrigMatchedMapElAcc( *elec )) ) { + matches.push_back( static_cast(it.second) ); + trigChains.push_back( static_cast(it.first) ); + } + } else { + matches.push_back( -1 ); + trigChains.push_back("NONE"); + } + + m_isTrigMatchedToChain->push_back(matches); + m_listTrigChains->push_back(trigChains); + + // if at least one match among the chains is found, say this electron is trigger matched + if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); } + else { m_isTrigMatched->push_back(0); } + + } + + if ( m_infoSwitch.m_isolation ) { + static std::map< std::string, SG::AuxElement::Accessor > accIsol; + + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + std::string isolWP = "isIsolated_" + isol; + accIsol.insert( std::pair > ( isol , SG::AuxElement::Accessor( isolWP ) ) ); + safeFill( elec, accIsol.at( isol ), m_isIsolated->at( isol ), -1 ); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20->push_back( elec->isolation( xAOD::Iso::topoetcone20 )/m_units ); + m_neflowisol20->push_back(m_infoSwitch.m_doLRT ? -1. : elec->isolation( xAOD::Iso::neflowisol20 )/m_units ); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->push_back( elec->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ) /m_units ); + m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ->push_back( elec->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 ) /m_units ); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->push_back( elec->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ) /m_units ); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000->push_back( elec->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 )/m_units ); + } + if ( m_infoSwitch.m_closeByCorr ) { + SG::AuxElement::Accessor acc_topoetcone20_CloseByCorr ("topoetcone20_CloseByCorr"); + SG::AuxElement::Accessor acc_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr"); + SG::AuxElement::Accessor acc_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr"); + safeFill(elec, acc_topoetcone20_CloseByCorr, m_topoetcone20_CloseByCorr, -1, m_units); + safeFill(elec, acc_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, -1, m_units); + safeFill(elec, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, -1, m_units); + } + + if ( m_infoSwitch.m_PID ) { + static std::map< std::string, SG::AuxElement::Accessor > accPID; + static SG::AuxElement::Accessor accBLayer( "bLayerPass" ); + + for (auto& PID : m_infoSwitch.m_PIDWPs) { + if (!PID.empty()) { + accPID.insert( std::pair > ( PID , SG::AuxElement::Accessor( PID ) ) ); + safeFill( elec, accPID.at( PID ), m_PID->at( PID ), -1 ); + } + } + } + + if ( m_infoSwitch.m_recoparams ) { + m_author -> push_back(elec->author()); + m_OQ -> push_back(elec->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON)); + } + + if ( m_infoSwitch.m_trackparams ) { + if ( trk ) { + + // + // NB.: + // All track parameters are calculated at the perigee, i.e., the point of closest approach to the origin of some r.f. (which in RunII is NOT the ATLAS detector r.f!). + // The reference frame is chosen to be a system centered in the beamspot position, with z axis parallel to the beam line. + // Remember that the beamspot size ( of O(10 micrometers) in the transverse plane) is << average vertex transverse position resolution ( O(60-80 micrometers) ) + // The coordinates of this r.f. wrt. the ATLAS system origin are returned by means of vx(), vy(), vz() + // + m_trkd0->push_back( trk->d0() ); + + static SG::AuxElement::Accessor d0SigAcc ("d0sig"); + float d0_significance = ( d0SigAcc.isAvailable( *elec ) ) ? d0SigAcc( *elec ) : -1.0; + m_trkd0sig->push_back( d0_significance ); + if (primaryVertex) + m_trkz0->push_back( trk->z0() - ( primaryVertex->z() - trk->vz() ) ); + else + m_trkz0->push_back( -999.0 ); + + + static SG::AuxElement::Accessor z0sinthetaAcc("z0sintheta"); + float z0sintheta = ( z0sinthetaAcc.isAvailable( *elec ) ) ? z0sinthetaAcc( *elec ) : -999.0; + + m_trkz0sintheta->push_back( z0sintheta ); + m_trkphi0->push_back( trk->phi0() ); + m_trktheta->push_back( trk->theta() ); + m_trkcharge->push_back( trk->charge() ); + m_trkqOverP->push_back( trk->qOverP() ); + + } else { + + m_trkd0->push_back( -999.0 ); + m_trkd0sig->push_back( -999.0 ); + m_trkz0->push_back( -999.0 ); + m_trkz0sintheta->push_back( -999.0 ); + m_trkphi0->push_back( -999.0 ); + m_trktheta->push_back( -999.0 ); + m_trkcharge->push_back( -999.0 ); + m_trkqOverP->push_back( -999.0 ); + } + } + + if ( m_infoSwitch.m_trackhitcont ) { + uint8_t nPixHits(-1), nPixHoles(-1), nSCTHits(-1), nSCTHoles(-1), nTRTHits(-1), nTRTHoles(-1), nBLayerHits(-1), nInnermostPixLayHits(-1); + float pixdEdX(-1.0); + if ( trk ) { + trk->summaryValue( nPixHits, xAOD::numberOfPixelHits ); + trk->summaryValue( nPixHoles, xAOD::numberOfPixelHoles ); + trk->summaryValue( nSCTHits, xAOD::numberOfSCTHits ); + trk->summaryValue( nSCTHoles, xAOD::numberOfSCTHoles ); + trk->summaryValue( nTRTHits, xAOD::numberOfTRTHits ); + trk->summaryValue( nTRTHoles, xAOD::numberOfTRTHoles ); + trk->summaryValue( nBLayerHits, xAOD::numberOfBLayerHits ); + trk->summaryValue( nInnermostPixLayHits, xAOD::numberOfInnermostPixelLayerHits ); + trk->summaryValue( pixdEdX, xAOD::pixeldEdx); + } + m_trknSiHits->push_back( nPixHits + nSCTHits ); + m_trknPixHits->push_back( nPixHits ); + m_trknPixHoles->push_back( nPixHoles ); + m_trknSCTHits->push_back( nSCTHits ); + m_trknSCTHoles->push_back( nSCTHoles ); + m_trknTRTHits->push_back( nTRTHits ); + m_trknTRTHoles->push_back( nTRTHoles ); + m_trknBLayerHits->push_back( nBLayerHits ); + m_trknInnermostPixLayHits->push_back( nInnermostPixLayHits ); + m_trkPixdEdX->push_back( pixdEdX ); + } + + if ( m_infoSwitch.m_promptlepton ) { + SG::AuxElement::ConstAccessor acc_DL1mu ("PromptLeptonInput_DL1mu"); + SG::AuxElement::ConstAccessor acc_DRlj ("PromptLeptonInput_DRlj"); + SG::AuxElement::ConstAccessor acc_LepJetPtFrac ("PromptLeptonInput_LepJetPtFrac"); + SG::AuxElement::ConstAccessor acc_PtFrac ("PromptLeptonInput_PtFrac"); + SG::AuxElement::ConstAccessor acc_PtRel ("PromptLeptonInput_PtRel"); + SG::AuxElement::ConstAccessor acc_TrackJetNTrack ("PromptLeptonInput_TrackJetNTrack"); + SG::AuxElement::ConstAccessor acc_ip2 ("PromptLeptonInput_ip2"); + SG::AuxElement::ConstAccessor acc_ip3 ("PromptLeptonInput_ip3"); + SG::AuxElement::ConstAccessor acc_rnnip ("PromptLeptonInput_rnnip"); + SG::AuxElement::ConstAccessor acc_sv1_jf_ntrkv ("PromptLeptonInput_sv1_jf_ntrkv"); + SG::AuxElement::ConstAccessor acc_Iso ("PromptLeptonIso"); + SG::AuxElement::ConstAccessor acc_Veto ("PromptLeptonVeto"); + + m_PromptLeptonInput_DL1mu ->push_back( acc_DL1mu .isAvailable(*elec) ? acc_DL1mu(*elec) : -100); + m_PromptLeptonInput_DRlj ->push_back( acc_DRlj .isAvailable(*elec) ? acc_DRlj(*elec) : -100); + m_PromptLeptonInput_LepJetPtFrac ->push_back( acc_LepJetPtFrac .isAvailable(*elec) ? acc_LepJetPtFrac(*elec) : -100); + m_PromptLeptonInput_PtFrac ->push_back( acc_PtFrac .isAvailable(*elec) ? acc_PtFrac(*elec) : -100); + m_PromptLeptonInput_PtRel ->push_back( acc_PtRel .isAvailable(*elec) ? acc_PtRel(*elec) : -100); + m_PromptLeptonInput_TrackJetNTrack ->push_back( acc_TrackJetNTrack .isAvailable(*elec) ? acc_TrackJetNTrack(*elec) : -100); + m_PromptLeptonInput_ip2 ->push_back( acc_ip2 .isAvailable(*elec) ? acc_ip2(*elec) : -100); + m_PromptLeptonInput_ip3 ->push_back( acc_ip3 .isAvailable(*elec) ? acc_ip3(*elec) : -100); + m_PromptLeptonInput_rnnip ->push_back( acc_rnnip .isAvailable(*elec) ? acc_rnnip(*elec) : -100); + m_PromptLeptonInput_sv1_jf_ntrkv ->push_back( acc_sv1_jf_ntrkv .isAvailable(*elec) ? acc_sv1_jf_ntrkv(*elec) : -100); + m_PromptLeptonIso ->push_back( acc_Iso .isAvailable(*elec) ? acc_Iso(*elec) : -100); + m_PromptLeptonVeto ->push_back( acc_Veto .isAvailable(*elec) ? acc_Veto(*elec) : -100); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + std::vector junkSF(1,-1.0); + std::vector junkEff(1,-1.0); + + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accPIDSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accIsoSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigEFF; + + for (auto& PID : m_infoSwitch.m_PIDSFWPs) { + std::string PIDSF = "ElPIDEff_SF_syst_" + PID; + accPIDSF.insert( std::pair > > ( PID , SG::AuxElement::Accessor< std::vector< float > >( PIDSF ) ) ); + safeSFVecFill( elec, accPIDSF.at( PID ), m_PIDEff_SF->at( PID ), junkSF ); + + for (auto& isol : m_infoSwitch.m_isolWPs) { + + if(!isol.empty()) { + std::string IsoSF = "ElIsoEff_SF_syst_" + PID + "_isol" + isol; + accIsoSF.insert( std::pair > > ( PID+isol , SG::AuxElement::Accessor< std::vector< float > >( IsoSF ) ) ); + safeSFVecFill( elec, accIsoSF.at( PID+isol ), m_IsoEff_SF->at( PID+isol ), junkSF ); + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + + std::string TrigSF = "ElTrigEff_SF_syst_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : ""); + accTrigSF.insert( std::pair > > ( trig+PID+isol , SG::AuxElement::Accessor< std::vector< float > >( TrigSF ) ) ); + safeSFVecFill( elec, accTrigSF.at( trig+PID+isol ), m_TrigEff_SF->at( trig+PID+isol ), junkSF ); + + std::string TrigEFF = "ElTrigMCEff_syst_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : ""); + accTrigEFF.insert( std::pair > > ( trig+PID+isol , SG::AuxElement::Accessor< std::vector< float > >( TrigEFF ) ) ); + safeSFVecFill( elec, accTrigEFF.at( trig+PID+isol ), m_TrigMCEff->at( trig+PID+isol ), junkSF ); + + } + + } + } + + static SG::AuxElement::Accessor< std::vector< float > > accRecoSF("ElRecoEff_SF_syst_Reconstruction"); + safeSFVecFill( elec, accRecoSF, m_RecoEff_SF, junkSF ); + } + + if ( m_infoSwitch.m_passSel ) { + static SG::AuxElement::Accessor accElectron_passSel( "passSel" ); + safeFill(elec, accElectron_passSel, m_passSel, -99); + } + if ( m_infoSwitch.m_passOR ) { + static SG::AuxElement::Accessor accElectron_passOR( "passOR" ); + safeFill(elec, accElectron_passOR, m_passOR, -99); + } + + if ( m_infoSwitch.m_doLRT ){ + static SG::AuxElement::Accessor accElectron_isLRT( "isLRT" ); + safeFill(elec, accElectron_isLRT, m_isLRT, -1); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..ad4cfe7440 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,1002 @@ + +.. _program_listing_file_Root_ElectronEfficiencyCorrector.cxx: + +Program Listing for File ElectronEfficiencyCorrector.cxx +======================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronEfficiencyCorrector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/ElectronAuxContainer.h" + #include "xAODEgamma/Electron.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/ElectronEfficiencyCorrector.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(ElectronEfficiencyCorrector) + + + ElectronEfficiencyCorrector :: ElectronEfficiencyCorrector () : + Algorithm("ElectronEfficiencyCorrector") + { + } + + + EL::StatusCode ElectronEfficiencyCorrector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "ElectronEfficiencyCorrector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing ElectronEfficiencyCorrector Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + + m_numEvent = 0; + m_numObject = 0; + + + // ******************************************************* + + int sim_flav(1); // default for FullSim + if ( isFastSim() ) { + ANA_MSG_INFO( "Setting simulation flavour to AFII"); + sim_flav = 3; + } + + // 1. + // initialize the AsgElectronEfficiencyCorrectionTool for PID efficiency SF + // + if ( !m_WorkingPointPID.empty() ) { + + ANA_MSG_INFO("Electron ID working point: " << m_WorkingPointPID); + + m_pidEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_PID_" + m_WorkingPointPID; + + ANA_CHECK( checkToolStore(m_pidEffSF_tool_name)); + + if ( asg::ToolStore::contains(m_pidEffSF_tool_name) ) { + m_asgElEffCorrTool_elSF_PID = asg::ToolStore::get(m_pidEffSF_tool_name); + } else { + m_asgElEffCorrTool_elSF_PID = new AsgElectronEfficiencyCorrectionTool(m_pidEffSF_tool_name); + m_asgElEffCorrTool_elSF_PID->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + if ( !m_overrideMapFilePath.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath ); + ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("MapFilePath", m_overrideMapFilePath)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("ForceDataType",sim_flav)); + ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("IdKey", m_WorkingPointPID)); + ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("CorrelationModel",m_correlationModel)); + ANA_CHECK( m_asgElEffCorrTool_elSF_PID->initialize()); + } + + // Get a list of affecting systematics + // + CP::SystematicSet affectSystsPID = m_asgElEffCorrTool_elSF_PID->affectingSystematics(); + // + // Convert into a simple list + // + for ( const auto& syst_it : affectSystsPID ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by PID efficiency systematic: " << syst_it.name()); } + + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsPID = m_asgElEffCorrTool_elSF_PID->recommendedSystematics(); + m_systListPID = HelperFunctions::getListofSystematics( recSystsPID, m_systNamePID, m_systValPID, msg() ); + + ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool PID efficiency systematic:"); + for ( const auto& syst_it : m_systListPID ) { + if ( m_systNamePID.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + + // Add the chosen WP to the string labelling the vector decoration + m_outputSystNamesPID = m_outputSystNamesPID + "_" + m_WorkingPointPID; + + } + + // 2. + // initialize the AsgElectronEfficiencyCorrectionTool for isolation efficiency SF + // + if ( !m_WorkingPointPID.empty() && !m_WorkingPointIso.empty() ) { + + ANA_MSG_INFO("Electron isolation working point: " << m_WorkingPointIso); + + m_IsoEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_Iso_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso; + + ANA_CHECK( checkToolStore(m_IsoEffSF_tool_name)); + + if ( asg::ToolStore::contains(m_IsoEffSF_tool_name) ) { + m_asgElEffCorrTool_elSF_Iso = asg::ToolStore::get(m_IsoEffSF_tool_name); + } else { + m_asgElEffCorrTool_elSF_Iso = new AsgElectronEfficiencyCorrectionTool(m_IsoEffSF_tool_name); + m_asgElEffCorrTool_elSF_Iso->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + if ( !m_overrideMapFilePath.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath ); + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("MapFilePath", m_overrideMapFilePath)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("ForceDataType",sim_flav)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("IdKey", m_WorkingPointPID)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("IsoKey", m_WorkingPointIso)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("CorrelationModel",m_correlationModel)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->initialize()); + } + + + // Get a list of affecting systematics + // + CP::SystematicSet affectSystsIso = m_asgElEffCorrTool_elSF_Iso->affectingSystematics(); + // + // Convert into a simple list + // + for ( const auto& syst_it : affectSystsIso ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by Iso efficiency systematic: " << syst_it.name()); } + + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsIso = m_asgElEffCorrTool_elSF_Iso->recommendedSystematics(); + m_systListIso = HelperFunctions::getListofSystematics( recSystsIso, m_systNameIso, m_systValIso, msg() ); + + ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool Iso efficiency systematic:"); + for ( const auto& syst_it : m_systListIso ) { + if ( m_systNameIso.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + + // Add the chosen WP to the string labelling the vector decoration + m_outputSystNamesIso = m_outputSystNamesIso + "_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso; + + } + + // 3. + // initialize the AsgElectronEfficiencyCorrectionTool for Reco Efficiency SF + // + if ( !m_WorkingPointReco.empty() ) { + + ANA_MSG_INFO("Electron reconstruction working point: " << m_WorkingPointReco); + + m_RecoEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_" + m_WorkingPointReco; + + ANA_CHECK( checkToolStore(m_RecoEffSF_tool_name)); + + if ( asg::ToolStore::contains(m_RecoEffSF_tool_name) ) { + m_asgElEffCorrTool_elSF_Reco = asg::ToolStore::get(m_RecoEffSF_tool_name); + } else { + m_asgElEffCorrTool_elSF_Reco = new AsgElectronEfficiencyCorrectionTool(m_RecoEffSF_tool_name); + m_asgElEffCorrTool_elSF_Reco->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + if ( !m_overrideMapFilePath.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath ); + ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("MapFilePath", m_overrideMapFilePath)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("ForceDataType",sim_flav)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("RecoKey", m_WorkingPointReco)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("CorrelationModel",m_correlationModel)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->initialize()); + } + + + // Get a list of affecting systematics + // + CP::SystematicSet affectSystsReco = m_asgElEffCorrTool_elSF_Reco->affectingSystematics(); + // + // Convert into a simple list + // + for ( const auto& syst_it : affectSystsReco ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by reco efficiency systematic: " << syst_it.name()); } + + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsReco = m_asgElEffCorrTool_elSF_Reco->recommendedSystematics(); + m_systListReco = HelperFunctions::getListofSystematics( recSystsReco, m_systNameReco, m_systValReco, msg() ); + + ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool reco efficiency systematic:"); + for ( const auto& syst_it : m_systListReco ) { + if ( m_systNameReco.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + + // Add the chosen WP to the string labelling the vector decoration + m_outputSystNamesReco = m_outputSystNamesReco + "_" + m_WorkingPointReco; + + } + + // 4. + // Initialise the AsgElectronEfficiencyCorrectionTool for Trigger Efficiency SF and Trigger Efficiencies + // + if ( !m_WorkingPointPID.empty() && !m_WorkingPointTrig.empty() ) { + + ANA_MSG_INFO("Electron trigger working point: " << m_WorkingPointTrig); + + m_TrigEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_Trig_" + m_WorkingPointTrig + "_" + m_WorkingPointPID; + if ( !m_WorkingPointIso.empty() ) { + m_TrigEffSF_tool_name += ( "_isol" + m_WorkingPointIso ); + } + m_TrigMCEff_tool_name = "ElectronEfficiencyCorrectionTool_effSF_TrigMCEff_" + m_WorkingPointTrig + "_" + m_WorkingPointPID; + if ( !m_WorkingPointIso.empty() ) { + m_TrigMCEff_tool_name += ( "_isol" + m_WorkingPointIso ); + } + + ANA_CHECK( checkToolStore(m_TrigEffSF_tool_name)); + ANA_CHECK( checkToolStore(m_TrigMCEff_tool_name)); + + if ( asg::ToolStore::contains(m_TrigEffSF_tool_name) ) { + m_asgElEffCorrTool_elSF_Trig = asg::ToolStore::get(m_TrigEffSF_tool_name); + } else { + m_asgElEffCorrTool_elSF_Trig = new AsgElectronEfficiencyCorrectionTool(m_TrigEffSF_tool_name); + m_asgElEffCorrTool_elSF_Trig->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + if ( !m_overrideMapFilePathTrig.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath for trigger SF only to " << m_overrideMapFilePathTrig ); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("MapFilePath", m_overrideMapFilePathTrig)); + } else if ( !m_overrideMapFilePath.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath ); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("MapFilePath", m_overrideMapFilePath)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("ForceDataType",sim_flav)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("IdKey", m_WorkingPointPID)); + if (!m_WorkingPointIso.empty()) { + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("IsoKey", m_WorkingPointIso)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("TriggerKey", m_WorkingPointTrig)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("CorrelationModel",m_correlationModel)); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("OutputLevel",msg().level())); + ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->initialize()); + } + + if ( asg::ToolStore::contains(m_TrigMCEff_tool_name) ) { + m_asgElEffCorrTool_elSF_TrigMCEff= asg::ToolStore::get(m_TrigMCEff_tool_name); + } else { + m_asgElEffCorrTool_elSF_TrigMCEff = new AsgElectronEfficiencyCorrectionTool(m_TrigMCEff_tool_name); + m_asgElEffCorrTool_elSF_TrigMCEff->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO + if ( !m_overrideMapFilePathTrig.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath for trigger SF only to " << m_overrideMapFilePathTrig ); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("MapFilePath", m_overrideMapFilePathTrig)); + } else if ( !m_overrideMapFilePath.empty() ) { + ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath ); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("MapFilePath", m_overrideMapFilePath)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("ForceDataType",sim_flav)); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("IdKey", m_WorkingPointPID)); + if (!m_WorkingPointIso.empty()) { + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("IsoKey", m_WorkingPointIso)); + } + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("TriggerKey", "Eff_" + m_WorkingPointTrig)); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("CorrelationModel",m_correlationModel)); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("OutputLevel",msg().level())); + ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->initialize()); + } + + // Get a list of affecting systematics + // + CP::SystematicSet affectSystsTrig = m_asgElEffCorrTool_elSF_Trig->affectingSystematics(); + // + // Convert into a simple list + // + for ( const auto& syst_it : affectSystsTrig ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by Trig efficiency SF systematic: " << syst_it.name()); } + + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsTrig = m_asgElEffCorrTool_elSF_Trig->recommendedSystematics(); + m_systListTrig = HelperFunctions::getListofSystematics( recSystsTrig, m_systNameTrig, m_systValTrig, msg() ); + + ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool Trig efficiency SF systematic:"); + for ( const auto& syst_it : m_systListTrig ) { + if ( m_systNameTrig.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + + // Add the chosen WP to the string labelling the vector decoration + // + m_outputSystNamesTrig = m_outputSystNamesTrig + "_" + m_WorkingPointTrig + "_" + m_WorkingPointPID; + if ( !m_WorkingPointIso.empty() ) { + m_outputSystNamesTrig += ( "_isol" + m_WorkingPointIso ); + } + + } + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systListPID, m_outputSystNamesPID, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListIso, m_outputSystNamesIso, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListReco, m_outputSystNamesReco, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListTrig, m_outputSystNamesTrig, fileMD); + } + + // ********************************************************************************* + + ANA_MSG_INFO( "ElectronEfficiencyCorrector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode ElectronEfficiencyCorrector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + m_numEvent++; + + if ( !isMC() ) { + if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Electron Efficiency correction... "); } + return EL::StatusCode::SUCCESS; + } + + ANA_MSG_DEBUG( "Applying Electron Efficiency Correction... "); + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // if m_inputSystNamesElectrons = "" --> input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + std::vector* systNames_ptr(nullptr); + if ( !m_inputSystNamesElectrons.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesElectrons, 0, m_store, msg()) ); + + std::vector systNames{""}; + if(systNames_ptr) systNames = *systNames_ptr; + + // Declare a write status set to true + // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!) + bool writeSystNames(true); + + // loop over systematic sets available + for ( auto systName : systNames ) { + + const xAOD::ElectronContainer* inputElectrons(nullptr); + + // some systematics might have rejected the event + if ( m_store->contains( m_inContainerName+systName ) ) { + + // retrieve input electrons + ANA_CHECK( HelperFunctions::retrieve(inputElectrons, m_inContainerName+systName, m_event, m_store, msg()) ); + + ANA_MSG_DEBUG( "Number of electrons: " << static_cast(inputElectrons->size()) ); + ANA_MSG_DEBUG( "Input syst: " << systName ); + unsigned int idx(0); + for ( auto el : *(inputElectrons) ) { + ANA_MSG_DEBUG( "Input electron " << idx << ", pt = " << el->pt() * 1e-3 << " GeV " ); + ++idx; + } + + // decorate electrons w/ SF - there will be a decoration w/ different name for each syst! + ANA_CHECK( this->executeSF( inputElectrons, systName.empty(), writeSystNames ) ); + + writeSystNames = false; + + } // check existence of container + + } // close loop on systematic sets available from upstream algo + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode ElectronEfficiencyCorrector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( !asg::ToolStore::contains(m_pidEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_PID; + if ( !asg::ToolStore::contains(m_IsoEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_Iso; + if ( !asg::ToolStore::contains(m_RecoEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_Reco; + if ( !asg::ToolStore::contains(m_TrigEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_Trig; + if ( !asg::ToolStore::contains(m_TrigMCEff_tool_name) ) delete m_asgElEffCorrTool_elSF_TrigMCEff; + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronEfficiencyCorrector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ElectronEfficiencyCorrector :: executeSF ( const xAOD::ElectronContainer* inputElectrons, bool nominal, bool writeSystNames ) + { + + // In the following, every electron gets decorated with several vector's (for various SFs), + // + // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF). + // + // Additionally, we create these vector with the SF syst names, so that we know which component corresponds to. + // ( there's a 1:1 correspondence with the vector's defined above ) + // + // These vector are eventually stored in TStore + // + std::unique_ptr< std::vector< std::string > > sysVariationNamesPID = nullptr; + std::unique_ptr< std::vector< std::string > > sysVariationNamesReco = nullptr; + std::unique_ptr< std::vector< std::string > > sysVariationNamesIso = nullptr; + std::unique_ptr< std::vector< std::string > > sysVariationNamesTrig = nullptr; + std::unique_ptr< std::vector< std::string > > sysVariationNamesTrigMCEff = nullptr; + + // 1. + // PID efficiency SFs - this is a per-ELECTRON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised + // + if ( !m_WorkingPointPID.empty() && !isToolAlreadyUsed(m_pidEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesPID = std::make_unique< std::vector< std::string > >(); + + // Create the names of the SF weights to be recorded + std::string sfName = "ElPIDEff_SF_syst_" + m_WorkingPointPID; + + for ( const auto& syst_it : m_systListPID ) { + + if ( !syst_it.name().empty() && !nominal ) continue; + + ANA_MSG_DEBUG("Electron PID efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name()); + if ( writeSystNames ) sysVariationNamesPID->push_back(syst_it.name()); + + // apply syst + // + if ( m_asgElEffCorrTool_elSF_PID->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_PID for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_PID->appliedSystematics().name() ); + + // and now apply PID efficiency SF! + // + unsigned int idx(0); + for ( auto el_itr : *(inputElectrons) ) { + + ANA_MSG_DEBUG( "Applying PID efficiency SF" ); + + // NB: derivations might remove CC and tracks for low pt electrons: add a safety check! + // + if ( !el_itr->caloCluster() ) { + ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info"); + continue; + } + + // + // obtain PID efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron) + // + SG::AuxElement::Decorator< std::vector > sfVecPID ( sfName ); + if ( !sfVecPID.isAvailable( *el_itr ) ) { + sfVecPID ( *el_itr ) = std::vector(); + } + + // + // obtain efficiency SF's for PID + // + double pidEffSF(-1.0); // tool wants a double + CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_PID->getEfficiencyScaleFactor( *el_itr, pidEffSF ); + if ( status == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "Problem in PID getEfficiencyScaleFactor Tool"); + return EL::StatusCode::FAILURE; + } else if ( status == CP::CorrectionCode::OutOfValidityRange ) { + ANA_MSG_DEBUG( "Electron of of PID efficiency validity range"); + } + // + // Add it to decoration vector + // + sfVecPID( *el_itr ).push_back( pidEffSF ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt()*1e-3 << " GeV "); + ANA_MSG_DEBUG( "PID SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "PID efficiency SF:"); + ANA_MSG_DEBUG( "\t " << pidEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close electron loop + + } // close loop on PID efficiency systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesPID ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesPID), m_outputSystNamesPID )); + } + + } + + // 2. + // Iso efficiency SFs - this is a per-ELECTRON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised + // + if ( !m_WorkingPointPID.empty() && !m_WorkingPointIso.empty() && !isToolAlreadyUsed(m_IsoEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesIso = std::make_unique< std::vector< std::string > >(); + + // Create the names of the SF weights to be recorded + std::string sfName = "ElIsoEff_SF_syst_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso; + + for ( const auto& syst_it : m_systListIso ) { + + if ( !syst_it.name().empty() && !nominal ) continue; + + ANA_MSG_DEBUG("Electron Iso efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name()); + if ( writeSystNames ) sysVariationNamesIso->push_back(syst_it.name()); + + // apply syst + // + if ( m_asgElEffCorrTool_elSF_Iso->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Iso for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Iso->appliedSystematics().name() ); + + // and now apply Iso efficiency SF! + // + unsigned int idx(0); + for ( auto el_itr : *(inputElectrons) ) { + + ANA_MSG_DEBUG( "Applying Iso efficiency SF" ); + + // NB: derivations might remove CC and tracks for low pt electrons: add a safety check! + // + if ( !el_itr->caloCluster() ) { + ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info"); + continue; + } + + // + // obtain Iso efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron) + // + SG::AuxElement::Decorator< std::vector > sfVecIso ( sfName ); + if ( !sfVecIso.isAvailable( *el_itr ) ) { + sfVecIso ( *el_itr ) = std::vector(); + } + + // + // obtain efficiency SF's for Iso + // + double IsoEffSF(-1.0); // tool wants a double + CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Iso->getEfficiencyScaleFactor( *el_itr, IsoEffSF ); + if ( status == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "Problem in Iso getEfficiencyScaleFactor Tool"); + return EL::StatusCode::FAILURE; + } else if ( status == CP::CorrectionCode::OutOfValidityRange ) { + ANA_MSG_DEBUG( "Electron of of Iso efficiency validity range"); + } + // + // Add it to decoration vector + // + sfVecIso( *el_itr ).push_back( IsoEffSF ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" ); + ANA_MSG_DEBUG( "Iso SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Iso efficiency SF:"); + ANA_MSG_DEBUG( "\t " << IsoEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close electron loop + + } // close loop on Iso efficiency systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesIso ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesIso), m_outputSystNamesIso )); + } + + } + + // 3. + // Reco efficiency SFs - this is a per-ELECTRON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised + // + if ( !m_WorkingPointReco.empty() && !isToolAlreadyUsed(m_RecoEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesReco = std::make_unique< std::vector< std::string > >(); + + // Create the names of the SF weights to be recorded + std::string sfName = "ElRecoEff_SF_syst_" + m_WorkingPointReco; + + for ( const auto& syst_it : m_systListReco ) { + + if ( !syst_it.name().empty() && !nominal ) continue; + + ANA_MSG_DEBUG("Electron Reco efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name()); + if ( writeSystNames ) sysVariationNamesReco->push_back(syst_it.name()); + + // apply syst + // + if ( m_asgElEffCorrTool_elSF_Reco->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Reco for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Reco->appliedSystematics().name() ); + + // and now apply Reco efficiency SF! + // + unsigned int idx(0); + for ( auto el_itr : *(inputElectrons) ) { + + ANA_MSG_DEBUG( "Applying Reco efficiency SF" ); + + // NB: derivations might remove CaloCluster for low pt electrons: add a safety check! + if ( !el_itr->caloCluster() ) { + ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info"); + continue; + } + + // + // obtain Reco efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron) + // + SG::AuxElement::Decorator< std::vector > sfVecReco ( sfName ); + if ( !sfVecReco.isAvailable( *el_itr ) ) { + sfVecReco ( *el_itr ) = std::vector(); + } + + // + // obtain efficiency SF's for Reco + // + double recoEffSF(-1.0); // tool wants a double + CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Reco->getEfficiencyScaleFactor( *el_itr, recoEffSF ); + if ( status == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "Problem in Reco getEfficiencyScaleFactor Tool"); + return EL::StatusCode::FAILURE; + } else if ( status == CP::CorrectionCode::OutOfValidityRange ) { + ANA_MSG_DEBUG( "Electron of of Reco efficiency validity range"); + } + // + // Add it to decoration vector + // + sfVecReco( *el_itr ).push_back( recoEffSF ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" ); + ANA_MSG_DEBUG( "Reco SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Reco efficiency SF:"); + ANA_MSG_DEBUG( "\t " << recoEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close electron loop + + } // close loop on Reco efficiency systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesReco ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesReco), m_outputSystNamesReco )); + } + + } + + // 4. + // Trig efficiency SFs (eff_data/eff_MC) - this is a per-ELECTRON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + // NB: calculation of the event SF is up to the analyzer + + // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised + // + + if ( !m_WorkingPointPID.empty() && !m_WorkingPointTrig.empty() && !isToolAlreadyUsed(m_TrigEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesTrig = std::make_unique< std::vector< std::string > >(); + + // Create the names of the SF weights to be recorded + std::string sfName = "ElTrigEff_SF_syst_" + m_WorkingPointTrig + "_" + m_WorkingPointPID; + if ( !m_WorkingPointIso.empty() ) { + sfName += ( "_isol" + m_WorkingPointIso ); + } + std::string effName = "ElTrigMCEff_syst_" + m_WorkingPointTrig + "_" + m_WorkingPointPID; + if ( !m_WorkingPointIso.empty() ) { + effName += ( "_isol" + m_WorkingPointIso ); + } + + for ( const auto& syst_it : m_systListTrig ) { + + if ( !syst_it.name().empty() && !nominal ) continue; + + ANA_MSG_DEBUG("Electron Trig efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name()); + if ( writeSystNames ) sysVariationNamesTrig->push_back(syst_it.name()); + + // apply syst + // + if ( m_asgElEffCorrTool_elSF_Trig->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Trig for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Trig->appliedSystematics().name() ); + + if ( m_asgElEffCorrTool_elSF_TrigMCEff->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_TrigMCEff for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_TrigMCEff->appliedSystematics().name() ); + + //------------------------------ + // Get trigger efficiency SF(s) + //------------------------------ + ANA_MSG_DEBUG( "Applying trigger efficiency SF and MC efficiency" ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Trigger efficiency SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Trigger MC efficiency decoration: " << effName ); + + // and now apply trigger efficiency SF! + // + unsigned int idx(0); + double totalIneff = 1; + double totalIneffScaled = 1; + for ( auto el_itr : *(inputElectrons) ) { + + ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" ); + + // NB: derivations might remove CaloCluster and tracks for low pt electrons: add a safety check! + if ( !el_itr->caloCluster() ) { + ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info"); + continue; + } + + // + // obtain Trigger efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron) + // + SG::AuxElement::Decorator< std::vector > sfVecTrig ( sfName ); + if ( !sfVecTrig.isAvailable( *el_itr ) ) { + sfVecTrig ( *el_itr ) = std::vector(); + } + + // + // obtain Trigger MC efficiency as a float (to be stored away separately) + // + // If efficiency decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron) + // + SG::AuxElement::Decorator< std::vector > effVecTrig ( effName ); + if ( !effVecTrig.isAvailable( *el_itr ) ) { + effVecTrig ( *el_itr ) = std::vector(); + } + + // + // obtain efficiency SF for Trig + // + double trigEffSF(-1.0); // tool wants a double + CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Trig->getEfficiencyScaleFactor( *el_itr, trigEffSF ); + if ( status == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "Problem in Trig getEfficiencyScaleFactor Tool"); + return EL::StatusCode::FAILURE; + } else if ( status == CP::CorrectionCode::OutOfValidityRange ) { + ANA_MSG_DEBUG( "Electron of of Trig efficiency validity range"); + } + if(m_usePerElectronTriggerSFs){ + // Add them to decoration vectors + sfVecTrig( *el_itr ).push_back( trigEffSF ); + ANA_MSG_DEBUG( "Trigger efficiency SF:"); + ANA_MSG_DEBUG( "\t " << trigEffSF << "(from getEfficiencyScaleFactor())" ); + } + + // + // obtain Trig MC efficiency + // + double trigMCEff(-1.0); // tool wants a double + CP::CorrectionCode::ErrorCode statusEff = m_asgElEffCorrTool_elSF_TrigMCEff->getEfficiencyScaleFactor( *el_itr, trigMCEff ); + if ( statusEff == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "Problem in TrigMCEff getEfficiencyScaleFactor Tool"); + return EL::StatusCode::FAILURE; + } else if ( statusEff == CP::CorrectionCode::OutOfValidityRange ) { + ANA_MSG_DEBUG( "Electron of of TrigMCEff efficiency validity range"); + } + // Add them to decoration vectors + effVecTrig( *el_itr ).push_back( trigMCEff ); + + ANA_MSG_DEBUG( "Trigger MC efficiency:"); + ANA_MSG_DEBUG( "\t " << trigMCEff << "(from getEfficiencyScaleFactor())" ); + + ANA_MSG_DEBUG( "--------------------------------------"); + + // Needed for global trigger efficiency SF + if(!m_usePerElectronTriggerSFs){ + totalIneff *= (1 - trigMCEff); + totalIneffScaled *= (1 - trigMCEff * trigEffSF); + } + + ++idx; + + } // close electron loop + + // obtain global trigger efficiency SF (using all electrons) + if(!m_usePerElectronTriggerSFs){ + double trigEffSF = (1 - totalIneffScaled) / (1 - totalIneff); + // Decorate electrons, all with the same global trigger SF + for ( auto el_itr : *(inputElectrons) ) { + SG::AuxElement::Decorator< std::vector > sfVecTrig ( sfName ); + if ( !sfVecTrig.isAvailable( *el_itr ) ) { + sfVecTrig ( *el_itr ) = std::vector(); + } + // Add them to decoration vectors + sfVecTrig( *el_itr ).push_back( trigEffSF); + } + } + + } // close loop on Trig efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesTrig ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesTrig), m_outputSystNamesTrig )); + } + + } + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_ElectronHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronHists.cxx.rst.txt new file mode 100644 index 0000000000..9b2de517d2 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronHists.cxx.rst.txt @@ -0,0 +1,197 @@ + +.. _program_listing_file_Root_ElectronHists.cxx: + +Program Listing for File ElectronHists.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + + #include "xAODAnaHelpers/HelperFunctions.h" + + ANA_MSG_SOURCE(msgElectronHists, "ElectronHists") + + ElectronHists :: ElectronHists (std::string name, std::string detailStr) : + IParticleHists(name, detailStr, "electron", "electron"), + m_infoSwitch(new HelperClasses::ElectronInfoSwitch(m_detailStr)) + { } + + ElectronHists :: ~ElectronHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + StatusCode ElectronHists::initialize() { + using namespace msgElectronHists; + ANA_CHECK( IParticleHists::initialize()); + + // isolation + if( m_infoSwitch->m_isolation ) { + if(m_debug) Info("ElectronHists::initialize()", "adding isolation plots"); + + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (isol.empty() && isol == "NONE") continue; + + m_isIsolated[isol] = book(m_name, "isIsolated_" + isol, "isIsolated_" + isol, 3, -1.5, 1.5); + } + + m_ptcone20 = book(m_name, "ptcone20", "ptcone20", 101, -0.2, 20); + m_ptcone30 = book(m_name, "ptcone30", "ptcone30", 101, -0.2, 20); + m_ptcone40 = book(m_name, "ptcone40", "ptcone40", 101, -0.2, 20); + m_ptvarcone20 = book(m_name, "ptvarcone20", "ptvarcone20", 101, -0.2, 20); + m_ptvarcone30 = book(m_name, "ptvarcone30", "ptvarcone30", 101, -0.2, 20); + m_ptvarcone40 = book(m_name, "ptvarcone40", "ptvarcone40", 101, -0.2, 20); + m_topoetcone20 = book(m_name, "topoetcone20", "topoetcone20", 101, -0.2, 20); + m_topoetcone30 = book(m_name, "topoetcone30", "topoetcone30", 101, -0.2, 20); + m_topoetcone40 = book(m_name, "topoetcone40", "topoetcone40", 101, -0.2, 20); + + m_ptcone20_rel = book(m_name, "ptcone20_rel", "ptcone20_rel", 110, -0.2, 2); + m_ptcone30_rel = book(m_name, "ptcone30_rel", "ptcone30_rel", 110, -0.2, 2); + m_ptcone40_rel = book(m_name, "ptcone40_rel", "ptcone40_rel", 110, -0.2, 2); + m_ptvarcone20_rel = book(m_name, "ptvarcone20_rel", "ptvarcone20_rel", 110, -0.2, 2); + m_ptvarcone30_rel = book(m_name, "ptvarcone30_rel", "ptvarcone30_rel", 110, -0.2, 2); + m_ptvarcone40_rel = book(m_name, "ptvarcone40_rel", "ptvarcone40_rel", 110, -0.2, 2); + m_topoetcone20_rel = book(m_name, "topoetcone20_rel", "topoetcone20_rel", 110, -0.2, 2); + m_topoetcone30_rel = book(m_name, "topoetcone30_rel", "topoetcone30_rel", 110, -0.2, 2); + m_topoetcone40_rel = book(m_name, "topoetcone40_rel", "topoetcone40_rel", 110, -0.2, 2); + } + + // PID + if (m_infoSwitch->m_PID || m_infoSwitch->m_quality) { + for (auto& PID : m_infoSwitch->m_PIDWPs) { + if (PID.empty()) continue; + + m_PID[PID] = book(m_name, PID, PID, 3, -1.5, 1.5); + } + } + + return StatusCode::SUCCESS; + } + + StatusCode ElectronHists::execute( const xAOD::Electron* electron, float eventWeight, const xAOD::EventInfo* eventInfo ) { + return execute(static_cast(electron), eventWeight, eventInfo); + } + + StatusCode ElectronHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgElectronHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo)); + + if(m_debug) std::cout << "ElectronHists: in execute " <(particle); + if(electron==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Electron" ); + return StatusCode::FAILURE; + } + + // isolation + if ( m_infoSwitch->m_isolation ) { + static std::map< std::string, SG::AuxElement::Accessor > accIsol; + + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + std::string isolWP = "isIsolated_" + isol; + accIsol.insert( std::pair > ( isol , SG::AuxElement::Accessor( isolWP ) ) ); + + if (accIsol.at(isol).isAvailable(*electron)) { + m_isIsolated[isol]->Fill(accIsol.at(isol)(*electron), eventWeight); + } else { + m_isIsolated[isol]->Fill(-1 , eventWeight); + } + } + } + + m_ptcone20 ->Fill( electron->isolation( xAOD::Iso::ptcone20 ) / 1e3, eventWeight ); + m_ptcone30 ->Fill( electron->isolation( xAOD::Iso::ptcone30 ) / 1e3, eventWeight ); + m_ptcone40 ->Fill( electron->isolation( xAOD::Iso::ptcone40 ) / 1e3, eventWeight ); + m_ptvarcone20 ->Fill( electron->isolation( xAOD::Iso::ptvarcone20 ) / 1e3, eventWeight ); + m_ptvarcone30 ->Fill( electron->isolation( xAOD::Iso::ptvarcone30 ) / 1e3, eventWeight ); + m_ptvarcone40 ->Fill( electron->isolation( xAOD::Iso::ptvarcone40 ) / 1e3, eventWeight ); + m_topoetcone20->Fill( electron->isolation( xAOD::Iso::topoetcone20) / 1e3, eventWeight ); + m_topoetcone30->Fill( electron->isolation( xAOD::Iso::topoetcone30) / 1e3, eventWeight ); + m_topoetcone40->Fill( electron->isolation( xAOD::Iso::topoetcone40) / 1e3, eventWeight ); + + float electronPt = electron->pt(); + m_ptcone20_rel ->Fill( electron->isolation( xAOD::Iso::ptcone20 ) / electronPt, eventWeight ); + m_ptcone30_rel ->Fill( electron->isolation( xAOD::Iso::ptcone30 ) / electronPt, eventWeight ); + m_ptcone40_rel ->Fill( electron->isolation( xAOD::Iso::ptcone40 ) / electronPt, eventWeight ); + m_ptvarcone20_rel ->Fill( electron->isolation( xAOD::Iso::ptvarcone20 ) / electronPt, eventWeight ); + m_ptvarcone30_rel ->Fill( electron->isolation( xAOD::Iso::ptvarcone30 ) / electronPt, eventWeight ); + m_ptvarcone40_rel ->Fill( electron->isolation( xAOD::Iso::ptvarcone40 ) / electronPt, eventWeight ); + m_topoetcone20_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone20 ) / electronPt, eventWeight ); + m_topoetcone30_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone30 ) / electronPt, eventWeight ); + m_topoetcone40_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone40 ) / electronPt, eventWeight ); + + } + + return StatusCode::SUCCESS; + } + + + + StatusCode ElectronHists::execute( const xAH::Electron* elec, float eventWeight, const xAH::EventInfo* eventInfo ) { + return execute(static_cast(elec), eventWeight, eventInfo); + } + + + StatusCode ElectronHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/ ) { + using namespace msgElectronHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight)); + + if(m_debug) std::cout << "ElectronHists: in execute " <(particle); + if(elec==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Electron" ); + return StatusCode::FAILURE; + } + + // isolation + if ( m_infoSwitch->m_isolation ) { + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (isol.empty() && isol == "NONE") continue; + + m_isIsolated[isol]->Fill(elec->isIsolated.at(isol), eventWeight); + } + + m_ptcone20 ->Fill( elec->ptcone20 , eventWeight ); + m_ptcone30 ->Fill( elec->ptcone30 , eventWeight ); + m_ptcone40 ->Fill( elec->ptcone40 , eventWeight ); + m_ptvarcone20 ->Fill( elec->ptvarcone20 , eventWeight ); + m_ptvarcone30 ->Fill( elec->ptvarcone30 , eventWeight ); + m_ptvarcone40 ->Fill( elec->ptvarcone40 , eventWeight ); + m_topoetcone20->Fill( elec->topoetcone20, eventWeight ); + m_topoetcone30->Fill( elec->topoetcone30, eventWeight ); + m_topoetcone40->Fill( elec->topoetcone40, eventWeight ); + + + float elecPt = elec->p4.Pt(); + m_ptcone20_rel ->Fill( elec->ptcone20/elecPt , eventWeight ); + m_ptcone30_rel ->Fill( elec->ptcone30/elecPt , eventWeight ); + m_ptcone40_rel ->Fill( elec->ptcone40/elecPt , eventWeight ); + m_ptvarcone20_rel ->Fill( elec->ptvarcone20 /elecPt , eventWeight ); + m_ptvarcone30_rel ->Fill( elec->ptvarcone30 /elecPt , eventWeight ); + m_ptvarcone40_rel ->Fill( elec->ptvarcone40 /elecPt , eventWeight ); + m_topoetcone20_rel ->Fill( elec->topoetcone20/elecPt , eventWeight ); + m_topoetcone30_rel ->Fill( elec->topoetcone30/elecPt , eventWeight ); + m_topoetcone40_rel ->Fill( elec->topoetcone40/elecPt , eventWeight ); + } + + + if ( m_infoSwitch->m_PID || m_infoSwitch->m_quality ) { + for (auto& PID : m_infoSwitch->m_PIDWPs) { + if (PID.empty()) continue; + + m_PID[PID]->Fill(elec->PID.at(PID), eventWeight); + } + } + + return StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_ElectronHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..888c5bc610 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronHistsAlgo.cxx.rst.txt @@ -0,0 +1,44 @@ + +.. _program_listing_file_Root_ElectronHistsAlgo.cxx: + +Program Listing for File ElectronHistsAlgo.cxx +============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + + #include + + #include + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(ElectronHistsAlgo) + + ElectronHistsAlgo :: ElectronHistsAlgo () : + IParticleHistsAlgo("ElectronHistsAlgo") + { } + + EL::StatusCode ElectronHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("ElectronHistsAlgo").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ElectronHistsAlgo::AddHists( std::string name ) { + return IParticleHistsAlgo::AddHists(name); + } + + EL::StatusCode ElectronHistsAlgo :: execute () { + return IParticleHistsAlgo::execute(); + } diff --git a/_sources/api/program_listing_file_Root_ElectronSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_ElectronSelector.cxx.rst.txt new file mode 100644 index 0000000000..74ca134ea3 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ElectronSelector.cxx.rst.txt @@ -0,0 +1,1241 @@ + +.. _program_listing_file_Root_ElectronSelector.cxx: + +Program Listing for File ElectronSelector.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ElectronSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/EgammaDefs.h" + #include "xAODTracking/VertexContainer.h" + #include "xAODTracking/TrackParticlexAODHelpers.h" + // #include "PATCore/TAccept.h" + + // package include(s): + #include "xAODAnaHelpers/ElectronSelector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + #include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h" + #include "ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h" + + // tools + #include "IsolationSelection/IsolationSelectionTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + #include "TriggerMatchingTool/MatchingTool.h" + #include "TriggerMatchingTool/MatchFromCompositeTool.h" + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(ElectronSelector) + + ElectronSelector :: ElectronSelector () : + Algorithm("ElectronSelector") + { + } + + ElectronSelector::~ElectronSelector() {} + + EL::StatusCode ElectronSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "ElectronSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + if ( this->numInstances() > 1 ) { // 1 for this instance + m_isUsedBefore = true; + ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_INFO( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing ElectronSelector Interface... "); + + // Let's see if the algorithm has been already used before: + // if yes, will write object cutflow in a different histogram! + // + // This is the case when the selector algorithm is used for + // preselecting objects, and then again for the final selection + // + ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className ); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_el_cutflowHist_1 = (TH1D*)file->Get("cutflow_electrons_1"); + + m_el_cutflow_all = m_el_cutflowHist_1->GetXaxis()->FindBin("all"); + m_el_cutflow_author_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("author_cut"); + m_el_cutflow_OQ_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("OQ_cut"); + m_el_cutflow_deadHVCell_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("deadHVCell_cut"); + m_el_cutflow_ptmax_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut"); + m_el_cutflow_ptmin_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut"); + m_el_cutflow_eta_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied + m_el_cutflow_z0sintheta_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("z0sintheta_cut"); + m_el_cutflow_d0_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("d0_cut"); + m_el_cutflow_d0sig_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("d0sig_cut"); + m_el_cutflow_BL_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("BL_cut"); + m_el_cutflow_PID_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("PID_cut"); + m_el_cutflow_iso_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("iso_cut"); + + if ( m_isUsedBefore ) { + m_el_cutflowHist_2 = (TH1D*)file->Get("cutflow_electrons_2"); + + m_el_cutflow_all = m_el_cutflowHist_2->GetXaxis()->FindBin("all"); + m_el_cutflow_author_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("author_cut"); + m_el_cutflow_OQ_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("OQ_cut"); + m_el_cutflow_deadHVCell_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("deadHVCell_cut"); + m_el_cutflow_ptmax_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("ptmax_cut"); + m_el_cutflow_ptmin_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("ptmin_cut"); + m_el_cutflow_eta_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied + m_el_cutflow_z0sintheta_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("z0sintheta_cut"); + m_el_cutflow_d0_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("d0_cut"); + m_el_cutflow_d0sig_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("d0sig_cut"); + m_el_cutflow_BL_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("BL_cut"); + m_el_cutflow_PID_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("PID_cut"); + m_el_cutflow_iso_cut = m_el_cutflowHist_2->GetXaxis()->FindBin("iso_cut"); + } + + } + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + + // Compatible with Efficiency Nomenclature + if( m_LHOperatingPoint == "LooseAndBLayer" ) + m_LHOperatingPoint = "LooseBL"; + + if ( m_LHOperatingPoint != "VeryLoose" && + m_LHOperatingPoint != "Loose" && + m_LHOperatingPoint != "LooseBL" && + m_LHOperatingPoint != "Medium" && + m_LHOperatingPoint != "Tight" && + m_LHOperatingPoint != "VeryLooseLLP" && m_LHOperatingPoint != "VeryLooseNoPix" && + m_LHOperatingPoint != "LooseLLP" && m_LHOperatingPoint != "LooseNoPix" && + m_LHOperatingPoint != "MediumLLP" && m_LHOperatingPoint != "MediumNoPix" && + m_LHOperatingPoint != "TightLLP" && m_LHOperatingPoint != "TightNoPix" ) { + ANA_MSG_ERROR( "Unknown electron likelihood PID requested " << m_LHOperatingPoint); + return EL::StatusCode::FAILURE; + } + if ( m_CutBasedOperatingPoint != "Loose" && + m_CutBasedOperatingPoint != "Medium" && + m_CutBasedOperatingPoint != "Tight" ) { + ANA_MSG_ERROR( "Unknown electron cut-based PID requested " << m_CutBasedOperatingPoint); + return EL::StatusCode::FAILURE; + } + + // Parse input isolation WP list, split by comma, and put into a vector for later use + // Make sure it's not empty! + // + if ( m_IsoWPList.empty() ) { + ANA_MSG_ERROR("Empty isolation WP list"); + } + std::string token; + std::istringstream ss(m_IsoWPList); + while ( std::getline(ss, token, ',') ) { + m_IsoKeys.push_back(token); + } + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + + + + + // **************************** + // + // Initialise Electron ID tools + // + // **************************** + + // Assume no local BLayer track quality cut unless doing LooseBL and reading decision from the derivation + m_doBLTrackQualityCut = false; + + // initialise PID tool(s) using classes defined in ParticlePIDManager.h + // + // if not using cut-based PID, make sure all the decorations will be set ... by choosing the loosest WP! + if( m_doCutBasedPID ){ + std::string cutbasedWP = ( m_doCutBasedPIDcut ) ? m_CutBasedOperatingPoint : "Loose"; + m_el_CutBased_PIDManager = new ElectronCutBasedPIDManager( cutbasedWP, msgLvl(MSG::DEBUG) ); + + if ( m_doCutBasedPIDcut ) { + ANA_MSG_INFO( "Cutting on Electron Cut-Based PID! \n ********************" ); + ANA_MSG_INFO( "Selected cut-based WP: " << m_el_CutBased_PIDManager->getSelectedWP() ); + } else { + ANA_MSG_INFO( "Will decorate each electron with all Electron Cut-Based PID WPs decision (pass/not pass)!" ); + } + + if ( m_readIDFlagsFromDerivation ) { + ANA_MSG_INFO( "Reading Electron cut-based ID from DAODs ..." ); + ANA_CHECK( m_el_CutBased_PIDManager->setupWPs( false )); + } else { + ANA_MSG_INFO( "Reading Electron cut-based ID from CP Tool ..." ); + ANA_CHECK( m_el_CutBased_PIDManager->setupWPs( true, this->m_name )); + } + }// if m_doCutBasedPID + + if( m_doLHPID ){ + // if not using LH PID, make sure all the decorations will be set ... by choosing the loosest WP! + std::string likelihoodWP = ( m_doLHPIDcut ) ? m_LHOperatingPoint : "VeryLoose"; + m_el_LH_PIDManager = new ElectronLHPIDManager( likelihoodWP, msgLvl(MSG::DEBUG) ); + + + if ( m_doLHPIDcut ) { + ANA_MSG_INFO( "Cutting on Electron Likelihood PID! \n ********************" ); + ANA_MSG_INFO( "\t Input WP: " << likelihoodWP << " corresponding to actual LikeEnum::Menu WP: " << m_el_LH_PIDManager->getSelectedWP() ); + } else { + ANA_MSG_INFO( "Will decorate each electron with all Electron Likelihood PID WPs decision (pass/not pass)!" ); + } + + if ( m_readIDFlagsFromDerivation ) { + ANA_MSG_INFO( "Reading Electron LH ID from DAODs ..." ); + ANA_CHECK( m_el_LH_PIDManager->setupWPs( false )); + } else { + ANA_MSG_INFO( "Reading Electron LH ID from CP Tool ..." ); + ANA_CHECK( m_el_LH_PIDManager->setupWPs( true, this->m_name)); + } + }// if m_doLHPID + + // ************************************* + // + // Initialise CP::IsolationSelectionTool + // + // ************************************* + + // Do this only for the first WP in the list + ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" ); + ANA_CHECK( m_isolationSelectionTool_handle.setProperty("ElectronWP", (m_IsoKeys.at(0)).c_str())); + ANA_CHECK( m_isolationSelectionTool_handle.setProperty("OutputLevel", msg().level())); + if (m_isoDecSuffix!="") ANA_CHECK ( m_isolationSelectionTool_handle.setProperty("IsoDecSuffix", m_isoDecSuffix) ); + ANA_CHECK( m_isolationSelectionTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_isolationSelectionTool_handle); + m_isolationSelectionTool = dynamic_cast(m_isolationSelectionTool_handle.get() ); // see header file for why + + // Add the remaining input WPs to the tool + // (start from 2nd element) + // + for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) { + + ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" ); + + if ( (*WP_itr).find("UserDefined") != std::string::npos ) { + + HelperClasses::EnumParser isoParser; + + std::vector< std::pair > myCuts; + myCuts.push_back(std::make_pair(isoParser.parseEnum(m_TrackBasedIsoType), m_TrackIsoEff.c_str() )); + myCuts.push_back(std::make_pair(isoParser.parseEnum(m_CaloBasedIsoType) , m_CaloIsoEff.c_str() )); + + CP::IsolationSelectionTool::IsoWPType iso_type(CP::IsolationSelectionTool::Efficiency); + if ( (*WP_itr).find("Cut") != std::string::npos ) { iso_type = CP::IsolationSelectionTool::Cut; } + + ANA_CHECK( m_isolationSelectionTool->addUserDefinedWP((*WP_itr).c_str(), xAOD::Type::Electron, myCuts, "", iso_type)); + + } else { + + ANA_CHECK( m_isolationSelectionTool->addElectronWP( (*WP_itr).c_str() )); + + } + } + + // *************************************** + // + // Initialise Trig::MatchingTool + // + // *************************************** + + // + // NB: need to retrieve the TrigDecisionTool from asg::ToolStore to configure the tool! + // do not initialise if there are no input trigger chains + if( !( m_singleElTrigChains.empty() && m_diElTrigChains.empty() ) ) { + + // grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + // in AB we need to explicitly retrieve this tool, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/R22TriggerAnalysis + ANA_CHECK( m_scoreTool.retrieve()); + + // Run3 got a new trigger navigation + if (m_useRun3navigation) { + m_trigElectronMatchTool_handle = asg::AnaToolHandle("Trig::R3MatchingTool/TrigR3MatchingTool"); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigElectronMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle); + } + // otherwise we have to configure the Run2-style navigation + else { + if( !isPHYS() ) { + m_trigElectronMatchTool_handle = asg::AnaToolHandle("Trig::MatchingTool/MatchingTool");; + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "OutputLevel", msg().level() )); + ANA_CHECK( m_trigElectronMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle); + } + else { // For DAOD_PHYS samples + m_trigElectronMatchTool_handle = asg::AnaToolHandle("Trig::MatchFromCompositeTool/MatchFromCompositeTool");; + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "OutputLevel", msg().level() )); + if (!m_trigInputPrefix.empty()){ + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "InputPrefix", m_trigInputPrefix )); + ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "RemapBrokenLinks", true) ); + } + ANA_CHECK( m_trigElectronMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle); + } + } + } else { + + m_doTrigMatch = false; + + ANA_MSG_WARNING("***********************************************************"); + ANA_MSG_WARNING( "Will not perform any electron trigger matching at this stage b/c :"); + ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore"); + ANA_MSG_WARNING("\t AND/OR"); + ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty"); + ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!"); + ANA_MSG_WARNING("***********************************************************"); + } + + // ********************************************************************************************** + + + // Set up the dead HV Removal Tool + if (m_applyDeadHVCellVeto) + m_deadHVTool.setTypeAndName("AsgDeadHVCellRemovalTool/deadHVTool"); + if (m_deadHVTool.retrieve().isFailure()){ + ANA_MSG_ERROR("Failed to retrieve DeadHVTool, aborting"); + return StatusCode::FAILURE; + } + else { + ANA_MSG_WARNING("Not applying veto of dead HV cells although it's recommended - please double check!"); + } + + + ANA_MSG_INFO( "ElectronSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode ElectronSelector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Electron Selection... "); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + // + float mcEvtWeight(1.0); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + + m_numEvent++; + + // QUESTION: why this must be done in execute(), and does not work in initialize()? + // + if ( m_numEvent == 1 && m_trigElectronMatchTool_handle.isInitialized() ) { + + // parse input electron trigger chain list, split by comma and fill vector + // + std::string singleel_trig; + std::istringstream ss_singleel_trig(m_singleElTrigChains); + + while ( std::getline(ss_singleel_trig, singleel_trig, ',') ) { + m_singleElTrigChainsList.push_back(singleel_trig); + } + + std::string diel_trig; + std::istringstream ss_diel_trig(m_diElTrigChains); + + while ( std::getline(ss_diel_trig, diel_trig, ',') ) { + m_diElTrigChainsList.push_back(diel_trig); + } + + ANA_MSG_INFO( "Input single electron trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_singleElTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + ANA_MSG_INFO( "Input di-electron trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_diElTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + } + + // did any collection pass the cuts? + // + bool eventPass(false); + bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal + const xAOD::ElectronContainer* inElectrons(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_inputAlgoSystNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName, m_event, m_store, msg()) ); + + // create output container (if requested) + ConstDataVector* selectedElectrons(nullptr); + if ( m_createSelectedContainer ) { selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected electrons, and return if event passes object selection + // + eventPass = executeSelection( inElectrons, mcEvtWeight, countPass, selectedElectrons ); + + if ( m_createSelectedContainer) { + if ( eventPass ) { + // add ConstDataVector to TStore + ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName )); + } else { + // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it! + delete selectedElectrons; selectedElectrons = nullptr; + } + } + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) ); + + // prepare a vector of the names of CDV containers for usage by downstream algos + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + ANA_MSG_DEBUG( " input list of syst size: " << static_cast(systNames->size()) ); + + // loop over systematic sets + // + bool eventPassThisSyst(false); + for ( auto systName : *systNames ) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName + systName, m_event, m_store, msg()) ); + + // create output container (if requested) - one for each systematic + // + ConstDataVector* selectedElectrons(nullptr); + if ( m_createSelectedContainer ) { selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected electrons, and return if event passes object selection + // + eventPassThisSyst = executeSelection( inElectrons, mcEvtWeight, countPass, selectedElectrons ); + + if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal) + + if ( eventPassThisSyst ) { + // save the string of syst set under question if event is passing the selection + vecOutContainerNames->push_back( systName ); + } + + // if for at least one syst set the event passes selection, this will remain true! + // + eventPass = ( eventPass || eventPassThisSyst ); + + ANA_MSG_DEBUG( " syst name: " << systName << " output container name: " << m_outContainerName+systName ); + + if ( m_createSelectedContainer ) { + if ( eventPassThisSyst ) { + // add ConstDataVector to TStore + ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName+systName )); + } else { + // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it! + delete selectedElectrons; selectedElectrons = nullptr; + } + } + + } // close loop over syst sets + + ANA_MSG_DEBUG(" output list of syst size: " << static_cast(vecOutContainerNames->size()) ); + + // record in TStore the list of systematics names that should be considered down stream + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + } + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if( !eventPass ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + + return EL::StatusCode::SUCCESS; + + } + + bool ElectronSelector :: executeSelection ( const xAOD::ElectronContainer* inElectrons, float mcEvtWeight, bool countPass, + ConstDataVector* selectedElectrons ) + { + + const xAOD::VertexContainer* vertices(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg()); + + int nPass(0); int nObj(0); + static SG::AuxElement::Decorator< char > passSelDecor( "passSel" ); + + bool passCrackVetoCleaning = true; + const static SG::AuxElement::ConstAccessor acc_CrackVetoCleaning("DFCommonCrackVetoCleaning"); + + for ( auto el_itr : *inElectrons ) { // duplicated of basic loop + + // if only looking at a subset of electrons make sure all are decorated + // + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *el_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + bool passSel = this->passCuts( el_itr, pvx ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *el_itr ) = passSel; + } + + if ( passSel ) { + + // check DFCommonCrackVetoCleaning flag for topocluster association bugfix + if (m_applyCrackVetoCleaning){ + if ( !acc_CrackVetoCleaning( *el_itr ) ) passCrackVetoCleaning = false; + } + + nPass++; + if ( m_createSelectedContainer ) { + selectedElectrons->push_back( el_itr ); + } + } + } + + // Fix to EGamma Crack-Electron topocluster association bug for MET (PFlow) + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJetsR21#Muons_Reconstructed_as_Jets_in_P + if (m_applyCrackVetoCleaning) { + if (!passCrackVetoCleaning) return false; // skip event + } + + // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal) + // + if ( countPass ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + ANA_MSG_DEBUG( "Initial electrons: " << nObj << " - Selected electrons: " << nPass ); + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + // + if ( m_pass_min > 0 && nPass < m_pass_min ) { + return false; + } + if ( m_pass_max >= 0 && nPass > m_pass_max ) { + return false; + } + + // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal) + // + if ( countPass ){ + m_numEventPass++; + m_weightNumEventPass += mcEvtWeight; + } + + // Perform trigger matching on the "good" (selected) electrons + // + // NB: this part will be skipped if: + // + // 1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!) + // 2. there are no selected muons in the event + // + if ( m_doTrigMatch && selectedElectrons ) { + + unsigned int nSelectedElectrons = selectedElectrons->size(); + + static SG::AuxElement::Decorator< std::map > isTrigMatchedMapElDecor( "isTrigMatchedMapEl" ); + + if ( nSelectedElectrons > 0 ) { + + ANA_MSG_DEBUG( "Doing single electron trigger matching..."); + + for ( auto const &chain : m_singleElTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + for ( auto const electron : *selectedElectrons ) { + + // For each electron, decorate w/ a map with the 'isMatched' info associated + // to each trigger chain in the input list. + // If decoration map doesn't exist for this electron yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !isTrigMatchedMapElDecor.isAvailable( *electron ) ) { + isTrigMatchedMapElDecor( *electron ) = std::map(); + } + + char matched = false; + if (!m_merged_electrons){ + matched = ( m_trigElectronMatchTool_handle->match( *electron, chain, m_minDeltaR ) ); + } else { + static const SG::AuxElement::ConstAccessor> originalElectronLink("originalElectronLink"); + auto originalElectron = const_cast(*originalElectronLink( *electron )); + matched = ( m_trigElectronMatchTool_handle->match(*originalElectron, chain, m_minDeltaR) ); + } + + ANA_MSG_DEBUG( "\t\t is electron trigger matched? " << matched); + + ( isTrigMatchedMapElDecor( *electron ) )[chain] = matched; + } + } + }// if nSelectedElectrons > 0 + + // If checking dilepton trigger, form lepton pairs and test matching for each one. + // Save a: + // + // multimap< chain, pair< pair, ismatched > > + // + // as *event* decoration to store which + // pairs are matched (to a given chain) and which aren't. + // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events. + // + // By retrieving this map later on, user can decide what to do with the event + // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain) + + if ( nSelectedElectrons > 1 && !m_diElTrigChains.empty() ) { + + ANA_MSG_DEBUG( "Doing di-electron trigger matching..."); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + typedef std::pair< std::pair, char> dielectron_trigmatch_pair; + typedef std::multimap< std::string, dielectron_trigmatch_pair > dielectron_trigmatch_pair_map; + static SG::AuxElement::Decorator< dielectron_trigmatch_pair_map > diElectronTrigMatchPairMapDecor( "diElectronTrigMatchPairMap" ); + + for ( auto const &chain : m_diElTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + // If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names) + if ( !diElectronTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) { + diElectronTrigMatchPairMapDecor( *eventInfo ) = dielectron_trigmatch_pair_map(); + } + + std::vector myElectrons; + + for ( unsigned int iel = 0; iel < selectedElectrons->size()-1; ++iel ) { + + for ( unsigned int jel = iel+1; jel < selectedElectrons->size(); ++jel ) { + + // test a new pair + myElectrons.clear(); + myElectrons.push_back( selectedElectrons->at(iel) ); + myElectrons.push_back( selectedElectrons->at(jel) ); + + // check whether the pair is matched + char matched = m_trigElectronMatchTool_handle->match( myElectrons, chain, m_minDeltaR ); + + ANA_MSG_DEBUG( "\t\t is the electron pair ("< chain_idxs = std::make_pair(iel,jel); + dielectron_trigmatch_pair chain_decision = std::make_pair(chain_idxs,matched); + diElectronTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dielectron_trigmatch_pair >(chain,chain_decision) ); + + } + } + }//for m_diElTrigChainsList + } // if electrons + }// if m_doTrigMatch + + return true; + + } + + EL::StatusCode ElectronSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( m_el_CutBased_PIDManager ) { delete m_el_CutBased_PIDManager; m_el_CutBased_PIDManager = nullptr; } + if ( m_el_LH_PIDManager ) { delete m_el_LH_PIDManager; m_el_LH_PIDManager = nullptr; } + if ( m_useCutFlow ) { + ANA_MSG_INFO( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode ElectronSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + + return EL::StatusCode::SUCCESS; + } + + int ElectronSelector :: passCuts( const xAOD::Electron* electron, const xAOD::Vertex *primaryVertex ) { + + float et = electron->pt(); + + // all the eta cuts are done using the measurement of the cluster position with the 2nd layer cluster, + // as for Egamma CP recommendation + // + float eta = ( electron->caloCluster() ) ? electron->caloCluster()->etaBE(2) : -999.0; + + // fill cutflow bin 'all' before any cut + if( !m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_all, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_all, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // author cut + // + if ( m_doAuthorCut ) { + if ( !( electron->author(xAOD::EgammaParameters::AuthorElectron) || electron->author(xAOD::EgammaParameters::AuthorAmbiguous) ) ) { + ANA_MSG_DEBUG( "Electron failed author kinematic cut." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_author_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_author_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // Object Quality cut + // + if ( m_doOQCut ) { + if( !electron->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON) ){ + ANA_MSG_DEBUG( "Electron failed Object Quality cut BADCLUSELECTRON." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_OQ_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_OQ_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // Dead HV Cell veto (affects only 2016 data) + // + if ( m_applyDeadHVCellVeto ) { + if( !m_deadHVTool->accept(electron) ){ + ANA_MSG_DEBUG( "Electron failed dead HV cell veto." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_deadHVCell_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_deadHVCell_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // pT max cut + // + if ( m_pT_max != 1e8 ) { + if ( et > m_pT_max ) { + ANA_MSG_DEBUG( "Electron failed pT max cut." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_ptmax_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_ptmax_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // pT min cut + // + if ( m_pT_min != 1e8 ) { + if ( et < m_pT_min ) { + ANA_MSG_DEBUG( "Electron failed pT min cut." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_ptmin_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_ptmin_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // eta cuts + // + + // |eta| max cut + // + if ( m_eta_max != 1e8 ) { + if ( fabs(eta) > m_eta_max ) { + ANA_MSG_DEBUG( "Electron failed |eta| max cut." ); + return 0; + } + } + // |eta| crack veto + // + if ( m_vetoCrack ) { + if ( fabs( eta ) > 1.37 && fabs( eta ) < 1.52 ) { + ANA_MSG_DEBUG( "Electron failed |eta| crack veto cut." ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_eta_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_eta_cut, 1 ); } + + + // ********************************************************************************************************************************************************************* + // + // Tracking cuts AFTER acceptance, in case of derivation reduction. + // + + const xAOD::TrackParticle* tp = electron->trackParticle(); + if ( !tp ) { + ANA_MSG_DEBUG("Electron has no TrackParticle. Won't be selected."); + return 0; + } + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + double d0_significance = xAOD::TrackingHelpers::d0significance( tp, eventInfo->beamPosSigmaX(), eventInfo->beamPosSigmaY(), eventInfo->beamPosSigmaXY() ); + + // Take distance between z0 and zPV ( after referring the PV z coordinate to the beamspot position, given by vz() ), multiplied by sin(theta) + // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/InDetTrackingDC14 for further reference + // + float z0sintheta = 1e8; + if (primaryVertex) z0sintheta = ( tp->z0() + tp->vz() - primaryVertex->z() ) * sin( tp->theta() ); + + // z0*sin(theta) cut + // + if ( m_z0sintheta_max != 1e8 ) { + if ( !( fabs(z0sintheta) < m_z0sintheta_max ) ) { + ANA_MSG_DEBUG( "Electron failed z0*sin(theta) cut." ); + return 0; + } + } + if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_z0sintheta_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_z0sintheta_cut, 1 ); } + + // decorate electron w/ z0*sin(theta) info + static SG::AuxElement::Decorator< float > z0sinthetaDecor("z0sintheta"); + z0sinthetaDecor( *electron ) = z0sintheta; + + // d0 cut + // + if ( m_d0_max != 1e8 ) { + if ( !( tp->d0() < m_d0_max ) ) { + ANA_MSG_DEBUG( "Electron failed d0 cut."); + return 0; + } + } + if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_d0_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_d0_cut, 1 ); } + + // d0sig cut + // + if ( m_d0sig_max != 1e8 ) { + if ( !( fabs(d0_significance) < m_d0sig_max ) ) { + ANA_MSG_DEBUG( "Electron failed d0 significance cut."); + return 0; + } + } + if ( !m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_d0sig_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_d0sig_cut, 1 ); } + + // decorate electron w/ d0sig info + static SG::AuxElement::Decorator< float > d0SigDecor("d0sig"); + d0SigDecor( *electron ) = static_cast(d0_significance); + + + // BLayer track quality + static SG::AuxElement::Decorator< bool > bLayerDecor("bLayerPass"); + + // this is taken from ElectronPhotonSelectorTools/Root/AsgElectronLikelihoodTool.cxx + uint8_t expectBlayer(true); + uint8_t nBlayerHits(0); + uint8_t nBlayerOutliers(0); + + tp->summaryValue(expectBlayer, xAOD::expectBLayerHit); + tp->summaryValue(nBlayerHits, xAOD::numberOfBLayerHits); + tp->summaryValue(nBlayerOutliers, xAOD::numberOfBLayerOutliers); + + bool bLayerPass = expectBlayer && (nBlayerHits+nBlayerOutliers) >= 1; + bLayerDecor( *electron ) = bLayerPass; + + if ( m_doBLTrackQualityCut ) { + if ( !bLayerPass ) { + ANA_MSG_DEBUG( "Electron failed BL track quality cut."); + return 0; + } + + if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_BL_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_BL_cut, 1 ); } + } + + // ********************************************************************************************************************************************************************* + // + // electron PID cuts + // + + // + // likelihood PID + // + + // set default values for *this* electron decorations + // + if( m_doLHPID ) { + m_el_LH_PIDManager->setDecorations( electron ); + + if ( m_readIDFlagsFromDerivation ) { + + const static SG::AuxElement::ConstAccessor acc_EG_Loose("DFCommonElectronsLHLoose"); + const static SG::AuxElement::ConstAccessor acc_EG_Medium("DFCommonElectronsLHMedium"); + const static SG::AuxElement::ConstAccessor acc_EG_Tight("DFCommonElectronsLHTight"); + + if ( m_doLHPIDcut ) { + + bool passSelID(false); + SG::AuxElement::ConstAccessor< char > LHDecision( "DFCommonElectronsLH" + m_LHOperatingPoint ); + if( LHDecision.isAvailable( *electron ) ){ + if (m_doModifiedEleId){ + if(m_LHOperatingPoint == "Tight"){ + passSelID = acc_EG_Medium( *electron ) && acc_EG_Tight( *electron ); + } else if(m_LHOperatingPoint == "Medium"){ + passSelID = ( acc_EG_Loose( *electron ) && acc_EG_Medium( *electron ) ) || acc_EG_Tight( *electron ); + } else if (m_LHOperatingPoint == "Loose") { + passSelID = acc_EG_Medium( *electron ) || acc_EG_Loose( *electron ); + } else { passSelID = LHDecision( *electron ); } + } + else { + passSelID = LHDecision( *electron ); + } + } + if ( !passSelID ) { + ANA_MSG_DEBUG( "Electron failed likelihood PID cut w/ operating point " << m_LHOperatingPoint ); + return 0; + } + } + + const std::set myLHWPs = m_el_LH_PIDManager->getValidWPs(); + for ( auto it : (myLHWPs) ) { + const std::string decorWP = "LH"+it; + bool passThisID(false); + SG::AuxElement::ConstAccessor< char > LHDecisionAll( "DFCommonElectrons" + decorWP ); + + if( LHDecisionAll.isAvailable( *electron ) ){ + + if (m_doModifiedEleId){ + if(decorWP == "LHTight"){ + passThisID = acc_EG_Medium( *electron ) && acc_EG_Tight( *electron ); + } else if(decorWP == "LHMedium"){ + passThisID = ( acc_EG_Loose( *electron ) && acc_EG_Medium( *electron ) ) || acc_EG_Tight( *electron ); + } else if (decorWP == "LHLoose") { + passThisID = acc_EG_Medium( *electron ) || acc_EG_Loose( *electron ); + } else { passThisID = LHDecisionAll( *electron ); } + } + else { + passThisID = LHDecisionAll( *electron ); + } + } + + ANA_MSG_DEBUG( "Decorating electron with decision for LH WP : " << decorWP ); + ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << passThisID ); + electron->auxdecor(decorWP) = static_cast( passThisID ); + + } + + } + else { + + // retrieve only tools with WP >= selected WP, cut electrons if not satisfying selected WP, and decorate w/ tool decision all the others + // + typedef std::multimap< std::string, AsgElectronLikelihoodTool* > LHToolsMap; + LHToolsMap myLHTools = m_el_LH_PIDManager->getValidWPTools(); + + if ( m_doLHPIDcut && !( ( myLHTools.find( m_LHOperatingPoint )->second )->accept( electron ) ) ) { + ANA_MSG_DEBUG( "Electron failed likelihood PID cut w/ operating point " << m_LHOperatingPoint ); + return 0; + } + + for ( auto it : (myLHTools) ) { + + const std::string decorWP = "LH" + it.first; + ANA_MSG_DEBUG( "Decorating electron with decision for LH WP : " << decorWP ); + ANA_MSG_DEBUG( "\t does electron pass " << decorWP << " ? " << static_cast( it.second->accept( electron ) ) ); + electron->auxdecor(decorWP) = static_cast( it.second->accept( electron ) ); + + } + + } + }// if m_doLHPID + + // + // cut-based PID + // + + // set default values for *this* electron decorations + // + if( m_doCutBasedPID ) { + m_el_CutBased_PIDManager->setDecorations( electron ); + + if ( m_readIDFlagsFromDerivation ) { + + if ( m_doCutBasedPIDcut ) { + + bool passSelID(false); + static SG::AuxElement::ConstAccessor< char > CutDecision( "DFCommonElectronsIsEM" + m_CutBasedOperatingPoint ); + if( CutDecision.isAvailable( *electron ) ) + passSelID = CutDecision( *electron ); + + if ( !passSelID ) { + ANA_MSG_DEBUG( "Electron failed cut-based PID cut w/ operating point " << m_CutBasedOperatingPoint ); + return 0; + } + + } + + const std::set myCutBasedWPs = m_el_CutBased_PIDManager->getValidWPs(); + for ( auto it : (myCutBasedWPs) ) { + + const std::string decorWP = "IsEM"+it; + + bool passThisID(false); + SG::AuxElement::ConstAccessor< char > CutDecisionAll( "DFCommonElectrons" + decorWP ); + if( CutDecisionAll.isAvailable( *electron ) ) + passThisID = CutDecisionAll( *electron ); + + ANA_MSG_DEBUG( "Decorating electron with decision for cut-based WP : " << decorWP ); + ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << passThisID ); + electron->auxdecor(decorWP) = static_cast( passThisID ); + + } + + } else { + + // retrieve only tools with WP >= selected WP, cut electrons if not satisfying selected WP, and decorate w/ tool decision all the others + // + typedef std::multimap< std::string, AsgElectronIsEMSelector* > CutBasedToolsMap; + CutBasedToolsMap myCutBasedTools = m_el_CutBased_PIDManager->getValidWPTools(); + + if ( m_doCutBasedPIDcut && !( ( myCutBasedTools.find( m_CutBasedOperatingPoint )->second )->accept( electron ) ) ) { + ANA_MSG_DEBUG( "Electron failed cut-based PID cut." ); + return 0; + } + + for ( auto it : (myCutBasedTools) ) { + + const std::string decorWP = "IsEM"+it.second->getOperatingPointName( ); + + ANA_MSG_DEBUG( "Decorating electron with decision for cut-based WP : " << decorWP ); + ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << static_cast( it.second->accept( electron ) ) ); + + electron->auxdecor(decorWP) = static_cast( it.second->accept( electron ) ); + } + + } + }// if m_doCutBasedPID + + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_PID_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_PID_cut, 1 ); } + + + // ********************************************************************************************************************************************************************* + // + // isolation cut + // + + // Get the "list" of input WPs with the accept() decision from the tool + // + auto accept_list = m_isolationSelectionTool_handle->accept( *electron ); + + // Decorate w/ decision for all input WPs + // + std::string base_decor("isIsolated"); + for ( auto WP_itr : m_IsoKeys ) { + + std::string decorWP = base_decor + "_" + WP_itr; + + ANA_MSG_DEBUG( "Decorate electron with " << decorWP << " - accept() ?" << accept_list.getCutResult( WP_itr.c_str()) ); + electron->auxdecor(decorWP) = static_cast( accept_list.getCutResult( WP_itr.c_str() ) ); + + } + + // Apply the cut if needed + // + if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) { + ANA_MSG_DEBUG( "Electron failed isolation cut " << m_MinIsoWPCut ); + return 0; + } + if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_iso_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_iso_cut, 1 ); } + + return 1; + } diff --git a/_sources/api/program_listing_file_Root_EventInfo.cxx.rst.txt b/_sources/api/program_listing_file_Root_EventInfo.cxx.rst.txt new file mode 100644 index 0000000000..ef6e8e0824 --- /dev/null +++ b/_sources/api/program_listing_file_Root_EventInfo.cxx.rst.txt @@ -0,0 +1,476 @@ + +.. _program_listing_file_Root_EventInfo.cxx: + +Program Listing for File EventInfo.cxx +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/EventInfo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/EventInfo.h" + #include + #include + #include "xAODTruth/TruthEventContainer.h" + #include "xAODEventShape/EventShape.h" + #include "xAODCaloEvent/CaloClusterContainer.h" + + + using namespace xAH; + + EventInfo::EventInfo(const std::string& detailStr, float units, bool mc, bool storeSyst) + : m_infoSwitch(detailStr), m_mc(mc), m_debug(false), m_storeSyst(storeSyst), m_units(units) + { + } + + EventInfo::~EventInfo() + { + if(m_debug) std::cout << " Deleting EventInfo " << std::endl; + } + + void EventInfo::setTree(TTree *tree) + { + + if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to) + connectBranch (tree, "runNumber", &m_runNumber); + connectBranch(tree, "eventNumber", &m_eventNumber); + connectBranch (tree, "lumiBlock", &m_lumiBlock); + connectBranch(tree, "coreFlags", &m_coreFlags); + connectBranch(tree, "bcid", &m_bcid); + } + + if(m_mc){ + connectBranch(tree, "mcEventNumber", &m_mcEventNumber); + connectBranch(tree, "mcChannelNumber", &m_mcChannelNumber); + connectBranch(tree, "mcEventWeight", &m_mcEventWeight); + if ( m_infoSwitch.m_weightsSys ) { + connectBranch< std::vector >(tree, "mcEventWeights", &m_mcEventWeights); + } + } + + if ( m_infoSwitch.m_bcidInfo && !m_mc ){ + connectBranch(tree, "DistEmptyBCID", &m_DistEmptyBCID); + connectBranch(tree, "DistLastUnpairedBCID", &m_DistLastUnpairedBCID); + connectBranch(tree, "DistNextUnpairedBCID", &m_DistNextUnpairedBCID); + } + + if ( m_infoSwitch.m_eventCleaning ) { + connectBranch(tree, "timeStamp", &m_timeStamp); + connectBranch(tree, "timeStampNSOffset", &m_timeStampNSOffset); + connectBranch(tree, "TileError", &m_TileError); + connectBranch(tree, "SCTError", &m_SCTError); + connectBranch(tree, "LArError", &m_LArError); + connectBranch(tree, "TileFlags", &m_TileFlags); + connectBranch(tree, "SCTFlags", &m_SCTFlags); + connectBranch(tree, "LArFlags", &m_LArFlags); + connectBranch(tree, "eventClean_LooseBad", &m_eventClean_LooseBad); + connectBranch(tree, "eventClean_TightBad", &m_eventClean_TightBad); + } + + if ( m_infoSwitch.m_pileup ) { + connectBranch(tree, "NPV", &m_npv); + connectBranch(tree, "actualInteractionsPerCrossing", &m_actualMu); + connectBranch(tree, "averageInteractionsPerCrossing", &m_averageMu); + connectBranch(tree, "weight_pileup", &m_weight_pileup); + connectBranch(tree, "correctedAverageMu", &m_correctedAvgMu); + connectBranch(tree, "correctedAndScaledAverageMu", &m_correctedAndScaledAvgMu); + connectBranch(tree, "correctedActualMu", &m_correctedMu); + connectBranch(tree, "correctedAndScaledActualMu", &m_correctedAndScaledMu); + if ( m_infoSwitch.m_pileupsys ) { + connectBranch(tree, "weight_pileup_up", &m_weight_pileup_up); + connectBranch(tree, "weight_pileup_down", &m_weight_pileup_down); + } + if(m_mc){ + connectBranch(tree, "rand_run_nr", &m_rand_run_nr); + connectBranch(tree, "rand_lumiblock_nr", &m_rand_lumiblock_nr); + } + } + + if ( m_infoSwitch.m_shapeEM ) { + connectBranch(tree, "rhoEM", &m_rhoEM); + } + + if ( m_infoSwitch.m_shapeEMPFLOW ) { + connectBranch(tree, "rhoEMPFLOW", &m_rhoEMPFLOW); + } + + if ( m_infoSwitch.m_shapeLC ) { + connectBranch(tree, "rhoLC", &m_rhoLC); + } + + // truth + if( m_infoSwitch.m_truth && m_mc ) { + connectBranch(tree, "pdgId1", &m_pdgId1); + connectBranch(tree, "pdgId2", &m_pdgId2); + connectBranch(tree, "pdfId1", &m_pdfId1); + connectBranch(tree, "pdfId2", &m_pdfId2); + connectBranch(tree, "x1", &m_x1); + connectBranch(tree, "x2", &m_x2); + //connectBranch(tree, "scale", &m_scale); + connectBranch(tree, "q", &m_q); + //connectBranch(tree, "pdf1", &m_pdf1); + //connectBranch(tree, "pdf2", &m_pdf2); + connectBranch(tree, "xf1", &m_xf1); + connectBranch(tree, "xf2", &m_xf2); + } + + // CaloCluster + if ( m_infoSwitch.m_caloClus ) { + std::vector* m_caloCluster_pt_addr = &m_caloCluster_pt; + HelperFunctions::connectBranch("caloCluster", tree, "pt", &m_caloCluster_pt_addr ); + + std::vector* m_caloCluster_eta_addr = &m_caloCluster_eta; + HelperFunctions::connectBranch("caloCluster", tree, "eta", &m_caloCluster_eta_addr ); + + std::vector* m_caloCluster_phi_addr = &m_caloCluster_phi; + HelperFunctions::connectBranch("caloCluster", tree, "phi", &m_caloCluster_phi_addr ); + + std::vector* m_caloCluster_e_addr = &m_caloCluster_e; + HelperFunctions::connectBranch("caloCluster", tree, "e", &m_caloCluster_e_addr ); + } + + if ( m_infoSwitch.m_beamspotweight ) { + connectBranch(tree, "beamSpotWeight", &m_beamspotweight); + } + } + + + void EventInfo::setBranches(TTree *tree) + { + + if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to) + tree->Branch("runNumber", &m_runNumber, "runNumber/I"); + tree->Branch("eventNumber", &m_eventNumber, "eventNumber/L"); + tree->Branch("lumiBlock", &m_lumiBlock, "lumiBlock/I"); + tree->Branch("coreFlags", &m_coreFlags, "coreFlags/i"); + tree->Branch("bcid", &m_bcid, "bcid/I"); + } + + if( m_mc ) { + tree->Branch("mcEventNumber", &m_mcEventNumber, "mcEventNumber/I"); + tree->Branch("mcChannelNumber", &m_mcChannelNumber,"mcChannelNumber/I"); + tree->Branch("mcEventWeight", &m_mcEventWeight, "mcEventWeight/F"); + if ( m_infoSwitch.m_weightsSys ) { + tree->Branch("mcEventWeights", &m_mcEventWeights); + } + } + + if ( m_infoSwitch.m_bcidInfo && !m_mc ){ + tree->Branch("DistEmptyBCID", &m_DistEmptyBCID, "DistEmptyBCID/I"); + tree->Branch("DistLastUnpairedBCID", &m_DistLastUnpairedBCID, "DistLastUnpairedBCID/I"); + tree->Branch("DistNextUnpairedBCID", &m_DistNextUnpairedBCID, "DistNextUnpairedBCID/I"); + } + + if ( m_infoSwitch.m_eventCleaning ) { + tree->Branch("timeStamp", &m_timeStamp, "timeStamp/i"); + tree->Branch("timeStampNSOffset", &m_timeStampNSOffset, "timeStampNSOffset/i"); + tree->Branch("TileError", &m_TileError, "TileError/O"); + tree->Branch("SCTError", &m_SCTError, "SCTError/O"); + tree->Branch("LArError", &m_LArError, "LArError/O"); + tree->Branch("TileFlags", &m_TileFlags, "TileFlags/i"); + tree->Branch("SCTFlags", &m_SCTFlags, "SCTFlags/i"); + tree->Branch("LArFlags", &m_LArFlags, "LArFlags/i"); + tree->Branch("eventClean_LooseBad",&m_eventClean_LooseBad,"eventClean_LooseBad/O"); + tree->Branch("eventClean_TightBad",&m_eventClean_TightBad,"eventClean_TightBad/O"); + } + + if ( m_infoSwitch.m_pileup ) { + tree->Branch("NPV", &m_npv, "NPV/I"); + tree->Branch("actualInteractionsPerCrossing", &m_actualMu, "actualInteractionsPerCrossing/F"); + tree->Branch("averageInteractionsPerCrossing", &m_averageMu, "averageInteractionsPerCrossing/F"); + tree->Branch("weight_pileup", &m_weight_pileup, "weight_pileup/F"); + tree->Branch("correctedAverageMu", &m_correctedAvgMu, "correctedAverageMu/F" ); + tree->Branch("correctedAndScaledAverageMu", &m_correctedAndScaledAvgMu, "correctedAndScaledAverageMu/F" ); + tree->Branch("correctedActualMu", &m_correctedMu, "correctedActualMu/F" ); + tree->Branch("correctedAndScaledActualMu", &m_correctedAndScaledMu, "correctedAndScaledActualMu/F" ); + if ( m_infoSwitch.m_pileupsys ) { + tree->Branch("weight_pileup_up", &m_weight_pileup_up, "weight_pileup_up/F"); + tree->Branch("weight_pileup_down", &m_weight_pileup_down,"weight_pileup_down/F"); + } + if(m_mc){ + tree->Branch("rand_run_nr" , &m_rand_run_nr ,"rand_run_nr/I" ); + tree->Branch("rand_lumiblock_nr", &m_rand_lumiblock_nr,"rand_lumiblock_nr/I"); + } + } + + if ( m_infoSwitch.m_shapeEM ) { + tree->Branch("rhoEM", &m_rhoEM, "rhoEM/D"); + } + + if ( m_infoSwitch.m_shapeEMPFLOW ) { + tree->Branch("rhoEMPFLOW", &m_rhoEMPFLOW, "rhoEMPFLOW/D"); + } + + if ( m_infoSwitch.m_shapeLC ) { + tree->Branch("rhoLC", &m_rhoLC, "rhoLC/D"); + } + + if( m_infoSwitch.m_truth && m_mc ) { + tree->Branch("pdgId1", &m_pdgId1, "pdgId1/I" ); + tree->Branch("pdgId2", &m_pdgId2, "pdgId2/I" ); + tree->Branch("pdfId1", &m_pdfId1, "pdfId1/I" ); + tree->Branch("pdfId2", &m_pdfId2, "pdfId2/I" ); + tree->Branch("x1", &m_x1, "x1/F" ); + tree->Branch("x2", &m_x2, "x2/F" ); + //tree->Branch("scale", &m_scale, "scale/F"); + tree->Branch("q", &m_q, "q/F"); + //tree->Branch("pdf1", &m_pdf1, "pdf1/F"); + //tree->Branch("pdf2", &m_pdf2, "pdf2/F"); + tree->Branch("xf1", &m_xf1, "xf1/F"); + tree->Branch("xf2", &m_xf2, "xf2/F"); + } + + if ( m_infoSwitch.m_caloClus ) { + tree->Branch("caloCluster_pt", &m_caloCluster_pt); + tree->Branch("caloCluster_phi", &m_caloCluster_phi); + tree->Branch("caloCluster_eta", &m_caloCluster_eta); + tree->Branch("caloCluster_e", &m_caloCluster_e); + } + + if ( m_infoSwitch.m_beamspotweight ) { + tree->Branch("beamSpotWeight", &m_beamspotweight); + } + + return; + } + + + void EventInfo::clear() + { + m_runNumber = m_eventNumber = m_mcEventNumber = m_mcChannelNumber = m_bcid = m_lumiBlock; + m_coreFlags = 0; + //eventCleaning + m_LArError = false; + m_TileError = false; + m_SCTError = false; + m_LArFlags = 0; + m_TileFlags = 0; + m_SCTFlags = 0; + m_eventClean_LooseBad = false; + m_eventClean_TightBad = false; + m_mcEventWeight = 1.; + m_DistEmptyBCID = -999; + m_DistLastUnpairedBCID = -999; + m_DistNextUnpairedBCID = -999; + m_weight_pileup = 1.; + m_weight_pileup_down = 1.; + m_weight_pileup_up = 1.; + m_timeStamp = -999; + m_timeStampNSOffset = -999; + // pileup + m_npv = -999; + m_actualMu = m_averageMu = -999; + // shapeEM + m_rhoEM = -999; + // shapeEMPFLOW + m_rhoEMPFLOW = -999; + // shapeLC + m_rhoLC = -999; + // truth + m_pdgId1 = m_pdgId2 = m_pdfId1 = m_pdfId2 = -999; + m_x1 = m_x2 = -999; + m_xf1 = m_xf2 = -999; + + //m_scale = m_q = m_pdf1 = m_pdf2 = -999; + + // mcEventWeights + if ( m_infoSwitch.m_weightsSys ) { + m_mcEventWeights.clear(); + } + + // CaloCluster + if( m_infoSwitch.m_caloClus){ + m_caloCluster_pt.clear(); + m_caloCluster_eta.clear(); + m_caloCluster_phi.clear(); + m_caloCluster_e.clear(); + } + + if ( m_infoSwitch.m_beamspotweight ) { + m_beamspotweight = 1.; + } + + return; + } + + void EventInfo::FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event, const xAOD::VertexContainer* vertices) { + + if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to) + m_runNumber = eventInfo->runNumber(); + m_eventNumber = eventInfo->eventNumber(); + m_lumiBlock = eventInfo->lumiBlock(); + m_coreFlags = eventInfo->eventFlags(xAOD::EventInfo::Core); + m_bcid = eventInfo->bcid(); + } + + if ( m_mc ) { + m_mcEventNumber = eventInfo->mcEventNumber(); + m_mcChannelNumber = eventInfo->mcChannelNumber(); + m_mcEventWeight = eventInfo->mcEventWeight(); + if ( m_infoSwitch.m_weightsSys ) { + if ( m_storeSyst ) { + m_mcEventWeights = eventInfo->mcEventWeights(); + } else { + m_mcEventWeights = std::vector{m_mcEventWeight}; + } + } + } + + if ( m_infoSwitch.m_bcidInfo && !m_mc ){ + static SG::AuxElement::ConstAccessor< int > DistEmptyBCID ("DistEmptyBCID"); + if ( DistEmptyBCID.isAvailable( *eventInfo ) ) { m_DistEmptyBCID = DistEmptyBCID( *eventInfo ); } else { m_DistEmptyBCID = -999; } + static SG::AuxElement::ConstAccessor< int > DistLastUnpairedBCID ("DistLastUnpairedBCID"); + if ( DistLastUnpairedBCID.isAvailable( *eventInfo ) ) { m_DistLastUnpairedBCID = DistLastUnpairedBCID( *eventInfo ); } else { m_DistLastUnpairedBCID = -999; } + static SG::AuxElement::ConstAccessor< int > DistNextUnpairedBCID ("DistNextUnpairedBCID"); + if ( DistNextUnpairedBCID.isAvailable( *eventInfo ) ) { m_DistNextUnpairedBCID = DistNextUnpairedBCID( *eventInfo ); } else { m_DistNextUnpairedBCID = -999; } + } + + if ( m_infoSwitch.m_eventCleaning ) { + + if ( eventInfo->errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error ) m_LArError = true; + else m_LArError = false; + m_LArFlags = eventInfo->eventFlags(xAOD::EventInfo::LAr); + + if ( eventInfo->errorState(xAOD::EventInfo::Tile)==xAOD::EventInfo::Error ) m_TileError = true; + else m_TileError = false; + m_TileFlags = eventInfo->eventFlags(xAOD::EventInfo::Tile); + + if ( eventInfo->errorState(xAOD::EventInfo::SCT)==xAOD::EventInfo::Error ) m_SCTError = true; + else m_SCTError = false; + m_SCTFlags = eventInfo->eventFlags(xAOD::EventInfo::SCT); + + m_timeStamp = eventInfo->timeStamp(); + m_timeStampNSOffset = eventInfo->timeStampNSOffset(); + + static SG::AuxElement::ConstAccessor< char > acc_DFCommonJets_eventClean_LooseBad("DFCommonJets_eventClean_LooseBad"); + if ( acc_DFCommonJets_eventClean_LooseBad.isAvailable( *eventInfo )) + m_eventClean_LooseBad = acc_DFCommonJets_eventClean_LooseBad( *eventInfo ); + static SG::AuxElement::ConstAccessor< char > acc_DFCommonJets_eventClean_TightBad("DFCommonJets_eventClean_TightBad"); + if ( acc_DFCommonJets_eventClean_TightBad.isAvailable( *eventInfo )) + m_eventClean_TightBad = acc_DFCommonJets_eventClean_TightBad( *eventInfo ); + + } + + if ( m_infoSwitch.m_pileup ) { + + m_npv = -1; + if(vertices) m_npv = HelperFunctions::countPrimaryVertices(vertices, 2); + + m_actualMu = eventInfo->actualInteractionsPerCrossing(); + m_averageMu = eventInfo->averageInteractionsPerCrossing(); + + static SG::AuxElement::ConstAccessor< float > correctedAvgMu("corrected_averageInteractionsPerCrossing"); + static SG::AuxElement::ConstAccessor< float > correctedAndScaledAvgMu("correctedScaled_averageInteractionsPerCrossing"); + static SG::AuxElement::ConstAccessor< float > correctedMu("corrected_actualInteractionsPerCrossing"); + static SG::AuxElement::ConstAccessor< float > correctedAndScaledMu("correctedScaled_actualInteractionsPerCrossing"); + if ( correctedAvgMu.isAvailable( *eventInfo ) ) { + m_correctedAvgMu = correctedAvgMu( *eventInfo ); + } else { + m_correctedAvgMu = -1.0; + } + if ( correctedAndScaledAvgMu.isAvailable( *eventInfo ) ) { + m_correctedAndScaledAvgMu = correctedAndScaledAvgMu( *eventInfo ); + } else { + m_correctedAndScaledAvgMu = -1.0; + } + if ( correctedMu.isAvailable( *eventInfo ) ) { + m_correctedMu = correctedMu( *eventInfo ); + } else { + m_correctedMu = -1.0; + } + if ( correctedAndScaledMu.isAvailable( *eventInfo ) ) { + m_correctedAndScaledMu = correctedAndScaledMu( *eventInfo ); + } else { + m_correctedAndScaledMu = -1.0; + } + + if ( m_mc ) { + + static SG::AuxElement::ConstAccessor< float > weight_pileup ("PileupWeight"); + static SG::AuxElement::ConstAccessor< unsigned int > rand_run_nr("RandomRunNumber"); + static SG::AuxElement::ConstAccessor< unsigned int > rand_lumiblock_nr("RandomLumiBlockNumber"); + + if ( weight_pileup.isAvailable( *eventInfo ) ) { m_weight_pileup = weight_pileup( *eventInfo ); } else { m_weight_pileup = 1.0; } + if ( rand_run_nr.isAvailable( *eventInfo ) ) { m_rand_run_nr = rand_run_nr( *eventInfo ); } else { m_rand_run_nr = 900000; } + if ( rand_lumiblock_nr.isAvailable( *eventInfo ) ) { m_rand_lumiblock_nr = rand_lumiblock_nr( *eventInfo ); } else { m_rand_lumiblock_nr = 0; } + + static SG::AuxElement::ConstAccessor< float > weight_pileup_up ("PileupWeight_UP"); + static SG::AuxElement::ConstAccessor< float > weight_pileup_down ("PileupWeight_DOWN"); + if ( weight_pileup_up.isAvailable( *eventInfo ) ) { m_weight_pileup_up = weight_pileup_up( *eventInfo );} else { m_weight_pileup_up = 1.0; } + if ( weight_pileup_down.isAvailable( *eventInfo ) ){ m_weight_pileup_down = weight_pileup_down( *eventInfo );}else { m_weight_pileup_down = 1.0; } + + } + + + } + + if ( m_infoSwitch.m_shapeLC && event ) { + const xAOD::EventShape* evtShape(nullptr); + HelperFunctions::retrieve( evtShape, "Kt4LCTopoOriginEventShape", event, 0 ); + if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoLC ) ) { + Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape"); + m_rhoLC = -999; + } + } + + if ( m_infoSwitch.m_shapeEM && event ) { + const xAOD::EventShape* evtShape(nullptr); + HelperFunctions::retrieve( evtShape, "Kt4EMTopoOriginEventShape", event, 0 ); + if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoEM ) ) { + Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape"); + m_rhoEM = -999; + } + } + + if ( m_infoSwitch.m_shapeEMPFLOW && event ) { + const xAOD::EventShape* evtShape(nullptr); + HelperFunctions::retrieve( evtShape, "Kt4EMPFlowEventShape", event, 0 ); + if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoEMPFLOW ) ) { + Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape"); + m_rhoEMPFLOW = -999; + } + } + + if( m_infoSwitch.m_caloClus && event ) { + const xAOD::CaloClusterContainer* caloClusters = 0; + HelperFunctions::retrieve( caloClusters, "CaloCalTopoClusters", event, 0); + // save the clusters at the EM scale + for( auto clus : * caloClusters ) { + if ( clus->pt ( xAOD::CaloCluster::State::UNCALIBRATED ) < 2000 ) { continue; } // 2 GeV cut + m_caloCluster_pt. push_back( clus->pt ( xAOD::CaloCluster::State::UNCALIBRATED ) / m_units ); + m_caloCluster_eta.push_back( clus->eta( xAOD::CaloCluster::State::UNCALIBRATED ) ); + m_caloCluster_phi.push_back( clus->phi( xAOD::CaloCluster::State::UNCALIBRATED ) ); + m_caloCluster_e. push_back( clus->e ( xAOD::CaloCluster::State::UNCALIBRATED ) / m_units ); + } + } + + if( m_infoSwitch.m_truth && event && m_mc ) { + //MC Truth + const xAOD::TruthEventContainer* truthE = 0; + HelperFunctions::retrieve( truthE, "TruthEvents", event, 0 ); + if( truthE ) { + const xAOD::TruthEvent* truthEvent = truthE->at(0); + truthEvent->pdfInfoParameter(m_pdgId1, xAOD::TruthEvent::PDGID1); + truthEvent->pdfInfoParameter(m_pdgId2, xAOD::TruthEvent::PDGID2); + truthEvent->pdfInfoParameter(m_pdfId1, xAOD::TruthEvent::PDFID1); + truthEvent->pdfInfoParameter(m_pdfId2, xAOD::TruthEvent::PDFID2); + truthEvent->pdfInfoParameter(m_x1, xAOD::TruthEvent::X1); + truthEvent->pdfInfoParameter(m_x2, xAOD::TruthEvent::X2); + //truthEvent->pdfInfoParameter(m_scale, xAOD::TruthEvent::SCALE); + truthEvent->pdfInfoParameter(m_q, xAOD::TruthEvent::Q); + //truthEvent->pdfInfoParameter(m_pdf1, xAOD::TruthEvent::PDF1); + //truthEvent->pdfInfoParameter(m_pdf2, xAOD::TruthEvent::PDF2); + truthEvent->pdfInfoParameter(m_xf1, xAOD::TruthEvent::XF1); + truthEvent->pdfInfoParameter(m_xf2, xAOD::TruthEvent::XF2); + } + + } + + if ( m_infoSwitch.m_beamspotweight ) { + m_beamspotweight = eventInfo->beamSpotWeight(); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_FatJetContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_FatJetContainer.cxx.rst.txt new file mode 100644 index 0000000000..60aced736e --- /dev/null +++ b/_sources/api/program_listing_file_Root_FatJetContainer.cxx.rst.txt @@ -0,0 +1,943 @@ + +.. _program_listing_file_Root_FatJetContainer.cxx: + +Program Listing for File FatJetContainer.cxx +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/FatJetContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/FatJetContainer.h" + #include + #include + #include "xAODTruth/TruthEventContainer.h" + + using namespace xAH; + + FatJetContainer::FatJetContainer(const std::string& name, const std::string& detailStr, const std::string& subjetDetailStr, const std::string& suffix, + float units, bool mc) + : ParticleContainer(name,detailStr,units,mc, true, true, suffix) + { + if (m_infoSwitch.m_scales) { + m_JetConstitScaleMomentum_eta = new std::vector(); + m_JetConstitScaleMomentum_phi = new std::vector(); + m_JetConstitScaleMomentum_m = new std::vector(); + m_JetConstitScaleMomentum_pt = new std::vector(); + + m_JetEMScaleMomentum_eta = new std::vector(); + m_JetEMScaleMomentum_phi = new std::vector(); + m_JetEMScaleMomentum_m = new std::vector(); + m_JetEMScaleMomentum_pt = new std::vector(); + } + + if (m_infoSwitch.m_area) { + m_GhostArea = new std::vector(); + m_ActiveArea = new std::vector(); + m_VoronoiArea = new std::vector(); + + m_ActiveArea4vec_pt = new std::vector(); + m_ActiveArea4vec_eta = new std::vector(); + m_ActiveArea4vec_phi = new std::vector(); + m_ActiveArea4vec_m = new std::vector(); + } + + if ( m_infoSwitch.m_substructure ) { + m_Split12 = new std::vector(); + m_Split23 = new std::vector(); + m_Split34 = new std::vector(); + m_tau1_wta = new std::vector(); + m_tau2_wta = new std::vector(); + m_tau3_wta = new std::vector(); + m_tau21_wta = new std::vector(); + m_tau32_wta = new std::vector(); + m_ECF1 = new std::vector(); + m_ECF2 = new std::vector(); + m_ECF3 = new std::vector(); + m_C2 = new std::vector(); + m_D2 = new std::vector(); + m_NTrimSubjets = new std::vector(); + m_NClusters = new std::vector (); + m_nTracks = new std::vector (); + m_ungrtrk500 = new std::vector (); + m_EMFrac = new std::vector(); + m_nChargedParticles = new std::vector(); + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ) { + m_NTrimSubjets = new std::vector(); + } + + if ( m_infoSwitch.m_constituent) { + m_numConstituents = new std::vector< int >(); + } + + if ( m_infoSwitch.m_constituentAll) { + m_constituentWeights = new std::vector< std::vector >(); + m_constituent_pt = new std::vector< std::vector >(); + m_constituent_eta = new std::vector< std::vector >(); + m_constituent_phi = new std::vector< std::vector >(); + m_constituent_e = new std::vector< std::vector >(); + } + + + if ( m_infoSwitch.m_truth && m_mc ) { + m_truth_m =new std::vector; + m_truth_pt =new std::vector; + m_truth_phi=new std::vector; + m_truth_eta=new std::vector; + } + + if ( m_infoSwitch.m_bosonCount && m_mc) { + m_nTQuarks = new std::vector< int > (); + m_nHBosons = new std::vector< int > (); + m_nWBosons = new std::vector< int > (); + m_nZBosons = new std::vector< int > (); + } + + if (m_infoSwitch.m_muonCorrection) { + m_muonCorrected_pt = new std::vector(); + m_muonCorrected_eta = new std::vector(); + m_muonCorrected_phi = new std::vector(); + m_muonCorrected_m = new std::vector(); + } + + for(const auto& trackJetName : m_infoSwitch.m_trackJetNames) + { + std::string trkJetName = name; + if( !suffix.empty() ){ trkJetName += "_"+suffix; } + trkJetName += "_"+trackJetName; + m_trkJets[trackJetName] = new xAH::JetContainer(trkJetName, subjetDetailStr, m_units, m_mc); + + m_trkJetsIdx[trackJetName] = new std::vector > (); + } + + } + + FatJetContainer::~FatJetContainer() + { + if(m_debug) std::cout << " Deleting FatJetContainer " << std::endl; + + if ( m_infoSwitch.m_scales ) { + delete m_JetConstitScaleMomentum_eta ; + delete m_JetConstitScaleMomentum_phi ; + delete m_JetConstitScaleMomentum_m ; + delete m_JetConstitScaleMomentum_pt ; + + delete m_JetEMScaleMomentum_eta ; + delete m_JetEMScaleMomentum_phi ; + delete m_JetEMScaleMomentum_m ; + delete m_JetEMScaleMomentum_pt ; + } + + if ( m_infoSwitch.m_area ) { + delete m_GhostArea; + delete m_ActiveArea; + delete m_VoronoiArea; + + delete m_ActiveArea4vec_pt; + delete m_ActiveArea4vec_eta; + delete m_ActiveArea4vec_phi; + delete m_ActiveArea4vec_m; + } + + if ( m_infoSwitch.m_substructure ) { + delete m_Split12 ; + delete m_Split23 ; + delete m_Split34 ; + delete m_tau1_wta ; + delete m_tau2_wta ; + delete m_tau3_wta ; + delete m_tau21_wta ; + delete m_tau32_wta ; + delete m_ECF1 ; + delete m_ECF2 ; + delete m_ECF3 ; + delete m_C2 ; + delete m_D2 ; + delete m_NTrimSubjets; + delete m_NClusters ; + delete m_nTracks ; + delete m_ungrtrk500 ; + delete m_EMFrac ; + delete m_nChargedParticles ; + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){ + delete m_NTrimSubjets; + } + + if ( m_infoSwitch.m_constituent) { + delete m_numConstituents; + } + + if ( m_infoSwitch.m_constituentAll) { + delete m_constituentWeights; + delete m_constituent_pt ; + delete m_constituent_eta ; + delete m_constituent_phi ; + delete m_constituent_e ; + } + + if ( m_infoSwitch.m_truth && m_mc ) { + delete m_truth_m; + delete m_truth_pt; + delete m_truth_phi; + delete m_truth_eta; + } + + if ( m_infoSwitch.m_bosonCount && m_mc) { + delete m_nTQuarks; + delete m_nHBosons; + delete m_nWBosons; + delete m_nZBosons; + } + + if ( m_infoSwitch.m_muonCorrection) { + delete m_muonCorrected_pt; + delete m_muonCorrected_eta; + delete m_muonCorrected_phi; + delete m_muonCorrected_m; + } + + if( !m_infoSwitch.m_trackJetNames.empty() ){ + for(const auto& kv : m_trkJets) + { + delete m_trkJets [kv.first]; + delete m_trkJetsIdx[kv.first]; + } + m_trkJets .clear(); + m_trkJetsIdx.clear(); + } + + } + + void FatJetContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + if( m_infoSwitch.m_scales ) { + connectBranch(tree, "JetConstitScaleMomentum_eta", &m_JetConstitScaleMomentum_eta); + connectBranch(tree, "JetConstitScaleMomentum_phi", &m_JetConstitScaleMomentum_phi); + connectBranch(tree, "JetConstitScaleMomentum_m", &m_JetConstitScaleMomentum_m); + connectBranch(tree, "JetConstitScaleMomentum_pt", &m_JetConstitScaleMomentum_pt); + + connectBranch(tree, "JetEMScaleMomentum_eta", &m_JetEMScaleMomentum_eta); + connectBranch(tree, "JetEMScaleMomentum_phi", &m_JetEMScaleMomentum_phi); + connectBranch(tree, "JetEMScaleMomentum_m", &m_JetEMScaleMomentum_m); + connectBranch(tree, "JetEMScaleMomentum_pt", &m_JetEMScaleMomentum_pt); + } + + if ( m_infoSwitch.m_area ) { + connectBranch(tree, "m_GhostArea", &m_GhostArea); + connectBranch(tree, "m_ActiveArea", &m_ActiveArea); + connectBranch(tree, "m_VoronoiArea", &m_VoronoiArea); + + connectBranch(tree, "m_ActiveArea4vec_pt", &m_ActiveArea4vec_pt); + connectBranch(tree, "m_ActiveArea4vec_eta", &m_ActiveArea4vec_eta); + connectBranch(tree, "m_ActiveArea4vec_phi", &m_ActiveArea4vec_phi); + connectBranch(tree, "m_ActiveArea4vec_m", &m_ActiveArea4vec_m); + } + + if ( m_infoSwitch.m_substructure ) { + connectBranch(tree, "Split12", &m_Split12); + connectBranch(tree, "Split23", &m_Split23); + connectBranch(tree, "Split34", &m_Split34); + connectBranch(tree, "tau1_wta", &m_tau1_wta); + connectBranch(tree, "tau2_wta", &m_tau2_wta); + connectBranch(tree, "tau3_wta", &m_tau3_wta); + connectBranch(tree, "tau21_wta", &m_tau21_wta); + connectBranch(tree, "tau32_wta", &m_tau32_wta); + connectBranch(tree, "ECF1", &m_ECF1); + connectBranch(tree, "ECF2", &m_ECF2); + connectBranch(tree, "ECF3", &m_ECF3); + connectBranch(tree, "C2", &m_C2); + connectBranch(tree, "D2", &m_D2); + connectBranch(tree, "NTrimSubjets", &m_NTrimSubjets); + connectBranch (tree, "Nclusters", &m_NClusters); + connectBranch (tree, "nTracks", &m_nTracks); + connectBranch (tree, "ungrtrk500", &m_ungrtrk500); + connectBranch(tree, "EMFrac", &m_EMFrac); + connectBranch (tree, "nChargedParticles", &m_nChargedParticles); + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){ + connectBranch(tree, "NTrimSubjets", &m_NTrimSubjets); + } + + if ( m_infoSwitch.m_constituent) { + connectBranch (tree, "numConstituents", &m_numConstituents); + } + + if ( m_infoSwitch.m_constituentAll) { + connectBranch< std::vector >(tree, "constituentWeights", &m_constituentWeights); + connectBranch< std::vector >(tree, "constituent_pt", &m_constituent_pt); + connectBranch< std::vector >(tree, "constituent_eta", &m_constituent_eta); + connectBranch< std::vector >(tree, "constituent_phi", &m_constituent_phi); + connectBranch< std::vector >(tree, "constituent_e", &m_constituent_e); + } + + if(m_infoSwitch.m_truth) + { + connectBranch(tree,"truth_m", &m_truth_m); + connectBranch(tree,"truth_pt", &m_truth_pt); + connectBranch(tree,"truth_phi", &m_truth_phi); + connectBranch(tree,"truth_eta", &m_truth_eta); + } + + if ( m_infoSwitch.m_bosonCount) { + connectBranch< int >(tree, "nTQuarks", &m_nTQuarks); + connectBranch< int >(tree, "nHBosons", &m_nHBosons); + connectBranch< int >(tree, "nWBosons", &m_nWBosons); + connectBranch< int >(tree, "nZBosons", &m_nZBosons); + } + + if (m_infoSwitch.m_muonCorrection) { + connectBranch< float >(tree, "muonCorrected_pt" , &m_muonCorrected_pt ); + connectBranch< float >(tree, "muonCorrected_eta", &m_muonCorrected_eta); + connectBranch< float >(tree, "muonCorrected_phi", &m_muonCorrected_phi); + connectBranch< float >(tree, "muonCorrected_m" , &m_muonCorrected_m ); + + } + + for(const std::pair< std::string, std::vector>* >& kv : m_trkJetsIdx) + { + m_trkJets[kv.first]->JetContainer::setTree(tree); + if(tree->GetBranch(branchName("trkJetsIdx").c_str())) + connectBranch< std::vector >(tree, "trkJetsIdx", &m_trkJetsIdx[kv.first]); + else + connectBranch< std::vector >(tree, "trkJetsIdx_"+kv.first, &m_trkJetsIdx[kv.first]); + } + } + + void FatJetContainer::updateParticle(uint idx, FatJet& fatjet) + { + if(m_debug) std::cout << "in FatJetContainer::updateParticle " << std::endl; + ParticleContainer::updateParticle(idx,fatjet); + + if ( m_infoSwitch.m_scales ) { + fatjet.JetConstitScaleMomentum_eta = m_JetConstitScaleMomentum_eta ->at(idx); + fatjet.JetConstitScaleMomentum_phi = m_JetConstitScaleMomentum_phi ->at(idx); + fatjet.JetConstitScaleMomentum_m = m_JetConstitScaleMomentum_m ->at(idx); + fatjet.JetConstitScaleMomentum_pt = m_JetConstitScaleMomentum_pt ->at(idx); + + fatjet.JetEMScaleMomentum_eta = m_JetEMScaleMomentum_eta ->at(idx); + fatjet.JetEMScaleMomentum_phi = m_JetEMScaleMomentum_phi ->at(idx); + fatjet.JetEMScaleMomentum_m = m_JetEMScaleMomentum_m ->at(idx); + fatjet.JetEMScaleMomentum_pt = m_JetEMScaleMomentum_pt ->at(idx); + } + + if ( m_infoSwitch.m_area ) { + fatjet.GhostArea = m_GhostArea->at(idx); + fatjet.ActiveArea = m_ActiveArea->at(idx); + fatjet.VoronoiArea = m_VoronoiArea->at(idx); + fatjet.ActiveArea4vec_pt = m_ActiveArea4vec_pt->at(idx); + fatjet.ActiveArea4vec_eta = m_ActiveArea4vec_eta->at(idx); + fatjet.ActiveArea4vec_phi = m_ActiveArea4vec_phi->at(idx); + fatjet.ActiveArea4vec_m = m_ActiveArea4vec_m->at(idx); + } + + if ( m_infoSwitch.m_substructure ) { + fatjet.Split12 = m_Split12 ->at(idx); + fatjet.Split23 = m_Split23 ->at(idx); + fatjet.Split34 = m_Split34 ->at(idx); + fatjet.tau1_wta = m_tau1_wta ->at(idx); + fatjet.tau2_wta = m_tau2_wta ->at(idx); + fatjet.tau3_wta = m_tau3_wta ->at(idx); + fatjet.tau21_wta = m_tau21_wta ->at(idx); + fatjet.tau32_wta = m_tau32_wta ->at(idx); + fatjet.ECF1 = m_ECF1 ->at(idx); + fatjet.ECF2 = m_ECF2 ->at(idx); + fatjet.ECF3 = m_ECF3 ->at(idx); + fatjet.C2 = m_C2 ->at(idx); + fatjet.D2 = m_D2 ->at(idx); + fatjet.NTrimSubjets = m_NTrimSubjets->at(idx); + fatjet.NClusters = m_NClusters ->at(idx); + fatjet.nTracks = m_nTracks ->at(idx); + fatjet.ungrtrk500 = m_ungrtrk500 ->at(idx); + fatjet.EMFrac = m_EMFrac ->at(idx); + fatjet.nChargedParticles = m_nChargedParticles ->at(idx); + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){ + fatjet.NTrimSubjets = m_NTrimSubjets->at(idx); + } + + if ( m_infoSwitch.m_constituent) { + fatjet.numConstituents = m_numConstituents ->at(idx); + } + + if ( m_infoSwitch.m_constituentAll) { + fatjet.constituentWeights = m_constituentWeights ->at(idx); + fatjet.constituent_pt = m_constituent_pt ->at(idx); + fatjet.constituent_eta = m_constituent_eta ->at(idx); + fatjet.constituent_phi = m_constituent_phi ->at(idx); + fatjet.constituent_e = m_constituent_e ->at(idx); + } + + if(m_infoSwitch.m_truth) + { + fatjet.truth_p4.SetPtEtaPhiE(m_truth_pt ->at(idx), + m_truth_eta->at(idx), + m_truth_phi->at(idx), + m_truth_m ->at(idx)); + } + + if (m_infoSwitch.m_bosonCount) { + fatjet.nTQuarks = m_nTQuarks->at(idx); + fatjet.nHBosons = m_nHBosons->at(idx); + fatjet.nWBosons = m_nWBosons->at(idx); + fatjet.nZBosons = m_nZBosons->at(idx); + } + + if (m_infoSwitch.m_muonCorrection) { + fatjet.muonCorrected_pt = m_muonCorrected_pt ->at(idx); + fatjet.muonCorrected_eta = m_muonCorrected_eta->at(idx); + fatjet.muonCorrected_phi = m_muonCorrected_phi->at(idx); + fatjet.muonCorrected_m = m_muonCorrected_m ->at(idx); + } + + for(const auto& kv : m_trkJets) + { + fatjet.trkJets[kv.first].clear(); + std::vector> *trkJetsIdx=m_trkJetsIdx[kv.first]; + for(unsigned int iTrkJet : trkJetsIdx->at(idx)) + { + Jet thisTrkJet; + kv.second->updateParticle(iTrkJet, thisTrkJet); + fatjet.trkJets[kv.first].push_back(thisTrkJet); + } + } + + if(m_debug) std::cout << "leave FatJetContainer::updateParticle " << std::endl; + return; + } + + + + void FatJetContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + if ( m_infoSwitch.m_scales ) { + setBranch(tree, "JetConstitScaleMomentum_eta", m_JetConstitScaleMomentum_eta); + setBranch(tree, "JetConstitScaleMomentum_phi", m_JetConstitScaleMomentum_phi); + setBranch(tree, "JetConstitScaleMomentum_m", m_JetConstitScaleMomentum_m); + setBranch(tree, "JetConstitScaleMomentum_pt", m_JetConstitScaleMomentum_pt); + + setBranch(tree, "JetEMScaleMomentum_eta", m_JetEMScaleMomentum_eta); + setBranch(tree, "JetEMScaleMomentum_phi", m_JetEMScaleMomentum_phi); + setBranch(tree, "JetEMScaleMomentum_m", m_JetEMScaleMomentum_m); + setBranch(tree, "JetEMScaleMomentum_pt", m_JetEMScaleMomentum_pt); + } + + if ( m_infoSwitch.m_area ) { + setBranch(tree, "GhostArea", m_GhostArea); + setBranch(tree, "ActiveArea", m_ActiveArea); + setBranch(tree, "VoronoiArea", m_VoronoiArea); + setBranch(tree, "ActiveArea4vec_pt", m_ActiveArea4vec_pt); + setBranch(tree, "ActiveArea4vec_eta", m_ActiveArea4vec_eta); + setBranch(tree, "ActiveArea4vec_phi", m_ActiveArea4vec_phi); + setBranch(tree, "ActiveArea4vec_m", m_ActiveArea4vec_m); + + } + + if ( m_infoSwitch.m_substructure ) { + setBranch(tree, "Split12", m_Split12); + setBranch(tree, "Split23", m_Split23); + setBranch(tree, "Split34", m_Split34); + setBranch(tree, "tau1_wta", m_tau1_wta); + setBranch(tree, "tau2_wta", m_tau2_wta); + setBranch(tree, "tau3_wta", m_tau3_wta); + setBranch(tree, "tau21_wta", m_tau21_wta); + setBranch(tree, "tau32_wta", m_tau32_wta); + setBranch(tree, "ECF1", m_ECF1); + setBranch(tree, "ECF2", m_ECF2); + setBranch(tree, "ECF3", m_ECF3); + setBranch(tree, "C2", m_C2); + setBranch(tree, "D2", m_D2); + setBranch(tree, "NTrimSubjets", m_NTrimSubjets); + setBranch (tree, "Nclusters", m_NClusters); + setBranch (tree, "nTracks", m_nTracks); + setBranch (tree, "ungrtrk500", m_ungrtrk500); + setBranch(tree, "EMFrac", m_EMFrac); + setBranch (tree, "nChargedParticles", m_nChargedParticles); + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure){ + setBranch(tree, "NTrimSubjets", m_NTrimSubjets); + } + + if ( m_infoSwitch.m_constituent) { + setBranch (tree, "numConstituents", m_numConstituents); + } + + if ( m_infoSwitch.m_constituentAll) { + setBranch< std::vector >(tree, "constituentWeights", m_constituentWeights); + setBranch< std::vector >(tree, "constituent_pt", m_constituent_pt); + setBranch< std::vector >(tree, "constituent_eta", m_constituent_eta); + setBranch< std::vector >(tree, "constituent_phi", m_constituent_phi); + setBranch< std::vector >(tree, "constituent_e", m_constituent_e); + } + + if ( m_infoSwitch.m_truth && m_mc ) { + setBranch(tree, "truth_m" , m_truth_m ); + setBranch(tree, "truth_pt" , m_truth_pt ); + setBranch(tree, "truth_phi", m_truth_phi); + setBranch(tree, "truth_eta", m_truth_eta); + } + + if ( m_infoSwitch.m_bosonCount && m_mc ) { + setBranch< int >(tree, "nTQuarks", m_nTQuarks); + setBranch< int >(tree, "nHBosons", m_nHBosons); + setBranch< int >(tree, "nWBosons", m_nWBosons); + setBranch< int >(tree, "nZBosons", m_nZBosons); + } + if (m_infoSwitch.m_muonCorrection) { + setBranch (tree, "muonCorrected_pt" , m_muonCorrected_pt ); + setBranch (tree, "muonCorrected_eta", m_muonCorrected_eta); + setBranch (tree, "muonCorrected_phi", m_muonCorrected_phi); + setBranch (tree, "muonCorrected_m" , m_muonCorrected_m ); + } + + for(const auto& kv : m_trkJets) + { + kv.second->setBranches(tree); + setBranch< std::vector >(tree, "trkJetsIdx_"+kv.first, m_trkJetsIdx[kv.first]); + } + + return; + } + + + void FatJetContainer::clear() + { + + ParticleContainer::clear(); + + if ( m_infoSwitch.m_scales ) { + m_JetConstitScaleMomentum_eta ->clear(); + m_JetConstitScaleMomentum_phi ->clear(); + m_JetConstitScaleMomentum_m ->clear(); + m_JetConstitScaleMomentum_pt ->clear(); + + m_JetEMScaleMomentum_eta ->clear(); + m_JetEMScaleMomentum_phi ->clear(); + m_JetEMScaleMomentum_m ->clear(); + m_JetEMScaleMomentum_pt ->clear(); + } + + if ( m_infoSwitch.m_area ) { + m_GhostArea->clear(); + m_ActiveArea->clear(); + m_VoronoiArea->clear(); + m_ActiveArea4vec_pt->clear(); + m_ActiveArea4vec_eta->clear(); + m_ActiveArea4vec_phi->clear(); + m_ActiveArea4vec_m->clear(); + } + + if ( m_infoSwitch.m_substructure ) { + m_Split12 ->clear(); + m_Split23 ->clear(); + m_Split34 ->clear(); + m_tau1_wta ->clear(); + m_tau2_wta ->clear(); + m_tau3_wta ->clear(); + m_tau21_wta ->clear(); + m_tau32_wta ->clear(); + m_ECF1 ->clear(); + m_ECF2 ->clear(); + m_ECF3 ->clear(); + m_C2 ->clear(); + m_D2 ->clear(); + m_NTrimSubjets->clear(); + m_NClusters ->clear(); + m_nTracks ->clear(); + m_ungrtrk500 ->clear(); + m_EMFrac ->clear(); + m_nChargedParticles ->clear(); + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){ + m_NTrimSubjets->clear(); + } + + if ( m_infoSwitch.m_constituent) { + m_numConstituents->clear(); + } + + if ( m_infoSwitch.m_constituentAll) { + m_constituentWeights->clear(); + m_constituent_pt ->clear(); + m_constituent_eta ->clear(); + m_constituent_phi ->clear(); + m_constituent_e ->clear(); + } + + if ( m_infoSwitch.m_truth && m_mc ) { + m_truth_m ->clear(); + m_truth_pt ->clear(); + m_truth_phi->clear(); + m_truth_eta->clear(); + } + + if ( m_infoSwitch.m_bosonCount && m_mc) { + m_nTQuarks->clear(); + m_nHBosons->clear(); + m_nWBosons->clear(); + m_nZBosons->clear(); + } + + if ( m_infoSwitch.m_muonCorrection) { + m_muonCorrected_pt ->clear(); + m_muonCorrected_eta->clear(); + m_muonCorrected_phi->clear(); + m_muonCorrected_m ->clear(); + } + + for(const std::pair< std::string, std::vector>* >& kv : m_trkJetsIdx) + { + m_trkJets [kv.first]->clear(); + m_trkJetsIdx[kv.first]->clear(); + } + + return; + } + + void FatJetContainer::FillFatJet( const xAOD::Jet* jet, int pvLocation ){ + return FillFatJet(static_cast(jet), pvLocation); + } + + void FatJetContainer::FillFatJet( const xAOD::IParticle* particle, int pvLocation ){ + + ParticleContainer::FillParticle(particle); + + const xAOD::Jet* fatjet=dynamic_cast(particle); + + if( m_infoSwitch.m_scales ){ + static SG::AuxElement::ConstAccessor acc_JetConstitScaleMomentum_eta("JetConstitScaleMomentum_eta"); + safeFill(fatjet, acc_JetConstitScaleMomentum_eta, m_JetConstitScaleMomentum_eta, -999); + static SG::AuxElement::ConstAccessor acc_JetConstitScaleMomentum_phi("JetConstitScaleMomentum_phi"); + safeFill(fatjet, acc_JetConstitScaleMomentum_phi, m_JetConstitScaleMomentum_phi, -999); + static SG::AuxElement::ConstAccessor acc_JetConstitScaleMomentum_m("JetConstitScaleMomentum_m"); + safeFill(fatjet, acc_JetConstitScaleMomentum_m, m_JetConstitScaleMomentum_m, -999, m_units); + static SG::AuxElement::ConstAccessor acc_JetConstitScaleMomentum_pt("JetConstitScaleMomentum_pt"); + safeFill(fatjet, acc_JetConstitScaleMomentum_pt, m_JetConstitScaleMomentum_pt, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_JetEMScaleMomentum_eta("JetEMScaleMomentum_eta"); + safeFill(fatjet, acc_JetEMScaleMomentum_eta, m_JetEMScaleMomentum_eta, -999); + static SG::AuxElement::ConstAccessor acc_JetEMScaleMomentum_phi("JetEMScaleMomentum_phi"); + safeFill(fatjet, acc_JetEMScaleMomentum_phi, m_JetEMScaleMomentum_phi, -999); + static SG::AuxElement::ConstAccessor acc_JetEMScaleMomentum_m("JetEMScaleMomentum_m"); + safeFill(fatjet, acc_JetEMScaleMomentum_m, m_JetEMScaleMomentum_m, -999, m_units); + static SG::AuxElement::ConstAccessor acc_JetEMScaleMomentum_pt("JetEMScaleMomentum_pt"); + safeFill(fatjet, acc_JetEMScaleMomentum_pt, m_JetEMScaleMomentum_pt, -999, m_units); + } + + if ( m_infoSwitch.m_area ) { + static SG::AuxElement::ConstAccessor acc_GhostArea("GhostArea"); + safeFill(fatjet, acc_GhostArea, m_GhostArea, -999); + static SG::AuxElement::ConstAccessor acc_ActiveArea("ActiveArea"); + safeFill(fatjet, acc_ActiveArea, m_ActiveArea, -999); + static SG::AuxElement::ConstAccessor acc_VoronoiArea("VoronoiArea"); + safeFill(fatjet, acc_VoronoiArea, m_VoronoiArea, -999); + static SG::AuxElement::ConstAccessor acc_ActiveArea4vec_pt("ActiveArea4vec_pt"); + safeFill(fatjet, acc_ActiveArea4vec_pt, m_ActiveArea4vec_pt, -999, m_units); + static SG::AuxElement::ConstAccessor acc_ActiveArea4vec_eta("ActiveArea4vec_eta"); + safeFill(fatjet, acc_ActiveArea4vec_eta, m_ActiveArea4vec_eta, -999); + static SG::AuxElement::ConstAccessor acc_ActiveArea4vec_phi("ActiveArea4vec_phi"); + safeFill(fatjet, acc_ActiveArea4vec_phi, m_ActiveArea4vec_phi, -999); + static SG::AuxElement::ConstAccessor acc_ActiveArea4vec_m("ActiveArea4vec_m"); + safeFill(fatjet, acc_ActiveArea4vec_m, m_ActiveArea4vec_m, -999, m_units); + } + + if( m_infoSwitch.m_substructure ){ + static SG::AuxElement::ConstAccessor acc_Split12("Split12"); + safeFill(fatjet, acc_Split12, m_Split12, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_Split23("Split23"); + safeFill(fatjet, acc_Split23, m_Split23, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_Split34("Split34"); + safeFill(fatjet, acc_Split34, m_Split34, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_tau1_wta ("Tau1_wta"); + safeFill(fatjet, acc_tau1_wta, m_tau1_wta, -999); + + static SG::AuxElement::ConstAccessor acc_tau2_wta ("Tau2_wta"); + safeFill(fatjet, acc_tau2_wta, m_tau2_wta, -999); + + static SG::AuxElement::ConstAccessor acc_tau3_wta ("Tau3_wta"); + safeFill(fatjet, acc_tau3_wta, m_tau3_wta, -999); + + static SG::AuxElement::ConstAccessor acc_tau21_wta ("Tau21_wta"); + if(acc_tau21_wta.isAvailable( *fatjet )){ + m_tau21_wta->push_back( acc_tau21_wta( *fatjet ) ); + } else if ( acc_tau1_wta.isAvailable( *fatjet ) && acc_tau2_wta.isAvailable( *fatjet ) ) { + m_tau21_wta->push_back( acc_tau2_wta( *fatjet ) / acc_tau1_wta( *fatjet ) ); + } else { m_tau21_wta->push_back( -999 ); } + + static SG::AuxElement::ConstAccessor acc_tau32_wta ("Tau32_wta"); + if(acc_tau32_wta.isAvailable( *fatjet )){ + m_tau32_wta->push_back( acc_tau32_wta( *fatjet ) ); + } else if ( acc_tau2_wta.isAvailable( *fatjet ) && acc_tau3_wta.isAvailable( *fatjet ) ) { + m_tau32_wta->push_back( acc_tau3_wta( *fatjet ) / acc_tau2_wta( *fatjet ) ); + } else { m_tau32_wta->push_back( -999 ); } + + static SG::AuxElement::ConstAccessor acc_NClusters ("MyNClusters"); + safeFill(fatjet, acc_NClusters, m_NClusters, -999); + + static SG::AuxElement::ConstAccessor acc_ECF1 ("ECF1"); + safeFill(fatjet, acc_ECF1, m_ECF1, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_ECF2("ECF2"); + safeFill(fatjet, acc_ECF2, m_ECF2, -999, m_units); + + static SG::AuxElement::ConstAccessor acc_ECF3 ("ECF3"); + safeFill(fatjet, acc_ECF3, m_ECF3, -999, m_units); + + static SG::AuxElement::ConstAccessor NTrimSubjets("NTrimSubjets"); + safeFill(fatjet, NTrimSubjets, m_NTrimSubjets, -999); + + static SG::AuxElement::ConstAccessor acc_D2 ("D2"); + if( acc_D2.isAvailable( *fatjet ) ) { + m_D2->push_back( acc_D2( *fatjet )); + } else if (acc_ECF1.isAvailable( *fatjet ) && acc_ECF2.isAvailable( *fatjet ) && acc_ECF3.isAvailable( *fatjet )){ + float e2=(acc_ECF2( *fatjet )/(acc_ECF1( *fatjet )*acc_ECF1( *fatjet ))); + float e3=(acc_ECF3( *fatjet )/(acc_ECF1( *fatjet )*acc_ECF1( *fatjet )*acc_ECF1( *fatjet ))); + m_D2->push_back( e3/(e2*e2*e2) ); + } else{ m_D2->push_back(-999); } + + static SG::AuxElement::ConstAccessor acc_C2("C2"); + if(acc_C2.isAvailable(*fatjet)){ + m_C2->push_back(acc_C2(*fatjet)); + } else if( acc_ECF1.isAvailable(*fatjet) && acc_ECF2.isAvailable(*fatjet) && acc_ECF3.isAvailable(*fatjet)){ + m_C2->push_back( acc_ECF3(*fatjet)*acc_ECF1(*fatjet)/pow(acc_ECF2(*fatjet),2.0)); + } else{ m_C2->push_back(-999); } + + static SG::AuxElement::ConstAccessor acc_GhostTrackCount("GhostTrackCount"); + if( acc_GhostTrackCount.isAvailable( *fatjet ) ) { + m_nTracks->push_back( acc_GhostTrackCount( *fatjet )); + } else { m_nTracks->push_back(-999); } + + static SG::AuxElement::ConstAccessor> acc_parent("Parent"); + if (acc_parent.isAvailable(*fatjet)) { + ElementLink fatjetParentLink = acc_parent(*fatjet); + if (fatjetParentLink.isValid()) { + const xAOD::Jet* fatjetParent {*fatjetParentLink}; + static SG::AuxElement::ConstAccessor< std::vector > acc_NumTrkPt500("NumTrkPt500"); + if ( acc_NumTrkPt500.isAvailable( *fatjetParent ) ) { + m_ungrtrk500->push_back( acc_NumTrkPt500( *fatjetParent )[pvLocation] ); + } else { + //Perhaps the case if we are dealing with reclustered jets + int sumUngrtrk500 = 0; + const xAOD::Jet* subjet(nullptr); + for(auto constit: fatjet->getConstituents()){ + subjet = static_cast(constit->rawConstituent()); + if (subjet->type() != xAOD::Type::Jet) continue; + if ( acc_NumTrkPt500.isAvailable( *subjet ) ) sumUngrtrk500+=acc_NumTrkPt500( *subjet )[pvLocation]; + } + m_ungrtrk500->push_back( sumUngrtrk500 ); + } + } else { + m_ungrtrk500->push_back(-999); + } + } else { + m_ungrtrk500->push_back(-999); + } + + m_EMFrac->push_back(GetEMFrac (*fatjet)); + + static SG::AuxElement::ConstAccessor acc_nChargedParticles("nChargedParticles"); + if( acc_nChargedParticles.isAvailable( *fatjet ) ) { + m_nChargedParticles->push_back( acc_nChargedParticles( *fatjet )); + } else { m_nChargedParticles->push_back(-999); } + + } + + if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){ + static SG::AuxElement::ConstAccessor NTrimSubjets("NTrimSubjets"); + safeFill(fatjet, NTrimSubjets, m_NTrimSubjets, -999); + } + + if( m_infoSwitch.m_constituent ){ + m_numConstituents->push_back( fatjet->numConstituents() ); + } + + + if( m_infoSwitch.m_constituentAll ){ + m_constituentWeights->push_back( fatjet->getAttribute< std::vector >( "constituentWeights" ) ); + std::vector pt; + std::vector eta; + std::vector phi; + std::vector e; + xAOD::JetConstituentVector consVec = fatjet->getConstituents(); + + if( consVec.isValid() ) { + + // use the example provided in + // http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Event/xAOD/xAODJet/xAODJet/JetConstituentVector.h + xAOD::JetConstituentVector::iterator constit = consVec.begin(); + xAOD::JetConstituentVector::iterator constitE = consVec.end(); + for( ; constit != constitE; constit++){ + pt. push_back( constit->pt() / m_units ); + eta.push_back( constit->eta() ); + phi.push_back( constit->phi() ); + e. push_back( constit->e() / m_units ); + } + } + m_constituent_pt ->push_back( pt ); + m_constituent_eta->push_back( eta ); + m_constituent_phi->push_back( phi ); + m_constituent_e ->push_back( e ); + } + + if ( m_infoSwitch.m_truth && m_mc ) { + const xAOD::Jet* truthJet = HelperFunctions::getLink( fatjet, "GhostTruthAssociationLink" ); + if(truthJet) { + m_truth_pt->push_back ( truthJet->pt() / m_units ); + m_truth_eta->push_back( truthJet->eta() ); + m_truth_phi->push_back( truthJet->phi() ); + m_truth_m->push_back ( truthJet->m() / m_units ); + } else { + m_truth_pt->push_back ( -999 ); + m_truth_eta->push_back( -999 ); + m_truth_phi->push_back( -999 ); + m_truth_m->push_back ( -999 ); + } + + } + + if(m_infoSwitch.m_bosonCount && m_mc){ + + const xAOD::Jet* fatjet_parent = fatjet; // Trimmed jet area will be used for leading calo-jet if parent link fails + + try + { + auto el = fatjet->auxdata >("Parent"); + if(el.isValid()) + fatjet_parent = (*el); + else + Warning("execute()", "Invalid link to \"Parent\" from leading calo-jet"); + } + catch(...) + { + Warning("execute()", "Unable to fetch \"Parent\" link from leading calo-jet"); + } + + static SG::AuxElement::ConstAccessor< int > truthfatjet_TQuarks("GhostTQuarksFinalCount"); + safeFill(fatjet_parent, truthfatjet_TQuarks, m_nTQuarks, -999); + + static SG::AuxElement::ConstAccessor< int > truthfatjet_WBosons("GhostWBosonsCount"); + safeFill(fatjet_parent, truthfatjet_WBosons, m_nWBosons, -999); + + static SG::AuxElement::ConstAccessor< int > truthfatjet_ZBosons("GhostZBosonsCount"); + safeFill(fatjet_parent, truthfatjet_ZBosons, m_nZBosons, -999); + + static SG::AuxElement::ConstAccessor< int > truthfatjet_HBosons("GhostHBosonsCount"); + safeFill(fatjet_parent, truthfatjet_HBosons, m_nHBosons, -999); + } + + if (m_infoSwitch.m_muonCorrection) { + static const SG::AuxElement::ConstAccessor acc_correctedFatJets_tlv("correctedFatJets_tlv"); + m_muonCorrected_pt ->push_back(acc_correctedFatJets_tlv(*fatjet).Pt() / m_units); + m_muonCorrected_eta->push_back(acc_correctedFatJets_tlv(*fatjet).Eta()); + m_muonCorrected_phi->push_back(acc_correctedFatJets_tlv(*fatjet).Phi()); + m_muonCorrected_m ->push_back(acc_correctedFatJets_tlv(*fatjet).M() / m_units); + } + + + // + // Associated track jets + // + if( !m_infoSwitch.m_trackJetNames.empty() ){ + + // Find the fat jet parent + const xAOD::Jet* fatjet_parent = fatjet; // Trimmed jet area will be used for leading calo-jet if parent link fails + + try{ + auto el = fatjet->auxdata >("Parent"); + if(el.isValid()) + fatjet_parent = (*el); + else + Warning("execute()", "Invalid link to \"Parent\" from leading calo-jet"); + } + catch (...){ + Warning("execute()", "Unable to fetch \"Parent\" link from leading calo-jet"); + } + + // Associate the different track jet collections + std::vector assotrkjets; + for(const auto& trackJetName : m_infoSwitch.m_trackJetNames) + { + try{ + assotrkjets = fatjet_parent->getAssociatedObjects(trackJetName); + std::sort( assotrkjets.begin(), assotrkjets.end(), HelperFunctions::sort_pt ); + } + catch (...){ + Warning("execute()", "Unable to fetch \"%s\" link from leading calo-jet", trackJetName.data()); + } + + std::vector trkJetsIdx; + for(auto TrackJet : assotrkjets){ + if(!SelectTrackJet(TrackJet)) continue; + trkJetsIdx.push_back(m_trkJets[trackJetName]->m_n); + m_trkJets[trackJetName]->FillJet(TrackJet, 0 , 0); + } + m_trkJetsIdx[trackJetName]->push_back(trkJetsIdx); + } + } + + return; + } + + + bool FatJetContainer::SelectTrackJet(const xAOD::Jet* TrackJet) + { + if( TrackJet->pt() < m_trackJetPtCut ) return false; + if( fabs(TrackJet->eta()) > m_trackJetEtaCut ) return false; + if( TrackJet->numConstituents() < 2 ) return false; + + return true; + } + + float FatJetContainer::GetEMFrac(const xAOD::Jet& jet) { + float eInSample = 0.; + float eInSampleFull = 0.; + float emfrac = 0.; + const xAOD::JetConstituentVector constituents = jet.getConstituents(); + if (!constituents.isValid()){ + //ATH_MSG_WARNING("Unable to retrieve valid constituents from parent of large R jet"); + return -1.; + } + for (const auto& constituent : constituents) { + if(!constituent) continue; + if(constituent->rawConstituent()->type()!=xAOD::Type::CaloCluster) { + //ATH_MSG_WARNING("Tried to call fillEperSamplingCluster with a jet constituent that is not a cluster!"); + continue; + } + const xAOD::CaloCluster* constit = static_cast(constituent->rawConstituent()); + if(!constit) continue; + for (int s=0;seSample(CaloSampling::CaloSample(s)); + } + eInSample += constit->eSample(CaloSampling::EMB1); + eInSample += constit->eSample(CaloSampling::EMB2); + eInSample += constit->eSample(CaloSampling::EMB3); + eInSample += constit->eSample(CaloSampling::EME1); + eInSample += constit->eSample(CaloSampling::EME2); + eInSample += constit->eSample(CaloSampling::EME3); + eInSample += constit->eSample(CaloSampling::FCAL1); + } + emfrac = eInSample/eInSampleFull; + if ( emfrac > 1.0 ) emfrac = 1.; + else if ( emfrac < 0.0 ) emfrac = 0.; + + return emfrac; + } + diff --git a/_sources/api/program_listing_file_Root_HLTJetGetter.cxx.rst.txt b/_sources/api/program_listing_file_Root_HLTJetGetter.cxx.rst.txt new file mode 100644 index 0000000000..4fa96fe06c --- /dev/null +++ b/_sources/api/program_listing_file_Root_HLTJetGetter.cxx.rst.txt @@ -0,0 +1,200 @@ + +.. _program_listing_file_Root_HLTJetGetter.cxx: + +Program Listing for File HLTJetGetter.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HLTJetGetter.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * This class gets HLT jets from the TDT and can be expanded to get other features + * + * Merlin Davies (merlin.davies@cern.ch) + * Caterina Doglioni (caterina.doglioni@cern.ch) + * John Alison (john.alison@cern.ch) + * + * + ******************************************/ + + // c++ include(s): + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/JetAuxContainer.h" + #include "xAODJet/Jet.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HLTJetGetter.h" + #include "TrigConfxAOD/xAODConfigTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(HLTJetGetter) + + HLTJetGetter :: HLTJetGetter () : + Algorithm("HLTJetGetter") + { + } + + + EL::StatusCode HLTJetGetter :: setupJob (EL::Job& job) + { + ANA_MSG_INFO( "Calling setupJob"); + job.useXAOD (); + xAOD::Init( "HLTJetGetter" ).ignore(); // call before opening first file + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: histInitialize () + { + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: fileExecute () + { + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: changeInput (bool /*firstFile*/) + { + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode HLTJetGetter :: initialize () + { + + + ANA_MSG_INFO( "Initializing HLTJetGetter Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // + // Grab the TrigDecTool from the ToolStore + // + + /* + if ( asg::ToolStore::contains( "TrigDecisionTool" ) ) { + m_trigDecTool = asg::ToolStore::get("TrigDecisionTool"); + } else { + Info ("Initialize()", "the Trigger Decision Tool is not yet initialized...[%s]. Doing so now.", m_name.c_str()); + m_ownTDTAndTCT = true; + + m_trigConfTool = new TrigConf::xAODConfigTool( "xAODConfigTool" ); + ANA_CHECK( m_trigConfTool->initialize()); + ToolHandle< TrigConf::ITrigConfigTool > configHandle( m_trigConfTool ); + + m_trigDecTool = new Trig::TrigDecisionTool( "TrigDecisionTool" ); + ANA_CHECK( m_trigDecTool->setProperty( "ConfigTool", configHandle )); + ANA_CHECK( m_trigDecTool->setProperty( "TrigDecisionKey", "xTrigDecision" )); + ANA_CHECK( m_trigDecTool->setProperty( "OutputLevel", MSG::ERROR)); + ANA_CHECK( m_trigDecTool->initialize()); + ANA_MSG_INFO( "Successfully configured Trig::TrigDecisionTool!"); + } + */ + + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + + // If there is no InputContainer we must stop + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode HLTJetGetter :: execute () + { + ANA_MSG_DEBUG( "Getting HLT jets... "); + + // + // Create the new container and its auxiliary store. + // + xAOD::JetContainer* hltJets = new xAOD::JetContainer(); + xAOD::JetAuxContainer* hltJetsAux = new xAOD::JetAuxContainer(); + hltJets->setStore( hltJetsAux ); //< Connect the two + + //Retrieving jets via trigger decision tool: + const Trig::ChainGroup * chainGroup = m_trigDecTool_handle->getChainGroup(m_triggerList); //Trigger list: + + std::vector trigger_list = chainGroup->getListOfTriggers(); + + auto chainFeatures = chainGroup->features(); //Gets features associated to chain defined above + + auto JetFeatureContainers = chainFeatures.containerFeature(m_inContainerName.c_str()); + + ANA_CHECK( m_store->record( hltJets, m_outContainerName)); + ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux.")); + + for( auto fContainer : JetFeatureContainers ) { + for( auto trigJet : *fContainer.cptr() ) { + xAOD::Jet *Jet = new xAOD::Jet(); + *Jet = *trigJet; + hltJets->push_back( Jet ); + }//end trigJet loop + }//end feature container loop + + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: postExecute () + { + ANA_MSG_DEBUG( "Calling postExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: finalize () + { + ANA_MSG_INFO( "Deleting tool instances..."); + + // this is necessary because in most cases the pointer will be set to null + // after deletion in BasicEventSelection, but it will not propagate here + if ( m_ownTDTAndTCT ) { + //if ( m_trigDecTool_handle ) { delete m_trigDecTool_handle; m_trigDecTool_handle = nullptr; } + if ( m_trigDecTool_handle.isInitialized() ) m_trigDecTool_handle->finalize(); + if ( m_trigConfTool ) { delete m_trigConfTool; m_trigConfTool = nullptr; } + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode HLTJetGetter :: histFinalize () + { + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.rst.txt b/_sources/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.rst.txt new file mode 100644 index 0000000000..caa55e4bdb --- /dev/null +++ b/_sources/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.rst.txt @@ -0,0 +1,562 @@ + +.. _program_listing_file_Root_HLTJetRoIBuilder.cxx: + +Program Listing for File HLTJetRoIBuilder.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HLTJetRoIBuilder.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * This class builds HLT jets and thier associated objects + * + * John Alison (john.alison@cern.ch) + * + * + ******************************************/ + + //#include + //#include + // + //#include + //#include + //#include + // + //#include "xAODEventInfo/EventInfo.h" + //#include "xAODJet/JetContainer.h" + //#include "xAODJet/JetAuxContainer.h" + //#include "xAODJet/Jet.h" + //#include "xAODBase/IParticleHelpers.h" + //#include "xAODBase/IParticleContainer.h" + //#include "xAODBase/IParticle.h" + //#include "AthContainers/ConstDataVector.h" + //#include "AthContainers/DataVector.h" + //#include "xAODCore/ShallowCopy.h" + // + //#include "xAODAnaHelpers/HelperFunctions.h" + //#include "xAODAnaHelpers/HLTJetRoIBuilder.h" + // + //#include "TrigConfxAOD/xAODConfigTool.h" + //#include "TrigDecisionTool/TrigDecisionTool.h" + // + //ClassImp(HLTJetRoIBuilder) + // + //HLTJetRoIBuilder :: HLTJetRoIBuilder () : + // Algorithm("HLTJetRoIBuilder") + //{ + //} + // + // + //EL::StatusCode HLTJetRoIBuilder :: setupJob (EL::Job& job) + //{ + // ANA_MSG_DEBUG( "Calling setupJob"); + // job.useXAOD (); + // xAOD::Init( "HLTJetRoIBuilder" ).ignore(); // call before opening first file + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: histInitialize () + //{ + // ANA_CHECK( xAH::Algorithm::algInitialize()); + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: fileExecute () + //{ + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: changeInput (bool /*firstFile*/) + //{ + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: initialize () + //{ + // + // ANA_MSG_DEBUG( "Initializing HLTJetRoIBuilder Interface... "); + // + // m_event = wk()->xaodEvent(); + // m_store = wk()->xaodStore(); + // + // // Grab the TrigDecTool from the ToolStore + // if(!m_trigDecTool_handle.isUserConfigured()){ + // ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + // return EL::StatusCode::FAILURE; + // } + // ANA_CHECK( m_trigDecTool_handle.retrieve()); + // ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + // + // if(m_trigItem.find("split") != std::string::npos){ + // m_jetName = "SplitJet"; + // m_vtxName = "xPrimVx"; + // } + // + // if(m_trigItem.find("gsc") != std::string::npos){ + // m_jetName = "GSCJet"; + // m_vtxName = "xPrimVx"; + // } + // + // if(m_trigItem.find("FTK") != std::string::npos){ + // m_trkName = "InDetTrigTrackingxAODCnv_Bjet_FTK"; + // m_vtxName = ""; + // //m_vtxName = "HLT_PrimVertexFTK"; + // } + // + // if(m_trigItem.find("FTKRefit") != std::string::npos){ + // m_trkName = "InDetTrigTrackingxAODCnv_Bjet_FTKRefit"; + // } + // + // if(m_trigItem.find("FTKVtx") != std::string::npos){ + // m_trkName = "InDetTrigTrackingxAODCnv_Bjet_IDTrig"; + // } + // + // ANA_MSG_INFO("HLTJetRoIBuilder::Configured " << m_name << " with "); + // ANA_MSG_INFO("\tm_trigItem: " << m_trigItem); + // ANA_MSG_INFO("\tm_trigItemVeto: " << m_trigItemVeto); + // ANA_MSG_INFO("\tm_trkName: " << m_trkName); + // ANA_MSG_INFO("\tm_vtxName: " << m_vtxName); + // ANA_MSG_INFO("\tm_jetName: " << m_jetName); + // + // return EL::StatusCode::SUCCESS; + //} + // + // + //EL::StatusCode HLTJetRoIBuilder :: execute () + //{ + // ANA_MSG_DEBUG( "Doing HLT JEt ROI Building... "); + // + // if(m_doHLTBJet){ + // return buildHLTBJets(); + // }else if(m_doHLTJet){ + // return buildHLTJets(); + // } + // + // + // + // if(msgLvl(MSG::VERBOSE)) m_store->print(); + // + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: buildHLTBJets () + //{ + // ANA_MSG_VERBOSE(" " ); + // auto triggerChainGroup = m_trigDecTool_handle->getChainGroup(m_trigItem); + // + // std::vector triggersUsed = triggerChainGroup->getListOfTriggers(); + // std::vector triggersAfterVeto; + // for(std::string trig : triggersUsed){ + // if(trig.find("antimatchdr") != std::string::npos){ + // continue; + // } + // + // if((m_trigItemVeto != "") && (trig.find(m_trigItemVeto) != std::string::npos)){ + // continue; + // } + // triggersAfterVeto.push_back(trig); + // } + // + // std::string m_trigItemAfterVeto = ""; + // bool firstItem = true; + // for(std::string trig : triggersAfterVeto){ + // if(firstItem) m_trigItemAfterVeto += trig; + // else m_trigItemAfterVeto += "||"+trig; + // firstItem = false; + // } + // + // ANA_MSG_VERBOSE(m_name << " " << m_trigItem << " matches"); + // ANA_MSG_VERBOSE(m_trigItemAfterVeto); + // auto triggerChainGroupAfterVeto = m_trigDecTool_handle->getChainGroup(m_trigItemAfterVeto); + // std::vector triggersUsedAfterVeto = triggerChainGroupAfterVeto->getListOfTriggers(); + // for(std::string trig : triggersUsedAfterVeto){ + // ANA_MSG_VERBOSE(" \t " << trig); + // if(m_trigDecTool_handle->isPassed(trig)) + // ANA_MSG_VERBOSE(" \t " << trig << " Passed " ); + // } + // + // + // // + // // Create the new container and its auxiliary store. + // // + // ANA_MSG_VERBOSE("Creating the new container "); + // xAOD::JetContainer* hltJets = new xAOD::JetContainer(); + // xAOD::JetAuxContainer* hltJetsAux = new xAOD::JetAuxContainer(); + // hltJets->setStore( hltJetsAux ); //< Connect the two + // + // // + // // For Adding Tracks to the Jet + // // + // ANA_MSG_VERBOSE("Making the decorators "); + // static xAOD::Jet::Decorator > m_track_decoration ("HLTBJetTracks"); + // static xAOD::Jet::Decorator m_vtx_decoration ("HLTBJetTracks_vtx"); + // static xAOD::Jet::Decorator m_vtx_decoration_bkg ("HLTBJetTracks_vtx_bkg"); + // static xAOD::Jet::Decorator m_vtx_hadDummyPV ("hadDummyPV"); + // static xAOD::Jet::Decorator m_offline_vtx_decoration("offline_vtx"); + // + // static xAOD::Jet::Decorator m_bs_online_vz ("bs_online_vz"); + // static xAOD::Jet::Decorator m_bs_online_vy ("bs_online_vy"); + // static xAOD::Jet::Decorator m_bs_online_vx ("bs_online_vx"); + // + // + // // + // // get primary vertex + // // + // ANA_MSG_VERBOSE("Getting the PV "); + // const xAOD::VertexContainer *offline_vertices(nullptr); + // const xAOD::Vertex *offline_pvx(nullptr); + // ANA_CHECK( HelperFunctions::retrieve(offline_vertices, m_vertexContainerName, m_event, m_store, msg()) ); + // offline_pvx = HelperFunctions::getPrimaryVertex(offline_vertices, msg()); + // + // // + // // get event info + // // + // const xAOD::EventInfo* eventInfo(nullptr); + // ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + // + // + // // + // // Make accessors/decorators + // // + // static SG::AuxElement::Decorator< const xAOD::BTagging* > hltBTagDecor( "HLTBTag" ); + // + // Trig::FeatureContainer fc = m_trigDecTool_handle->features(m_trigItemAfterVeto, TrigDefs::Physics ); + // Trig::FeatureContainer::combination_const_iterator comb (fc.getCombinations().begin()); + // Trig::FeatureContainer::combination_const_iterator combEnd(fc.getCombinations().end()); + // ANA_MSG_VERBOSE( m_name << " New Event --------------- "); + // ANA_MSG_VERBOSE( " Event Pass? " << m_trigDecTool_handle->isPassed(m_trigItemAfterVeto) ); + // ANA_MSG_VERBOSE( " comb size " << fc.getCombinations().size()); + // for( ; comb!=combEnd ; ++comb) { + // std::vector< Trig::Feature > jetCollections = comb->containerFeature(m_jetName); + // std::vector< Trig::Feature > bjetCollections = comb->containerFeature("HLTBjetFex"); + // std::vector< Trig::Feature > trkCollections; + // if(m_readHLTTracks) trkCollections = comb->containerFeature(m_trkName); + // //std::vector< Trig::Feature > ftfCollections = comb->containerFeature("InDetTrigTrackingxAODCnv_Bjet_FTF"); + // + // std::vector > vtxCollections; + // std::vector > backupVtxCollections; + // if(m_readHLTVtx){ + // backupVtxCollections = comb->containerFeature("EFHistoPrmVtx"); + // + // if(m_vtxName.size()){ + // vtxCollections = comb->containerFeature(m_vtxName); + // }else{ + // vtxCollections = comb->containerFeature(); + // } + // } + // + // //ANA_MSG_INFO(" Test Size "); + // //ANA_MSG_INFO(" \tSplitJet: " << comb->containerFeature("SplitJet").size()); + // //ANA_MSG_INFO(" \tGSCJet: " << comb->containerFeature("GSCJet") .size()); + // //ANA_MSG_INFO(" \tEFJet: " << comb->containerFeature("EFJet") .size()); + // // + // //// FTK Vertex debugging + // //ANA_MSG_INFO(" Test Size " << vtxCollections.size() << " '" << m_vtxName << "'"); + // //ANA_MSG_INFO(" Test Size2 " << vtxCollections.size()); + // //ANA_MSG_INFO(" \tempty: " << comb->containerFeature().size()); + // //ANA_MSG_INFO(" \tEFHistoPrmVtx: " << comb->containerFeature("EFHistoPrmVtx").size(); + // //ANA_MSG_INFO(" \txPrimVx: " << comb->containerFeature("xPrimVx").size()); + // //ANA_MSG_INFO(" \tPrimVertexFTK " << comb->containerFeature("PrimVertexFTK").size()); + // //ANA_MSG_INFO(" \tPrimVertexFTKRaw " << comb->containerFeature("PrimVertexFTKRaw").size()); + // //ANA_MSG_INFO(" \tPrimVertexFTKRefit " << comb->containerFeature("PrimVertexFTKRefit").size(); + // //ANA_MSG_INFO(" \tHLT_PrimVertexFTK " << comb->containerFeature("HLT_PrimVertexFTK").size()); + // + // // + // // std::vector > EvtxCollections = comb->containerFeature(); + // // for ( unsigned ifeat=0 ; ifeatvertexType() << " "); + // // } + // // } + // + // bool isValid = true; + // + // ANA_MSG_VERBOSE("ncontainers " << bjetCollections.size()); + // + // if(jetCollections.size() != bjetCollections.size()){ + // ANA_MSG_ERROR("Problem in container size: " << m_name << " jets: "<< jetCollections.size() << " bjets: "<< bjetCollections.size()); + // isValid = false; + // + // auto triggerChainGroupAfterVeto = m_trigDecTool_handle->getChainGroup(m_trigItemAfterVeto); + // std::vector triggersUsedAfterVeto = triggerChainGroupAfterVeto->getListOfTriggers(); + // ANA_MSG_VERBOSE("Passed Triggers "); + // for(std::string trig : triggersUsedAfterVeto){ + // auto trigChain = m_trigDecTool_handle->getChainGroup(trig); + // if(trigChain->isPassed()) ANA_MSG_VERBOSE(" \t " << trig); + // } + // + // } + // + // if(m_readHLTTracks && jetCollections.size() != trkCollections.size()){ + // ANA_MSG_ERROR("Problem in container size: " << m_name << " jets: "<< jetCollections.size() << " trks: "<< trkCollections.size()); + // ANA_MSG_ERROR(" Jet Collection " << m_jetName << " Trk Collection: " << m_trkName); + // isValid = false; + // } + // + // //if(jetCollections.size() != ftfCollections.size()){ + // // ANA_MSG_ERROR("Problem in container size: " << m_name << " jets: "<< jetCollections.size() << " ftfs: "<< ftfCollections.size()); + // // isValid = false; + // //} + // + // if(m_readHLTVtx){ + // if(vtxCollections.size() < jetCollections.size()){ + // ANA_MSG_ERROR("Problem in container size: " << m_name + // << " jets: "<< jetCollections.size() << " " << m_jetName + // << " vtx: "<< vtxCollections.size() << " " << m_vtxName); + // for ( unsigned ifeat=0 ; ifeatvertexType()); + // } + // } + // isValid = false; + // } + // } + // + // if(!isValid) continue; + // + // //Loop over jets until a jet with track size > 0 is found + // + // // Declare variables here as same bs for all jets + // float var_bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx); + // float var_bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy); + // float var_bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz); + // + // ANA_MSG_VERBOSE(" bs_online_vx " << var_bs_online_vx << " bs_online_vy " << var_bs_online_vy << " bs_online_vz " << var_bs_online_vz); + // + // + // //ANA_MSG_INFO(" is Valid " << jetCollections.size() << " " << vtxCollections.size()); + // for ( unsigned ifeat=0 ; ifeat(jetCollections.at(ifeat)); + // if(!hlt_jet) continue; + // + // bool passOverlap = true; + // for( const xAOD::Jet* previousJet : *hltJets){ + // if(previousJet->p4().DeltaR(hlt_jet->p4()) < 0.1){ + // const xAOD::BTagging *p_btag_info = previousJet->auxdata< const xAOD::BTagging* >("HLTBTag"); + // double p_mv2c10 = -99; + // p_btag_info->MVx_discriminant("MV2c10", p_mv2c10); + // + // double this_mv2c10 = -99; + // const xAOD::BTagging* hlt_btag = getTrigObject(bjetCollections.at(ifeat)); + // if(hlt_btag){ + // hlt_btag->MVx_discriminant("MV2c10", this_mv2c10); + // } + // + // if(fabs(p_mv2c10 - this_mv2c10) > 0.01){ + // std::cout << "ERROR:: Previous mv2c10 " << p_mv2c10 << " this mv2c10 " << this_mv2c10 << std::endl; + // std::cout << "Previous Jet: pt: " << previousJet->pt() << " eta: " << previousJet->eta() << " phi: " << previousJet->phi() << std::endl;; + // std::cout << "This Jet: pt: " << hlt_jet->pt() << " eta: " << hlt_jet->eta() << " phi: " << hlt_jet->phi() << std::endl;; + // } + // passOverlap = false; + // } + // } + // + // if(!passOverlap){ + // ANA_MSG_VERBOSE(" Jet Failed overlap " ); + // continue; + // } + // ANA_MSG_VERBOSE("New Jet: pt: " << hlt_jet->pt() << " eta: " << hlt_jet->eta() << " phi: " << hlt_jet->phi()); + // + // const xAOD::BTagging* hlt_btag = getTrigObject(bjetCollections.at(ifeat)); + // if(!hlt_btag) continue; + // + // const xAOD::TrackParticleContainer* hlt_tracks(nullptr); + // if(m_readHLTTracks){ + // hlt_tracks = trkCollections.at(ifeat).cptr(); + // if(!hlt_tracks) continue; + // } + // + // xAOD::Jet* newHLTBJet = new xAOD::Jet(); + // newHLTBJet->makePrivateStore( hlt_jet ); + // + // // + // // Add Link to BTagging Info + // // + // newHLTBJet->auxdecor< const xAOD::BTagging* >("HLTBTag") = hlt_btag; + // + // // + // // Add Tracks to BJet + // // + // if(m_readHLTTracks){ + // + // std::vector matchedTracks; + // ANA_MSG_VERBOSE("Trk Size" << hlt_tracks->size()); + // + // for(const xAOD::TrackParticle* thisHLTTrk: *hlt_tracks){ + // ANA_MSG_VERBOSE("\tAdding track " << thisHLTTrk->pt() << " " << thisHLTTrk->eta() << " " << thisHLTTrk->phi()); + // matchedTracks.push_back(thisHLTTrk); + // } + // + // // + // // Adding online beamspot information from online track + // // + // + // if(hlt_tracks->size()){ + // ANA_MSG_VERBOSE("Found a hlt_tracks " << hlt_tracks->at(0)->vx() << " " << hlt_tracks->at(0)->vy() << " " << hlt_tracks->at(0)->vz()); + // ANA_MSG_VERBOSE("Compares to variable " << " " << var_bs_online_vx << " " << var_bs_online_vy << " " << var_bs_online_vz); + // } + // + // m_bs_online_vx (*newHLTBJet) = var_bs_online_vx; + // m_bs_online_vy (*newHLTBJet) = var_bs_online_vy; + // m_bs_online_vz (*newHLTBJet) = var_bs_online_vz; + // + // ANA_MSG_VERBOSE("Adding tracks to jet "); + // m_track_decoration(*newHLTBJet) = matchedTracks; + // + // + // } + // + // ANA_MSG_VERBOSE("Doing it for: " << m_trigItem); + // ANA_MSG_VERBOSE("Check for m_jetName: " << m_jetName); + // ANA_MSG_VERBOSE("Check for m_vtxName: " << m_vtxName); + // + // // + // // Check for dummy verticies + // // + // // hadDummyPV => class with three option + // // 0 - IDTrig Found Vertex + // // 1 - EFHisto Found Vertex + // // 2 - No Vertex found + // if(m_readHLTVtx){ + // if(!HelperFunctions::getPrimaryVertex(vtxCollections.at(ifeat).cptr(), msg())){ + // + // ANA_MSG_VERBOSE("HAVE No Online Vtx!!! m_vtxName is " << m_vtxName); + // for( auto vtx_itr : *(vtxCollections.at(ifeat).cptr()) ) ANA_MSG_VERBOSE(vtx_itr->vertexType()); + // + // // + // // Try the HistoPrmVtx + // // + // if(backupVtxCollections.size()){ + // ANA_MSG_VERBOSE("Have EFHistoPrmVtx. "); + // m_vtx_hadDummyPV (*newHLTBJet) = '1'; + // const xAOD::Vertex *backup_pvx = HelperFunctions::getPrimaryVertex(backupVtxCollections.at(ifeat).cptr(), msg()); + // ANA_MSG_VERBOSE("backup_pvx. " << backup_pvx); + // m_vtx_decoration (*newHLTBJet) = backup_pvx; + // m_vtx_decoration_bkg(*newHLTBJet) = backup_pvx; + // }else{ + // ANA_MSG_INFO("No EFHistoPrmVtx.... "); + // m_vtx_hadDummyPV (*newHLTBJet) = '2'; + // m_vtx_decoration (*newHLTBJet) = 0; + // m_vtx_decoration_bkg(*newHLTBJet) = 0; + // } + // + // //ANA_MSG_INFO("hadDummy and vtxType " << m_vtx_hadDummyPV (*newHLTBJet) << " " << m_vtxName); + // + // }else{ + // + // m_vtx_decoration (*newHLTBJet) = HelperFunctions::getPrimaryVertex(vtxCollections.at(ifeat).cptr(), msg()); + // m_vtx_hadDummyPV (*newHLTBJet) = '0'; + // + // if(backupVtxCollections.size()){ + // m_vtx_decoration_bkg(*newHLTBJet) = HelperFunctions::getPrimaryVertex(backupVtxCollections.at(ifeat).cptr(), msg()); + // }else{ + // m_vtx_decoration_bkg(*newHLTBJet) = 0; + // } + // + // } + // + // m_offline_vtx_decoration (*newHLTBJet) = offline_pvx; + // + // ANA_MSG_VERBOSE("hadDummy and vtxType" << m_vtx_hadDummyPV (*newHLTBJet) << " " << m_vtxName); + // //if(m_vtx_hadDummyPV (*newHLTBJet) != '0' ){ + // // ANA_MSG_INFO("hadDummy and vtxType and m_outContainerName " << m_vtx_hadDummyPV (*newHLTBJet) << " " + // // << m_vtxName << ' '<< m_outContainerName); + // //} + // } else{ //m_readHLTVtx + // + // m_vtx_decoration (*newHLTBJet) = 0; + // m_vtx_hadDummyPV (*newHLTBJet) = '0'; + // m_vtx_decoration_bkg(*newHLTBJet) = 0; + // m_offline_vtx_decoration (*newHLTBJet) = 0; + // } + // + // hltJets->push_back( newHLTBJet ); + // ANA_MSG_VERBOSE("pushed back "); + // + // }//feature + // + // + // + // }// Combinations + // + // ANA_CHECK( m_store->record( hltJets, m_outContainerName)); + // ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux.")); + // + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: buildHLTJets () + //{ + // ANA_MSG_VERBOSE("In buildHLTJets "); + // // + // // Create the new container and its auxiliary store. + // // + // xAOD::JetContainer* hltJets = new xAOD::JetContainer(); + // xAOD::JetAuxContainer* hltJetsAux = new xAOD::JetAuxContainer(); + // hltJets->setStore( hltJetsAux ); //< Connect the two + // + // Trig::FeatureContainer fc = m_trigDecTool_handle->features(m_trigItem); + // auto jetFeatureContainers = fc.containerFeature(); + // + // ANA_MSG_VERBOSE("ncontainers " << jetFeatureContainers.size()); + // + // //DataModel_detail::const_iterator::reference {aka const xAOD::Jet_v1*} + // + // for(auto jcont : jetFeatureContainers) { + // for (const xAOD::Jet* hlt_jet : *jcont.cptr()) { + // + // xAOD::Jet* newHLTJet = new xAOD::Jet(); + // newHLTJet->makePrivateStore( hlt_jet ); + // + // hltJets->push_back( newHLTJet ); + // } + // } + // + // ANA_CHECK( m_store->record( hltJets, m_outContainerName)); + // ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux.")); + // ANA_MSG_VERBOSE("Left buildHLTJets "); + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: postExecute () + //{ + // ANA_MSG_DEBUG( "Calling postExecute"); + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: finalize () + //{ + // ANA_MSG_DEBUG( "Deleting tool instances..."); + // return EL::StatusCode::SUCCESS; + //} + // + // + // + //EL::StatusCode HLTJetRoIBuilder :: histFinalize () + //{ + // ANA_MSG_DEBUG( "Calling histFinalize"); + // ANA_CHECK( xAH::Algorithm::algFinalize()); + // return EL::StatusCode::SUCCESS; + //} diff --git a/_sources/api/program_listing_file_Root_HelpTreeBase.cxx.rst.txt b/_sources/api/program_listing_file_Root_HelpTreeBase.cxx.rst.txt new file mode 100644 index 0000000000..56661606ca --- /dev/null +++ b/_sources/api/program_listing_file_Root_HelpTreeBase.cxx.rst.txt @@ -0,0 +1,1113 @@ + +.. _program_listing_file_Root_HelpTreeBase.cxx: + +Program Listing for File HelpTreeBase.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HelpTreeBase.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODBTagging/BTagging.h" + #include "xAODTracking/TrackParticle.h" + #include "xAODTracking/TrackSummaryAccessors_v1.h" + #include "xAODJet/JetConstituentVector.h" + #include "xAODPrimitives/IsolationType.h" + + + #include "TrigConfxAOD/xAODConfigTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + + // package include(s): + #include + #include + #include + + + #include "AsgMessaging/StatusCode.h" + + using std::vector; + + // needed? should it be here? + #ifdef __MAKECINT__ + #pragma link C++ class vector+; + #endif + + HelpTreeBase::HelpTreeBase(xAOD::TEvent* event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store, std::string nominalTreeName): + m_trigInfoSwitch(nullptr), + m_trigConfTool(nullptr), + m_trigDecTool(nullptr), + m_eventInfo(nullptr) + { + + m_units = units; + m_debug = debug; + m_tree = tree; + m_tree->SetDirectory( file ); + m_nominalTreeName = nominalTreeName; + m_nominalTree = strcmp(m_tree->GetName(), nominalTreeName.c_str()) == 0; + m_event = event; + m_store = store; + Info("HelpTreeBase()", "HelpTreeBase setup"); + + // turn things off it this is data...since TStore is not a needed input + // default isMC to true so more is added to the tree than less + const xAOD::EventInfo* eventInfo(nullptr); + HelperFunctions::retrieve(eventInfo, "EventInfo", m_event, m_store); + m_isMC = ( eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ) ); + + } + + HelpTreeBase::~HelpTreeBase() { + + //delete all the info switches that have been built earlier on + //event + if(m_eventInfo) delete m_eventInfo; + + //trig + if(m_trigInfoSwitch) delete m_trigInfoSwitch; + + //muon + for (auto muon: m_muons) + delete muon.second; + + //el + for (auto elec: m_elecs) + delete elec.second; + + //ph + for (auto photon: m_photons) + delete photon.second; + + //cl + for (auto cluster: m_clusters) + delete cluster.second; + + //fatjet + for (auto fatjet: m_fatjets) + delete fatjet.second; + + //tau + for (auto tau: m_taus) + delete tau.second; + + //met + for (auto met: m_met) + delete met.second; + + //jet + for (auto jet: m_jets) + delete jet.second; + + //truth fat jet + for (auto truth_fatjet: m_truth_fatjets) + delete truth_fatjet.second; + + //truth + for (auto truth: m_truth) + delete truth.second; + + //track + for (auto track: m_tracks) + delete track.second; + + } + + + HelpTreeBase::HelpTreeBase(TTree* tree, TFile* file, xAOD::TEvent* event, xAOD::TStore* store, const float units, bool debug, std::string nominalTreeName): + HelpTreeBase(event, tree, file, units, debug, store, nominalTreeName) + { + // use the other constructor for everything + } + + + void HelpTreeBase::Fill() { + // code_or_nbytes is the number of bytes written, or -1 if an error occured + const int code_or_nbytes = m_tree->Fill(); + if(code_or_nbytes < 0) // 0 can be OK if all branches are disabled and thus no data is written + { + auto msg = std::stringstream(); + msg << "HelpTreeBase::Fill(): error in TTree::Fill() : returned " << code_or_nbytes; + throw std::runtime_error(msg.str()); + } + } + + /********************* + * + * EVENT + * + ********************/ + + void HelpTreeBase::AddEvent( const std::string& detailStr ) { + + if(m_debug) Info("AddEvent()", "Adding event variables: %s", detailStr.c_str()); + + m_eventInfo = new xAH::EventInfo(detailStr, m_units, m_isMC, m_nominalTree); + m_eventInfo -> setBranches(m_tree); + this->AddEventUser(detailStr); + } + + void HelpTreeBase::FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* /*event*/, const xAOD::VertexContainer* vertices ) { + + this->ClearEvent(); + + // only retrieve the vertex container if it's not set and the user asks for that information + if( m_eventInfo->m_infoSwitch.m_pileup && !vertices ) { + HelperFunctions::retrieve( vertices, m_vertexContainerName, m_event, 0); + } + + m_eventInfo->FillEvent(eventInfo, m_event, vertices); + + this->FillEventUser(eventInfo); + } + + /********************* + * + * TRIGGER + * + ********************/ + void HelpTreeBase::AddTrigger( const std::string& detailStr ) { + + if(m_debug) Info("AddTrigger()", "Adding trigger variables: %s", detailStr.c_str()); + + m_trigInfoSwitch = new HelperClasses::TriggerInfoSwitch( detailStr ); + + // Add these basic branches + if ( m_trigInfoSwitch->m_basic ) { + m_tree->Branch("passL1", &m_passL1, "passL1/I" ); + m_tree->Branch("passHLT", &m_passHLT, "passHLT/I" ); + } + + // Detailed trigger infoformation related to the menu (might be useful) + // This is useful for using this database: https://atlas-trigconf.cern.ch/ + if ( m_trigInfoSwitch->m_menuKeys ) { + m_tree->Branch("masterKey", &m_masterKey, "masterKey/I" ); + m_tree->Branch("lvl1PrescaleKey", &m_L1PSKey, "lvl1PrescaleKey/I" ); + m_tree->Branch("hltPrescaleKey", &m_HLTPSKey, "hltPrescaleKey/I" ); + } + + // Trigger Decision for each and every trigger in a vector + if ( m_trigInfoSwitch->m_passTriggers ) { + // vector of strings for trigger names which fired + m_tree->Branch("passedTriggers", &m_passedTriggers ); + m_tree->Branch("disabledTriggers", &m_disabledTriggers ); + } + + if ( !m_isMC && m_trigInfoSwitch->m_prescales ) { + m_tree->Branch("triggerPrescales", &m_triggerPrescales ); + } + + if ( !m_isMC && m_trigInfoSwitch->m_prescalesLumi ) { + m_tree->Branch("triggerPrescalesLumi", &m_triggerPrescalesLumi); + } + + if ( m_trigInfoSwitch->m_passTrigBits ) { + m_tree->Branch("isPassBits", &m_isPassBits ); + m_tree->Branch("isPassBitsNames", &m_isPassBitsNames ); + } + + this->AddTriggerUser( detailStr ); + } + + // Fill the information in the trigger branches + void HelpTreeBase::FillTrigger( const xAOD::EventInfo* eventInfo ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Filling trigger info"); } + + // Clear previous events + this->ClearTrigger(); + this->ClearTriggerUser(); + + // Grab the global pass information from the TrigDecisionTool + if ( m_trigInfoSwitch->m_basic ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_basic"); } + + static SG::AuxElement::ConstAccessor< int > passAny("passAny"); + static SG::AuxElement::ConstAccessor< int > passL1("passL1"); + if( passL1.isAvailable( *eventInfo ) ) { m_passL1 = passL1( *eventInfo ); } + else { m_passL1 = -1; } + static SG::AuxElement::ConstAccessor< int > passHLT("passHLT"); + if( passHLT.isAvailable( *eventInfo ) ) { m_passHLT = passHLT( *eventInfo ); } + else { m_passHLT = -1; } + + } + + // If detailed menu information about the configuration keys, turn this on. + // This is useful for using this database: https://atlas-trigconf.cern.ch/ + if ( m_trigInfoSwitch->m_menuKeys ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_menuKeys"); } + + static SG::AuxElement::ConstAccessor< int > masterKey("masterKey"); + if( masterKey.isAvailable( *eventInfo ) ) { m_masterKey = masterKey( *eventInfo ); } + else { m_masterKey = -999; } + static SG::AuxElement::ConstAccessor< int > L1PSKey("L1PSKey"); + if( L1PSKey.isAvailable( *eventInfo ) ) { m_L1PSKey = L1PSKey( *eventInfo ); } + else { m_L1PSKey = -999; } + static SG::AuxElement::ConstAccessor< int > HLTPSKey("HLTPSKey"); + if( HLTPSKey.isAvailable( *eventInfo ) ) { m_HLTPSKey = HLTPSKey( *eventInfo ); } + else { m_HLTPSKey = -999; } + + } + + // If detailed information about each and every trigger is desired + // save a vector of strings holding passing decisions + if ( m_trigInfoSwitch->m_passTriggers ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_passTriggers"); } + static SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_passedTriggers ("passedTriggers"); + if( acc_passedTriggers .isAvailable( *eventInfo ) ) { m_passedTriggers = acc_passedTriggers ( *eventInfo ); } + static SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_disabledTriggers("disabledTriggers"); + if( acc_disabledTriggers.isAvailable( *eventInfo ) ) { m_disabledTriggers = acc_disabledTriggers( *eventInfo ); } + } + + if ( !m_isMC && m_trigInfoSwitch->m_prescales ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_prescales"); } + + static SG::AuxElement::ConstAccessor< std::vector< float > > trigPrescales("triggerPrescales"); + if( trigPrescales.isAvailable( *eventInfo ) ) { m_triggerPrescales = trigPrescales( *eventInfo ); } + + } + + if ( !m_isMC && m_trigInfoSwitch->m_prescalesLumi ) { + + if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_prescalesLumi"); } + + static SG::AuxElement::ConstAccessor< std::vector< float > > trigPrescalesLumi("triggerPrescalesLumi"); + if( trigPrescalesLumi.isAvailable( *eventInfo ) ) { m_triggerPrescalesLumi = trigPrescalesLumi( *eventInfo ); } + + } + + if ( m_trigInfoSwitch->m_passTrigBits ) { + + static SG::AuxElement::ConstAccessor< std::vector< unsigned int > > isPassBits("isPassedBits"); + if( isPassBits.isAvailable( *eventInfo ) ) { m_isPassBits = isPassBits( *eventInfo ); } + + static SG::AuxElement::ConstAccessor< std::vector< std::string > > isPassBitsNames("isPassedBitsNames"); + if( isPassBitsNames.isAvailable( *eventInfo ) ) { m_isPassBitsNames = isPassBitsNames( *eventInfo ); } + + } + + this->FillTriggerUser(eventInfo); + } + + // Clear Trigger + void HelpTreeBase::ClearTrigger() { + + m_passL1 = -999; + m_passHLT = -999; + + m_masterKey = 0; + m_L1PSKey = 0; + m_HLTPSKey = 0; + + m_passedTriggers.clear(); + m_disabledTriggers.clear(); + m_triggerPrescales.clear(); + m_triggerPrescalesLumi.clear(); + m_isPassBits.clear(); + m_isPassBitsNames.clear(); + + } + + /********************* + * + * JET TRIGGER + * + ********************/ + + /* TODO: jet trigger */ + //CD: is this useful at all? + void HelpTreeBase::AddJetTrigger( const std::string& detailStr ) + { + if ( m_debug ) Info("AddJetTrigger()", "Adding jet trigger variables: %s", detailStr.c_str()); + } + void HelpTreeBase::FillJetTrigger( ) { } + void HelpTreeBase::ClearJetTrigger( ) { } + + + /********************* + * + * MUONS + * + ********************/ + + void HelpTreeBase::AddMuons(const std::string& detailStr, const std::string& muonName) { + + if ( m_debug ) Info("AddMuons()", "Adding muon variables: %s", detailStr.c_str()); + + m_muons[muonName] = new xAH::MuonContainer(muonName, detailStr, m_units, m_isMC, m_nominalTree); + xAH::MuonContainer* thisMuon = m_muons[muonName]; + HelperClasses::MuonInfoSwitch& muonInfoSwitch = thisMuon->m_infoSwitch; + + if (m_nominalTree) { + + if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for (auto& reco : muonInfoSwitch.m_recoWPs) { + std::string recoEffSF_sysNames = "muon_RecoEff_SF_" + reco + "_sysNames"; + m_tree->Branch( recoEffSF_sysNames.c_str() , & (m_MuonRecoEff_SF_sysNames)[ reco ] ); + } + } + + if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for (auto& isol : muonInfoSwitch.m_isolWPs) { + std::string isolEffSF_sysNames = "muon_IsoEff_SF_" + isol + "_sysNames"; + m_tree->Branch( isolEffSF_sysNames.c_str() , & (m_MuonIsoEff_SF_sysNames)[ isol ] ); + } + } + + if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for (auto& trig : muonInfoSwitch.m_trigWPs) { + for (auto& reco : muonInfoSwitch.m_recoWPs) { + std::string trigEffSF_sysNames = (muonInfoSwitch.m_recoWPs.size()>1) ? "muon_TrigEff_SF_" + trig + "_" + reco + "_sysNames" : "muon_TrigEff_SF_" + trig + "_sysNames"; + m_tree->Branch( trigEffSF_sysNames.c_str() , & (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ] ); + } + } + } + + if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + std::string ttvaEffSF_sysNames = "muon_TTVAEff_SF_sysNames"; + m_tree->Branch( ttvaEffSF_sysNames.c_str() , &m_MuonTTVAEff_SF_sysNames ); + } + + } + + thisMuon->setBranches(m_tree); + this->AddMuonsUser(detailStr, muonName); + } + + void HelpTreeBase::FillMuons( const xAOD::MuonContainer* muons, const xAOD::Vertex* primaryVertex, const std::string& muonName ) { + + this->ClearMuons(muonName); + HelperClasses::MuonInfoSwitch& muonInfoSwitch = m_muons[muonName]->m_infoSwitch; + + if (m_nominalTree) { + + if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& reco : muonInfoSwitch.m_recoWPs ) { + std::vector< std::string >* tmp_reco_sys(nullptr); + if ( m_store->retrieve(tmp_reco_sys, "MuonEfficiencyCorrector_RecoSyst_Reco" + reco).isSuccess() ) { + (m_MuonRecoEff_SF_sysNames)[ reco ] = *tmp_reco_sys; + } + } + } + + if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& isol : muonInfoSwitch.m_isolWPs ) { + std::vector< std::string >* tmp_iso_sys(nullptr); + if ( m_store->retrieve(tmp_iso_sys, "MuonEfficiencyCorrector_IsoSyst_Iso" + isol).isSuccess() ) { + (m_MuonIsoEff_SF_sysNames)[ isol ] = *tmp_iso_sys; + } + } + } + + if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& trig : muonInfoSwitch.m_trigWPs ) { + for ( auto& reco : muonInfoSwitch.m_recoWPs ) { + std::vector< std::string >* tmp_trig_sys(nullptr); + if ( m_store->retrieve(tmp_trig_sys, "MuonEfficiencyCorrector_TrigSyst_" + trig + "_Reco" + reco).isSuccess() ) { + (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ] = *tmp_trig_sys; + } + } + } + } + + if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + std::vector< std::string >* tmp_ttva_sys(nullptr); + if ( m_store->retrieve(tmp_ttva_sys, "MuonEfficiencyCorrector_TTVASyst_TTVA").isSuccess() ) { + m_MuonTTVAEff_SF_sysNames = *tmp_ttva_sys; + } + } + + } + + for( auto muon_itr : *muons ) { + this->FillMuon(muon_itr, primaryVertex, muonName); + } + + } + + void HelpTreeBase::FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex, const std::string& muonName ) { + + xAH::MuonContainer* thisMuon = m_muons[muonName]; + + thisMuon->FillMuon(muon, primaryVertex); + + this->FillMuonsUser(muon, muonName, primaryVertex); + + return; + } + + void HelpTreeBase::ClearMuons(const std::string& muonName) { + + xAH::MuonContainer* thisMuon = m_muons[muonName]; + HelperClasses::MuonInfoSwitch& muonInfoSwitch = thisMuon->m_infoSwitch; + + if (m_nominalTree) { + + if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& reco : muonInfoSwitch.m_recoWPs ) { + (m_MuonRecoEff_SF_sysNames)[ reco ].clear(); + } + } + + if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& isol : muonInfoSwitch.m_isolWPs ) { + (m_MuonIsoEff_SF_sysNames)[ isol ].clear(); + } + } + + if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + for ( auto& trig : muonInfoSwitch.m_trigWPs ) { + for ( auto& reco : muonInfoSwitch.m_recoWPs ) { + (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ].clear(); + } + } + } + + if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) { + m_MuonTTVAEff_SF_sysNames.clear(); + } + + } + + thisMuon->clear(); + + this->ClearMuonsUser(muonName); + + } + + /********************* + * + * ELECTRONS + * + ********************/ + + void HelpTreeBase::AddElectrons(const std::string& detailStr, const std::string& elecName) { + + if(m_debug) Info("AddElectrons()", "Adding electron variables: %s", detailStr.c_str()); + + m_elecs[elecName] = new xAH::ElectronContainer(elecName, detailStr, m_units, m_isMC, m_nominalTree); + + xAH::ElectronContainer* thisElec = m_elecs[elecName]; + + thisElec->setBranches(m_tree); + this->AddElectronsUser(detailStr, elecName); + } + + + void HelpTreeBase::FillElectrons( const xAOD::ElectronContainer* electrons, const xAOD::Vertex* primaryVertex, const std::string& elecName ) { + + this->ClearElectrons(elecName); + + for ( auto el_itr : *electrons ) { + this->FillElectron(el_itr, primaryVertex, elecName); + } + } + + void HelpTreeBase::FillElectron ( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex, const std::string& elecName ) { + + xAH::ElectronContainer* thisElec = m_elecs[elecName]; + + thisElec->FillElectron(elec, primaryVertex); + + this->FillElectronsUser(elec, elecName, primaryVertex); + + return; + } + + + void HelpTreeBase::ClearElectrons(const std::string& elecName) { + + xAH::ElectronContainer* thisElec = m_elecs[elecName]; + thisElec->clear(); + + this->ClearElectronsUser(elecName); + } + + /********************* + * + * PHOTONS + * + ********************/ + + void HelpTreeBase::AddPhotons(const std::string& detailStr, const std::string& photonName) { + + if(m_debug) Info("AddPhotons()", "Adding photon variables: %s", detailStr.c_str()); + + m_photons[photonName] = new xAH::PhotonContainer(photonName, detailStr, m_units, m_isMC); + + xAH::PhotonContainer* thisPhoton = m_photons[photonName]; + + thisPhoton->setBranches(m_tree); + this->AddPhotonsUser(detailStr, photonName); + } + + + void HelpTreeBase::FillPhotons( const xAOD::PhotonContainer* photons, const std::string& photonName ) { + + this->ClearPhotons(photonName); + + for ( auto ph_itr : *photons ) { + this->FillPhoton(ph_itr, photonName); + } + } + + void HelpTreeBase::FillPhoton( const xAOD::Photon* photon, const std::string& photonName ) { + + xAH::PhotonContainer* thisPhoton = m_photons[photonName]; + + thisPhoton->FillPhoton(photon); + + this->FillPhotonsUser(photon, photonName); + + return; + } + + + void HelpTreeBase::ClearPhotons(const std::string& photonName) { + + xAH::PhotonContainer* thisPhoton = m_photons[photonName]; + thisPhoton->clear(); + + this->ClearPhotonsUser(photonName); + } + + /********************* + * + * CLUSTERS + * + *********************/ + + void HelpTreeBase::AddClusters(const std::string& detailStr, const std::string& clusterName) { + + if(m_debug) Info("AddClusters()", "Adding cluster variables: %s", detailStr.c_str()); + + m_clusters[clusterName] = new xAH::ClusterContainer(clusterName, detailStr, m_units, m_isMC); + + xAH::ClusterContainer* thisCluster = m_clusters[clusterName]; + + thisCluster->setBranches(m_tree); + this->AddClustersUser(detailStr, clusterName); + } + + + void HelpTreeBase::FillClusters( const xAOD::CaloClusterContainer* clusters, const std::string& clusterName ) { + + this->ClearClusters(clusterName); + + for ( auto cl_itr : *clusters ) { + this->FillCluster(cl_itr, clusterName); + } + } + + void HelpTreeBase::FillCluster( const xAOD::CaloCluster* cluster, const std::string& clusterName ) { + + xAH::ClusterContainer* thisCluster = m_clusters[clusterName]; + + thisCluster->FillCluster(cluster); + + this->FillClustersUser(cluster, clusterName); + + return; + } + + + void HelpTreeBase::ClearClusters(const std::string& clusterName) { + + xAH::ClusterContainer* thisCluster = m_clusters[clusterName]; + thisCluster->clear(); + + this->ClearClustersUser(clusterName); + } + + /********************* + * + * L1 JETS + * + ********************/ + + void HelpTreeBase::AddL1Jets( const std::string& jetName) + { + + if(m_debug) Info("AddL1Jets()", "Adding %s L1 jets", jetName.c_str()); + + m_l1Jets[jetName] = new xAH::L1JetContainer(jetName, m_units, m_isMC); + m_l1Jets[jetName]->m_debug = m_debug; + + xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName]; + thisL1Jet->setBranches(m_tree); + + } + + void HelpTreeBase::FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, const std::string& jetName, bool sortL1Jets ) { + + this->ClearL1Jets(jetName); + + xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName]; + + thisL1Jet->FillLegacyL1Jets(jets,sortL1Jets); + + } + + void HelpTreeBase::ClearL1Jets(const std::string& jetName) { + + xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName]; + thisL1Jet->clear(); + + } + + + /********************* + * + * JETS + * + ********************/ + + void HelpTreeBase::AddJets(const std::string& detailStr, const std::string& jetName) + { + + if(m_debug) Info("AddJets()", "Adding jet %s with variables: %s", jetName.c_str(), detailStr.c_str()); + + m_jets[jetName] = new xAH::JetContainer(jetName, detailStr, m_units, m_isMC); + m_jets[jetName]->m_debug = m_debug; + + xAH::JetContainer* thisJet = m_jets[jetName]; + thisJet->setBranches(m_tree); + this->AddJetsUser(detailStr, jetName); + + } + + + void HelpTreeBase::FillJets( const xAOD::JetContainer* jets, int pvLocation, const std::string& jetName ) { + + this->ClearJets(jetName); + + const xAOD::VertexContainer* vertices(nullptr); + const xAOD::Vertex *pv = 0; + + xAH::JetContainer* thisJet = m_jets[jetName]; + + if( thisJet->m_infoSwitch.m_trackPV || thisJet->m_infoSwitch.m_allTrack ) { + HelperFunctions::retrieve( vertices, m_vertexContainerName, m_event, 0); + pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices ); + if ( pvLocation >= 0 ) pv = vertices->at( pvLocation ); + } + + for( auto jet_itr : *jets ) { + this->FillJet(jet_itr, pv, pvLocation, jetName); + } + + } + + + + void HelpTreeBase::FillJet( const xAOD::Jet* jet_itr, const xAOD::Vertex* pv, int pvLocation, const std::string& jetName ) { + + xAH::JetContainer* thisJet = m_jets[jetName]; + + thisJet->FillJet(jet_itr, pv, pvLocation); + + this->FillJetsUser(jet_itr, jetName); + + return; + } + + void HelpTreeBase::ClearJets(const std::string& jetName) { + + xAH::JetContainer* thisJet = m_jets[jetName]; + thisJet->clear(); + + this->ClearJetsUser(jetName); + + } + + /********************* + * + * TRUTH + * + ********************/ + + void HelpTreeBase::AddTruthParts(const std::string& detailStr, const std::string& truthName) + { + + if(m_debug) Info("AddTruthParts()", "Adding truth particle %s with variables: %s", truthName.c_str(), detailStr.c_str()); + m_truth[truthName] = new xAH::TruthContainer(truthName, detailStr, m_units); + + xAH::TruthContainer* thisTruth = m_truth[truthName]; + thisTruth->setBranches(m_tree); + this->AddTruthUser(truthName, detailStr); + } + + void HelpTreeBase::FillTruth( const xAOD::TruthParticleContainer* truthParts, const std::string& truthName ) { + + this->ClearTruth(truthName); + + // We need some basic cuts here to avoid many PseudoRapiditity warnings being thrown ... + float truthparticle_ptmin = 2.0; + float truthparticle_etamax = 8.0; + + for( auto truth_itr : *truthParts ) { + + if((truth_itr->pt() / m_units < truthparticle_ptmin) || (fabs(truth_itr->eta()) > truthparticle_etamax) ){ + continue; + } + + this->FillTruth(truth_itr, truthName); + } + + } + + void HelpTreeBase::FillTruth( const xAOD::TruthParticle* truthPart, const std::string& truthName ) + { + xAH::TruthContainer* thisTruth = m_truth[truthName]; + + thisTruth->FillTruth(truthPart); + + this->FillTruthUser(truthPart, truthName); + + return; + } + + void HelpTreeBase::ClearTruth(const std::string& truthName) { + + xAH::TruthContainer* thisTruth = m_truth[truthName]; + thisTruth->clear(); + + this->ClearTruthUser(truthName); + + } + + /********************* + * + * TRACKS + * + ********************/ + + void HelpTreeBase::AddTrackParts(const std::string& detailStr, const std::string& trackName) + { + if(m_debug) Info("AddTrackParts()", "Adding track particle %s with variables: %s", trackName.c_str(), detailStr.c_str()); + m_tracks[trackName] = new xAH::TrackContainer(trackName, detailStr, m_units); + + xAH::TrackContainer* thisTrack = m_tracks[trackName]; + thisTrack->setBranches(m_tree); + this->AddTracksUser(trackName, detailStr); + } + + void HelpTreeBase::FillTracks( const xAOD::TrackParticleContainer* trackParts, const std::string& trackName ) { + + this->ClearTracks(trackName); + + // We need some basic cuts here to avoid many PseudoRapiditity warnings being thrown ... + // float trackparticle_ptmin = 1.0; + // float trackparticle_etamax = 8.0; + + for( auto track_itr : *trackParts ) { + + // if((track_itr->pt() / m_units < trackparticle_ptmin) || (fabs(track_itr->eta()) > trackparticle_etamax) ){ + // continue; + // } + + this->FillTrack(track_itr, trackName); + } + + } + + void HelpTreeBase::FillTrack( const xAOD::TrackParticle* trackPart, const std::string& trackName ) + { + xAH::TrackContainer* thisTrack = m_tracks[trackName]; + + thisTrack->FillTrack(trackPart); + + this->FillTracksUser(trackPart, trackName); + + return; + } + + void HelpTreeBase::ClearTracks(const std::string& trackName) { + + xAH::TrackContainer* thisTrack = m_tracks[trackName]; + thisTrack->clear(); + + this->ClearTracksUser(trackName); + + } + + /********************* + * + * FAT JETS + * + ********************/ + + // make a unique container:suffix key to lookup the branches in the maps + std::string HelpTreeBase::FatJetCollectionName(const std::string& fatjetName, + const std::string& suffix) { + return suffix.empty() ? fatjetName : (fatjetName + ":" + suffix); + } + + void HelpTreeBase::AddFatJets(const std::string& detailStr, const std::string& fatjetName, + const std::string& subjetDetailStr, + const std::string& suffix) { + + if(m_debug) Info("AddFatJets()", "Adding fat jet variables: %s", detailStr.c_str()); + + const std::string& collectionName = FatJetCollectionName(fatjetName, suffix); + m_fatjets[collectionName] = new xAH::FatJetContainer(fatjetName, detailStr, subjetDetailStr, suffix, m_units, m_isMC); + + xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName]; + thisFatJet->setBranches(m_tree); + + this->AddFatJetsUser(detailStr, fatjetName, suffix); + } + + void HelpTreeBase::AddTruthFatJets(const std::string& detailStr, const std::string& truthFatJetName) { + + if(m_debug) Info("AddTruthFatJets()", "Adding fat jet variables: %s", detailStr.c_str()); + + m_truth_fatjets[truthFatJetName] = new xAH::FatJetContainer(truthFatJetName, detailStr, "", "", m_units, m_isMC); + + xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName]; + thisTruthFatJet->setBranches(m_tree); + + this->AddTruthFatJetsUser(detailStr, truthFatJetName); + } + + + void HelpTreeBase::FillFatJets( const xAOD::JetContainer* fatJets , int pvLocation, const std::string& fatjetName, const std::string& suffix ) { + + this->ClearFatJets(fatjetName, suffix); + + for( auto fatjet_itr : *fatJets ) { + + this->FillFatJet(fatjet_itr, pvLocation, fatjetName, suffix); + + } // loop over fat jets + + } + + void HelpTreeBase::FillFatJet( const xAOD::Jet* fatjet_itr, int pvLocation, const std::string& fatjetName, const std::string& suffix ) { + + const std::string& collectionName = FatJetCollectionName(fatjetName, suffix); + xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName]; + + thisFatJet->FillFatJet(fatjet_itr, pvLocation); + + this->FillFatJetsUser(fatjet_itr, pvLocation, fatjetName, suffix); + + return; + } + + + void HelpTreeBase::FillTruthFatJets( const xAOD::JetContainer* truthTruthFatJets, int pvLocation, const std::string& truthFatJetName ) { + this->ClearTruthFatJets(truthFatJetName); + + for( auto truth_fatjet_itr : *truthTruthFatJets ) { + + this->FillTruthFatJet(truth_fatjet_itr, pvLocation, truthFatJetName); + + } // loop over truth fat jets + + } + + void HelpTreeBase::FillTruthFatJet( const xAOD::Jet* truth_fatjet_itr, int pvLocation, const std::string& truthFatJetName ) { + + xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName]; + + thisTruthFatJet->FillFatJet(truth_fatjet_itr, pvLocation); + + this->FillTruthFatJetsUser(truth_fatjet_itr, pvLocation, truthFatJetName); + + return; + } + + + void HelpTreeBase::ClearFatJets(const std::string& fatjetName, const std::string& suffix) { + const std::string& collectionName = FatJetCollectionName(fatjetName, suffix); + + xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName]; + thisFatJet->clear(); + + this->ClearFatJetsUser(fatjetName, suffix); + } + + void HelpTreeBase::ClearTruthFatJets(const std::string& truthFatJetName) { + + xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName]; + thisTruthFatJet->clear(); + + this->ClearTruthFatJetsUser(truthFatJetName); + } + + void HelpTreeBase::ClearEvent() { + m_eventInfo->clear(); + this->ClearEventUser(); + } + + + /********************* + * + * TAUS + * + ********************/ + + void HelpTreeBase::AddTaus(const std::string& detailStr, const std::string& tauName) { + + if ( m_debug ) Info("AddTaus()", "Adding tau variables: %s", detailStr.c_str()); + + m_taus[tauName] = new xAH::TauContainer(tauName, detailStr, m_units, m_isMC, m_nominalTree); + + xAH::TauContainer* thisTau = m_taus[tauName]; + + thisTau->setBranches(m_tree); + this->AddTausUser(detailStr, tauName); + } + + void HelpTreeBase::FillTaus( const xAOD::TauJetContainer* taus, const std::string& tauName ) { + + this->ClearTaus(tauName); + + for( auto tau_itr : *taus ) { + this->FillTau(tau_itr, tauName); + } + } + + void HelpTreeBase::FillTau( const xAOD::TauJet* tau, const std::string& tauName ) { + + xAH::TauContainer* thisTau = m_taus[tauName]; + + thisTau->FillTau(tau); + + this->FillTausUser(tau, tauName); + } + + void HelpTreeBase::ClearTaus(const std::string& tauName) { + + xAH::TauContainer* thisTau = m_taus[tauName]; + + thisTau->clear(); + + this->ClearTausUser(tauName); + + } + + + + /********************* + * + * MET + * + ********************/ + void HelpTreeBase::AddMET( const std::string& detailStr, const std::string& metName ) { + + if(m_debug) Info("AddMET()", "Adding MET variables: %s", detailStr.c_str()); + + m_met[metName] = new xAH::MetContainer(metName, detailStr, m_units); + + xAH::MetContainer* thisMet = m_met[metName]; + + thisMet->setBranches(m_tree); + this->AddMETUser(detailStr, metName); + } + + void HelpTreeBase::FillMET( const xAOD::MissingETContainer* met, const std::string& metName ) { + + // Clear previous events + this->ClearMET(metName); + + xAH::MetContainer* thisMet = m_met[metName]; + + thisMet->FillMET(met); + + this->FillMETUser(met, metName); + } + + void HelpTreeBase::ClearMET( const std::string& metName ) { + xAH::MetContainer* thisMet = m_met[metName]; + + thisMet->clear(); + + this->ClearMETUser(metName); + } + + + bool HelpTreeBase::writeTo( TFile* file ) { + file->cd(); // necessary? + int status( m_tree->Write() ); + if ( status == 0 ) { return false; } + return true; + } + + /********************* + * + * VERTICES + * + ********************/ + + void HelpTreeBase::AddVertices( const std::string& detailStr, const std::string& vertexName ) + { + + if(m_debug) Info("AddVertices()", "Adding %s vertices", vertexName.c_str()); + + m_vertices[vertexName] = new xAH::VertexContainer(detailStr, vertexName); + xAH::VertexContainer* thisVertex = m_vertices[vertexName]; + thisVertex->setBranches(m_tree); + + } + + void HelpTreeBase::FillVertices( const xAOD::VertexContainer* vertices, const std::string& vertexName ) { + + this->ClearVertices(vertexName); + + xAH::VertexContainer* thisVertex = m_vertices[vertexName]; + + thisVertex->FillVertices(vertices); + + } + + void HelpTreeBase::ClearVertices( const std::string& vertexName ) + { + + xAH::VertexContainer* thisVertex = m_vertices[vertexName]; + thisVertex->clear(); + + } + + void HelpTreeBase::AddTruthVertices( const std::string& detailStr, const std::string& truthVertexName ) + { + + if(m_debug) Info("AddTruthVertices()", "Adding %s vertices", truthVertexName.c_str()); + + m_truth_vertices[truthVertexName] = new xAH::VertexContainer(detailStr, truthVertexName); + xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName]; + thisTruthVertex->setBranches(m_tree); + + } + + void HelpTreeBase::FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices, const std::string& truthVertexName ) { + + this->ClearTruthVertices(truthVertexName); + + xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName]; + + thisTruthVertex->FillTruthVertices(truthVertices); + + } + + void HelpTreeBase::ClearTruthVertices( const std::string& truthVertexName ) + { + + xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName]; + thisTruthVertex->clear(); + + } + diff --git a/_sources/api/program_listing_file_Root_HelperClasses.cxx.rst.txt b/_sources/api/program_listing_file_Root_HelperClasses.cxx.rst.txt new file mode 100644 index 0000000000..e422f76cc4 --- /dev/null +++ b/_sources/api/program_listing_file_Root_HelperClasses.cxx.rst.txt @@ -0,0 +1,530 @@ + +.. _program_listing_file_Root_HelperClasses.cxx: + +Program Listing for File HelperClasses.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HelperClasses.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODPrimitives/IsolationType.h" + #include "xAODMuon/Muon.h" + #include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h" + #include "ElectronPhotonSelectorTools/egammaPIDdefs.h" + #include "ElectronPhotonSelectorTools/LikelihoodEnums.h" + #include "xAODTau/TauDefs.h" + + namespace HelperClasses{ + + /* parser for electron isolation enum */ + template <> + EnumParser::EnumParser() + { + std::string etcone20("etcone20"); enumMap.insert(std::make_pair(etcone20, xAOD::Iso::etcone20)); + std::string etcone30("etcone30"); enumMap.insert(std::make_pair(etcone30, xAOD::Iso::etcone30)); + std::string etcone40("etcone40"); enumMap.insert(std::make_pair(etcone40, xAOD::Iso::etcone40)); + std::string topoetcone20("topoetcone20"); enumMap.insert(std::make_pair(topoetcone20, xAOD::Iso::topoetcone20)); + std::string topoetcone30("topoetcone30"); enumMap.insert(std::make_pair(topoetcone30, xAOD::Iso::topoetcone30)); + std::string topoetcone40("topoetcone40"); enumMap.insert(std::make_pair(topoetcone40, xAOD::Iso::topoetcone40)); + std::string ptcone20("ptcone20"); enumMap.insert(std::make_pair(ptcone20, xAOD::Iso::ptcone20)); + std::string ptcone30("ptcone30"); enumMap.insert(std::make_pair(ptcone30, xAOD::Iso::ptcone30)); + std::string ptcone40("ptcone40"); enumMap.insert(std::make_pair(ptcone40, xAOD::Iso::ptcone40)); + std::string ptcone50("ptcone50"); enumMap.insert(std::make_pair(ptcone50, xAOD::Iso::ptcone50)); + std::string ptvarcone20("ptvarcone20"); enumMap.insert(std::make_pair(ptvarcone20, xAOD::Iso::ptvarcone20)); + std::string ptvarcone30("ptvarcone30"); enumMap.insert(std::make_pair(ptvarcone30, xAOD::Iso::ptvarcone30)); + std::string ptvarcone40("ptvarcone40"); enumMap.insert(std::make_pair(ptvarcone40, xAOD::Iso::ptvarcone40)); + std::string neflowisol20("neflowisol20"); enumMap.insert(std::make_pair(neflowisol20, xAOD::Iso::neflowisol20)); + std::string ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ("ptcone20_Nonprompt_All_MaxWeightTTVA_pt500"); enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVA_pt500, xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt500)); + std::string ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000("ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000"); enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000, xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000)); + std::string ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500"); enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500, xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500)); + std::string ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000"); enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000, xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000)); + std::string ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500"); enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500, xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500)); + std::string ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000"); enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000, xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000)); + std::string ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500"); enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500, xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500)); + std::string ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000"); enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000, xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000)); + } + + /* parser for electron likelihood PID enum */ + template <> + EnumParser::EnumParser() + { + std::string VeryLoose("VeryLoose"); enumMap.insert(std::make_pair(VeryLoose , LikeEnum::VeryLoose)); + std::string Loose("Loose"); enumMap.insert(std::make_pair(Loose , LikeEnum::Loose)); + std::string LooseBL("LooseBL"); enumMap.insert(std::make_pair(LooseBL , LikeEnum::LooseBL)); + std::string Medium("Medium"); enumMap.insert(std::make_pair(Medium , LikeEnum::Medium)); + std::string Tight("Tight"); enumMap.insert(std::make_pair(Tight , LikeEnum::Tight)); + std::string VeryTight("VeryTight"); enumMap.insert(std::make_pair(VeryTight , LikeEnum::VeryTight)); + std::string LooseRelaxed("LooseRelaxed"); enumMap.insert(std::make_pair(LooseRelaxed , LikeEnum::Tight)); + std::string CustomOperatingPoint("CustomOperatingPoint"); enumMap.insert(std::make_pair(CustomOperatingPoint , LikeEnum::Tight)); + std::string VeryLooseLLP("VeryLooseLLP"); enumMap.insert(std::make_pair(VeryLooseLLP , LikeEnum::VeryLooseLLP)); + std::string LooseLLP("LooseLLP"); enumMap.insert(std::make_pair(LooseLLP , LikeEnum::LooseLLP)); + std::string MediumLLP("MediumLLP"); enumMap.insert(std::make_pair(MediumLLP , LikeEnum::MediumLLP)); + std::string TightLLP("TightLLP"); enumMap.insert(std::make_pair(TightLLP , LikeEnum::TightLLP)); + } + + /* parser for electron cut-based PID enum */ + /* Apparently this won't be useful for non-Athena users... */ + template <> + EnumParser::EnumParser() + { + std::string ElectronIDLoose("ElectronIDLoose"); enumMap.insert(std::make_pair(ElectronIDLoose , egammaPID::ElectronIDLoose)); + std::string ElectronIDMedium("ElectronIDMedum"); enumMap.insert(std::make_pair(ElectronIDMedium , egammaPID::ElectronIDMedium)); + std::string ElectronIDTight("ElectronIDTight"); enumMap.insert(std::make_pair(ElectronIDTight , egammaPID::ElectronIDTight)); + std::string ElectronIDLoosePP("ElectronIDLoosePP"); enumMap.insert(std::make_pair(ElectronIDLoosePP , egammaPID::ElectronIDLoosePP)); + std::string ElectronIDLoose1("ElectronIDLoose1"); enumMap.insert(std::make_pair(ElectronIDLoose1 , egammaPID::ElectronIDLoose1)); + std::string ElectronIDLooseHLT("ElectronIDLooseHLT"); enumMap.insert(std::make_pair(ElectronIDLooseHLT , egammaPID::ElectronIDLooseHLT)); + std::string ElectronIDMediumPP("ElectronIDMediumPP"); enumMap.insert(std::make_pair(ElectronIDMediumPP , egammaPID::ElectronIDMediumPP)); + std::string ElectronIDMedium1("ElectronIDMedium1"); enumMap.insert(std::make_pair(ElectronIDMedium1 , egammaPID::ElectronIDMedium1)); + std::string ElectronIDMediumHLT("ElectronIDMediumHLT"); enumMap.insert(std::make_pair(ElectronIDMediumHLT, egammaPID::ElectronIDMediumHLT)); + std::string ElectronIDTightPP("ElectronIDTightPP"); enumMap.insert(std::make_pair(ElectronIDTightPP , egammaPID::ElectronIDTightPP)); + std::string ElectronIDTight1("ElectronIDTight1"); enumMap.insert(std::make_pair(ElectronIDTight1 , egammaPID::ElectronIDTight1)); + std::string ElectronIDTightHLT("ElectronIDTightHLT"); enumMap.insert(std::make_pair(ElectronIDTightHLT , egammaPID::ElectronIDTightHLT)); + } + // template <> + // EnumParser::EnumParser() + // { + // std::string IsEMLoose("IsEMLoose"); enumMap.insert(std::make_pair( IsEMLoose , egammaPID::IsEMLoose)); + // std::string IsEMMedium("IsEMMedium"); enumMap.insert(std::make_pair( IsEMMedium, egammaPID::IsEMMedium)); + // std::string IsEMTight("IsEMTight"); enumMap.insert(std::make_pair( IsEMTight , egammaPID::IsEMTight)); + // } + + + /* parser for Tau RNN ID enum */ + /* Apparently this won't be useful for non-Athena users... */ + + template <> + EnumParser::EnumParser() + { + std::string TauIDVeryLoose("TauIDVeryLoose"); enumMap.insert(std::make_pair(TauIDVeryLoose , xAOD::TauJetParameters::JetRNNSigVeryLoose)); + std::string TauIDLoose("TauIDLoose"); enumMap.insert(std::make_pair(TauIDLoose , xAOD::TauJetParameters::JetRNNSigLoose)); + std::string TauIDMedium("TauIDMedium"); enumMap.insert(std::make_pair(TauIDMedium , xAOD::TauJetParameters::JetRNNSigMedium)); + std::string TauIDTight("TauIDTight"); enumMap.insert(std::make_pair(TauIDTight , xAOD::TauJetParameters::JetRNNSigTight)); + } + + /* parser for muon quality enum */ + template <> + EnumParser::EnumParser() + { + std::string VeryLoose("VeryLoose"); enumMap.insert(std::make_pair(VeryLoose , xAOD::Muon::VeryLoose)); + std::string Loose("Loose"); enumMap.insert(std::make_pair(Loose , xAOD::Muon::Loose)); + std::string Medium("Medium"); enumMap.insert(std::make_pair(Medium , xAOD::Muon::Medium)); + std::string Tight("Tight"); enumMap.insert(std::make_pair(Tight , xAOD::Muon::Tight)); + } + + /* parser for muon type enum */ + template <> + EnumParser::EnumParser() + { + std::string Combined("Combined"); enumMap.insert(std::make_pair(Combined , xAOD::Muon::Combined)); + std::string MuonStandAlone("MuonStandAlone"); enumMap.insert(std::make_pair(MuonStandAlone , xAOD::Muon::MuonStandAlone)); + std::string SegmentTagged("SegmentTagged"); enumMap.insert(std::make_pair(SegmentTagged , xAOD::Muon::SegmentTagged)); + std::string CaloTagged("CaloTagged"); enumMap.insert(std::make_pair(CaloTagged , xAOD::Muon::CaloTagged)); + std::string SiliconAssociatedForwardMuon("SiliconAssociatedForwardMuon"); enumMap.insert(std::make_pair(SiliconAssociatedForwardMuon , xAOD::Muon::SiliconAssociatedForwardMuon)); + } + + std::string InfoSwitch::get_working_point(const std::string flag) { + for (auto configDetail : m_configDetails) { + if (configDetail.compare(0, flag.size(), flag) == 0) { + return configDetail.substr(flag.size(), std::string::npos); + } + } + return ""; + } + + std::vectorInfoSwitch::get_working_points(const std::string flag) { + std::vector wps; + for (auto configDetail : m_configDetails) { + if (configDetail.compare(0, flag.size(), flag) == 0) { + wps.push_back(configDetail.substr(flag.size(), std::string::npos)); + } + } + return wps; + } + + /* + !!!!!!!!!!!!!WARNING!!!!!!!!!!!!! + If you change the string here, + please update the relevant + documentation in the header file. + !!!!!!!!!!!!!WARNING!!!!!!!!!!!!! + */ + + void EventInfoSwitch::initialize(){ + m_noDataInfo = has_exact("noDataInfo"); + m_pileup = has_exact("pileup"); + m_pileupsys = has_exact("pileupsys"); + m_eventCleaning = has_exact("eventCleaning"); + m_bcidInfo = has_exact("bcidInfo"); + m_shapeEM = has_exact("shapeEM"); + m_shapeEMPFLOW = has_exact("shapeEMPFLOW"); + m_shapeLC = has_exact("shapeLC"); + m_truth = has_exact("truth"); + m_caloClus = has_exact("caloClusters"); + m_weightsSys = has_exact("weightsSys"); + m_beamspotweight= has_exact("beamspotweight"); + } + + void TriggerInfoSwitch::initialize(){ + m_basic = has_exact("basic"); + m_menuKeys = has_exact("menuKeys"); + m_passTriggers = has_exact("passTriggers"); + m_passTrigBits = has_exact("passTrigBits"); + m_prescales = has_exact("prescales"); + m_prescalesLumi = has_exact("prescalesLumi"); + } + + void IParticleInfoSwitch::initialize(){ + m_noMultiplicity= has_exact("noMultiplicity"); + m_kinematic = has_exact("kinematic"); + + m_numLeading = 0; + for(auto configDetail : m_configDetails) + { + if( configDetail.compare(0,8,"NLeading")==0) + { + m_numLeading = std::atoi( configDetail.substr(8, std::string::npos).c_str() ); + break; + } + } + + m_useTheS = has_exact("useTheS"); + } + + void MuonInfoSwitch::initialize(){ + m_trigger = has_exact("trigger"); + m_isolation = has_exact("isolation"); + m_isolationKinematics = has_exact("isolationKinematics"); + m_quality = has_exact("quality"); + m_trackparams = has_exact("trackparams"); + m_trackhitcont = has_exact("trackhitcont"); + m_effSF = has_exact("effSF"); + m_energyLoss = has_exact("energyLoss"); + m_promptlepton = has_exact("promptlepton"); + + // working points combinations for trigger corrections + std::string token; + std::string reco_keyword = "RECO_"; + std::string isol_keyword = "ISOL_"; + std::string trig_keyword = "TRIG_"; + + std::istringstream ss(m_configStr); + while ( std::getline(ss, token, ' ') ) { + auto reco_substr = token.find(reco_keyword); + auto isol_substr = token.find(isol_keyword); + auto trig_substr = token.find(trig_keyword); + if( reco_substr != std::string::npos ){ + m_recoWPs.push_back(token.substr(5)); + } else if(isol_substr != std::string::npos){ + if(token.substr(5) == "NONE" || token == isol_keyword) m_isolWPs.push_back(""); + else m_isolWPs.push_back(token.substr(5)); + } else if(trig_substr != std::string::npos){ + m_trigWPs.push_back(token.substr(5)); + } + } + + // passSel + m_passSel = has_exact("passSel"); + // passOR + m_passOR = has_exact("passOR"); + + m_recoEff_sysNames = has_exact("recoEff_sysNames"); + m_isoEff_sysNames = has_exact("isoEff_sysNames"); + m_trigEff_sysNames = has_exact("trigEff_sysNames"); + m_ttvaEff_sysNames = has_exact("ttvaEff_sysNames"); + + m_doLRT = has_exact("doLRT"); + m_closeByCorr = has_exact("IsolCloseByCorr"); + + } + + void ElectronInfoSwitch::initialize(){ + m_trigger = has_exact("trigger"); + m_isolation = has_exact("isolation"); + m_isolationKinematics = has_exact("isolationKinematics"); + m_quality = has_exact("quality"); + if (m_quality) { + std::cerr << "WARNING! The 'quality' option is deprecated in ElectronInfoSwitch. Use 'PID' instead." << std::endl; + } + m_PID = has_exact("PID"); + m_recoparams = has_exact("recoparams"); + m_trackparams = has_exact("trackparams"); + m_trackhitcont = has_exact("trackhitcont"); + m_effSF = has_exact("effSF"); + m_promptlepton = has_exact("promptlepton"); + // working points for scale-factors + + // working points combinations for trigger corrections + std::string token; + std::string pid_keyword = "PID_"; + std::string pidsf_keyword = "PIDSF_"; + std::string isol_keyword = "ISOL_"; + std::string trig_keyword = "TRIG_"; + + std::istringstream ss(m_configStr); + while ( std::getline(ss, token, ' ') ) { + auto pid_substr = token.find(pid_keyword); + auto pidsf_substr = token.find(pidsf_keyword); + auto isol_substr = token.find(isol_keyword); + auto trig_substr = token.find(trig_keyword); + if( pid_substr != std::string::npos ){ + m_PIDWPs.push_back(token.substr(4)); + } else if( pidsf_substr != std::string::npos ){ + m_PIDSFWPs.push_back(token.substr(6)); + } else if(isol_substr != std::string::npos){ + if(token.substr(5) == "NONE" || token == isol_keyword) m_isolWPs.push_back(""); + else m_isolWPs.push_back(token.substr(5)); + } else if(trig_substr != std::string::npos){ + m_trigWPs.push_back(token.substr(5)); + } + } + + // passSel + m_passSel = has_exact("passSel"); + // passOR + m_passOR = has_exact("passOR"); + //Add LRT flag + m_doLRT = has_exact("doLRT"); + + m_closeByCorr = has_exact("IsolCloseByCorr"); + } + + void PhotonInfoSwitch::initialize(){ + m_isolation = has_exact("isolation"); + m_PID = has_exact("PID"); + m_purity = has_exact("purity"); + m_effSF = has_exact("effSF"); + m_trigger = has_exact("trigger"); + m_isoCones = get_working_points("isoCone"); + } + + void ClusterInfoSwitch::initialize(){ + } + + void JetInfoSwitch::initialize(){ + std::string tmpConfigStr; // temporary config string used to extract multiple values + + m_trigger = has_exact("trigger"); + m_substructure = has_exact("substructure"); + m_ntrimsubjets = has_exact("ntrimsubjets"); + m_bosonCount = has_exact("bosonCount"); + m_VTags = has_exact("VTags"); + m_rapidity = has_exact("rapidity"); + m_clean = has_exact("clean"); + m_cleanLight = has_exact("cleanLight"); + m_cleanTrig = has_exact("cleanTrig"); + m_cleanLLP = has_exact("cleanLLP"); + m_timing = has_exact("timing"); + m_energy = has_exact("energy"); + m_energyLight = has_exact("energyLight"); + m_scales = has_exact("scales"); + m_constscaleEta = has_exact("constscaleEta"); + m_detectorEta = has_exact("detectorEta"); + m_resolution = has_exact("resolution"); + m_truth = has_exact("truth"); + m_truthDetails = has_exact("truth_details"); + m_layer = has_exact("layer"); + m_fJvt = has_exact("fJvt"); + m_trackPV = has_exact("trackPV"); + m_trackAll = has_exact("trackAll"); + m_chargedPFOPV = has_exact("chargedPFOPV"); + m_jvt = has_exact("JVT"); + m_NNJvt = has_exact("NNJvt"); + m_allTrack = has_exact("allTrack"); + m_allTrackPVSel = has_exact("allTrackPVSel"); + m_allTrackDetail= has_exact("allTrackDetail"); + m_muonCorrection= has_exact("muonCorrection"); + + if( m_allTrackDetail ) { + m_allTrackPVSel = m_allTrackPVSel || has_exact("allTrackDetailPVSel") ; + } + m_constituent = has_exact("constituent"); + m_constituentAll = has_exact("constituentAll"); + m_flavorTag = has_exact("flavorTag"); + m_flavorTagHLT = has_exact("flavorTagHLT"); + m_flavorTagTLA = has_exact("flavorTagTLA"); + m_btag_jettrk = has_exact("btag_jettrk"); + m_jetFitterDetails = has_exact("jetFitterDetails"); + m_svDetails = has_exact("svDetails"); + m_ipDetails = has_exact("ipDetails"); + + if(has_match("tracksInJet")){ + m_tracksInJet = true; + std::string input(m_configStr); + // erase everything before the interesting string + input.erase( 0, input.find("tracksInJet_") ); + // erase everything after the interesting string + // only if there is something after the string + if( input.find(" ") != std::string::npos ) { + input.erase( input.find_first_of(" "), input.size() ); + } + // remove tracksInJet_ to just leave the tack name + input.erase(0,12); + + m_trackName = input; + }else{ + m_tracksInJet = false; + m_trackName = ""; + } + + + m_trackJetNames.clear(); + if(has_match("trackJetName")){ + std::string input(m_configStr); + // erase everything before the interesting string + input.erase( 0, input.find("trackJetName") ); + if(input.find(" ")!=std::string::npos) input.erase( input.find(" "), std::string::npos ); + input.erase( 0, 13 ); + + std::stringstream ss(input); + std::string s; + while(std::getline(ss, s, '_')) + m_trackJetNames.push_back(s); + } + + + m_hltVtxComp = has_exact("hltVtxComp"); + m_onlineBS = has_exact("onlineBS"); + m_onlineBSTool = has_exact("onlineBSTool"); + + m_passSel = has_exact("passSel"); + m_passOR = has_exact("passOR"); + + m_charge = has_exact("charge"); + m_etaPhiMap = has_exact("etaPhiMap"); + m_byAverageMu = has_exact("byAverageMu"); + m_byEta = has_exact("byEta"); + m_vsLumiBlock = has_exact("vsLumiBlock"); + m_vsActualMu = has_exact("vsActualMu"); + m_lumiB_runN = has_exact("lumiB_runN"); + + m_sfJVTName = get_working_point("sfJVT"); + m_sffJVTName = get_working_point("sffJVT"); + + m_jetBTag.clear(); + m_jetBTagCts.clear(); + tmpConfigStr=std::string(m_configStr); + while( tmpConfigStr.find("jetBTag") != std::string::npos ) { // jetBTag + // erase everything before the interesting string + tmpConfigStr.erase( 0, tmpConfigStr.find("jetBTag") ); + // extract interesting string + std::size_t pos =tmpConfigStr.find(" "); + std::string input=tmpConfigStr.substr(0,pos); + // remove interesting string from configStr being processed + tmpConfigStr.erase(0,pos); + // extracted the tagger and numbers + std::stringstream ss(input); + std::string s; + uint idx=0; + std::string tagger; + std::string type; + std::vector wps; + while(std::getline(ss, s, '_')) { + switch(idx) + { + case 0: // jetBTag + break; + case 1: // tagger + tagger=s; + break; + case 2: // efficiency type + type=s; + break; + case 3: // list of efficiency working points + uint size( s.size()/2 ); + for(uint i=0;i>(); + for(auto wp : wps) + m_jetBTag[tagger].push_back(std::make_pair(type,wp)); + + // Add the continuous tagger if this was the one that was passed + if(type.find("Continuous")!=std::string::npos) + m_jetBTagCts.push_back(tagger); + + } // jetBTag + + m_area = has_exact("area"); + m_JVC = has_exact("JVC"); + } + + void TruthInfoSwitch::initialize(){ + m_type = has_exact("type"); + m_bVtx = has_exact("bVtx"); + m_parents = has_exact("parents"); + m_children = has_exact("children"); + m_dressed = has_exact("dressed"); + m_origin = has_exact("origin"); + m_particleType = has_exact("particleType"); + m_pdgIdOnly = has_exact("pdgIdOnly"); + } + + void TrackInfoSwitch::initialize(){ + m_noMultiplicity= has_exact("noMultiplicity"); + m_kinematic = has_exact("kinematic"); + m_fitpars = has_exact("fitpars"); + m_numbers = has_exact("numbers"); + m_vertex = has_exact("vertex"); + m_useTheS = has_exact("useTheS"); + } + + void TauInfoSwitch::initialize(){ + m_trigger = has_exact("trigger"); + m_JetID = has_exact("JetID"); + m_EleVeto = has_exact("EleVeto"); + m_trackAll = has_exact("trackAll"); + m_xahTauJetMatching = has_exact("xahTauJetMatching"); + m_effSF = has_exact("effSF"); + m_trackparams = has_exact("trackparams"); + m_trackhitcont = has_exact("trackhitcont"); + + // working points combinations for trigger corrections + std::string token; + std::string taueff_keyword = "TAUEFF_"; + std::string trig_keyword = "TRIG_"; + + std::istringstream ss(m_configStr); + while ( std::getline(ss, token, ' ') ) { + auto taueff_substr = token.find(taueff_keyword); + auto trig_substr = token.find(trig_keyword); + if( taueff_substr != std::string::npos ){ + m_tauEffWPs.push_back(token.substr(7)); + } else if(trig_substr != std::string::npos){ + m_trigWPs.push_back(token.substr(5)); + } + } + + } + + void METInfoSwitch::initialize(){ + m_metClus = has_exact("metClus"); + m_metTrk = has_exact("metTrk"); + m_sigClus = has_exact("sigClus") || has_exact("all"); + m_sigTrk = has_exact("sigTrk") || has_exact("all"); + m_sigResolutionClus = has_exact("sigResolutionClus") || has_exact("all"); + m_sigResolutionTrk = has_exact("sigResolutionTrk") || has_exact("all"); + m_refEle = has_exact("refEle") || has_exact("all"); + m_refGamma = has_exact("refGamma") || has_exact("all"); + m_refTau = has_exact("refTau") || has_exact("all"); + m_refMuons = has_exact("refMuons") || has_exact("all"); + m_refJet = has_exact("refJet") || has_exact("all"); + m_refJetTrk = has_exact("refJetTrk"); // take this one *only* if requested by user explicitly + m_softClus = has_exact("softClus") || has_exact("all"); + m_softTrk = has_exact("softTrk") || has_exact("all"); + m_noExtra = has_exact("noExtra"); + if(!m_metClus && !m_metTrk && !m_noExtra){ // to maintain backward compatibility which turned on metClus and metTrk if both were false + m_metClus = true; + m_metTrk = true; + } + } + + } // close namespace HelperClasses diff --git a/_sources/api/program_listing_file_Root_HelperFunctions.cxx.rst.txt b/_sources/api/program_listing_file_Root_HelperFunctions.cxx.rst.txt new file mode 100644 index 0000000000..cf3f8593ed --- /dev/null +++ b/_sources/api/program_listing_file_Root_HelperFunctions.cxx.rst.txt @@ -0,0 +1,578 @@ + +.. _program_listing_file_Root_HelperFunctions.cxx: + +Program Listing for File HelperFunctions.cxx +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HelperFunctions.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/HelperFunctions.h" + #include + + #include "xAODBase/IParticleContainer.h" + + // samples + #include + #include + #include + + // jet reclustering + #include + #include + + // jet trimming + #include + #include + + void xAH::addRucio(SH::SampleHandler& sh, const std::string& name, const std::string& dslist) + { + std::unique_ptr sample(new SH::SampleGrid(name)); + sample->meta()->setString(SH::MetaFields::gridName, dslist); + sample->meta()->setString(SH::MetaFields::gridFilter, SH::MetaFields::gridFilter_default); + sh.add(sample.release()); + } + + MsgStream& HelperFunctions::msg( MSG::Level lvl ) { + static MsgStream msgStream( "HelperFunctions" ); + msgStream << lvl; + return msgStream; + } + + // Get Number of Vertices with at least Ntracks + bool HelperFunctions::passPrimaryVertexSelection(const xAOD::VertexContainer* vertexContainer, int Ntracks) + { + const xAOD::Vertex* primaryVertex = getPrimaryVertex( vertexContainer ); + if(!primaryVertex){ return false; } + if((int)(primaryVertex)->nTrackParticles() < Ntracks ) { + return false; + } + return true; + } + + int HelperFunctions::countPrimaryVertices(const xAOD::VertexContainer* vertexContainer, int Ntracks) + { + + int NPV = 0; + + // Loop over vertices in the container + for( auto vtx_itr : *vertexContainer ) + { + if((int)vtx_itr->nTrackParticles() < Ntracks ) { continue; } + NPV++; + } + + return NPV; + + } + + int HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer, MsgStream& msg) + { + int location(0); + + if(vertexContainer == nullptr) { + msg << MSG::DEBUG << "No primary vertex container was found! Returning -1" << endmsg; + return -1; + } + + for( auto vtx_itr : *vertexContainer ) + { + if(vtx_itr->vertexType() == xAOD::VxType::VertexType::PriVtx) { + return location; + } + location++; + } + msg << MSG::WARNING << "No primary vertex location was found! Returning -1" << endmsg; + return -1; + } + + bool HelperFunctions::applyPrimaryVertexSelection( const xAOD::JetContainer* jets, const xAOD::VertexContainer* vertices ) + { + + // if(jets->empty()) { return true; } + + // int pvLocation = HelperFunctions::getPrimaryVertexLocation(vertices); + // if ( pvLocation < 0 ) { return false; } + // const xAOD::Vertex* vertex = vertices->at( pvLocation ); + + // // check if the PV compatible Ghost Matched tracks are already here + // static SG::AuxElement::ConstAccessor< std::vector > >ghostTrackPVAcc ("GhostTrackPV"); + // if( ghostTrackPVAcc.isAvailable( *(jets->at(0)) ) ) { return true; } + + // // get the originals and apply selection + // static SG::AuxElement::ConstAccessor< std::vector > >ghostTrack ("GhostTrack"); + // for( auto jet_itr : *jets ) { + + // if ( !ghostTrack.isAvailable( *jet_itr ) ) { continue; } + // std::vector > trackLinks = ghostTrack( *jet_itr ); + + // // store the selected tracks + // std::vector > selectedTrackHolder; + + // int originalIndex(-1); + // for ( auto link_itr : trackLinks ) { + // originalIndex++; + + // if( !link_itr.isValid() ) { continue; } + // const xAOD::TrackParticle* track = dynamic_cast( *link_itr ); + + // if( track->pt() < 500 ) { continue; } // pT cut + // if( track->vertex() != vertex ) { // if not in PV vertex fit + // if( track->vertex() != 0 ) { continue; } // make sure in no vertex fits + // if( fabs((track->z0()+track->vz()-vertex->z())*sin(track->theta())) > 3.0 ) { continue; } // make sure close to PV in z + // } + + // selectedTrackHolder.push_back( link_itr ); + + // } // loop over tracks + + // jet_itr->auxdecor< std::vector< ElementLink< xAOD::IParticleContainer > > > ("GhostTrackPV") = selectedTrackHolder; + + // } // loop over jets + + + return true; + } + + std::string HelperFunctions::replaceString(std::string subject, const std::string& search, const std::string& replace) + { + size_t pos = 0; + while ((pos = subject.find(search, pos)) != std::string::npos) { + subject.replace(pos, search.length(), replace); + pos += replace.length(); + } + return subject; + } + + std::vector HelperFunctions::SplitString(TString& orig, const char separator) + { + // 'splitV' with the primitive strings + std::vector splitV; + TString splitOpt(orig); + splitOpt.ReplaceAll("\n"," "); + splitOpt = splitOpt.Strip(TString::kBoth,separator); + + while (splitOpt.Length()>0) { + if ( !splitOpt.Contains(separator) ) { + splitOpt.ReplaceAll(" ",""); // clear empty spaces + splitV.push_back(splitOpt); + break; + } + else { + TString toSave = splitOpt(0,splitOpt.First(separator)); + splitV.push_back(toSave); + splitOpt = splitOpt(splitOpt.First(separator),splitOpt.Length()); + } + splitOpt = splitOpt.Strip(TString::kLeading,separator); + } + + return splitV; + } + + StatusCode HelperFunctions::isAvailableMetaData(TTree* metaData){ + if ( !metaData ) { + Info("HelperFunctions::isAvailableMetaData()", "MetaData tree missing from input file. Aborting "); + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; + } + + bool HelperFunctions::isFilePrimaryxAOD(TFile* inputFile) { + TTree* metaData = dynamic_cast (inputFile->Get("MetaData")); + + /* check that MetaData tree exists */ + ANA_CHECK( isAvailableMetaData(metaData)); + + metaData->LoadTree(0); + TObjArray* ar = metaData->GetListOfBranches(); + for (int i = 0; i < ar->GetEntries(); ++i) { + TBranch* b = (TBranch*) ar->At(i); + std::string name = std::string(b->GetName()); + if (name == "StreamAOD") + return true; + } + + return false; + } + + + std::vector HelperFunctions::jetReclustering( + const xAOD::JetContainer* jets, + double radius, + double fcut, + fastjet::JetAlgorithm rc_alg + ){ + + //1. Need to convert the vector of jets to a vector of pseudojets + // only need p4() since we're using them as inputs + std::vector input_jets; + + for(auto jet : *jets){ + const TLorentzVector jet_p4 = jet->p4(); + input_jets.push_back( + fastjet::PseudoJet( + jet_p4.Px()/1000., + jet_p4.Py()/1000., + jet_p4.Pz()/1000., + jet_p4.E ()/1000. + ) + ); + } + + //2. Build up the new jet definitions using input configurations + // - jet algorithm + // - radius + fastjet::JetDefinition jet_def(rc_alg, radius); + + //3. Run the Cluster Sequence on pseudojets with the right jet definition above + // cs = clustersequence + fastjet::ClusterSequence cs(input_jets, jet_def); + + // 4. Grab the reclustered jets, sorted by pt() + // rc_jets == reclustered jets + std::vector rc_jets = fastjet::sorted_by_pt(cs.inclusive_jets()); + + //5. Apply trimming on PJ.constituents() using fcut + // rc_t_jets == reclustered, trimmed jets + std::vector rc_t_jets; + + for(auto rc_jet : rc_jets){ + TLorentzVector rc_t_jet = TLorentzVector(); + // loop over subjets + for(auto rc_jet_subjet : rc_jet.constituents()){ + TLorentzVector subjet = TLorentzVector(); + subjet.SetPtEtaPhiE( + rc_jet_subjet.pt(), + rc_jet_subjet.eta(), + rc_jet_subjet.phi(), + rc_jet_subjet.e() + ); + if(subjet.Pt() > fcut*rc_jet.pt()) rc_t_jet += subjet; + } + rc_t_jets.push_back(rc_t_jet); + } + + // notes: rc_t_jets is not sorted by pt due to trimming applied + struct sort_by_pt + { + inline bool operator() (const TLorentzVector lhs, const TLorentzVector rhs) + { + return (lhs.Pt() > rhs.Pt()); + } + }; + std::sort(rc_t_jets.begin(), rc_t_jets.end(), sort_by_pt()); + + return rc_t_jets; + } + + std::vector HelperFunctions::jetTrimming( + const xAOD::JetContainer* jets, + double radius, + double fcut, + fastjet::JetAlgorithm s_alg + ){ + + std::vector t_jets; + for(const auto jet: *jets){ + t_jets.push_back( jetTrimming(jet, radius, fcut, s_alg) ); + } + + // notes: t_jets is not sorted by pt due to trimming applied + struct sort_by_pt + { + inline bool operator() (const TLorentzVector lhs, const TLorentzVector rhs) + { + return (lhs.Pt() > rhs.Pt()); + } + }; + std::sort(t_jets.begin(), t_jets.end(), sort_by_pt()); + + return t_jets; + } + + TLorentzVector HelperFunctions::jetTrimming( + const xAOD::Jet* jet, + double radius, + double fcut, + fastjet::JetAlgorithm s_alg + ){ + + //1. Create the trimmer + fastjet::Filter trimmer(fastjet::JetDefinition(s_alg, radius), fastjet::SelectorPtFractionMin(fcut)); + + //2. Apply the trimmer to the jet, this requires the JetEDM + // convert xAOD::Jet to PseudoJet with constituents + // apply trimmer on the PseudoJet + TLorentzVector t_jet = TLorentzVector(); + std::vector constit_pseudojets = jet::JetConstituentFiller::constituentPseudoJets(*jet); + + //3. Need to use ClusterSequence to recluster jet again once we found constituents + fastjet::ClusterSequence cs(constit_pseudojets, fastjet::JetDefinition( (fastjet::JetAlgorithm) jet->getAlgorithmType(), jet->getSizeParameter())); + + fastjet::PseudoJet t_pjet = trimmer(fastjet::join(cs.inclusive_jets())); + + t_jet.SetPtEtaPhiE( + t_pjet.pt(), + t_pjet.eta(), + t_pjet.phi(), + t_pjet.e() + ); + + return t_jet; + + } + + const xAOD::Vertex* HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer* vertexContainer, MsgStream& msg) + { + + // vertex types are listed on L328 of + // https://svnweb.cern.ch/trac/atlasoff/browser/Event/xAOD/xAODTracking/trunk/xAODTracking/TrackingPrimitives.h + for( auto vtx_itr : *vertexContainer ) + { + if(vtx_itr->vertexType() != xAOD::VxType::VertexType::PriVtx) { continue; } + return vtx_itr; + } + + msg << MSG::WARNING << "No primary vertex was found! Returning nullptr" << endmsg; + + return 0; + } + + float HelperFunctions::getPrimaryVertexZ(const xAOD::Vertex* pvx) + { + float pvx_z = 0; + if(pvx) pvx_z = pvx->z(); + return pvx_z; + } + + bool HelperFunctions::sort_pt(const xAOD::IParticle* partA, const xAOD::IParticle* partB){ + return partA->pt() > partB->pt(); + } + + // Get the subset of systematics to consider + // can also return full set if systName = "All" + // + // CP::make_systematics_vector(recSysts); has some similar functionality but does not + // prune down to 1 systematic if only request that one. It does however include the + // nominal case as a null SystematicSet + std::vector< CP::SystematicSet > HelperFunctions::getListofSystematics(const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream& msg ) { + + std::vector< CP::SystematicSet > outSystList; + + // parse and split by comma + std::vector systNamesList; + std::string token; + std::istringstream ss(systNames); + while (std::getline(ss, token, ',')) { + systNamesList.push_back(token); + } + + msg << MSG::DEBUG << "systNames: " << endmsg; + for ( const std::string &name : systNamesList ) { + msg << MSG::DEBUG << "\t" << name << endmsg; + } + + // loop over input set + // + for ( const auto syst : inSysts ) { + + msg << MSG::DEBUG << syst.name() << endmsg; + + // 1. + // input systName does not contain "All": + // match with input systName(s) from the list: + // add these systematics only to the output list + // + if ( systNames.find("All") == std::string::npos ) { + // do systNames vector matching + bool valid = false; + for ( const auto s : systNamesList ) { + if ( s == syst.basename() ) { + valid = true; + break; + } + } + + // continue if not matched + if ( !valid ) continue; + + msg << MSG::DEBUG << "Found match! Adding systematic " << syst.name() << endmsg; + + // continuous systematics - can choose at what sigma to evaluate + // + if ( syst == CP::SystematicVariation (syst.basename(), CP::SystematicVariation::CONTINUOUS) ) { + + outSystList.push_back(CP::SystematicSet()); + + if ( systVal == 0 ) { + msg << MSG::ERROR << "Setting continuous systematic to 0 is nominal! Please check!" << endmsg; + RCU_THROW_MSG("Failure"); + } + + outSystList.back().insert(CP::SystematicVariation (syst.basename(), systVal)); + outSystList.push_back(CP::SystematicSet()); + outSystList.back().insert(CP::SystematicVariation (syst.basename(), -1.0*fabs(systVal))); + + } else { + // not a continuous system + + outSystList.push_back(CP::SystematicSet()); + outSystList.back().insert(syst); + + } + } + // 2. + // input systName contains "All": + // add all systematics to the output list + // + else if ( systNames.find("All") != std::string::npos ) { + + msg << MSG::DEBUG << "Adding systematic " << syst.name() << endmsg; + + // continuous systematics - can choose at what sigma to evaluate + // add +1 and -1 for when running all + // + if ( syst == CP::SystematicVariation (syst.basename(), CP::SystematicVariation::CONTINUOUS) ) { + + if ( systVal == 0 ) { + msg << MSG::ERROR << "Setting continuous systematic to 0 is nominal! Please check!" << endmsg; + RCU_THROW_MSG("Failure"); + } + + outSystList.push_back(CP::SystematicSet()); + outSystList.back().insert(CP::SystematicVariation (syst.basename(), fabs(systVal))); + outSystList.push_back(CP::SystematicSet()); + outSystList.back().insert(CP::SystematicVariation (syst.basename(), -1.0*fabs(systVal))); + + } else { + // not a continuous systematic + + outSystList.push_back(CP::SystematicSet()); + outSystList.back().insert(syst); + + } + + } + + } // loop over recommended systematics + + // Add an empty CP::SystematicVariation at the top of output list to account for the nominal case + // when running on all systematics or on nominal only + // + if ( systNames.find("Nominal") != std::string::npos || systNames.find("All") != std::string::npos || systNames.empty() ) { + outSystList.insert( outSystList.begin(), CP::SystematicSet() ); + const CP::SystematicVariation nullVar = CP::SystematicVariation(""); + outSystList.back().insert(nullVar); + } + + return outSystList; + + } + + void HelperFunctions::writeSystematicsListHist( const std::vector< CP::SystematicSet > &systs, std::string histName, TFile *file ) + { + std::string folderName = "systematics"; + std::string name = folderName + "/" + histName; + if (!systs.size() || histName.empty() || file->Get(name.c_str())) { + return; + } + + if (!file->Get(folderName.c_str())) { + file->mkdir(folderName.c_str()); + } + file->cd(folderName.c_str()); + + TH1D hist(histName.c_str(), histName.c_str(), systs.size(), 0.5, systs.size() + 0.5); + for (size_t i = 0; i < systs.size(); i++) { + if (systs[i].name().empty()) { + hist.GetXaxis()->SetBinLabel(i + 1, "nominal"); + } else { + hist.GetXaxis()->SetBinLabel(i + 1, systs[i].name().c_str()); + } + } + hist.Write(); + } + + float HelperFunctions::dPhi(float phi1, float phi2) + { + float dPhi = phi1 - phi2; + if(dPhi > 3.14) dPhi -= 2*3.14; + if(dPhi < -3.14) dPhi += 2*3.14; + return dPhi; + } + + + std::size_t HelperFunctions::string_pos( const std::string& haystack, const std::string& needle, unsigned int N ) + { + if( N == 0 ) return std::string::npos; + std::size_t pos, from = 0; + for(unsigned i=0; i inputSet; + + // parse and split by space + std::string token; + std::istringstream ss(input); + while ( std::getline(ss, token, ' ') ) + inputSet.insert(token); + + + return inputSet.find(flag) != inputSet.end(); + } + + HelperFunctions::ShowerType HelperFunctions::getMCShowerType(const std::string& sample_name, const std::string& m_taggerName) + { + // + //pre-process sample name + TString tmp_name(sample_name); + tmp_name.ReplaceAll("Py8EG","PYTHIA8EVTGEN"); + tmp_name.ReplaceAll("Py8EvtGen","PYTHIA8EVTGEN"); + tmp_name.ReplaceAll("Py8","Pythia8"); + if(tmp_name.Contains("Pythia") && !tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia","PYTHIA8EVTGEN"); + if(tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia8","PYTHIA8EVTGEN"); + //capitalize the entire sample name + tmp_name.ToUpper(); + + // + // Determine shower type by looking for keywords in name + if(m_taggerName=="DL1dv01"){ + if(tmp_name.Contains("AMCATNLOPY")) return AmcPy8; + else if(tmp_name.Contains("AMCATNLOH")) return AmcH7; + else if(tmp_name.Contains("PYTHIA8EVTGEN")) return Pythia8; + else if(tmp_name.Contains("HERWIG")) return Herwig7p1; + else if(tmp_name.Contains("PHH7EG")) return Herwig7p2; + else if(tmp_name.Contains("SHERPA_221_")) return Sherpa221; + else if(tmp_name.Contains("SH_221_")) return Sherpa221; + else if(tmp_name.Contains("SH_2210")) return Sherpa2210; + else if(tmp_name.Contains("SH_2211")) return Sherpa2210; + else if(tmp_name.Contains("SH_2212")) return Sherpa2212; + else return Unknown; + } else if(m_taggerName=="GN2v01"){ + if(tmp_name.Contains("PYTHIA8EVTGEN517")) return Pythia8_517; + else if(tmp_name.Contains("PYTHIA8EVTGEN") and !tmp_name.Contains("AMCATNLO")) return Pythia8; //aMcAtNlo not supported for GN2, so don't let it count as Pythia8 + else if(tmp_name.Contains("HERWIG") and !tmp_name.Contains("AMCATNLO")) return Herwig7p1; + else if(tmp_name.Contains("PHH7EG")) return Herwig7p2; + else if(tmp_name.Contains("SH_2210")) return Sherpa2214;//FTAG uses 2.2.14 SFs for 2.2.10 + else if(tmp_name.Contains("SH_2211")) return Sherpa2214;//MC-to-MC maps for versions of Sherpa between 2.2.11 and 2.2.16 are equivalent. + else if(tmp_name.Contains("SH_2212")) return Sherpa2214; + else if(tmp_name.Contains("SH_2213")) return Sherpa2214; + else if(tmp_name.Contains("SH_2214")) return Sherpa2214; + else if(tmp_name.Contains("SH_2215")) return Sherpa2214; + else if(tmp_name.Contains("SH_2216")) return Sherpa2214; + else if(tmp_name.Contains("SH_") and !tmp_name.Contains("SH_2")) return Sherpa_Unknown;//Unknown Sherpa Version. This is to handle Sh_blank (e.g. DSID 701050). The examples I've found are all 2.2.16, but that's not guaranteed. + else return Unknown; + } else { + return Unknown; + } + } diff --git a/_sources/api/program_listing_file_Root_HistogramManager.cxx.rst.txt b/_sources/api/program_listing_file_Root_HistogramManager.cxx.rst.txt new file mode 100644 index 0000000000..e89e023d33 --- /dev/null +++ b/_sources/api/program_listing_file_Root_HistogramManager.cxx.rst.txt @@ -0,0 +1,281 @@ + +.. _program_listing_file_Root_HistogramManager.cxx: + +Program Listing for File HistogramManager.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/HistogramManager.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * Base class used to book a set of histograms. + * Many sets can be created and compared for + * efficiecny studies or population studies. + * + * G. Facini + * Sep 9 08:58:12 CEST 2014 + * G. Stark + * Jan 20 10:29 CEST 2015 + * + ******************************************/ + + #include + #include "xAODAnaHelpers/HistogramManager.h" + + /* constructors and destructors */ + HistogramManager::HistogramManager(std::string name, std::string detailStr): + m_name(name), + m_detailStr(detailStr), + m_msg(name) + { + + // if last character of name is a alphanumeric add a / so that + // in the output file, a TDirectory is created with the histograms inside + if( isalnum( m_name.back() ) && !ispunct( m_name.back() ) ) { + m_name += "/"; + //Info("HistogramManager()", "Adding slash to put hists in TDirectories: %s",m_name.c_str()); + } + + m_msg.setLevel(MSG::INFO); + } + + HistogramManager::~HistogramManager() {} + + /* Main book() functions for 1D, 2D, 3D histograms */ + TH1F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh) + { + TH1F* tmp = new TH1F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh); + SetLabel(tmp, xlabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH2F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, int ybins, double ylow, double yhigh) + { + TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ylow, yhigh); + SetLabel(tmp, xlabel, ylabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH3F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, int ybins, double ylow, double yhigh, + std::string zlabel, int zbins, double zlow, double zhigh) + { + TH3F* tmp = new TH3F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ylow, yhigh, zbins, zlow, zhigh); + SetLabel(tmp, xlabel, ylabel, zlabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TProfile* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, double ylow, double yhigh, + std::string option) + { + TProfile* tmp = new TProfile( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ylow, yhigh, option.c_str()); + SetLabel(tmp, xlabel, ylabel); + //this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + + TH1F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinArr) + { + TH1F* tmp = new TH1F( (name + title).c_str(), title.c_str(), xbins, xbinArr); + SetLabel(tmp, xlabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH2F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinArr, + std::string ylabel, int ybins, double ylow, double yhigh) + { + TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ylow, yhigh); + SetLabel(tmp, xlabel, ylabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH2F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, int ybins, const Double_t* ybinArr) + { + TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ybinArr); + SetLabel(tmp, xlabel, ylabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH2F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinArr, + std::string ylabel, int ybins, const Double_t* ybinArr) + { + TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ybinArr); + SetLabel(tmp, xlabel, ylabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TH3F* HistogramManager::book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinArr, + std::string ylabel, int ybins, const Double_t* ybinArr, + std::string zlabel, int zbins, const Double_t* zbinArr) + { + TH3F* tmp = new TH3F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ybinArr, zbins, zbinArr); + SetLabel(tmp, xlabel, ylabel, zlabel); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TProfile* HistogramManager::book(std::string name, std::string title, + int xbins, const Double_t* xbinArr, + double ylow, double yhigh) + { + TProfile* tmp = new TProfile( (name+title).c_str(), title.c_str(), xbins, xbinArr, ylow, yhigh); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + TProfile* HistogramManager::book(std::string name, std::string title, + int xbins, double xlow, double xhigh, + double ylow, double yhigh) + { + TProfile* tmp = new TProfile( (name+title).c_str(), title.c_str(), xbins, xlow, xhigh, ylow, yhigh); + this->Sumw2(tmp); + this->record(tmp); + return tmp; + } + + MsgStream& HistogramManager :: msg () const { return m_msg; } + MsgStream& HistogramManager :: msg (int level) const { + MsgStream& result = msg(); + result << MSG::Level (level); + return result; + } + + /* Helper functions */ + void HistogramManager::Sumw2(TH1* hist, bool flag /*=true*/) { + hist->Sumw2(flag); + } + + void HistogramManager::record(TH1* hist) { + m_allHists.push_back( hist ); + + // Check if this histName already exists + std::string histName = hist->GetName(); + HistMap_t::const_iterator it = m_histMap.find( histName ); + if ( it != m_histMap.end() ) // It does exist! + { + ANA_MSG_WARNING( "The histogram with name=" << histName << " already exists! " + << " NOT entering into the hist map, but prepare for unexpected behaviour" ); + return; + } + m_histMap.insert( m_histMap.end(), std::pair< std::string, TH1* >( histName, hist ) ); + } + + void HistogramManager::record(EL::IWorker* wk) { + for( auto hist : m_allHists ){ + wk->addOutput(hist); + } + } + + void HistogramManager::SetLabel(TH1* hist, std::string xlabel) + { + hist->GetXaxis()->SetTitle(xlabel.c_str()); + } + + void HistogramManager::SetLabel(TH1* hist, std::string xlabel, std::string ylabel) + { + hist->GetYaxis()->SetTitle(ylabel.c_str()); + this->SetLabel(hist, xlabel); + } + + void HistogramManager::SetLabel(TH1* hist, std::string xlabel, std::string ylabel, std::string zlabel) + { + hist->GetZaxis()->SetTitle(zlabel.c_str()); + this->SetLabel(hist, xlabel, ylabel); + } + + TH1* HistogramManager::findHist(const std::string& histName) { + // See if this entry exists in the map + HistMap_t::const_iterator it = m_histMap.find( histName ); + if ( it == m_histMap.end() ) { + ANA_MSG_ERROR("Histogram name " << histName << " not found"); + return NULL; + } + else { + return it->second; + } + } + + void HistogramManager::fillHist(const std::string& histName, double value) { + TH1* histPointer(NULL); + histPointer = this->findHist(histName); + histPointer->Fill(value); + } + + void HistogramManager::fillHist(const std::string& histName, double value, double weight) { + TH1* histPointer(NULL); + histPointer = this->findHist(histName); + histPointer->Fill(value, weight); + } + + void HistogramManager::fillHist(const std::string& histName, double valueX, double valueY, double weight) { + TH2* histPointer(NULL); + HistMap_t::const_iterator it = m_histMap.find( histName ); + if ( it == m_histMap.end() ) { + ANA_MSG_ERROR("Histogram name " << histName << " not found"); + return; + } + else { + histPointer = (TH2*)it->second; + } + histPointer->Fill(valueX, valueY, weight); + } + + void HistogramManager::fillHist(const std::string& histName, double valueX, double valueY, double valueZ, double weight) { + TH3* histPointer(NULL); + HistMap_t::const_iterator it = m_histMap.find( histName ); + if ( it == m_histMap.end() ) { + ANA_MSG_ERROR("Histogram name " << histName << " not found"); + return; + } + else { + histPointer = (TH3*)it->second; + } + histPointer->Fill(valueX, valueY, valueZ, weight); + } + + void HistogramManager::fillProfile(const std::string& histName, double valueX, double valueY, double weight) { + TProfile* histPointer(NULL); + HistMap_t::const_iterator it = m_histMap.find( histName ); + if ( it == m_histMap.end() ) { + ANA_MSG_ERROR("Histogram name " << histName << " not found"); + return; + } + else { + histPointer = (TProfile*)it->second; + } + histPointer->Fill(valueX, valueY, weight); + } diff --git a/_sources/api/program_listing_file_Root_IParticleHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_IParticleHists.cxx.rst.txt new file mode 100644 index 0000000000..b9e763296c --- /dev/null +++ b/_sources/api/program_listing_file_Root_IParticleHists.cxx.rst.txt @@ -0,0 +1,203 @@ + +.. _program_listing_file_Root_IParticleHists.cxx: + +Program Listing for File IParticleHists.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/IParticleHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + + ANA_MSG_SOURCE(msgIParticleHists, "IParticleHists") + + using std::vector; + + IParticleHists :: IParticleHists (std::string name, std::string detailStr, std::string prefix, std::string title) : + HistogramManager(name, detailStr), + m_infoSwitch(new HelperClasses::IParticleInfoSwitch(m_detailStr)), + m_prefix(prefix),m_title(title) + { + m_debug = false; + } + + IParticleHists :: ~IParticleHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + StatusCode IParticleHists::initialize() { + + // These plots are always made + m_Pt_l = book(m_name, m_prefix+"Pt_l", m_title+" p_{T} [GeV]", 120, 0, 3000.); + m_Pt = book(m_name, m_prefix+"Pt", m_title+" p_{T} [GeV]", 100, 0, 1000.); + m_Pt_m = book(m_name, m_prefix+"Pt_m", m_title+" p_{T} [GeV]", 100, 0, 500.); + m_Pt_s = book(m_name, m_prefix+"Pt_s", m_title+" p_{T} [GeV]", 200, 0, 200.); + m_Eta = book(m_name, m_prefix+"Eta", m_title+" #eta", 98, -4.9, 4.9); + m_Phi = book(m_name, m_prefix+"Phi", m_title+" Phi", 120, -TMath::Pi(), TMath::Pi() ); + m_M = book(m_name, m_prefix+"Mass", m_title+" Mass [GeV]", 120, 0, 400); + m_E = book(m_name, m_prefix+"Energy", m_title+" Energy [GeV]",120, 0, 4000.); + m_Rapidity = book(m_name, m_prefix+"Rapidity", m_title+" Rapidity", 120, -10, 10); + + if(m_debug) Info("IParticleHists::initialize()", m_name.c_str()); + // details of the particle kinematics + if( m_infoSwitch->m_kinematic ) { + if(m_debug) Info("IParticleHists::initialize()", "adding kinematic plots"); + m_Px = book(m_name, m_prefix+"Px", m_title+" Px [GeV]", 120, 0, 1000); + m_Py = book(m_name, m_prefix+"Py", m_title+" Py [GeV]", 120, 0, 1000); + m_Pz = book(m_name, m_prefix+"Pz", m_title+" Pz [GeV]", 120, 0, 4000); + + m_Et = book(m_name, m_prefix+"Et", m_title+" E_{T} [GeV]", 100, 0, 1000.); + m_Et_m = book(m_name, m_prefix+"Et_m", m_title+" E_{T} [GeV]", 100, 0, 500.); + m_Et_s = book(m_name, m_prefix+"Et_s", m_title+" E_{T} [GeV]", 100, 0, 100.); + } + + // N leading jets + if( m_infoSwitch->m_numLeading > 0 ){ + std::stringstream pNum; + std::stringstream pTitle; + for(int iParticle=0; iParticle < m_infoSwitch->m_numLeading; ++iParticle){ + pNum << iParticle; + + pTitle << iParticle+1; + switch(iParticle) + { + case 0: + pTitle << "^{st}"; + break; + case 1: + pTitle << "^{nd}"; + break; + case 2: + pTitle << "^{rd}"; + break; + default: + pTitle << "^{th}"; + break; + } + + m_NPt_l.push_back( book(m_name, (m_prefix+"Pt_l_"+pNum.str()), pTitle.str()+" "+m_title+" p_{T} [GeV]" ,120, 0, 3000. ) ); + m_NPt .push_back( book(m_name, (m_prefix+"Pt_"+pNum.str()), pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100, 0, 1000. ) ); + m_NPt_m.push_back( book(m_name, (m_prefix+"Pt_m_"+pNum.str()), pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100, 0, 500. ) ); + m_NPt_s.push_back( book(m_name, (m_prefix+"Pt_s_"+pNum.str()), pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100, 0, 100. ) ); + m_NEta.push_back( book(m_name, (m_prefix+"Eta_"+pNum.str()), pTitle.str()+" "+m_title+" #eta" , 80, -4, 4 ) ); + m_NPhi.push_back( book(m_name, (m_prefix+"Phi_"+pNum.str()), pTitle.str()+" "+m_title+" Phi" ,120, -TMath::Pi(), TMath::Pi() ) ); + m_NM.push_back( book(m_name, (m_prefix+"Mass_"+pNum.str()), pTitle.str()+" "+m_title+" Mass [GeV]" ,120, 0, 400 ) ); + m_NE.push_back( book(m_name, (m_prefix+"Energy_"+pNum.str()), pTitle.str()+" "+m_title+" Energy [GeV]",120, 0, 4000. ) ); + m_NRapidity.push_back( book(m_name, (m_prefix+"Rapidity_"+pNum.str()), pTitle.str()+" "+m_title+" Rapidity" ,120, -10, 10 ) ); + if(m_infoSwitch->m_kinematic){ + m_NEt .push_back( book(m_name, (m_prefix+"Et_"+pNum.str()), pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100, 0, 1000. ) ); + m_NEt_m.push_back( book(m_name, (m_prefix+"Et_m_"+pNum.str()), pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100, 0, 500. ) ); + m_NEt_s.push_back( book(m_name, (m_prefix+"Et_s_"+pNum.str()), pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100, 0, 100. ) ); + } + + pNum.str(""); + pTitle.str(""); + + }//for iParticle + } + + return StatusCode::SUCCESS; + } + + StatusCode IParticleHists::execute( const xAOD::IParticleContainer* particles, float eventWeight, const xAOD::EventInfo* eventInfo) { + using namespace msgIParticleHists; + for( auto particle_itr : *particles ) { + ANA_CHECK( this->execute( particle_itr, eventWeight, eventInfo)); + } + + if( m_infoSwitch->m_numLeading > 0){ + int numParticles = std::min( m_infoSwitch->m_numLeading, (int)particles->size() ); + for(int iParticle=0; iParticle < numParticles; ++iParticle){ + m_NPt_l.at(iParticle)-> Fill( particles->at(iParticle)->pt()/1e3, eventWeight); + m_NPt.at(iParticle)-> Fill( particles->at(iParticle)->pt()/1e3, eventWeight); + m_NPt_m.at(iParticle)-> Fill( particles->at(iParticle)->pt()/1e3, eventWeight); + m_NPt_s.at(iParticle)-> Fill( particles->at(iParticle)->pt()/1e3, eventWeight); + m_NEta.at(iParticle)-> Fill( particles->at(iParticle)->eta(), eventWeight); + m_NPhi.at(iParticle)-> Fill( particles->at(iParticle)->phi(), eventWeight); + m_NM.at(iParticle)-> Fill( particles->at(iParticle)->m()/1e3, eventWeight); + m_NE.at(iParticle)-> Fill( particles->at(iParticle)->e()/1e3, eventWeight); + m_NRapidity.at(iParticle)-> Fill( particles->at(iParticle)->rapidity(), eventWeight); + + if(m_infoSwitch->m_kinematic){ + float et = particles->at(iParticle)->e()/cosh(particles->at(iParticle)->eta())/1e3; + m_NEt .at(iParticle)-> Fill( et, eventWeight); + m_NEt_m.at(iParticle)-> Fill( et, eventWeight); + m_NEt_s.at(iParticle)-> Fill( et, eventWeight); + } + + } + } + + return StatusCode::SUCCESS; + } + + StatusCode IParticleHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* /*eventInfo*/ ) { + + if(m_debug) std::cout << "IParticleHists: in execute " < Fill( particle->pt()/1e3, eventWeight ); + m_Pt -> Fill( particle->pt()/1e3, eventWeight ); + m_Pt_m -> Fill( particle->pt()/1e3, eventWeight ); + m_Pt_s -> Fill( particle->pt()/1e3, eventWeight ); + m_Eta-> Fill( particle->eta(), eventWeight ); + m_Phi-> Fill( particle->phi(), eventWeight ); + m_M-> Fill( particle->m()/1e3, eventWeight ); + m_E-> Fill( particle->e()/1e3, eventWeight ); + m_Rapidity-> Fill( particle->rapidity(), eventWeight ); + + // kinematic + if( m_infoSwitch->m_kinematic ) { + + + m_Px-> Fill( particle->p4().Px()/1e3, eventWeight ); + m_Py-> Fill( particle->p4().Py()/1e3, eventWeight ); + m_Pz-> Fill( particle->p4().Pz()/1e3, eventWeight ); + + + m_Et -> Fill( particle->p4().Et()/1e3, eventWeight ); + m_Et_m -> Fill( particle->p4().Et()/1e3, eventWeight ); + m_Et_s -> Fill( particle->p4().Et()/1e3, eventWeight ); + } // fillKinematic + + return StatusCode::SUCCESS; + } + + + + + StatusCode IParticleHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/ ) { + + if(m_debug) std::cout << "IParticleHists: in execute " <p4; + + //basic + m_Pt_l -> Fill( partP4.Pt(), eventWeight ); + m_Pt -> Fill( partP4.Pt(), eventWeight ); + m_Pt_m -> Fill( partP4.Pt(), eventWeight ); + m_Pt_s -> Fill( partP4.Pt(), eventWeight ); + m_Eta-> Fill( partP4.Eta(), eventWeight ); + m_Phi-> Fill( partP4.Phi(), eventWeight ); + m_M-> Fill( partP4.M(), eventWeight ); + m_E-> Fill( partP4.E(), eventWeight ); + m_Rapidity-> Fill( partP4.Rapidity(), eventWeight ); + + // kinematic + if( m_infoSwitch->m_kinematic ) { + m_Px-> Fill( partP4.Px(), eventWeight ); + m_Py-> Fill( partP4.Py(), eventWeight ); + m_Pz-> Fill( partP4.Pz(), eventWeight ); + + m_Et -> Fill( partP4.Et(), eventWeight ); + m_Et_m -> Fill( partP4.Et(), eventWeight ); + m_Et_s -> Fill( partP4.Et(), eventWeight ); + } // fillKinematic + + return StatusCode::SUCCESS; + } + diff --git a/_sources/api/program_listing_file_Root_IParticleHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_IParticleHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..d469aced9e --- /dev/null +++ b/_sources/api/program_listing_file_Root_IParticleHistsAlgo.cxx.rst.txt @@ -0,0 +1,103 @@ + +.. _program_listing_file_Root_IParticleHistsAlgo.cxx: + +Program Listing for File IParticleHistsAlgo.cxx +=============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/IParticleHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + + #include + #include + #include + + #include + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(IParticleHistsAlgo) + + IParticleHistsAlgo :: IParticleHistsAlgo (std::string className) : + Algorithm(className) + { + } + + EL::StatusCode IParticleHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("IParticleHistsAlgo").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IParticleHistsAlgo :: histInitialize () + { + + ANA_MSG_INFO( m_name ); + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IParticleHistsAlgo::AddHists( std::string name ) { + std::string fullname(m_name); + fullname += name; // add systematic + IParticleHists* particleHists = new IParticleHists( fullname, m_detailStr, m_histPrefix, m_histTitle ); // add systematic + particleHists->m_debug = msgLvl(MSG::DEBUG); + ANA_CHECK( particleHists->initialize()); + particleHists->record( wk() ); + m_plots[name] = particleHists; + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IParticleHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode IParticleHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + + EL::StatusCode IParticleHistsAlgo :: initialize () + { + ANA_MSG_DEBUG( m_name); + + // in case anything was missing or blank... + if( m_inContainerName.empty() || m_detailStr.empty() ){ + ANA_MSG_ERROR( "One or more required configuration values are empty"); + return EL::StatusCode::FAILURE; + } + + + // only running 1 collection + if(m_inputAlgo.empty()) { AddHists( "" ); } + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IParticleHistsAlgo :: execute () + { + return execute(); + } + + EL::StatusCode IParticleHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + + EL::StatusCode IParticleHistsAlgo :: finalize () { + ANA_MSG_DEBUG( m_name ); + for( auto plots : m_plots ) { + if(plots.second){ + plots.second->finalize(); + delete plots.second; + } + } + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IParticleHistsAlgo :: histFinalize () { + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_IsoCloseByCorr.cxx.rst.txt b/_sources/api/program_listing_file_Root_IsoCloseByCorr.cxx.rst.txt new file mode 100644 index 0000000000..b78b64d558 --- /dev/null +++ b/_sources/api/program_listing_file_Root_IsoCloseByCorr.cxx.rst.txt @@ -0,0 +1,248 @@ + +.. _program_listing_file_Root_IsoCloseByCorr.cxx: + +Program Listing for File IsoCloseByCorr.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/IsoCloseByCorr.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * Interface to Isolation Close-by-Correction tool to correct variables used in the evaluation of + * isolation working points for the presence of leptons close-by to the object of interest. + * More information on the twiki: + * https://twiki.cern.ch/twiki/bin/view/AtlasProtected/IsolationOverlapRemoval + * + * G. Frattari (guglielmo.frattari@SPAMNOT_CERN.CH), S. Addepalli (sagara17@SPAMNOT_CERN.CH) + * + ******************************************/ + // + // + // c++ include(s): + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/Electron.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODEgamma/Photon.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODMuon/Muon.h" + #include "AthContainers/ConstDataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/IsoCloseByCorr.h" + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(IsoCloseByCorr) + + + IsoCloseByCorr :: IsoCloseByCorr () : + Algorithm("IsoCloseByCorr") + { + } + + EL::StatusCode IsoCloseByCorr :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "IsoCloseByCorr" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode IsoCloseByCorr :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode IsoCloseByCorr :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode IsoCloseByCorr :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode IsoCloseByCorr :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing IsoCloseByCorr Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + //Add a track selection tool to superseed the default in the isolation close-by-correction tool + ANA_MSG_INFO( " Initialising InDet::InDetTrackSelectionTool..." ); + m_trackSelectionTool_name = "TrackParticleSelectionTool"; + ANA_CHECK(checkToolStore(m_trackSelectionTool_name)); + const bool TrackSelToolInstanceExists = asg::ToolStore::contains(m_trackSelectionTool_name); + m_trackSelection_tool = asg::AnaToolHandle("InDet::InDetTrackSelectionTool/"+m_trackSelectionTool_name); + ANA_CHECK(m_trackSelection_tool.setProperty("minPt", 500.)); + ANA_CHECK(m_trackSelection_tool.setProperty("CutLevel", "Loose")); + ANA_CHECK(m_trackSelection_tool.retrieve()); + assert(m_trackSelection_tool.isInitialized()); + + + //Initialize isolation tool to be input to close-by-correction tool + m_IsoSelToolCloseBy_name = "IsoSelToolCloseBy"; + ANA_MSG_INFO( " Initialising CP::IsolationSelectionTool..." ); + ANA_CHECK(checkToolStore(m_IsoSelToolCloseBy_name)); + const bool IsoSelToolInstanceExists = asg::ToolStore::contains(m_IsoSelToolCloseBy_name); + m_IsoSelCloseBy_tool = asg::AnaToolHandle("CP::IsolationSelectionTool/"+m_IsoSelToolCloseBy_name); + ANA_CHECK( m_IsoSelCloseBy_tool.setProperty("ElectronWP" , m_el_iso_WP) ); + ANA_CHECK( m_IsoSelCloseBy_tool.setProperty("MuonWP" , m_mu_iso_WP) ); + ANA_CHECK( m_IsoSelCloseBy_tool.retrieve()); + assert(m_IsoSelCloseBy_tool.isInitialized()); + + //Initialize the close-by-correction tool + m_IsoCloseByCorr_tool_name = "IsoCloseByCorrTool"; + ANA_MSG_INFO( " Initialising CP::IsolationCloseByCorrectionTool..." ); + ANA_CHECK(checkToolStore(m_IsoCloseByCorr_tool_name)); + const bool IsoCloseByCorrToolInstanceExists = asg::ToolStore::contains(m_IsoCloseByCorr_tool_name); + m_IsoCloseByCorr_tool = asg::AnaToolHandle("CP::IsolationCloseByCorrectionTool/"+m_IsoCloseByCorr_tool_name); + ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("IsolationSelectionTool", m_IsoSelToolCloseBy_name) ); + ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("TrackSelectionTool", m_trackSelectionTool_name) ); + ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("BackupPrefix" , "Vanilla") ); + ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("IsolationSelectionDecorator", "CleanedUpIsolation") ); + ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("CaloCorrectionModel", CP::IsolationCloseByCorrectionTool::UseAveragedDecorators) ); + ANA_CHECK( m_IsoCloseByCorr_tool.retrieve()); + assert(m_IsoCloseByCorr_tool.isInitialized()); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode IsoCloseByCorr :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG("Applying IsoCloseByCorrectionTool... "); + + // get the collections from TEvent or TStore + const xAOD::ElectronContainer* inElectrons (nullptr); + const xAOD::MuonContainer* inMuons (nullptr); + const xAOD::PhotonContainer* inPhotons (nullptr); + + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + if(m_doPhotons){ + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + if(m_IsoCloseByCorr_tool->getCloseByIsoCorrection(Gaudi::Hive::currentContext(), + (xAOD::ElectronContainer*)inElectrons, + (xAOD::MuonContainer*)inMuons, + (xAOD::PhotonContainer*)inPhotons).code() == CP::CorrectionCode::Error) { + ANA_MSG_ERROR("CloseByIsoCorrection returns Error code"); + return StatusCode::FAILURE; + } + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode IsoCloseByCorr :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode IsoCloseByCorr :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode IsoCloseByCorr :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_Jet.cxx.rst.txt b/_sources/api/program_listing_file_Root_Jet.cxx.rst.txt new file mode 100644 index 0000000000..ff4fe32d1f --- /dev/null +++ b/_sources/api/program_listing_file_Root_Jet.cxx.rst.txt @@ -0,0 +1,280 @@ + +.. _program_listing_file_Root_Jet.cxx: + +Program Listing for File Jet.cxx +================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/Jet.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + + using namespace xAH; + + int Jet::is_btag(BTaggerOP op) const + { + switch(op) + { + case Jet::BTaggerOP::DL1r_FixedCutBEff_60: + return is_DL1r_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_70: + return is_DL1r_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_77: + return is_DL1r_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_85: + return is_DL1r_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1r_Continuous: + return is_DL1r_Continuous; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60: + return is_DL1dv00_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70: + return is_DL1dv00_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77: + return is_DL1dv00_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85: + return is_DL1dv00_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1dv00_Continuous: + return is_DL1dv00_Continuous; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60: + return is_DL1dv01_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70: + return is_DL1dv01_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77: + return is_DL1dv01_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85: + return is_DL1dv01_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1dv01_Continuous: + return is_DL1dv01_Continuous; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_60: + return is_GN120220509_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_70: + return is_GN120220509_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_77: + return is_GN120220509_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_85: + return is_GN120220509_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN120220509_Continuous: + return is_GN120220509_Continuous; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60: + return is_GN2v00LegacyWP_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70: + return is_GN2v00LegacyWP_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77: + return is_GN2v00LegacyWP_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85: + return is_GN2v00LegacyWP_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60: + return is_GN2v00NewAliasWP_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70: + return is_GN2v00NewAliasWP_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77: + return is_GN2v00NewAliasWP_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85: + return is_GN2v00NewAliasWP_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_65: + return is_GN2v01_FixedCutBEff_65; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_70: + return is_GN2v01_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_77: + return is_GN2v01_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_85: + return is_GN2v01_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_90: + return is_GN2v01_FixedCutBEff_90; + break; + case Jet::BTaggerOP::GN2v01_Continuous: + return is_GN2v01_Continuous; + break; + default: + return 0; + break; + } + } + + const std::vector& Jet::SF_btag(BTaggerOP op) const + { + switch(op) + { + case Jet::BTaggerOP::DL1r_FixedCutBEff_60: + return SF_DL1r_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_70: + return SF_DL1r_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_77: + return SF_DL1r_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_85: + return SF_DL1r_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1r_Continuous: + return SF_DL1r_Continuous; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60: + return SF_DL1dv00_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70: + return SF_DL1dv00_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77: + return SF_DL1dv00_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85: + return SF_DL1dv00_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1dv00_Continuous: + return SF_DL1dv00_Continuous; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60: + return SF_DL1dv01_FixedCutBEff_60; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70: + return SF_DL1dv01_FixedCutBEff_70; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77: + return SF_DL1dv01_FixedCutBEff_77; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85: + return SF_DL1dv01_FixedCutBEff_85; + break; + case Jet::BTaggerOP::DL1dv01_Continuous: + return SF_DL1dv01_Continuous; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_60: + return SF_GN120220509_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_70: + return SF_GN120220509_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_77: + return SF_GN120220509_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_85: + return SF_GN120220509_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN120220509_Continuous: + return SF_GN120220509_Continuous; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60: + return SF_GN2v00LegacyWP_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70: + return SF_GN2v00LegacyWP_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77: + return SF_GN2v00LegacyWP_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85: + return SF_GN2v00LegacyWP_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60: + return SF_GN2v00NewAliasWP_FixedCutBEff_60; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70: + return SF_GN2v00NewAliasWP_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77: + return SF_GN2v00NewAliasWP_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85: + return SF_GN2v00NewAliasWP_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_65: + return SF_GN2v01_FixedCutBEff_65; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_70: + return SF_GN2v01_FixedCutBEff_70; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_77: + return SF_GN2v01_FixedCutBEff_77; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_85: + return SF_GN2v01_FixedCutBEff_85; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_90: + return SF_GN2v01_FixedCutBEff_90; + break; + case Jet::BTaggerOP::GN2v01_Continuous: + return SF_GN2v01_Continuous; + break; + default: + static const std::vector dummySF = {1.}; + return dummySF; + break; + } + } + + + void Jet::muonInJetCorrection(const xAH::MuonContainer* muons){ + + TLorentzVector& jetVec = p4; + float minDr = 0.5; + const Muon* minDr_muon = 0; + + for(unsigned int iMuon = 0; iMuon < muons->size(); ++iMuon){ + const Muon* thisMuon = &(muons->at(iMuon)); + const TLorentzVector& muonVec = thisMuon->p4; + + if(muonVec.Pt() < 4) continue; + if(!(thisMuon->quality.find("Medium") != thisMuon->quality.end() && thisMuon->quality.at("Medium"))) continue; + + float thisDr = jetVec.DeltaR(muonVec); + if(thisDr < minDr){ + minDr = thisDr; + minDr_muon = thisMuon; + } + + } + + if(minDr < 0.4){ + matchedMuon = minDr_muon; + + const TLorentzVector& matchedMuonVec = minDr_muon->p4; + TLorentzVector muon_elossVec = minDr_muon->vec_eLoss(); + + TLorentzVector JetNoMuon = (p4 - muon_elossVec); + TLorentzVector newVec = (JetNoMuon + matchedMuonVec); + + p4.SetPtEtaPhiE(newVec.Pt (), + newVec.Eta(), + newVec.Phi(), + newVec.E ()); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_JetCalibrator.cxx.rst.txt b/_sources/api/program_listing_file_Root_JetCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..2b1c8ac746 --- /dev/null +++ b/_sources/api/program_listing_file_Root_JetCalibrator.cxx.rst.txt @@ -0,0 +1,695 @@ + +.. _program_listing_file_Root_JetCalibrator.cxx: + +Program Listing for File JetCalibrator.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/JetCalibrator.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * Interface to Jet calibration tool(s). + * + * G.Facini (gabriel.facini@cern.ch), M. Milesi (marco.milesi@cern.ch), J. Dandoy (jeff.dandoy@cern.ch) + * + * + ******************************************/ + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODMuon/MuonContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/Jet.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/JetCalibrator.h" + + // ROOT includes: + #include "TSystem.h" + + // tools + #include "JetCalibTools/JetCalibrationTool.h" + #include "JetUncertainties/JetUncertaintiesTool.h" + #include "JetSelectorTools/JetCleaningTool.h" + // #include "JetTileCorrection/JetTileCorrectionTool.h" + #include "METUtilities/METHelpers.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(JetCalibrator) + + JetCalibrator :: JetCalibrator () : + Algorithm("JetCalibrator") + { + } + + EL::StatusCode JetCalibrator :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "JetCalibrator" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing JetCalibrator Interface... "); + m_runSysts = false; //Ensure this starts false + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + // If there is no InputContainer we must stop + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + if ( m_jetAlgo.empty() ) { + m_jetAlgo = m_inContainerName; + std::string jets = "Jets"; + std::string::size_type i = m_jetAlgo.find(jets); + if (i != std::string::npos) { + m_jetAlgo.erase(i, jets.length()); + } + } + + if ( m_outputAlgo.empty() ) { + m_outputAlgo = m_jetAlgo + "_Calib_Algo"; + } + + m_numEvent = 0; + m_numObject = 0; + + if( isMC() && m_calibSequence.find("_Insitu") != std::string::npos){ + ANA_MSG_ERROR( "Attempting to use an Insitu calibration sequence on MC. Exiting."); + return EL::StatusCode::FAILURE; + } + + if( !isMC() && m_calibSequence.find("_Smear") != std::string::npos){ + ANA_MSG_ERROR( "Attempting to use an Smear calibration sequence on data. Exiting."); + return EL::StatusCode::FAILURE; + } + + if ( !isMC() ) { + // Insitu should not be applied to the trimmed jets, per Jet/Etmiss recommendation + if ( m_forceInsitu && m_calibSequence.find("Insitu") == std::string::npos) m_calibSequence += "_Insitu"; + + m_calibConfig = m_calibConfigData; + } else { + + if ( isFastSim() ) { + m_calibConfig = m_calibConfigAFII; + } else { + m_calibConfig = m_calibConfigFullSim; + // Insitu should not be applied to the trimmed jets, per Jet/Etmiss recommendation + if ( m_forceSmear && m_calibSequence.find("Smear") == std::string::npos) m_calibSequence += "_Smear"; + } + } + + if(!isFastSim() && m_uncertMCType.empty() && !m_uncertConfig.empty()){ + ANA_MSG_ERROR("MCType not provided, please set m_uncertMCType (MC20 or MC21) when running on FullSim samples. Exiting."); + return EL::StatusCode::FAILURE; + } + + // Autoconfigure calibration sequence if the user didn't do it. + // Recommended strings taken from ApplyJetCalibrationR21 Twiki. + if(m_calibSequence.empty()){ + // Standard R=0.4 jets + if(m_inContainerName.find("AntiKt4EM") != std::string::npos){ + if( !isMC() ) m_calibSequence = "JetArea_Residual_EtaJES_GSC_Insitu"; + else if( isFastSim() ) m_calibSequence = "JetArea_Residual_EtaJES_GSC"; + else /*FullSim*/ m_calibSequence = "JetArea_Residual_EtaJES_GSC_Smear"; + } + // R-scan jets + else if(m_inContainerName.find("AntiKt2LCTopo") != std::string::npos || + m_inContainerName.find("AntiKt6LCTopo") != std::string::npos) + m_calibSequence = "JetArea_Residual_EtaJES_GSC"; + // R=1.0 jets + else if(m_inContainerName.find("AntiKt10LCTopo") != std::string::npos || + m_inContainerName.find("AntiKt10TrackCaloCluster") != std::string::npos) + m_calibSequence = "EtaJES_JMS"; + // Anything else is unrecognized + else{ + ANA_MSG_ERROR( "Cannot autoconfigure jet calibration sequence for collection " << m_systName); + ANA_MSG_ERROR( "JetCalibrator::m_calibSequence needs to be set manually in configuration."); + return EL::StatusCode::FAILURE; + } + } + + // Warn user if they're running standard jets without in-situ in data or smearing in MC + if(m_inContainerName.find("AntiKt4EM") != std::string::npos){ + if(!isMC()){ + if(m_calibSequence.find("_Insitu") == std::string::npos){ + ANA_MSG_WARNING("Calibrating AntiKt4EM jets in data without the in-situ step. This is not recommended, make sure it's really what you want!"); + } + } else { // MC + if(!isFastSim() && m_calibSequence.find("_Smear") == std::string::npos){ + ANA_MSG_WARNING("Calibrating AntiKt4EM jets in fullsim without the smearing step. This is not recommended, make sure it's really what you want!"); + } + } + } + + // initialize jet calibration tool + ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JetCalibrationTool_handle, JetCalibrationTool)); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("JetCollection",m_jetAlgo)); + if(!m_calibConfigDir.empty()){ + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("ConfigDir",m_calibConfigDir)); + } + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("ConfigFile",m_calibConfig)); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("CalibSequence",m_calibSequence)); + if ( !m_overrideCalibArea.empty() ) { + ANA_MSG_WARNING("Overriding jet calibration area to " << m_overrideCalibArea); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("CalibArea", m_overrideCalibArea)); + } + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("IsData",!isMC())); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("OutputLevel", msg().level())); + if ( m_jetCalibToolsDEV ) { + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("DEVmode", m_jetCalibToolsDEV)); + } + if (!m_calibGSCDepth.empty() && m_calibSequence.find("GSC") != std::string::npos) { + ANA_MSG_WARNING("Using modified GSCDepth property for jet calibration '" << m_calibGSCDepth << "' which will override config file value"); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("GSCDepth", m_calibGSCDepth)); + } + // HLT jet re-calibration configuration + if (m_recalibrateHLTJets) { + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("UseHLTEventShape", true) ); + // Note: PrimaryVerticesContainerName is actually a private ReadHandleKey, but we can set its value via the setProperty method + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("PrimaryVerticesContainerName", m_HLTVertexContainerName) ); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("averageInteractionsPerCrossingKey", m_HLTAvgMuDecor) ); + if (m_EvtInfoHLTNPVDecor != "") { + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("UseNPVFromEventInfo", true) ); + ANA_CHECK( m_JetCalibrationTool_handle.setProperty("NPVKey", m_EvtInfoHLTNPVDecor) ); + } + } + ANA_CHECK( m_JetCalibrationTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_JetCalibrationTool_handle); + + // initialize jet tile correction tool + // if(m_doJetTileCorr && !isMC()){ // Jet Tile Correction should only be applied to data + // ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JetTileCorrectionTool_handle, CP::JetTileCorrectionTool)); + // ANA_CHECK( m_JetTileCorrectionTool_handle.setProperty("OutputLevel", msg().level())); + // ANA_CHECK( m_JetTileCorrectionTool_handle.retrieve()); + // ANA_MSG_DEBUG("Retrieved tool: " << m_JetTileCorrectionTool_handle); + // } + + if(m_doCleaning){ + // initialize and configure the jet cleaning tool + //------------------------------------------------ + + ANA_CHECK( m_JetCleaningTool_handle.setProperty( "CutLevel", m_jetCleanCutLevel)); + ANA_CHECK( m_JetCleaningTool_handle.setProperty( "DoUgly", m_jetCleanUgly)); + ANA_CHECK( m_JetCleaningTool_handle.setProperty( "OutputLevel", msg().level() )); + ANA_CHECK( m_JetCleaningTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_JetCleaningTool_handle); + + if( m_saveAllCleanDecisions ){ + m_decisionNames.push_back( "LooseBad" ); + m_decisionNames.push_back( "LooseBadUgly" ); + m_decisionNames.push_back( "LooseBadTrigger" ); + m_decisionNames.push_back( "LooseBadLLP" ); + m_decisionNames.push_back( "TightBad" ); + m_decisionNames.push_back( "TightBadUgly" ); + + for(unsigned int iD=0; iD < m_decisionNames.size() ; ++iD){ + asg::AnaToolHandle this_JetCleaningTool_handle("JetCleaningTool/JetCleaningTool_"+m_decisionNames.at(iD), this); + if( m_decisionNames.at(iD).find("Ugly") != std::string::npos ){ + ANA_CHECK( this_JetCleaningTool_handle.setProperty( "CutLevel", m_decisionNames.at(iD).substr(0,m_decisionNames.at(iD).size()-4) )); + ANA_CHECK( this_JetCleaningTool_handle.setProperty( "DoUgly", true)); + }else{ + ANA_CHECK( this_JetCleaningTool_handle.setProperty( "CutLevel", m_decisionNames.at(iD) )); + } + ANA_CHECK( this_JetCleaningTool_handle.setProperty( "OutputLevel", msg().level() )); + ANA_CHECK( this_JetCleaningTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << this_JetCleaningTool_handle); + m_AllJetCleaningTool_handles.push_back( this_JetCleaningTool_handle ); + }// For each cleaning decision + }//If save all cleaning decisions + }// if m_doCleaning + + // initialize largeR jet truth labelling tool + if(isMC() && m_useLargeRTruthLabelingTool && m_inContainerName.find("AntiKt10") != std::string::npos){ + // Truth labelling is required for systematics on largeR jets. + // TruthLabelName typically should not be changed until new recommendations are available + // The other properties have default values but need to be configured by the user + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthLabelName" , m_truthLabelName)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("IsTruthJetCollection" , m_isTruthJetCol)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("UseTRUTH3" , m_useTRUTH3)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthParticleContainerName" , m_truthParticleContainerName)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthBosonContainerName" , m_truthBosonContainerName)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthTopQuarkContainerName" , m_truthTopQuarkContainerName)); + // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("OutputLevel" , msg().level())); + // ANA_CHECK(m_JetTruthLabelingTool_handle.retrieve()); + }// if MC && largeR + + // Generate nominal systematic + const CP::SystematicSet recSyst = CP::SystematicSet();; + m_systList = HelperFunctions::getListofSystematics( recSyst, "", 0, msg() ); // Generate nominal + + // initialize and configure the jet uncertainity tool + // only initialize if a config file has been given + //------------------------------------------------ + if ( !m_uncertConfig.empty() && !m_systName.empty() && m_systName != "None" ) { + + if(m_mcAndPseudoData){ + ANA_MSG_INFO("Input treated as MC AND pseudo-data. JER uncertainties will be run twice."); + initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, false); + // Need a second uncertainties tool to handle the pseudodata smearing + initializeUncertaintiesTool(m_pseudodataJERTool_handle, true); + } + else if(m_pseudoData) { + ANA_MSG_INFO("Input treated as pseudo-data"); + initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, true); + } + else { + initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, !isMC()); + } + + // + // Get a list of recommended systematics for this tool + // + ANA_MSG_INFO(" Initializing Jet Systematics :"); + const CP::SystematicSet recSysts = m_JetUncertaintiesTool_handle->recommendedSystematics(); + + //If just one systVal, then push it to the vector + ANA_CHECK( this->parseSystValVector()); + if( m_systValVector.size() == 0) { + ANA_MSG_DEBUG("Pushing the following systVal to m_systValVector: " << m_systVal ); + m_systValVector.push_back(m_systVal); + } + + for(unsigned int iSyst=0; iSyst < m_systValVector.size(); ++iSyst){ + std::vector sysList = HelperFunctions::getListofSystematics( recSysts, m_systName, m_systValVector.at(iSyst), msg() ); + + for(unsigned int i=0; i < sysList.size(); ++i){ + // do not add another nominal syst to the list!! + // CP::SystematicSet() creates an empty systematic set, compared to the set at index i + if (sysList.at(i).empty() || sysList.at(i) == CP::SystematicSet() ) { ANA_MSG_INFO("sysList Empty at index " << i); continue; } + m_systList.push_back( sysList.at(i) ); + } + } + + // Setup the tool for the 1st systematic on the list + // If running all, the tool will be setup for each syst on each event + if ( !m_systList.empty() ) { + m_runSysts = true; + // setup uncertainity tool for systematic evaluation + if ( m_JetUncertaintiesTool_handle->applySystematicVariation(m_systList.at(0)) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Cannot configure JetUncertaintiesTool for systematic " << m_systName); + return EL::StatusCode::FAILURE; + } + } + } // running systematics + else { + ANA_MSG_INFO( "No Jet Uncertainities considered"); + } + + auto SystJetsNames = std::make_unique< std::vector< std::string > >(); + for ( const auto& syst_it : m_systList ) { + if ( m_systName.empty() && m_systName.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + SystJetsNames->push_back(syst_it.name()); + ANA_MSG_INFO("\t " << syst_it.name()); + } + + ANA_CHECK(m_store->record(std::move(SystJetsNames), "jets_Syst"+m_name )); + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD); + } + + ANA_MSG_INFO( "JetCalibrator Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode JetCalibrator :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG("Applying Jet Calibration and Cleaning... "); + + m_numEvent++; + + // get the collection from TEvent or TStore + const xAOD::JetContainer* inJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName, m_event, m_store, msg()) ); + + // + // Perform nominal calibration + std::pair< xAOD::JetContainer*, xAOD::ShallowAuxContainer* > calibJetsSC = xAOD::shallowCopyContainer( *inJets ); + + if ( m_addGhostMuonsToJets ) { + ANA_MSG_VERBOSE("Run muon-to-jet ghost association"); + const xAOD::MuonContainer* muons(nullptr); + ANA_CHECK( HelperFunctions::retrieve(muons, "Muons", m_event, m_store, msg()) ); + met::addGhostMuonsToJets( *muons, *calibJetsSC.first ); + } + + std::string outSCContainerName=m_outContainerName+"ShallowCopy"; + std::string outSCAuxContainerName=m_outContainerName+"ShallowCopyAux."; + ANA_CHECK( m_store->record( calibJetsSC.first, outSCContainerName)); + ANA_CHECK( m_store->record( calibJetsSC.second, outSCAuxContainerName)); + + for ( auto jet_itr : *(calibJetsSC.first) ) { + m_numObject++; + + // + // truth labelling for systematics + if(isMC()){ + + if(m_runSysts){ + + // b-jet truth labelling + int this_TruthLabel = 0; + + static SG::AuxElement::ConstAccessor TruthLabelID ("TruthLabelID"); + static SG::AuxElement::ConstAccessor PartonTruthLabelID ("PartonTruthLabelID"); + + if ( TruthLabelID.isAvailable( *jet_itr) ) { + this_TruthLabel = TruthLabelID( *jet_itr ); + if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0; + } else if(PartonTruthLabelID.isAvailable( *jet_itr) ) { + this_TruthLabel = PartonTruthLabelID( *jet_itr ); + if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0; + } + + bool isBjet = false; // decide whether or not the jet is a b-jet (truth-labelling + kinematic selections) + if (this_TruthLabel == 5) isBjet = true; + static SG::AuxElement::Decorator accIsBjet("IsBjet"); // char due to limitations of ROOT I/O, still treat it as a bool + accIsBjet(*jet_itr) = isBjet; + + } + + if(m_useLargeRTruthLabelingTool){ + static SG::AuxElement::ConstAccessor JetTruthLabel (m_truthLabelName); + + // largeR jet truth labelling + // if(m_JetTruthLabelingTool_handle.isInitialized() && !JetTruthLabel.isAvailable(*jet_itr)) { + // m_JetTruthLabelingTool_handle->modifyJet(*jet_itr); + // } + } + + } + + }//for jets + + // Apply the calibration + if ( m_JetCalibrationTool_handle->applyCalibration( *(calibJetsSC.first) ) == EL::StatusCode::FAILURE ) { + ANA_MSG_ERROR( "JetCalibration tool reported a EL::StatusCode::FAILURE"); + ANA_MSG_ERROR( m_name ); + return StatusCode::FAILURE; + } + + // Need to be adapted to use full jet container (once tool works in R22) + // if(m_doJetTileCorr && !isMC()){ + // if( m_JetTileCorrectionTool_handle->applyCorrection(*jet_itr) == CP::CorrectionCode::Error ){ + // ANA_MSG_ERROR( "JetTileCorrection tool reported a CP::CorrectionCode::Error"); + // } + // } + + // loop over available systematics - remember syst == "Nominal" --> baseline + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + + executeSystematic(syst_it, inJets, calibJetsSC, *vecOutContainerNames, false); + + if(m_mcAndPseudoData && std::string(syst_it.name()).find("JER") != std::string::npos) { + // This is a JER uncertainty that also needs a pseudodata copy done. + executeSystematic(syst_it, inJets, calibJetsSC, *vecOutContainerNames, true); + } + } + + // add vector of systematic names to TStore + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgo)); + + // look what do we have in TStore + + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetCalibrator :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode JetCalibrator::executeSystematic(const CP::SystematicSet& thisSyst, const xAOD::JetContainer* inJets, + std::pair& calibJetsSC, + std::vector& vecOutContainerNames, bool isPDCopy){ + + bool nominal = thisSyst.name().empty(); + + std::string outSCContainerName, outSCAuxContainerName, outContainerName; + asg::AnaToolHandle* jetUncTool(nullptr); + + // always append the name of the variation, including nominal which is an empty string + if(isPDCopy){ + outSCContainerName = m_outContainerName+thisSyst.name()+"_PDShallowCopy"; + outSCAuxContainerName = m_outContainerName+thisSyst.name()+"_PDShallowCopyAux."; + outContainerName = m_outContainerName+thisSyst.name()+"_PD"; + vecOutContainerNames.push_back(thisSyst.name()+"_PD"); + jetUncTool = &m_pseudodataJERTool_handle; + } + else{ + outSCContainerName = m_outContainerName+thisSyst.name()+"ShallowCopy"; + outSCAuxContainerName = m_outContainerName+thisSyst.name()+"ShallowCopyAux."; + outContainerName = m_outContainerName+thisSyst.name(); + vecOutContainerNames.push_back(thisSyst.name()); + jetUncTool = &m_JetUncertaintiesTool_handle; + } + + // create shallow copy; + std::pair< xAOD::JetContainer*, xAOD::ShallowAuxContainer* > uncertCalibJetsSC = nominal ? calibJetsSC : xAOD::shallowCopyContainer(*calibJetsSC.first); + ConstDataVector* uncertCalibJetsCDV = new ConstDataVector(SG::VIEW_ELEMENTS); + uncertCalibJetsCDV->reserve( uncertCalibJetsSC.first->size() ); + + //Apply Uncertainties + if ( m_runSysts ) { + // Jet Uncertainty Systematic + ANA_MSG_DEBUG("Configure for systematic variation : " << thisSyst.name()); + if ( (*jetUncTool)->applySystematicVariation(thisSyst) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Cannot configure JetUncertaintiesTool for systematic " << m_systName); + return EL::StatusCode::FAILURE; + } + + for ( auto jet_itr : *(uncertCalibJetsSC.first) ) { + if (m_applyFatJetPreSel) { + bool validForJES = (jet_itr->pt() >= 150e3 && jet_itr->pt() < 3000e3); + validForJES &= (jet_itr->m()/jet_itr->pt() >= 0 && jet_itr->m()/jet_itr->pt() < 1); + validForJES &= (fabs(jet_itr->eta()) < 2); + if (!validForJES) continue; + } + + if ( (*jetUncTool)->applyCorrection( *jet_itr ) == CP::CorrectionCode::Error ) { + ANA_MSG_ERROR( "JetUncertaintiesTool reported a CP::CorrectionCode::Error"); + ANA_MSG_ERROR( m_name ); + } + } + + }// if m_runSysts + + if(m_doCleaning){ + // decorate with cleaning decision + for ( auto jet_itr : *(uncertCalibJetsSC.first) ) { + + static SG::AuxElement::Decorator< int > isCleanDecor( "cleanJet" ); + const xAOD::Jet* jetToClean = jet_itr; + + if(m_cleanParent){ + ElementLink el_parent = jet_itr->auxdata >("Parent") ; + if(!el_parent.isValid()) + ANA_MSG_ERROR( "Could not make jet cleaning decision on the parent! It doesn't exist."); + else + jetToClean = *el_parent; + } + + isCleanDecor(*jet_itr) = m_JetCleaningTool_handle->keep(*jetToClean); + + if( m_saveAllCleanDecisions ){ + for(unsigned int i=0; i < m_AllJetCleaningTool_handles.size() ; ++i){ + jet_itr->auxdata< int >(("clean_pass"+m_decisionNames.at(i)).c_str()) = m_AllJetCleaningTool_handles.at(i)->keep(*jetToClean); + } + } + } //end cleaning decision + } + + if ( !xAOD::setOriginalObjectLink(*inJets, *(uncertCalibJetsSC.first)) ) { + ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed."); + } + + // save pointers in ConstDataVector with same order + for ( auto jet_itr : *(uncertCalibJetsSC.first) ) { + uncertCalibJetsCDV->push_back( jet_itr ); + } + + // can only sort the CDV - a bit no-no to sort the shallow copies + if ( m_sort ) { + std::sort( uncertCalibJetsCDV->begin(), uncertCalibJetsCDV->end(), HelperFunctions::sort_pt ); + } + + // add shallow copy to TStore + if(!nominal){ // nominal is always saved outside of systematics loop + ANA_CHECK( m_store->record( uncertCalibJetsSC.first, outSCContainerName)); + ANA_CHECK( m_store->record( uncertCalibJetsSC.second, outSCAuxContainerName)); + } + // add ConstDataVector to TStore + ANA_CHECK( m_store->record( uncertCalibJetsCDV, outContainerName)); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode JetCalibrator::initializeUncertaintiesTool(asg::AnaToolHandle& uncToolHandle, bool isData){ + + ANA_MSG_INFO("Initialize Jet Uncertainties Tool with " << m_uncertConfig); + ANA_CHECK( ASG_MAKE_ANA_TOOL(uncToolHandle, JetUncertaintiesTool)); + ANA_CHECK( uncToolHandle.setProperty("JetDefinition",m_jetAlgo)); + ANA_CHECK( uncToolHandle.setProperty("MCType",m_uncertMCType)); + ANA_CHECK( uncToolHandle.setProperty("IsData",isData)); + ANA_CHECK( uncToolHandle.setProperty("ConfigFile", m_uncertConfig)); + if ( !m_overrideUncertCalibArea.empty() ) { + ANA_MSG_WARNING("Overriding jet uncertainties calibration area to " << m_overrideUncertCalibArea); + ANA_CHECK( uncToolHandle.setProperty("CalibArea", m_overrideUncertCalibArea)); + } + if( !m_overrideAnalysisFile.empty() ) { + ANA_MSG_WARNING("Overriding jet uncertainties analysis file to " << m_overrideAnalysisFile); + ANA_CHECK( uncToolHandle.setProperty("AnalysisFile", m_overrideAnalysisFile)); + } + if( !m_overrideUncertPath.empty() ){ + std::string uncPath = PathResolverFindCalibDirectory(m_overrideUncertPath); + ANA_MSG_WARNING("Overriding jet uncertainties path to " << uncPath); + ANA_CHECK( uncToolHandle.setProperty("Path", uncPath)); + } + ANA_CHECK( uncToolHandle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( uncToolHandle.retrieve()); + ANA_MSG_DEBUG("Retrieved JetUncertaintiesTool: " << uncToolHandle); + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_JetContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_JetContainer.cxx.rst.txt new file mode 100644 index 0000000000..809e8bd4c1 --- /dev/null +++ b/_sources/api/program_listing_file_Root_JetContainer.cxx.rst.txt @@ -0,0 +1,3892 @@ + +.. _program_listing_file_Root_JetContainer.cxx: + +Program Listing for File JetContainer.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/JetContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/JetContainer.h" + #include + #include + #include // std::domain_error + #include "xAODTruth/TruthEventContainer.h" + #include "xAODBTagging/BTaggingUtilities.h" + + using namespace xAH; + + JetContainer::JetContainer(const std::string& name, const std::string& detailStr, float units, bool mc) + : ParticleContainer(name,detailStr,units,mc), + m_trkSelTool(nullptr) + + { + // rapidity + if(m_infoSwitch.m_rapidity) { + m_rapidity =new std::vector(); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched = new std::vector (); + m_isTrigMatchedToChain = new std::vector > (); + m_listTrigChains = new std::vector (); + } + + // clean + if(m_infoSwitch.m_cleanTrig && ! (m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP)) { + std::cout << "JetContainer WARNING You asked for cleanTrig for " << name << "but didn't specify clean, cleanLight or cleanLLP. Going to assume you wanted clean." << std::endl; + m_infoSwitch.m_clean = true; + } + if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) { + if(m_infoSwitch.m_clean){ + m_Timing =new std::vector(); + m_LArQuality =new std::vector(); + m_HECQuality =new std::vector(); + m_NegativeE =new std::vector(); + m_AverageLArQF =new std::vector(); + m_BchCorrCell =new std::vector(); + m_N90Constituents =new std::vector(); + m_LArBadHVEnergyFrac =new std::vector(); + m_LArBadHVNCell =new std::vector(); + m_ChargedFraction =new std::vector(); + m_OotFracClusters5 =new std::vector(); + m_OotFracClusters10 =new std::vector(); + m_LeadingClusterPt =new std::vector(); + m_LeadingClusterSecondLambda=new std::vector(); + m_LeadingClusterCenterLambda=new std::vector(); + m_LeadingClusterSecondR =new std::vector(); + if(m_infoSwitch.m_cleanTrig) { + m_clean_passLooseBadTriggerUgly=new std::vector(); + } + else { + m_clean_passLooseBadUgly =new std::vector(); + m_clean_passTightBadUgly =new std::vector(); + } + } + if(m_infoSwitch.m_cleanTrig) { + m_clean_passLooseBadTrigger =new std::vector(); + } + else { + m_clean_passLooseBad =new std::vector(); + m_clean_passTightBad =new std::vector(); + } + if(m_infoSwitch.m_cleanLLP) { + m_clean_passLooseBadLLP =new std::vector(); + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + m_Timing = new std::vector(); + } + + // energy + if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) { + if ( m_infoSwitch.m_energy ) { + m_HECFrac = new std::vector(); + m_CentroidR = new std::vector(); + m_LowEtConstituentsFrac = new std::vector(); + } + m_EMFrac = new std::vector(); + m_FracSamplingMax = new std::vector(); + m_FracSamplingMaxIndex = new std::vector(); + m_GhostMuonSegmentCount = new std::vector(); + m_Width = new std::vector(); + } + + // scales + if ( m_infoSwitch.m_scales ) { + m_emScalePt = new std::vector(); + m_constScalePt = new std::vector(); + m_pileupScalePt = new std::vector(); + m_originConstitScalePt = new std::vector(); + m_etaJESScalePt = new std::vector(); + m_gscScalePt = new std::vector(); + m_jmsScalePt = new std::vector(); + m_insituScalePt = new std::vector(); + + m_emScaleM = new std::vector(); + m_constScaleM = new std::vector(); + m_pileupScaleM = new std::vector(); + m_originConstitScaleM = new std::vector(); + m_etaJESScaleM = new std::vector(); + m_gscScaleM = new std::vector(); + m_jmsScaleM = new std::vector(); + m_insituScaleM = new std::vector(); + } + + // constscale eta + if ( m_infoSwitch.m_constscaleEta ) { + m_constScaleEta = new std::vector(); + } + + // detector eta + if ( m_infoSwitch.m_detectorEta ) { + m_detectorEta = new std::vector(); + } + + // layer + if ( m_infoSwitch.m_layer ) { + m_EnergyPerSampling = new std::vector< std::vector >(); + } + + // tracksAll + if ( m_infoSwitch.m_trackAll ) { + m_NumTrkPt1000 = new std::vector< std::vector > (); + m_SumPtTrkPt1000 = new std::vector< std::vector > (); + m_TrackWidthPt1000 = new std::vector< std::vector > (); + m_NumTrkPt500 = new std::vector< std::vector > (); + m_SumPtTrkPt500 = new std::vector< std::vector > (); + m_TrackWidthPt500 = new std::vector< std::vector > (); + m_JVF = new std::vector< std::vector > (); + } + + // trackPV + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) { + if (m_infoSwitch.m_trackPV){ + m_NumTrkPt1000PV = new std::vector(); + m_SumPtTrkPt1000PV = new std::vector(); + m_TrackWidthPt1000PV = new std::vector(); + m_NumTrkPt500PV = new std::vector(); + m_SumPtTrkPt500PV = new std::vector(); + m_TrackWidthPt500PV = new std::vector(); + m_JVFPV = new std::vector(); + m_JvtJvfcorr = new std::vector(); + m_JvtRpt = new std::vector(); + } + m_Jvt = new std::vector(); + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) { + m_JvtPass_Loose = new std::vector(); + if ( m_mc ) { + m_JvtEff_SF_Loose = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) { + m_JvtPass_Medium = new std::vector(); + if ( m_mc ) { + m_JvtEff_SF_Medium = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) { + m_JvtPass_Tight = new std::vector(); + if ( m_mc ) { + m_JvtEff_SF_Tight = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) { + m_JvtPass_FixedEffPt = new std::vector(); + if ( m_mc ) { + m_JvtEff_SF_FixedEffPt = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) { + m_JvtPass_TightFwd = new std::vector(); + if ( m_mc ) { + m_JvtEff_SF_TightFwd = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) { + m_fJvtPass_Loose = new std::vector(); + if ( m_mc ) { + m_fJvtEff_SF_Loose = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) { + m_fJvtPass_Medium = new std::vector(); + if ( m_mc ) { + m_fJvtEff_SF_Medium = new std::vector< std::vector > (); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) { + m_fJvtPass_Tight = new std::vector(); + if ( m_mc ) { + m_fJvtEff_SF_Tight = new std::vector< std::vector > (); + } + } + + if (m_infoSwitch.m_fJvt) { + m_fJvt = new std::vector(); + } + + if (m_infoSwitch.m_NNJvt) { + m_NNJvt = new std::vector(); + m_NNJvtPass = new std::vector(); + } + + // chargedPFOPV + if ( m_infoSwitch.m_chargedPFOPV ) { + m_SumPtChargedPFOPt500PV = new std::vector (); + m_fCharged = new std::vector (); + } + + // allTrack + // trackAll or trackPV + if ( m_infoSwitch.m_allTrack ) { + m_GhostTrackCount = new std::vector (); + m_GhostTrackPt = new std::vector (); + m_GhostTrack_pt = new std::vector< std::vector > (); + m_GhostTrack_qOverP = new std::vector< std::vector > (); + m_GhostTrack_eta = new std::vector< std::vector > (); + m_GhostTrack_phi = new std::vector< std::vector > (); + m_GhostTrack_e = new std::vector< std::vector > (); + m_GhostTrack_d0 = new std::vector< std::vector > (); + m_GhostTrack_z0 = new std::vector< std::vector > (); + + + // allTrackDetail + if(m_infoSwitch.m_allTrackDetail){ + m_GhostTrack_nPixelHits = new std::vector< std::vector >(); + m_GhostTrack_nSCTHits = new std::vector< std::vector >(); + m_GhostTrack_nTRTHits = new std::vector< std::vector >(); + m_GhostTrack_nPixelSharedHits = new std::vector< std::vector >(); + m_GhostTrack_nPixelSplitHits = new std::vector< std::vector >(); + m_GhostTrack_nInnermostPixelLayerHits = new std::vector< std::vector >(); + m_GhostTrack_nInnermostPixelLayerSharedHits = new std::vector< std::vector >(); + m_GhostTrack_nInnermostPixelLayerSplitHits = new std::vector< std::vector >(); + m_GhostTrack_nNextToInnermostPixelLayerHits = new std::vector< std::vector >(); + m_GhostTrack_nNextToInnermostPixelLayerSharedHits = new std::vector< std::vector >(); + m_GhostTrack_nNextToInnermostPixelLayerSplitHits = new std::vector< std::vector >(); + } + } + + // constituent + if ( m_infoSwitch.m_constituent ) { + m_numConstituents = new std::vector< int > (); + } + + if ( m_infoSwitch.m_constituentAll ) { + m_constituentWeights = new std::vector< std::vector > (); + m_constituent_pt = new std::vector< std::vector > (); + m_constituent_eta = new std::vector< std::vector > (); + m_constituent_phi = new std::vector< std::vector > (); + m_constituent_e = new std::vector< std::vector > (); + } + + // flavorTag + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) { + m_HadronConeExclTruthLabelID =new std::vector(); + m_HadronConeExclExtendedTruthLabelID=new std::vector(); + } + + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) { + + m_DL1r =new std::vector(); + m_DL1r_pu =new std::vector(); + m_DL1r_pc =new std::vector(); + m_DL1r_pb =new std::vector(); + m_DL1dv00 =new std::vector(); + m_DL1dv00_pu =new std::vector(); + m_DL1dv00_pc =new std::vector(); + m_DL1dv00_pb =new std::vector(); + m_DL1dv01 =new std::vector(); + m_DL1dv01_pu =new std::vector(); + m_DL1dv01_pc =new std::vector(); + m_DL1dv01_pb =new std::vector(); + m_GN1 =new std::vector(); + m_GN1_pu =new std::vector(); + m_GN1_pc =new std::vector(); + m_GN1_pb =new std::vector(); + m_GN2v00LegacyWP =new std::vector(); + m_GN2v00LegacyWP_pu =new std::vector(); + m_GN2v00LegacyWP_pc =new std::vector(); + m_GN2v00LegacyWP_pb =new std::vector(); + m_GN2v00NewAliasWP =new std::vector(); + m_GN2v00NewAliasWP_pu =new std::vector(); + m_GN2v00NewAliasWP_pc =new std::vector(); + m_GN2v00NewAliasWP_pb =new std::vector(); + m_GN2v01 =new std::vector(); + m_GN2v01_pu =new std::vector(); + m_GN2v01_pc =new std::vector(); + m_GN2v01_pb =new std::vector(); + m_GN2v01_ptau =new std::vector(); + + // Jet Fitter + if( m_infoSwitch.m_jetFitterDetails){ + m_JetFitter_nVTX = new std::vector(); + m_JetFitter_nSingleTracks = new std::vector(); + m_JetFitter_nTracksAtVtx = new std::vector(); + m_JetFitter_mass = new std::vector(); + m_JetFitter_energyFraction = new std::vector(); + m_JetFitter_significance3d = new std::vector(); + m_JetFitter_deltaeta = new std::vector(); + m_JetFitter_deltaphi = new std::vector(); + m_JetFitter_N2Tpar = new std::vector(); + } + + // SV Details + if( m_infoSwitch.m_svDetails){ + + m_SV0 = new std::vector(); + + + m_sv0_NGTinSvx = new std::vector(); + m_sv0_N2Tpair = new std::vector(); + m_sv0_massvx = new std::vector(); + m_sv0_efracsvx = new std::vector(); + m_sv0_normdist = new std::vector(); + + m_SV1 = new std::vector(); + m_SV1IP3D = new std::vector(); + m_COMBx = new std::vector(); + m_sv1_pu = new std::vector(); + m_sv1_pb = new std::vector(); + m_sv1_pc = new std::vector(); + m_sv1_c = new std::vector(); + m_sv1_cu = new std::vector(); + m_sv1_NGTinSvx = new std::vector(); + m_sv1_N2Tpair = new std::vector(); + m_sv1_massvx = new std::vector(); + m_sv1_efracsvx = new std::vector(); + m_sv1_normdist = new std::vector(); + m_sv1_Lxy = new std::vector(); + m_sv1_sig3d = new std::vector(); + m_sv1_L3d = new std::vector(); + m_sv1_distmatlay = new std::vector(); + m_sv1_dR = new std::vector(); + } + + // IP3D + if( m_infoSwitch.m_ipDetails){ + m_IP2D_pu = new std::vector(); + m_IP2D_pb = new std::vector(); + m_IP2D_pc = new std::vector(); + m_IP2D = new std::vector(); + m_IP2D_c = new std::vector(); + m_IP2D_cu = new std::vector(); + m_nIP2DTracks = new std::vector(); + + m_IP2D_gradeOfTracks = new std::vector >(); + m_IP2D_flagFromV0ofTracks = new std::vector >(); + m_IP2D_valD0wrtPVofTracks = new std::vector >(); + m_IP2D_sigD0wrtPVofTracks = new std::vector >(); + m_IP2D_weightBofTracks = new std::vector >(); + m_IP2D_weightCofTracks = new std::vector >(); + m_IP2D_weightUofTracks = new std::vector >(); + + m_IP3D = new std::vector(); + m_IP3D_pu = new std::vector(); + m_IP3D_pb = new std::vector(); + m_IP3D_pc = new std::vector(); + m_IP3D_c = new std::vector(); + m_IP3D_cu = new std::vector(); + m_nIP3DTracks = new std::vector(); + m_IP3D_gradeOfTracks = new std::vector >(); + m_IP3D_flagFromV0ofTracks = new std::vector >(); + m_IP3D_valD0wrtPVofTracks = new std::vector >(); + m_IP3D_sigD0wrtPVofTracks = new std::vector >(); + m_IP3D_valZ0wrtPVofTracks = new std::vector >(); + m_IP3D_sigZ0wrtPVofTracks = new std::vector >(); + m_IP3D_weightBofTracks = new std::vector >(); + m_IP3D_weightCofTracks = new std::vector >(); + m_IP3D_weightUofTracks = new std::vector >(); + } + + if( m_infoSwitch.m_JVC ) { + m_JetVertexCharge_discriminant = new std::vector(); + } + + } + + // flavorTagHLT + if( m_infoSwitch.m_flavorTagHLT ) { + m_vtxOnlineValid = new std::vector(); + m_vtxHadDummy = new std::vector(); + + m_bs_online_vx = new std::vector(); + m_bs_online_vy = new std::vector(); + m_bs_online_vz = new std::vector(); + + m_vtx_offline_x0 = new std::vector(); + m_vtx_offline_y0 = new std::vector(); + m_vtx_offline_z0 = new std::vector(); + + m_vtx_online_x0 = new std::vector(); + m_vtx_online_y0 = new std::vector(); + m_vtx_online_z0 = new std::vector(); + + m_vtx_online_bkg_x0 = new std::vector(); + m_vtx_online_bkg_y0 = new std::vector(); + m_vtx_online_bkg_z0 = new std::vector(); + } + + if( m_infoSwitch.m_flavorTagTLA ) { + m_fastDIPS =new std::vector(); + m_fastDIPS_pu =new std::vector(); + m_fastDIPS_pc =new std::vector(); + m_fastDIPS_pb =new std::vector(); + } + + if( !m_infoSwitch.m_jetBTag.empty() ) { + std::stringstream ss_wpName; + for(const auto& btaginfo : m_infoSwitch.m_jetBTag) + { + for(auto wp : btaginfo.second) + { + ss_wpName.str(""); + ss_wpName << wp.first << "_" << std::setfill('0') << std::setw(2) << wp.second; + m_btags.push_back(new btagOpPoint(m_mc, btaginfo.first, ss_wpName.str())); + } + } + } + + if ( !m_infoSwitch.m_jetBTagCts.empty() ){ + for(const auto& tagger: m_infoSwitch.m_jetBTagCts) + { + m_btags.push_back(new btagOpPoint(m_mc,tagger,"Continuous")); + } + } + + // area + if( m_infoSwitch.m_area ) { + m_GhostArea = new std::vector(); + m_ActiveArea = new std::vector(); + m_VoronoiArea = new std::vector(); + m_ActiveArea4vec_pt = new std::vector(); + m_ActiveArea4vec_eta = new std::vector(); + m_ActiveArea4vec_phi = new std::vector(); + m_ActiveArea4vec_m = new std::vector(); + } + + + // truth + if ( m_infoSwitch.m_truth && m_mc ) { + m_ConeTruthLabelID =new std::vector(); + m_TruthCount =new std::vector(); + m_TruthLabelDeltaR_B=new std::vector; + m_TruthLabelDeltaR_C=new std::vector; + m_TruthLabelDeltaR_T=new std::vector; + m_PartonTruthLabelID=new std::vector(); + m_GhostTruthAssociationFraction=new std::vector; + m_truth_E =new std::vector; + m_truth_pt =new std::vector; + m_truth_phi=new std::vector; + m_truth_eta=new std::vector; + } + + // truth detail + if ( m_infoSwitch.m_truthDetails ) { + m_GhostBHadronsFinalCount = new std::vector (); + m_GhostBHadronsInitialCount = new std::vector (); + m_GhostBQuarksFinalCount = new std::vector (); + m_GhostBHadronsFinalPt = new std::vector (); + m_GhostBHadronsInitialPt = new std::vector (); + m_GhostBQuarksFinalPt = new std::vector (); + + m_GhostCHadronsFinalCount = new std::vector (); + m_GhostCHadronsInitialCount = new std::vector (); + m_GhostCQuarksFinalCount = new std::vector (); + m_GhostCHadronsFinalPt = new std::vector (); + m_GhostCHadronsInitialPt = new std::vector (); + m_GhostCQuarksFinalPt = new std::vector (); + + m_GhostTausFinalCount = new std::vector (); + m_GhostTausFinalPt = new std::vector (); + + m_truth_pdgId = new std::vector (); + m_truth_partonPt = new std::vector (); + m_truth_partonDR = new std::vector (); + } + + // charge + if ( m_infoSwitch.m_charge ) { + m_charge =new std::vector(); + } + + // passSel + if ( m_infoSwitch.m_passSel ) { + m_passSel =new std::vector(); + } + + // passOR + if ( m_infoSwitch.m_passOR ) { + m_passOR =new std::vector(); + } + + } + + JetContainer::~JetContainer() + { + if(m_debug) std::cout << " Deleting JetContainer " << std::endl; + if(m_infoSwitch.m_rapidity) { + delete m_rapidity; + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + delete m_isTrigMatched ; + delete m_isTrigMatchedToChain ; + delete m_listTrigChains ; + } + + // clean + if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) { + if(m_infoSwitch.m_clean){ + delete m_Timing; + delete m_LArQuality; + delete m_HECQuality; + delete m_NegativeE; + delete m_AverageLArQF; + delete m_BchCorrCell; + delete m_N90Constituents; + delete m_LArBadHVEnergyFrac; + delete m_LArBadHVNCell; + delete m_ChargedFraction; + delete m_OotFracClusters5; + delete m_OotFracClusters10; + delete m_LeadingClusterPt; + delete m_LeadingClusterSecondLambda; + delete m_LeadingClusterCenterLambda; + delete m_LeadingClusterSecondR; + if(m_infoSwitch.m_cleanTrig) { + delete m_clean_passLooseBadTriggerUgly; + } + else { + delete m_clean_passLooseBadUgly; + delete m_clean_passTightBadUgly; + } + } + if(m_infoSwitch.m_cleanTrig) { + delete m_clean_passLooseBadTrigger; + } + else { + delete m_clean_passLooseBad; + delete m_clean_passTightBad; + } + if(m_infoSwitch.m_cleanLLP) { + delete m_clean_passLooseBadLLP; + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + delete m_Timing; + } + + // energy + if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) { + if ( m_infoSwitch.m_energy ){ + delete m_HECFrac; + delete m_CentroidR; + delete m_LowEtConstituentsFrac; + } + delete m_EMFrac; + delete m_FracSamplingMax; + delete m_FracSamplingMaxIndex; + delete m_GhostMuonSegmentCount; + delete m_Width; + } + + // scales + if ( m_infoSwitch.m_scales ) { + delete m_emScalePt ; + delete m_constScalePt ; + delete m_pileupScalePt ; + delete m_originConstitScalePt ; + delete m_etaJESScalePt ; + delete m_gscScalePt ; + delete m_jmsScalePt ; + delete m_insituScalePt ; + + delete m_emScaleM ; + delete m_constScaleM ; + delete m_pileupScaleM ; + delete m_originConstitScaleM ; + delete m_etaJESScaleM ; + delete m_gscScaleM ; + delete m_jmsScaleM ; + delete m_insituScaleM ; + } + + // constscale eta + if ( m_infoSwitch.m_constscaleEta ) { + delete m_constScaleEta ; + } + + // detector eta + if ( m_infoSwitch.m_detectorEta ) { + delete m_detectorEta; + } + + // layer + if ( m_infoSwitch.m_layer ) { + delete m_EnergyPerSampling; + } + + // tracksAll + if ( m_infoSwitch.m_trackAll ) { + delete m_NumTrkPt1000 ; + delete m_SumPtTrkPt1000 ; + delete m_TrackWidthPt1000 ; + delete m_NumTrkPt500 ; + delete m_SumPtTrkPt500 ; + delete m_TrackWidthPt500 ; + delete m_JVF ; + } + + + // trackPV + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) { + if ( m_infoSwitch.m_trackPV ){ + delete m_NumTrkPt1000PV; + delete m_SumPtTrkPt1000PV; + delete m_TrackWidthPt1000PV; + delete m_NumTrkPt500PV; + delete m_SumPtTrkPt500PV; + delete m_TrackWidthPt500PV; + delete m_JVFPV; + delete m_JvtJvfcorr; + delete m_JvtRpt; + } + delete m_Jvt; + } + + if (m_infoSwitch.m_fJvt){ + delete m_fJvt; + } + + if (m_infoSwitch.m_NNJvt){ + delete m_NNJvt; + delete m_NNJvtPass; + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) { + delete m_JvtPass_Loose; + if ( m_mc ) { + delete m_JvtEff_SF_Loose; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) { + delete m_JvtPass_Medium; + if ( m_mc ) { + delete m_JvtEff_SF_Medium; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) { + delete m_JvtPass_Tight; + if ( m_mc ) { + delete m_JvtEff_SF_Tight; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) { + delete m_JvtPass_FixedEffPt; + if ( m_mc ) { + delete m_JvtEff_SF_FixedEffPt; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) { + delete m_JvtPass_TightFwd; + if ( m_mc ) { + delete m_JvtEff_SF_TightFwd; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) { + delete m_fJvtPass_Loose; + if ( m_mc ) { + delete m_fJvtEff_SF_Loose; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) { + delete m_fJvtPass_Medium; + if ( m_mc ) { + delete m_fJvtEff_SF_Medium; + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) { + delete m_fJvtPass_Tight; + if ( m_mc ) { + delete m_fJvtEff_SF_Tight; + } + } + + // chargedPFOPV + if ( m_infoSwitch.m_chargedPFOPV ) { + delete m_SumPtChargedPFOPt500PV; + delete m_fCharged; + } + + // allTrack + // trackAll or trackPV + if ( m_infoSwitch.m_allTrack ) { + delete m_GhostTrackCount ; + delete m_GhostTrackPt ; + delete m_GhostTrack_pt ; + delete m_GhostTrack_qOverP ; + delete m_GhostTrack_eta ; + delete m_GhostTrack_phi ; + delete m_GhostTrack_e ; + delete m_GhostTrack_d0 ; + delete m_GhostTrack_z0 ; + + + // allTrackDetail + if(m_infoSwitch.m_allTrackDetail){ + delete m_GhostTrack_nPixelHits ; + delete m_GhostTrack_nSCTHits ; + delete m_GhostTrack_nTRTHits ; + delete m_GhostTrack_nPixelSharedHits ; + delete m_GhostTrack_nPixelSplitHits ; + delete m_GhostTrack_nInnermostPixelLayerHits ; + delete m_GhostTrack_nInnermostPixelLayerSharedHits ; + delete m_GhostTrack_nInnermostPixelLayerSplitHits ; + delete m_GhostTrack_nNextToInnermostPixelLayerHits ; + delete m_GhostTrack_nNextToInnermostPixelLayerSharedHits ; + delete m_GhostTrack_nNextToInnermostPixelLayerSplitHits ; + } + } + + // constituent + if ( m_infoSwitch.m_constituent ) { + delete m_numConstituents; + } + + if ( m_infoSwitch.m_constituentAll ) { + delete m_constituentWeights; + delete m_constituent_pt ; + delete m_constituent_eta ; + delete m_constituent_phi ; + delete m_constituent_e ; + } + + + // flavorTag + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) { + delete m_HadronConeExclTruthLabelID; + delete m_HadronConeExclExtendedTruthLabelID; + } + + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) { + // flavorTag + + delete m_DL1r; + delete m_DL1r_pu; + delete m_DL1r_pc; + delete m_DL1r_pb; + delete m_DL1dv00; + delete m_DL1dv00_pu; + delete m_DL1dv00_pc; + delete m_DL1dv00_pb; + delete m_DL1dv01; + delete m_DL1dv01_pu; + delete m_DL1dv01_pc; + delete m_DL1dv01_pb; + delete m_GN1; + delete m_GN1_pu; + delete m_GN1_pc; + delete m_GN1_pb; + delete m_GN2v00LegacyWP; + delete m_GN2v00LegacyWP_pu; + delete m_GN2v00LegacyWP_pc; + delete m_GN2v00LegacyWP_pb; + delete m_GN2v00NewAliasWP; + delete m_GN2v00NewAliasWP_pu; + delete m_GN2v00NewAliasWP_pc; + delete m_GN2v00NewAliasWP_pb; + delete m_GN2v01; + delete m_GN2v01_pu; + delete m_GN2v01_pc; + delete m_GN2v01_pb; + delete m_GN2v01_ptau; + + // Jet Fitter + if( m_infoSwitch.m_jetFitterDetails){ + delete m_JetFitter_nVTX ; + delete m_JetFitter_nSingleTracks ; + delete m_JetFitter_nTracksAtVtx ; + delete m_JetFitter_mass ; + delete m_JetFitter_energyFraction; + delete m_JetFitter_significance3d; + delete m_JetFitter_deltaeta ; + delete m_JetFitter_deltaphi ; + delete m_JetFitter_N2Tpar ; + } + // SV Details + if( m_infoSwitch.m_svDetails){ + + delete m_SV0; + delete m_sv0_NGTinSvx ; + delete m_sv0_N2Tpair ; + delete m_sv0_massvx ; + delete m_sv0_efracsvx ; + delete m_sv0_normdist ; + + delete m_SV1; + delete m_SV1IP3D; + delete m_COMBx; + delete m_sv1_pb ; + delete m_sv1_pc ; + delete m_sv1_c ; + delete m_sv1_cu ; + delete m_sv1_NGTinSvx ; + delete m_sv1_N2Tpair ; + delete m_sv1_massvx ; + delete m_sv1_efracsvx ; + delete m_sv1_normdist ; + delete m_sv1_Lxy ; + delete m_sv1_sig3d ; + delete m_sv1_L3d ; + delete m_sv1_distmatlay; + delete m_sv1_dR ; + } + + // IP3D + if( m_infoSwitch.m_ipDetails){ + + delete m_IP2D_pu ; + delete m_IP2D_pb ; + delete m_IP2D_pc ; + delete m_IP2D ; + delete m_IP2D_c ; + delete m_IP2D_cu ; + delete m_nIP2DTracks ; + + delete m_IP2D_gradeOfTracks ; + delete m_IP2D_flagFromV0ofTracks; + delete m_IP2D_valD0wrtPVofTracks; + delete m_IP2D_sigD0wrtPVofTracks; + delete m_IP2D_weightBofTracks ; + delete m_IP2D_weightCofTracks ; + delete m_IP2D_weightUofTracks ; + + delete m_IP3D; + delete m_IP3D_pu ; + delete m_IP3D_pb ; + delete m_IP3D_pc ; + delete m_IP3D_c ; + delete m_IP3D_cu ; + + delete m_nIP3DTracks ; + delete m_IP3D_gradeOfTracks ; + delete m_IP3D_flagFromV0ofTracks ; + delete m_IP3D_valD0wrtPVofTracks ; + delete m_IP3D_sigD0wrtPVofTracks ; + delete m_IP3D_valZ0wrtPVofTracks ; + delete m_IP3D_sigZ0wrtPVofTracks ; + delete m_IP3D_weightBofTracks ; + delete m_IP3D_weightCofTracks ; + delete m_IP3D_weightUofTracks ; + + } + + if( m_infoSwitch.m_JVC ) { + delete m_JetVertexCharge_discriminant ; + } + + } + + // flavorTagHLT + if( m_infoSwitch.m_flavorTagHLT ) { + delete m_vtxOnlineValid ; + delete m_vtxHadDummy ; + delete m_bs_online_vx ; + delete m_bs_online_vy ; + delete m_bs_online_vz ; + + delete m_vtx_offline_x0 ; + delete m_vtx_offline_y0 ; + delete m_vtx_offline_z0 ; + + delete m_vtx_online_x0 ; + delete m_vtx_online_y0 ; + delete m_vtx_online_z0 ; + + delete m_vtx_online_bkg_x0 ; + delete m_vtx_online_bkg_y0 ; + delete m_vtx_online_bkg_z0 ; + } + + if( m_infoSwitch.m_flavorTagTLA ) { + delete m_fastDIPS; + delete m_fastDIPS_pu; + delete m_fastDIPS_pc; + delete m_fastDIPS_pb; + } + + for(auto btag : m_btags) + delete btag; + + // area + if( m_infoSwitch.m_area ) { + delete m_GhostArea ; + delete m_ActiveArea ; + delete m_VoronoiArea ; + delete m_ActiveArea4vec_pt ; + delete m_ActiveArea4vec_eta ; + delete m_ActiveArea4vec_phi ; + delete m_ActiveArea4vec_m ; + } + + + // truth + if ( m_infoSwitch.m_truth && m_mc ) { + delete m_ConeTruthLabelID; + delete m_TruthCount; + delete m_TruthLabelDeltaR_B; + delete m_TruthLabelDeltaR_C; + delete m_TruthLabelDeltaR_T; + delete m_PartonTruthLabelID; + delete m_GhostTruthAssociationFraction; + delete m_truth_E; + delete m_truth_pt; + delete m_truth_phi; + delete m_truth_eta; + } + + // truth detail + if ( m_infoSwitch.m_truthDetails ) { + delete m_GhostBHadronsFinalCount ; + delete m_GhostBHadronsInitialCount ; + delete m_GhostBQuarksFinalCount ; + delete m_GhostBHadronsFinalPt ; + delete m_GhostBHadronsInitialPt ; + delete m_GhostBQuarksFinalPt ; + + delete m_GhostCHadronsFinalCount ; + delete m_GhostCHadronsInitialCount ; + delete m_GhostCQuarksFinalCount ; + delete m_GhostCHadronsFinalPt ; + delete m_GhostCHadronsInitialPt ; + delete m_GhostCQuarksFinalPt ; + + delete m_GhostTausFinalCount ; + delete m_GhostTausFinalPt ; + + delete m_truth_pdgId ; + delete m_truth_partonPt ; + delete m_truth_partonDR ; + } + + + // charge + if ( m_infoSwitch.m_charge ) { + delete m_charge; + } + + // passSel + if ( m_infoSwitch.m_passSel ) { + delete m_passSel; + } + + // passOR + if ( m_infoSwitch.m_passOR ) { + delete m_passOR; + } + + } + + void JetContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + if(m_infoSwitch.m_rapidity) + { + connectBranch(tree,"rapidity", &m_rapidity); + } + + if ( m_infoSwitch.m_trigger ){ + connectBranch (tree, "isTrigMatched", &m_isTrigMatched); + connectBranch >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain ); + connectBranch (tree, "listTrigChains", &m_listTrigChains ); + } + + if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) + { + if(m_infoSwitch.m_clean){ + connectBranch(tree, "Timing", &m_Timing); + connectBranch(tree, "LArQuality", &m_LArQuality); + connectBranch (tree, "LArBadHVNCell", &m_LArBadHVNCell); + connectBranch(tree, "LArQuality", &m_LArQuality); + connectBranch(tree, "HECQuality", &m_HECQuality); + connectBranch(tree, "NegativeE", &m_NegativeE); + connectBranch(tree, "AverageLArQF", &m_AverageLArQF); + connectBranch(tree, "BchCorrCell", &m_BchCorrCell); + connectBranch(tree, "N90Constituents", &m_N90Constituents); + connectBranch(tree, "LArBadHVEnergyFrac", &m_LArBadHVEnergyFrac); + connectBranch(tree, "ChargedFraction", &m_ChargedFraction); + connectBranch(tree, "OotFracClusters5", &m_OotFracClusters5); + connectBranch(tree, "OotFracClusters10", &m_OotFracClusters10); + connectBranch(tree, "LeadingClusterPt", &m_LeadingClusterPt); + connectBranch(tree, "LeadingClusterSecondLambda", &m_LeadingClusterSecondLambda); + connectBranch(tree, "LeadingClusterCenterLambda", &m_LeadingClusterCenterLambda); + connectBranch(tree, "LeadingClusterSecondR", &m_LeadingClusterSecondR); + if(m_infoSwitch.m_cleanTrig) { + connectBranch (tree, "clean_passLooseBadTriggerUgly",&m_clean_passLooseBadTriggerUgly); + } + else { + connectBranch (tree, "clean_passLooseBadUgly", &m_clean_passLooseBadUgly); + connectBranch (tree, "clean_passTightBadUgly", &m_clean_passTightBadUgly); + } + } + if(m_infoSwitch.m_cleanTrig) { + connectBranch (tree, "clean_passLooseBadTrigger", &m_clean_passLooseBadTrigger); + } + else { + connectBranch (tree, "clean_passLooseBad", &m_clean_passLooseBad); + connectBranch (tree, "clean_passTightBad", &m_clean_passTightBad); + } + if(m_infoSwitch.m_cleanLLP) { + connectBranch (tree, "clean_passLooseBadLLP", &m_clean_passLooseBadLLP); + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + connectBranch(tree, "Timing", &m_Timing); + } + + if(m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) + { + if ( m_infoSwitch.m_energy ){ + connectBranch(tree, "HECFrac", &m_HECFrac); + connectBranch(tree, "CentroidR", &m_CentroidR); + connectBranch(tree, "LowEtConstituentsFrac", &m_LowEtConstituentsFrac); + } + connectBranch(tree, "EMFrac", &m_EMFrac); + connectBranch(tree, "FracSamplingMax", &m_FracSamplingMax); + connectBranch(tree, "FracSamplingMaxIndex", &m_FracSamplingMaxIndex); + connectBranch(tree, "GhostMuonSegmentCount", &m_GhostMuonSegmentCount); + connectBranch(tree, "Width", &m_Width); + } + + if(m_infoSwitch.m_trackPV) + { + connectBranch(tree, "NumTrkPt1000PV", &m_NumTrkPt1000PV); + connectBranch(tree, "SumPtTrkPt1000PV", &m_SumPtTrkPt1000PV); + connectBranch(tree, "TrackWidthPt1000PV", &m_TrackWidthPt1000PV); + connectBranch(tree, "NumTrkPt500PV", &m_NumTrkPt500PV); + connectBranch(tree, "SumPtTrkPt500PV", &m_SumPtTrkPt500PV); + connectBranch(tree, "TrackWidthPt500PV", &m_TrackWidthPt500PV); + connectBranch(tree, "JVFPV", &m_JVFPV); + } + + if(m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt) + { + if(m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV){ + connectBranch(tree, "JvtJvfcorr", &m_JvtJvfcorr); + connectBranch(tree, "JvtRpt", &m_JvtRpt); + } + connectBranch(tree, "Jvt", &m_Jvt); + } + + + if ( m_infoSwitch.m_chargedPFOPV ) { + connectBranch(tree, "SumPtChargedPFOPt500PV", &m_SumPtChargedPFOPt500PV); + connectBranch(tree, "fCharged", &m_fCharged); + } + + if(m_infoSwitch.m_JVC) + { + connectBranch(tree,"JetVertexCharge_discriminant", &m_JetVertexCharge_discriminant); + } + + if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA) + { + connectBranch (tree,"HadronConeExclTruthLabelID" ,&m_HadronConeExclTruthLabelID); + connectBranch (tree,"HadronConeExclExtendedTruthLabelID",&m_HadronConeExclExtendedTruthLabelID); + } + + if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT) + { + connectBranch(tree,"DL1r" ,&m_DL1r ); + connectBranch(tree,"DL1r_pu" ,&m_DL1r_pu ); + connectBranch(tree,"DL1r_pc" ,&m_DL1r_pc ); + connectBranch(tree,"DL1r_pb" ,&m_DL1r_pb ); + connectBranch(tree,"DL1dv00" ,&m_DL1dv00 ); + connectBranch(tree,"DL1dv00_pu" ,&m_DL1dv00_pu ); + connectBranch(tree,"DL1dv00_pc" ,&m_DL1dv00_pc ); + connectBranch(tree,"DL1dv00_pb" ,&m_DL1dv00_pb ); + connectBranch(tree,"DL1dv01" ,&m_DL1dv01 ); + connectBranch(tree,"DL1dv01_pu" ,&m_DL1dv01_pu ); + connectBranch(tree,"DL1dv01_pc" ,&m_DL1dv01_pc ); + connectBranch(tree,"DL1dv01_pb" ,&m_DL1dv01_pb ); + connectBranch(tree,"GN1" ,&m_GN1 ); + connectBranch(tree,"GN1_pu" ,&m_GN1_pu ); + connectBranch(tree,"GN1_pc" ,&m_GN1_pc ); + connectBranch(tree,"GN1_pb" ,&m_GN1_pb ); + connectBranch(tree,"GN2v00LegacyWP" ,&m_GN2v00LegacyWP ); + connectBranch(tree,"GN2v00LegacyWP_pu" ,&m_GN2v00LegacyWP_pu ); + connectBranch(tree,"GN2v00LegacyWP_pc" ,&m_GN2v00LegacyWP_pc ); + connectBranch(tree,"GN2v00LegacyWP_pb" ,&m_GN2v00LegacyWP_pb ); + connectBranch(tree,"GN2v00NewAliasWP" ,&m_GN2v00NewAliasWP ); + connectBranch(tree,"GN2v00NewAliasWP_pu" ,&m_GN2v00NewAliasWP_pu ); + connectBranch(tree,"GN2v00NewAliasWP_pc" ,&m_GN2v00NewAliasWP_pc ); + connectBranch(tree,"GN2v00NewAliasWP_pb" ,&m_GN2v00NewAliasWP_pb ); + connectBranch(tree,"GN2v01" ,&m_GN2v01 ); + connectBranch(tree,"GN2v01_pu" ,&m_GN2v01_pu ); + connectBranch(tree,"GN2v01_pc" ,&m_GN2v01_pc ); + connectBranch(tree,"GN2v01_pb" ,&m_GN2v01_pb ); + connectBranch(tree,"GN2v01_ptau" ,&m_GN2v01_ptau); + } + + if(m_infoSwitch.m_flavorTagHLT) + { + connectBranch(tree,"vtxHadDummy", &m_vtxHadDummy); + connectBranch(tree,"bs_online_vx", &m_bs_online_vx); + connectBranch(tree,"bs_online_vy", &m_bs_online_vy); + connectBranch(tree,"bs_online_vz", &m_bs_online_vz); + + connectBranch(tree,"vtx_offline_x0", &m_vtx_offline_x0); + connectBranch(tree,"vtx_offline_y0", &m_vtx_offline_y0); + connectBranch(tree,"vtx_offline_z0", &m_vtx_offline_z0); + + connectBranch(tree,"vtx_online_x0", &m_vtx_online_x0); + connectBranch(tree,"vtx_online_y0", &m_vtx_online_y0); + connectBranch(tree,"vtx_online_z0", &m_vtx_online_z0); + + connectBranch(tree,"vtx_online_bkg_x0", &m_vtx_online_bkg_x0); + connectBranch(tree,"vtx_online_bkg_y0", &m_vtx_online_bkg_y0); + connectBranch(tree,"vtx_online_bkg_z0", &m_vtx_online_bkg_z0); + } + if(m_infoSwitch.m_flavorTagTLA) + { + connectBranch(tree,"fastDIPS", &m_fastDIPS); + connectBranch(tree,"fastDIPS_pu", &m_fastDIPS_pu); + connectBranch(tree,"fastDIPS_pc", &m_fastDIPS_pc); + connectBranch(tree,"fastDIPS_pb", &m_fastDIPS_pb); + } + + if(m_infoSwitch.m_jetFitterDetails) + { + connectBranch(tree,"JetFitter_nVTX" , &m_JetFitter_nVTX ); + connectBranch(tree,"JetFitter_nSingleTracks" , &m_JetFitter_nSingleTracks ); + connectBranch(tree,"JetFitter_nTracksAtVtx" , &m_JetFitter_nTracksAtVtx ); + connectBranch(tree,"JetFitter_mass" , &m_JetFitter_mass ); + connectBranch(tree,"JetFitter_energyFraction", &m_JetFitter_energyFraction ); + connectBranch(tree,"JetFitter_significance3d", &m_JetFitter_significance3d ); + connectBranch(tree,"JetFitter_deltaeta" , &m_JetFitter_deltaeta ); + connectBranch(tree,"JetFitter_deltaphi" , &m_JetFitter_deltaphi ); + connectBranch(tree,"JetFitter_N2Tpair" , &m_JetFitter_N2Tpar ); + + } + + if( m_infoSwitch.m_svDetails){ + + connectBranch(tree, "SV0", &m_SV0); + connectBranch(tree, "sv0_NGTinSvx", &m_sv0_NGTinSvx ); + connectBranch(tree, "sv0_N2Tpair", &m_sv0_N2Tpair ); + connectBranch(tree, "sv0_massvx", &m_sv0_massvx ); + connectBranch(tree, "sv0_efracsvx", &m_sv0_efracsvx ); + connectBranch(tree, "sv0_normdist", &m_sv0_normdist ); + + connectBranch(tree, "SV1", &m_SV1); + connectBranch(tree, "SV1IP3D", &m_SV1IP3D); + connectBranch(tree, "COMBx", &m_COMBx); + connectBranch(tree, "sv1_pu", &m_sv1_pu ); + connectBranch(tree, "sv1_pb", &m_sv1_pb ); + connectBranch(tree, "sv1_pc", &m_sv1_pc ); + connectBranch(tree, "sv1_c", &m_sv1_c ); + connectBranch(tree, "sv1_cu", &m_sv1_cu ); + connectBranch(tree, "sv1_NGTinSvx", &m_sv1_NGTinSvx ); + connectBranch(tree, "sv1_N2Tpair", &m_sv1_N2Tpair ); + connectBranch(tree, "sv1_massvx", &m_sv1_massvx ); + connectBranch(tree, "sv1_efracsvx", &m_sv1_efracsvx ); + connectBranch(tree, "sv1_normdist", &m_sv1_normdist ); + connectBranch(tree, "sv1_Lxy", &m_sv1_Lxy ); + connectBranch(tree, "sv1_sig3d", &m_sv1_sig3d ); + connectBranch(tree, "sv1_L3d", &m_sv1_L3d ); + connectBranch(tree, "sv1_distmatlay", &m_sv1_distmatlay); + connectBranch(tree, "sv1_dR", &m_sv1_dR ); + + } + + if( m_infoSwitch.m_ipDetails){ + + connectBranch (tree, "IP2D_pu", &m_IP2D_pu ); + connectBranch (tree, "IP2D_pb", &m_IP2D_pb ); + connectBranch (tree, "IP2D_pc", &m_IP2D_pc ); + connectBranch (tree, "IP2D", &m_IP2D ); + connectBranch (tree, "IP2D_c", &m_IP2D_c ); + connectBranch (tree, "IP2D_cu", &m_IP2D_cu ); + connectBranch >(tree, "IP2D_gradeOfTracks" , &m_IP2D_gradeOfTracks ); + connectBranch >(tree, "IP2D_flagFromV0ofTracks" , &m_IP2D_flagFromV0ofTracks ); + connectBranch >(tree, "IP2D_valD0wrtPVofTracks" , &m_IP2D_valD0wrtPVofTracks ); + connectBranch >(tree, "IP2D_sigD0wrtPVofTracks" , &m_IP2D_sigD0wrtPVofTracks ); + connectBranch >(tree, "IP2D_weightBofTracks" , &m_IP2D_weightBofTracks ); + connectBranch >(tree, "IP2D_weightCofTracks" , &m_IP2D_weightCofTracks ); + connectBranch >(tree, "IP2D_weightUofTracks" , &m_IP2D_weightUofTracks ); + + connectBranch (tree, "IP3D", &m_IP3D); + connectBranch (tree, "IP3D_pu", &m_IP3D_pu ); + connectBranch (tree, "IP3D_pb", &m_IP3D_pb ); + connectBranch (tree, "IP3D_pc", &m_IP3D_pc ); + connectBranch (tree, "IP3D_c", &m_IP3D_c ); + connectBranch (tree, "IP3D_cu", &m_IP3D_cu ); + connectBranch >(tree, "IP3D_gradeOfTracks" , &m_IP3D_gradeOfTracks ); + connectBranch >(tree, "IP3D_flagFromV0ofTracks" , &m_IP3D_flagFromV0ofTracks ); + connectBranch >(tree, "IP3D_valD0wrtPVofTracks" , &m_IP3D_valD0wrtPVofTracks ); + connectBranch >(tree, "IP3D_sigD0wrtPVofTracks" , &m_IP3D_sigD0wrtPVofTracks ); + connectBranch >(tree, "IP3D_valZ0wrtPVofTracks" , &m_IP3D_valZ0wrtPVofTracks ); + connectBranch >(tree, "IP3D_sigZ0wrtPVofTracks" , &m_IP3D_sigZ0wrtPVofTracks ); + connectBranch >(tree, "IP3D_weightBofTracks" , &m_IP3D_weightBofTracks ); + connectBranch >(tree, "IP3D_weightCofTracks" , &m_IP3D_weightCofTracks ); + connectBranch >(tree, "IP3D_weightUofTracks" , &m_IP3D_weightUofTracks ); + + } + + for(auto btag : m_btags) + btag->setTree(tree, m_name); + + // truth + if(m_infoSwitch.m_truth) + { + connectBranch (tree,"ConeTruthLabelID", &m_ConeTruthLabelID); + connectBranch (tree,"TruthCount", &m_TruthCount); + connectBranch(tree,"TruthLabelDeltaR_B", &m_TruthLabelDeltaR_B); + connectBranch(tree,"TruthLabelDeltaR_C", &m_TruthLabelDeltaR_C); + connectBranch(tree,"TruthLabelDeltaR_T", &m_TruthLabelDeltaR_T); + connectBranch (tree,"PartonTruthLabelID", &m_PartonTruthLabelID); + connectBranch(tree,"GhostTruthAssociationFraction", &m_GhostTruthAssociationFraction); + connectBranch(tree,"truth_E", &m_truth_E); + connectBranch(tree,"truth_pt", &m_truth_pt); + connectBranch(tree,"truth_phi", &m_truth_phi); + connectBranch(tree,"truth_eta", &m_truth_eta); + } + + // charge + if(m_infoSwitch.m_charge) + { + connectBranch(tree,"charge", &m_charge); + } + + // passSel + if(m_infoSwitch.m_passSel) connectBranch(tree,"passSel", &m_passSel); + + // passOR + if(m_infoSwitch.m_passOR) connectBranch(tree,"passOR", &m_passOR); + + } + + void JetContainer::updateParticle(uint idx, Jet& jet) + { + if(m_debug) std::cout << "in JetContainer::updateParticle " << std::endl; + ParticleContainer::updateParticle(idx,jet); + + if(m_infoSwitch.m_rapidity) + { + jet.rapidity =m_rapidity ->at(idx); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + jet.isTrigMatched = m_isTrigMatched ->at(idx); + jet.isTrigMatchedToChain = m_isTrigMatchedToChain ->at(idx); + jet.listTrigChains = m_listTrigChains ->at(idx); + } + + if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) + { + if(m_debug) std::cout << "updating clean " << std::endl; + if(m_infoSwitch.m_clean){ + jet.Timing =m_Timing ->at(idx); + jet.LArQuality =m_LArQuality ->at(idx); + jet.HECQuality =m_HECQuality ->at(idx); + jet.NegativeE =m_NegativeE ->at(idx); + jet.AverageLArQF =m_AverageLArQF ->at(idx); + jet.BchCorrCell =m_BchCorrCell ->at(idx); + jet.N90Constituents =m_N90Constituents ->at(idx); + jet.LArBadHVEFrac =m_LArBadHVEnergyFrac ->at(idx); + jet.LArBadHVNCell =m_LArBadHVNCell ->at(idx); + jet.ChargedFraction =m_ChargedFraction ->at(idx); + jet.OotFracClusters5 =m_OotFracClusters5 ->at(idx); + jet.OotFracClusters10 =m_OotFracClusters10 ->at(idx); + jet.LeadingClusterPt =m_LeadingClusterPt ->at(idx); + jet.LeadingClusterSecondLambda=m_LeadingClusterSecondLambda->at(idx); + jet.LeadingClusterCenterLambda=m_LeadingClusterCenterLambda->at(idx); + jet.LeadingClusterSecondR =m_LeadingClusterSecondR ->at(idx); + if(m_infoSwitch.m_cleanTrig) { + jet.clean_passLooseBadTriggerUgly =m_clean_passLooseBadTriggerUgly ->at(idx); + } + else { + jet.clean_passLooseBadUgly =m_clean_passLooseBadUgly ->at(idx); + jet.clean_passTightBadUgly =m_clean_passTightBadUgly ->at(idx); + } + } + if(m_infoSwitch.m_cleanTrig) { + jet.clean_passLooseBadTrigger =m_clean_passLooseBadTrigger ->at(idx); + } + else { + jet.clean_passLooseBad =m_clean_passLooseBad ->at(idx); + jet.clean_passTightBad =m_clean_passTightBad ->at(idx); + } + if(m_infoSwitch.m_cleanLLP) { + jet.clean_passLooseBadLLP =m_clean_passLooseBadLLP ->at(idx); + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + jet.Timing = m_Timing->at(idx); + } + + if(m_infoSwitch.m_energy || m_infoSwitch.m_energyLight) + { + if(m_debug) std::cout << "updating energy " << std::endl; + if ( m_infoSwitch.m_energy ){ + jet.HECFrac =m_HECFrac ->at(idx); + jet.CentroidR =m_CentroidR ->at(idx); + jet.LowEtConstituentsFrac=m_LowEtConstituentsFrac->at(idx); + } + jet.EMFrac =m_EMFrac ->at(idx); + jet.FracSamplingMax =m_FracSamplingMax ->at(idx); + jet.FracSamplingMaxIndex =m_FracSamplingMaxIndex ->at(idx); + jet.GhostMuonSegmentCount=m_GhostMuonSegmentCount->at(idx); + jet.Width =m_Width ->at(idx); + } + + if(m_infoSwitch.m_trackPV) + { + jet.NumTrkPt1000PV =m_NumTrkPt1000PV ->at(idx); + jet.SumPtTrkPt1000PV =m_SumPtTrkPt1000PV ->at(idx); + jet.TrackWidthPt1000PV=m_TrackWidthPt1000PV->at(idx); + jet.NumTrkPt500PV =m_NumTrkPt500PV ->at(idx); + jet.SumPtTrkPt500PV =m_SumPtTrkPt500PV ->at(idx); + jet.TrackWidthPt500PV =m_TrackWidthPt500PV ->at(idx); + jet.JVFPV =m_JVFPV ->at(idx); + } + + if(m_infoSwitch.m_trackPV || m_infoSwitch.m_trackAll || m_infoSwitch.m_jvt) + { + if(m_infoSwitch.m_trackPV || m_infoSwitch.m_trackAll){ + jet.JvtJvfcorr=m_JvtJvfcorr->at(idx); + jet.JvtRpt =m_JvtRpt ->at(idx); + } + jet.Jvt =m_Jvt ->at(idx); + } + + if ( m_infoSwitch.m_chargedPFOPV ) { + jet.SumPtChargedPFOPt500PV=m_SumPtChargedPFOPt500PV->at(idx); + jet.fCharged=m_fCharged->at(idx); + } + + if( m_infoSwitch.m_JVC ) { + if(m_debug) std::cout << "updating JVC " << std::endl; + if(m_debug) std::cout << m_JetVertexCharge_discriminant->size() << std::endl; + jet.JVC = m_JetVertexCharge_discriminant->at(idx); + } + + if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA) + { + if(m_HadronConeExclTruthLabelID) jet.HadronConeExclTruthLabelID =m_HadronConeExclTruthLabelID ->at(idx); + if(m_HadronConeExclExtendedTruthLabelID) jet.HadronConeExclExtendedTruthLabelID=m_HadronConeExclExtendedTruthLabelID->at(idx); + } + + if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT) + { + if(m_debug) std::cout << "updating flavorTag " << std::endl; + if(m_DL1r) jet.DL1r =m_DL1r ->at(idx); + if(m_DL1r_pu) jet.DL1r_pu =m_DL1r_pu ->at(idx); + if(m_DL1r_pc) jet.DL1r_pc =m_DL1r_pc ->at(idx); + if(m_DL1r_pb) jet.DL1r_pb =m_DL1r_pb ->at(idx); + if(m_DL1dv00) jet.DL1dv00 =m_DL1dv00 ->at(idx); + if(m_DL1dv00_pu) jet.DL1dv00_pu =m_DL1dv00_pu ->at(idx); + if(m_DL1dv00_pc) jet.DL1dv00_pc =m_DL1dv00_pc ->at(idx); + if(m_DL1dv00_pb) jet.DL1dv00_pb =m_DL1dv00_pb ->at(idx); + if(m_DL1dv01) jet.DL1dv01 =m_DL1dv01 ->at(idx); + if(m_DL1dv01_pu) jet.DL1dv01_pu =m_DL1dv01_pu ->at(idx); + if(m_DL1dv01_pc) jet.DL1dv01_pc =m_DL1dv01_pc ->at(idx); + if(m_DL1dv01_pb) jet.DL1dv01_pb =m_DL1dv01_pb ->at(idx); + if(m_GN1) jet.GN1 =m_GN1 ->at(idx); + if(m_GN1_pu) jet.GN1_pu =m_GN1_pu ->at(idx); + if(m_GN1_pc) jet.GN1_pc =m_GN1_pc ->at(idx); + if(m_GN1_pb) jet.GN1_pb =m_GN1_pb ->at(idx); + if(m_GN2v00LegacyWP) jet.GN2v00LegacyWP =m_GN2v00LegacyWP ->at(idx); + if(m_GN2v00LegacyWP_pu) jet.GN2v00LegacyWP_pu =m_GN2v00LegacyWP_pu ->at(idx); + if(m_GN2v00LegacyWP_pc) jet.GN2v00LegacyWP_pc =m_GN2v00LegacyWP_pc ->at(idx); + if(m_GN2v00LegacyWP_pb) jet.GN2v00LegacyWP_pb =m_GN2v00LegacyWP_pb ->at(idx); + if(m_GN2v00NewAliasWP) jet.GN2v00NewAliasWP =m_GN2v00NewAliasWP ->at(idx); + if(m_GN2v00NewAliasWP_pu) jet.GN2v00NewAliasWP_pu =m_GN2v00NewAliasWP_pu ->at(idx); + if(m_GN2v00NewAliasWP_pc) jet.GN2v00NewAliasWP_pc =m_GN2v00NewAliasWP_pc ->at(idx); + if(m_GN2v00NewAliasWP_pb) jet.GN2v00NewAliasWP_pb =m_GN2v00NewAliasWP_pb ->at(idx); + if(m_GN2v01) jet.GN2v01 =m_GN2v01 ->at(idx); + if(m_GN2v01_pu) jet.GN2v01_pu =m_GN2v01_pu ->at(idx); + if(m_GN2v01_pc) jet.GN2v01_pc =m_GN2v01_pc ->at(idx); + if(m_GN2v01_pb) jet.GN2v01_pb =m_GN2v01_pb ->at(idx); + if(m_GN2v01_ptau) jet.GN2v01_ptau =m_GN2v01_ptau ->at(idx); + + //std::cout << m_HadronConeExclTruthLabelID->size() << std::endl; + if(m_debug) std::cout << "leave flavorTag " << std::endl; + } + + + if(m_infoSwitch.m_flavorTagHLT) + { + if(m_debug) std::cout << "updating flavorTagHLT " << std::endl; + jet.bs_online_vx =m_bs_online_vx ->at(idx); + jet.bs_online_vy =m_bs_online_vy ->at(idx); + jet.bs_online_vz =m_bs_online_vz ->at(idx); + jet.vtxHadDummy =m_vtxHadDummy ->at(idx); + jet.vtx_offline_x0 =m_vtx_offline_x0 ->at(idx); + jet.vtx_offline_y0 =m_vtx_offline_y0 ->at(idx); + jet.vtx_offline_z0 =m_vtx_offline_z0 ->at(idx); + + jet.vtx_online_x0 =m_vtx_online_x0 ->at(idx); + jet.vtx_online_y0 =m_vtx_online_y0 ->at(idx); + jet.vtx_online_z0 =m_vtx_online_z0 ->at(idx); + + jet.vtx_online_bkg_x0 =m_vtx_online_bkg_x0 ->at(idx); + jet.vtx_online_bkg_y0 =m_vtx_online_bkg_y0 ->at(idx); + jet.vtx_online_bkg_z0 =m_vtx_online_bkg_z0 ->at(idx); + + } + + if(m_infoSwitch.m_jetFitterDetails) + { + jet.JetFitter_nVTX =m_JetFitter_nVTX ->at(idx); + jet.JetFitter_nSingleTracks =m_JetFitter_nSingleTracks ->at(idx); + jet.JetFitter_nTracksAtVtx =m_JetFitter_nTracksAtVtx ->at(idx); + jet.JetFitter_mass =m_JetFitter_mass ->at(idx); + jet.JetFitter_energyFraction =m_JetFitter_energyFraction ->at(idx); + jet.JetFitter_significance3d =m_JetFitter_significance3d ->at(idx); + jet.JetFitter_deltaeta =m_JetFitter_deltaeta ->at(idx); + jet.JetFitter_deltaphi =m_JetFitter_deltaphi ->at(idx); + jet.JetFitter_N2Tpar =m_JetFitter_N2Tpar ->at(idx); + + } + + if(m_infoSwitch.m_flavorTagTLA) + { + if(m_debug) std::cout << "updating flavorTagTLA " << std::endl; + if(m_fastDIPS) jet.fastDIPS =m_fastDIPS ->at(idx); + if(m_fastDIPS_pu) jet.fastDIPS_pu =m_fastDIPS_pu ->at(idx); + if(m_fastDIPS_pc) jet.fastDIPS_pc =m_fastDIPS_pc ->at(idx); + if(m_fastDIPS_pb) jet.fastDIPS_pb =m_fastDIPS_pb ->at(idx); + if(m_debug) std::cout << "leave flavorTagTLA " << std::endl; + } + + if(m_infoSwitch.m_svDetails){ + + jet.SV0 = m_SV0 ->at(idx); + jet.sv0_NGTinSvx = m_sv0_NGTinSvx ->at(idx); + jet.sv0_N2Tpair = m_sv0_N2Tpair ->at(idx); + jet.sv0_massvx = m_sv0_massvx ->at(idx); + jet.sv0_efracsvx = m_sv0_efracsvx ->at(idx); + jet.sv0_normdist = m_sv0_normdist ->at(idx); + + jet.SV1 = m_SV1 ->at(idx); + jet.SV1IP3D = m_SV1IP3D ->at(idx); + jet.COMBx = m_COMBx ->at(idx); + jet.sv1_pu = m_sv1_pu ->at(idx); + jet.sv1_pb = m_sv1_pb ->at(idx); + jet.sv1_pc = m_sv1_pc ->at(idx); + jet.sv1_c = m_sv1_c ->at(idx); + jet.sv1_cu = m_sv1_cu ->at(idx); + jet.sv1_NGTinSvx = m_sv1_NGTinSvx ->at(idx); + jet.sv1_N2Tpair = m_sv1_N2Tpair ->at(idx); + jet.sv1_massvx = m_sv1_massvx ->at(idx); + jet.sv1_efracsvx = m_sv1_efracsvx ->at(idx); + jet.sv1_normdist = m_sv1_normdist ->at(idx); + jet.sv1_Lxy = m_sv1_Lxy ->at(idx); + if(m_sv1_sig3d->size()) + jet.sv1_sig3d = m_sv1_sig3d ->at(idx); + jet.sv1_L3d = m_sv1_L3d ->at(idx); + jet.sv1_distmatlay = m_sv1_distmatlay->at(idx); + jet.sv1_dR = m_sv1_dR ->at(idx); + } + + if(m_infoSwitch.m_ipDetails){ + jet.IP2D_pu = m_IP2D_pu ->at(idx); + jet.IP2D_pb = m_IP2D_pb ->at(idx); + jet.IP2D_pc = m_IP2D_pc ->at(idx); + jet.IP2D = m_IP2D ->at(idx); + jet.IP2D_c = m_IP2D_c ->at(idx); + jet.IP2D_cu = m_IP2D_cu ->at(idx); + jet.nIP2DTracks = m_IP2D_gradeOfTracks ->at(idx).size(); + + jet.IP2D_gradeOfTracks = m_IP2D_gradeOfTracks ->at(idx); + jet.IP2D_flagFromV0ofTracks = m_IP2D_flagFromV0ofTracks ->at(idx); + jet.IP2D_valD0wrtPVofTracks = m_IP2D_valD0wrtPVofTracks ->at(idx); + jet.IP2D_sigD0wrtPVofTracks = m_IP2D_sigD0wrtPVofTracks ->at(idx); + jet.IP2D_weightBofTracks = m_IP2D_weightBofTracks ->at(idx); + jet.IP2D_weightCofTracks = m_IP2D_weightCofTracks ->at(idx); + jet.IP2D_weightUofTracks = m_IP2D_weightUofTracks ->at(idx); + + jet.IP3D = m_IP3D ->at(idx); + jet.IP3D_pu = m_IP3D_pu ->at(idx); + jet.IP3D_pb = m_IP3D_pb ->at(idx); + jet.IP3D_pc = m_IP3D_pc ->at(idx); + jet.IP3D_c = m_IP3D_c ->at(idx); + jet.IP3D_cu = m_IP3D_cu ->at(idx); + jet.nIP3DTracks = m_IP3D_gradeOfTracks ->at(idx).size(); + jet.IP3D_gradeOfTracks = m_IP3D_gradeOfTracks ->at(idx); + jet.IP3D_flagFromV0ofTracks = m_IP3D_flagFromV0ofTracks ->at(idx); + jet.IP3D_valD0wrtPVofTracks = m_IP3D_valD0wrtPVofTracks ->at(idx); + jet.IP3D_sigD0wrtPVofTracks = m_IP3D_sigD0wrtPVofTracks ->at(idx); + jet.IP3D_valZ0wrtPVofTracks = m_IP3D_valZ0wrtPVofTracks ->at(idx); + jet.IP3D_sigZ0wrtPVofTracks = m_IP3D_sigZ0wrtPVofTracks ->at(idx); + jet.IP3D_weightBofTracks = m_IP3D_weightBofTracks ->at(idx); + jet.IP3D_weightCofTracks = m_IP3D_weightCofTracks ->at(idx); + jet.IP3D_weightUofTracks = m_IP3D_weightUofTracks ->at(idx); + } + + static const std::vector dummy1 = {1.}; + for(btagOpPoint* btag : m_btags) + { + switch(btag->m_op) + { + case Jet::BTaggerOP::DL1r_FixedCutBEff_60: + jet.is_DL1r_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_DL1r_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_70: + jet.is_DL1r_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_DL1r_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_77: + jet.is_DL1r_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_DL1r_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1r_FixedCutBEff_85: + jet.is_DL1r_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_DL1r_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1r_Continuous: + jet.is_DL1r_Continuous= btag->m_isTag->at(idx); + jet.SF_DL1r_Continuous=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + //DL1dv01 has preliminary rel22 pre-rec SF uncertainties + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60: + jet.is_DL1dv01_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_DL1dv01_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70: + jet.is_DL1dv01_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_DL1dv01_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77: + jet.is_DL1dv01_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_DL1dv01_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85: + jet.is_DL1dv01_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_DL1dv01_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv01_Continuous: + jet.is_DL1dv01_Continuous= btag->m_isTag->at(idx); + jet.SF_DL1dv01_Continuous=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60: + jet.is_DL1dv00_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_DL1dv00_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70: + jet.is_DL1dv00_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_DL1dv00_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77: + jet.is_DL1dv00_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_DL1dv00_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85: + jet.is_DL1dv00_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_DL1dv00_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::DL1dv00_Continuous: + jet.is_DL1dv00_Continuous= btag->m_isTag->at(idx); + jet.SF_DL1dv00_Continuous=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_60: + jet.is_GN120220509_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_GN120220509_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_70: + jet.is_GN120220509_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_GN120220509_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_77: + jet.is_GN120220509_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_GN120220509_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN120220509_FixedCutBEff_85: + jet.is_GN120220509_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_GN120220509_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN120220509_Continuous: + jet.is_GN120220509_Continuous= btag->m_isTag->at(idx); + jet.SF_GN120220509_Continuous=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60: + jet.is_GN2v00LegacyWP_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_GN2v00LegacyWP_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70: + jet.is_GN2v00LegacyWP_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_GN2v00LegacyWP_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77: + jet.is_GN2v00LegacyWP_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_GN2v00LegacyWP_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85: + jet.is_GN2v00LegacyWP_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_GN2v00LegacyWP_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60: + jet.is_GN2v00NewAliasWP_FixedCutBEff_60= btag->m_isTag->at(idx); + jet.SF_GN2v00NewAliasWP_FixedCutBEff_60=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70: + jet.is_GN2v00NewAliasWP_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_GN2v00NewAliasWP_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77: + jet.is_GN2v00NewAliasWP_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_GN2v00NewAliasWP_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85: + jet.is_GN2v00NewAliasWP_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_GN2v00NewAliasWP_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_65: + jet.is_GN2v01_FixedCutBEff_65= btag->m_isTag->at(idx); + jet.SF_GN2v01_FixedCutBEff_65=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_70: + jet.is_GN2v01_FixedCutBEff_70= btag->m_isTag->at(idx); + jet.SF_GN2v01_FixedCutBEff_70=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_77: + jet.is_GN2v01_FixedCutBEff_77= btag->m_isTag->at(idx); + jet.SF_GN2v01_FixedCutBEff_77=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_85: + jet.is_GN2v01_FixedCutBEff_85= btag->m_isTag->at(idx); + jet.SF_GN2v01_FixedCutBEff_85=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_FixedCutBEff_90: + jet.is_GN2v01_FixedCutBEff_90= btag->m_isTag->at(idx); + jet.SF_GN2v01_FixedCutBEff_90=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + case Jet::BTaggerOP::GN2v01_Continuous: + jet.is_GN2v01_Continuous= btag->m_isTag->at(idx); + jet.SF_GN2v01_Continuous=(m_mc)?btag->m_sf ->at(idx):dummy1; + break; + + default: + throw std::domain_error( + __FILE__ + std::string(", in ") + __func__ + ": " + + "unexpected value of btag->m_op (of type xAH::Jet::BTaggerOP)"); + } + } + + // truth + if(m_infoSwitch.m_truth) + { + jet.ConeTruthLabelID =m_ConeTruthLabelID->at(idx); + jet.TruthCount =m_TruthCount ->at(idx); + jet.TruthLabelDeltaR_B=m_TruthLabelDeltaR_B->at(idx); + jet.TruthLabelDeltaR_C=m_TruthLabelDeltaR_C->at(idx); + jet.TruthLabelDeltaR_T=m_TruthLabelDeltaR_T->at(idx); + jet.PartonTruthLabelID=m_PartonTruthLabelID->at(idx); + jet.GhostTruthAssociationFraction= m_GhostTruthAssociationFraction->at(idx); + + jet.truth_p4.SetPtEtaPhiE(m_truth_pt ->at(idx), + m_truth_eta->at(idx), + m_truth_phi->at(idx), + m_truth_E ->at(idx)); + } + + // charge + if(m_infoSwitch.m_charge) + { + jet.charge=m_charge->at(idx); + } + + // passSel + if(m_infoSwitch.m_passSel) jet.passSel=m_passSel->at(idx); + + // passOR + if(m_infoSwitch.m_passOR) jet.passOR=m_passOR->at(idx); + + if(m_debug) std::cout << "leave JetContainer::updateParticle " << std::endl; + return; + } + + + + void JetContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + if ( m_infoSwitch.m_rapidity ) { + setBranch(tree,"rapidity", m_rapidity ); + } + + if ( m_infoSwitch.m_trigger ){ + // this is true if there's a match for at least one trigger chain + setBranch(tree,"isTrigMatched", m_isTrigMatched); + // a vector of trigger match decision for each jet trigger chain + setBranch >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain ); + // a vector of strings for each jet trigger chain - 1:1 correspondence w/ vector above + setBranch(tree, "listTrigChains", m_listTrigChains ); + } + + if( m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) { + if(m_infoSwitch.m_clean){ + setBranch(tree,"Timing", m_Timing ); + setBranch(tree,"LArQuality", m_LArQuality ); + setBranch(tree,"HECQuality", m_HECQuality ); + setBranch(tree,"NegativeE", m_NegativeE ); + setBranch(tree,"AverageLArQF", m_AverageLArQF ); + setBranch(tree,"BchCorrCell", m_BchCorrCell ); + setBranch(tree,"N90Constituents", m_N90Constituents ); + setBranch(tree,"LArBadHVEnergyFrac", m_LArBadHVEnergyFrac ); + setBranch (tree,"LArBadHVNCell", m_LArBadHVNCell ); + setBranch(tree,"ChargedFraction", m_ChargedFraction); + setBranch(tree,"OotFracClusters5", m_OotFracClusters5 ); + setBranch(tree,"OotFracClusters10", m_OotFracClusters10 ); + setBranch(tree,"LeadingClusterPt", m_LeadingClusterPt ); + setBranch(tree,"LeadingClusterSecondLambda", m_LeadingClusterSecondLambda ); + setBranch(tree,"LeadingClusterCenterLambda", m_LeadingClusterCenterLambda ); + setBranch(tree,"LeadingClusterSecondR", m_LeadingClusterSecondR ); + if(m_infoSwitch.m_cleanTrig) { + setBranch (tree,"clean_passLooseBadTriggerUgly", m_clean_passLooseBadTriggerUgly ); + } + else { + setBranch (tree,"clean_passLooseBadUgly", m_clean_passLooseBadUgly ); + setBranch (tree,"clean_passTightBadUgly", m_clean_passTightBadUgly ); + } + } + if(m_infoSwitch.m_cleanTrig) { + setBranch (tree,"clean_passLooseBadTrigger", m_clean_passLooseBadTrigger ); + } + else { + setBranch (tree,"clean_passLooseBad", m_clean_passLooseBad ); + setBranch (tree,"clean_passTightBad", m_clean_passTightBad ); + } + if(m_infoSwitch.m_cleanLLP) { + setBranch (tree,"clean_passLooseBadLLP", m_clean_passLooseBadLLP ); + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + setBranch(tree,"Timing",m_Timing); + } + + + if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) { + if ( m_infoSwitch.m_energy ){ + setBranch(tree,"HECFrac", m_HECFrac ); + setBranch(tree,"CentroidR", m_CentroidR ); + setBranch(tree,"LowEtConstituentsFrac", m_LowEtConstituentsFrac ); + } + setBranch(tree,"EMFrac", m_EMFrac ); + setBranch(tree,"FracSamplingMax", m_FracSamplingMax ); + setBranch(tree,"FracSamplingMaxIndex", m_FracSamplingMaxIndex ); + setBranch(tree,"GhostMuonSegmentCount", m_GhostMuonSegmentCount ); + setBranch(tree,"Width", m_Width ); + } + + if ( m_infoSwitch.m_scales ) { + setBranch(tree,"emScalePt", m_emScalePt ); + setBranch(tree,"constScalePt", m_constScalePt ); + setBranch(tree,"pileupScalePt", m_pileupScalePt ); + setBranch(tree,"originConstitScalePt", m_originConstitScalePt ); + setBranch(tree,"etaJESScalePt", m_etaJESScalePt ); + setBranch(tree,"gscScalePt", m_gscScalePt ); + setBranch(tree,"jmsScalePt", m_jmsScalePt ); + setBranch(tree,"insituScalePt", m_insituScalePt ); + + setBranch(tree,"emScaleM", m_emScaleM ); + setBranch(tree,"constScaleM", m_constScaleM ); + setBranch(tree,"pileupScaleM", m_pileupScaleM ); + setBranch(tree,"originConstitScaleM", m_originConstitScaleM ); + setBranch(tree,"etaJESScaleM", m_etaJESScaleM ); + setBranch(tree,"gscScaleM", m_gscScaleM ); + setBranch(tree,"jmsScaleM", m_jmsScaleM ); + setBranch(tree,"insituScaleM", m_insituScaleM ); + } + + if ( m_infoSwitch.m_constscaleEta ) { + setBranch(tree,"constScaleEta", m_constScaleEta ); + } + + if ( m_infoSwitch.m_detectorEta ) { + setBranch(tree,"detectorEta", m_detectorEta ); + } + + if ( m_infoSwitch.m_layer ) { + setBranch >(tree,"EnergyPerSampling", m_EnergyPerSampling ); + } + + if ( m_infoSwitch.m_trackAll ) { + setBranch >(tree,"NumTrkPt1000", m_NumTrkPt1000 ); + setBranch >(tree,"SumPtTrkPt1000", m_SumPtTrkPt1000 ); + setBranch >(tree,"TrackWidthPt1000", m_TrackWidthPt1000 ); + setBranch >(tree,"NumTrkPt500", m_NumTrkPt500 ); + setBranch >(tree,"SumPtTrkPt500", m_SumPtTrkPt500 ); + setBranch >(tree,"TrackWidthPt500", m_TrackWidthPt500 ); + setBranch >(tree,"JVF", m_JVF ); + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) { + if ( m_infoSwitch.m_trackPV ) { + setBranch(tree,"NumTrkPt1000PV", m_NumTrkPt1000PV ); + setBranch(tree,"SumPtTrkPt1000PV", m_SumPtTrkPt1000PV ); + setBranch(tree,"TrackWidthPt1000PV", m_TrackWidthPt1000PV ); + setBranch(tree,"NumTrkPt500PV", m_NumTrkPt500PV ); + setBranch(tree,"SumPtTrkPt500PV", m_SumPtTrkPt500PV ); + setBranch(tree,"TrackWidthPt500PV", m_TrackWidthPt500PV ); + setBranch(tree,"JVFPV", m_JVFPV ); + setBranch(tree,"JvtJvfcorr", m_JvtJvfcorr ); + setBranch(tree,"JvtRpt", m_JvtRpt ); + } + setBranch(tree,"Jvt", m_Jvt ); + //setBranch(tree,"GhostTrackAssociationFraction", m_ghostTrackAssFrac); + } + + if (m_infoSwitch.m_fJvt) { + setBranch(tree, "fJvt", m_fJvt); + } + + if (m_infoSwitch.m_NNJvt) { + setBranch(tree, "NNJvt", m_NNJvt); + setBranch(tree, "NNJvtPass", m_NNJvtPass); + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) { + setBranch(tree,"JvtPass_Loose", m_JvtPass_Loose ); + if ( m_mc ) { + setBranch >(tree,"JvtEff_SF_Loose", m_JvtEff_SF_Loose ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) { + setBranch(tree,"JvtPass_Medium", m_JvtPass_Medium ); + if ( m_mc ) { + setBranch >(tree,"JvtEff_SF_Medium", m_JvtEff_SF_Medium ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) { + setBranch(tree,"JvtPass_Tight", m_JvtPass_Tight ); + if ( m_mc ) { + setBranch >(tree,"JvtEff_SF_Tight", m_JvtEff_SF_Tight ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) { + setBranch(tree,"JvtPass_FixedEffPt", m_JvtPass_FixedEffPt ); + if ( m_mc ) { + setBranch >(tree,"JvtEff_SF_FixedEffPt", m_JvtEff_SF_FixedEffPt ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) { + setBranch(tree,"JvtPass_TightFwd", m_JvtPass_TightFwd ); + if ( m_mc ) { + setBranch >(tree,"JvtEff_SF_TightFwd", m_JvtEff_SF_TightFwd ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) { + setBranch(tree,"fJvtPass_Loose", m_fJvtPass_Loose ); + if ( m_mc ) { + setBranch >(tree,"fJvtEff_SF_Loose", m_fJvtEff_SF_Loose ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) { + setBranch(tree,"fJvtPass_Medium", m_fJvtPass_Medium ); + if ( m_mc ) { + setBranch >(tree,"fJvtEff_SF_Medium", m_fJvtEff_SF_Medium ); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) { + setBranch(tree,"fJvtPass_Tight", m_fJvtPass_Tight ); + if ( m_mc ) { + setBranch >(tree,"fJvtEff_SF_Tight", m_fJvtEff_SF_Tight ); + } + } + + + if ( m_infoSwitch.m_chargedPFOPV ) { + setBranch(tree,"SumPtChargedPFOPt500PV", m_SumPtChargedPFOPt500PV); + setBranch(tree,"fCharged", m_fCharged); + } + + + if ( m_infoSwitch.m_allTrack ) { + // if want to apply the selection of the PV then need to setup track selection tool + // this applies the JVF/JVT selection cuts + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JvtManualRecalculation + if( m_infoSwitch.m_allTrackPVSel ) { + m_trkSelTool = new InDet::InDetTrackSelectionTool( "JetTrackSelection"); + m_trkSelTool->setProperty( "CutLevel", "Loose"); + m_trkSelTool->initialize(); + // to do this need to have AddJets return a status code + //ANA_CHECK( m_trkSelTool->initialize()); + } + setBranch(tree,"GhostTrackCount", m_GhostTrackCount ); + setBranch(tree,"GhostTrackPt", m_GhostTrackPt ); + setBranch >(tree,"GhostTrack_pt", m_GhostTrack_pt ); + setBranch >(tree,"GhostTrack_qOverP",m_GhostTrack_qOverP); + setBranch >(tree,"GhostTrack_eta", m_GhostTrack_eta ); + setBranch >(tree,"GhostTrack_phi", m_GhostTrack_phi ); + setBranch >(tree,"GhostTrack_e", m_GhostTrack_e ); + setBranch >(tree,"GhostTrack_d0", m_GhostTrack_d0 ); + setBranch >(tree,"GhostTrack_z0", m_GhostTrack_z0 ); + if ( m_infoSwitch.m_allTrackDetail ) { + setBranch >(tree,"GhostTrack_nPixelHits", m_GhostTrack_nPixelHits); + setBranch >(tree,"GhostTrack_nSCTHits", m_GhostTrack_nSCTHits); + setBranch >(tree,"GhostTrack_nTRTHits", m_GhostTrack_nTRTHits); + setBranch >(tree,"GhostTrack_nPixelSharedHits", m_GhostTrack_nPixelSharedHits); + setBranch >(tree,"GhostTrack_nPixelSplitHits", m_GhostTrack_nPixelSplitHits); + setBranch >(tree,"m_GhostTrack_nInnermostPixelLayerHits", m_GhostTrack_nInnermostPixelLayerHits); + setBranch >(tree,"m_GhostTrack_nInnermostPixelLayerSharedHits", m_GhostTrack_nInnermostPixelLayerSharedHits); + setBranch >(tree,"m_GhostTrack_nInnermostPixelLayerSplitHits", m_GhostTrack_nInnermostPixelLayerSplitHits); + setBranch >(tree,"m_GhostTrack_nNextToInnermostPixelLayerHits", m_GhostTrack_nNextToInnermostPixelLayerHits); + setBranch >(tree,"m_GhostTrack_nNextToInnermostPixelLayerSharedHits", m_GhostTrack_nNextToInnermostPixelLayerSharedHits); + setBranch >(tree,"m_GhostTrack_nNextToInnermostPixelLayerSplitHits", m_GhostTrack_nNextToInnermostPixelLayerSplitHits); + } + } + + if ( m_infoSwitch.m_constituent ) { + setBranch(tree,"numConstituents", m_numConstituents); + } + + if ( m_infoSwitch.m_constituentAll ) { + setBranch >(tree,"constituentWeights", m_constituentWeights); + setBranch >(tree,"constituent_pt", m_constituent_pt ); + setBranch >(tree,"constituent_eta", m_constituent_eta ); + setBranch >(tree,"constituent_phi", m_constituent_phi ); + setBranch >(tree,"constituent_e", m_constituent_e ); + } + + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) { + setBranch(tree,"HadronConeExclTruthLabelID", m_HadronConeExclTruthLabelID); + setBranch(tree,"HadronConeExclExtendedTruthLabelID", m_HadronConeExclExtendedTruthLabelID); + } + + if( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) { + + setBranch(tree,"DL1r", m_DL1r); + setBranch(tree,"DL1r_pu", m_DL1r_pu); + setBranch(tree,"DL1r_pc", m_DL1r_pc); + setBranch(tree,"DL1r_pb", m_DL1r_pb); + setBranch(tree,"DL1dv00", m_DL1dv00); + setBranch(tree,"DL1dv00_pu", m_DL1dv00_pu); + setBranch(tree,"DL1dv00_pc", m_DL1dv00_pc); + setBranch(tree,"DL1dv00_pb", m_DL1dv00_pb); + setBranch(tree,"DL1dv01", m_DL1dv01); + setBranch(tree,"DL1dv01_pu", m_DL1dv01_pu); + setBranch(tree,"DL1dv01_pc", m_DL1dv01_pc); + setBranch(tree,"DL1dv01_pb", m_DL1dv01_pb); + setBranch(tree,"GN1", m_GN1); + setBranch(tree,"GN1_pu", m_GN1_pu); + setBranch(tree,"GN1_pc", m_GN1_pc); + setBranch(tree,"GN1_pb", m_GN1_pb); + setBranch(tree,"GN2v00LegacyWP", m_GN2v00LegacyWP); + setBranch(tree,"GN2v00LegacyWP_pu", m_GN2v00LegacyWP_pu); + setBranch(tree,"GN2v00LegacyWP_pc", m_GN2v00LegacyWP_pc); + setBranch(tree,"GN2v00LegacyWP_pb", m_GN2v00LegacyWP_pb); + setBranch(tree,"GN2v00NewAliasWP", m_GN2v00NewAliasWP); + setBranch(tree,"GN2v00NewAliasWP_pu", m_GN2v00NewAliasWP_pu); + setBranch(tree,"GN2v00NewAliasWP_pc", m_GN2v00NewAliasWP_pc); + setBranch(tree,"GN2v00NewAliasWP_pb", m_GN2v00NewAliasWP_pb); + setBranch(tree,"GN2v01", m_GN2v01); + setBranch(tree,"GN2v01_pu", m_GN2v01_pu); + setBranch(tree,"GN2v01_pc", m_GN2v01_pc); + setBranch(tree,"GN2v01_pb", m_GN2v01_pb); + setBranch(tree,"GN2v01_ptau", m_GN2v01_ptau); + + if( m_infoSwitch.m_jetFitterDetails){ + + setBranch(tree, "JetFitter_nVTX" , m_JetFitter_nVTX ); + setBranch(tree, "JetFitter_nSingleTracks" , m_JetFitter_nSingleTracks ); + setBranch(tree, "JetFitter_nTracksAtVtx" , m_JetFitter_nTracksAtVtx ); + setBranch(tree, "JetFitter_mass" , m_JetFitter_mass ); + setBranch(tree, "JetFitter_energyFraction", m_JetFitter_energyFraction ); + setBranch(tree, "JetFitter_significance3d", m_JetFitter_significance3d ); + setBranch(tree, "JetFitter_deltaeta" , m_JetFitter_deltaeta ); + setBranch(tree, "JetFitter_deltaphi" , m_JetFitter_deltaphi ); + setBranch(tree, "JetFitter_N2Tpair" , m_JetFitter_N2Tpar ); + //setBranch(tree, "JetFitter_pb" , m_JetFitter_pb ); + //setBranch(tree, "JetFitter_pc" , m_JetFitter_pc ); + //setBranch(tree, "JetFitter_pu" , m_JetFitter_pu ); + + } + + if( m_infoSwitch.m_svDetails){ + setBranch(tree, "SV0", m_SV0); + setBranch(tree, "sv0_NGTinSvx", m_sv0_NGTinSvx ); + setBranch(tree, "sv0_N2Tpair", m_sv0_N2Tpair ); + setBranch(tree, "sv0_massvx", m_sv0_massvx ); + setBranch(tree, "sv0_efracsvx", m_sv0_efracsvx ); + setBranch(tree, "sv0_normdist", m_sv0_normdist ); + + setBranch(tree, "SV1", m_SV1); + setBranch(tree, "SV1IP3D", m_SV1IP3D); + setBranch(tree, "COMBx", m_COMBx); + setBranch(tree, "sv1_pu", m_sv1_pu ); + setBranch(tree, "sv1_pb", m_sv1_pb ); + setBranch(tree, "sv1_pc", m_sv1_pc ); + setBranch(tree, "sv1_c", m_sv1_c ); + setBranch(tree, "sv1_cu", m_sv1_cu ); + setBranch(tree, "sv1_NGTinSvx", m_sv1_NGTinSvx ); + setBranch(tree, "sv1_N2Tpair", m_sv1_N2Tpair ); + setBranch(tree, "sv1_massvx", m_sv1_massvx ); + setBranch(tree, "sv1_efracsvx", m_sv1_efracsvx ); + setBranch(tree, "sv1_normdist", m_sv1_normdist ); + setBranch(tree, "sv1_Lxy", m_sv1_Lxy ); + setBranch(tree, "sv1_sig3d", m_sv1_sig3d ); + setBranch(tree, "sv1_L3d", m_sv1_L3d ); + setBranch(tree, "sv1_distmatlay", m_sv1_distmatlay); + setBranch(tree, "sv1_dR", m_sv1_dR ); + } + + if( m_infoSwitch.m_ipDetails){ + + setBranch(tree, "IP2D_pu", m_IP2D_pu ); + setBranch(tree, "IP2D_pb", m_IP2D_pb ); + setBranch(tree, "IP2D_pc", m_IP2D_pc ); + setBranch(tree, "IP2D", m_IP2D ); + setBranch(tree, "IP2D_c", m_IP2D_c ); + setBranch(tree, "IP2D_cu", m_IP2D_cu ); + setBranch(tree, "nIP2DTracks" , m_nIP2DTracks ); + setBranch >(tree, "IP2D_gradeOfTracks" , m_IP2D_gradeOfTracks ); + setBranch >(tree, "IP2D_flagFromV0ofTracks" , m_IP2D_flagFromV0ofTracks ); + setBranch >(tree, "IP2D_valD0wrtPVofTracks" , m_IP2D_valD0wrtPVofTracks ); + setBranch >(tree, "IP2D_sigD0wrtPVofTracks" , m_IP2D_sigD0wrtPVofTracks ); + setBranch >(tree, "IP2D_weightBofTracks" , m_IP2D_weightBofTracks ); + setBranch >(tree, "IP2D_weightCofTracks" , m_IP2D_weightCofTracks ); + setBranch >(tree, "IP2D_weightUofTracks" , m_IP2D_weightUofTracks ); + + setBranch(tree, "IP3D", m_IP3D); + setBranch(tree, "IP3D_pu", m_IP3D_pu ); + setBranch(tree, "IP3D_pb", m_IP3D_pb ); + setBranch(tree, "IP3D_pc", m_IP3D_pc ); + setBranch(tree, "IP3D", m_IP3D ); + setBranch(tree, "IP3D_c", m_IP3D_c ); + setBranch(tree, "IP3D_cu", m_IP3D_cu ); + setBranch(tree, "nIP3DTracks" , m_nIP3DTracks ); + setBranch >(tree, "IP3D_gradeOfTracks" , m_IP3D_gradeOfTracks ); + setBranch >(tree, "IP3D_flagFromV0ofTracks" , m_IP3D_flagFromV0ofTracks ); + setBranch >(tree, "IP3D_valD0wrtPVofTracks" , m_IP3D_valD0wrtPVofTracks ); + setBranch >(tree, "IP3D_sigD0wrtPVofTracks" , m_IP3D_sigD0wrtPVofTracks ); + setBranch >(tree, "IP3D_valZ0wrtPVofTracks" , m_IP3D_valZ0wrtPVofTracks ); + setBranch >(tree, "IP3D_sigZ0wrtPVofTracks" , m_IP3D_sigZ0wrtPVofTracks ); + setBranch >(tree, "IP3D_weightBofTracks" , m_IP3D_weightBofTracks ); + setBranch >(tree, "IP3D_weightCofTracks" , m_IP3D_weightCofTracks ); + setBranch >(tree, "IP3D_weightUofTracks" , m_IP3D_weightUofTracks ); + + } + + if( m_infoSwitch.m_JVC ) { + setBranch(tree,"JetVertexCharge_discriminant", m_JetVertexCharge_discriminant); + } + } + + if( m_infoSwitch.m_flavorTagHLT ) { + + setBranch(tree,"vtxOnlineValid",m_vtxOnlineValid); + setBranch(tree,"vtxHadDummy" ,m_vtxHadDummy ); + setBranch(tree,"bs_online_vx" ,m_bs_online_vx ); + setBranch(tree,"bs_online_vy" ,m_bs_online_vy ); + setBranch(tree,"bs_online_vz" ,m_bs_online_vz ); + + setBranch(tree,"vtx_offline_x0" ,m_vtx_offline_x0 ); + setBranch(tree,"vtx_offline_y0" ,m_vtx_offline_y0 ); + setBranch(tree,"vtx_offline_z0" ,m_vtx_offline_z0 ); + + setBranch(tree,"vtx_online_x0" ,m_vtx_online_x0 ); + setBranch(tree,"vtx_online_y0" ,m_vtx_online_y0 ); + setBranch(tree,"vtx_online_z0" ,m_vtx_online_z0 ); + + setBranch(tree,"vtx_online_bkg_x0" ,m_vtx_online_bkg_x0 ); + setBranch(tree,"vtx_online_bkg_y0" ,m_vtx_online_bkg_y0 ); + setBranch(tree,"vtx_online_bkg_z0" ,m_vtx_online_bkg_z0 ); + + } + + if( m_infoSwitch.m_flavorTagTLA ) { + setBranch(tree,"fastDIPS", m_fastDIPS); + setBranch(tree,"fastDIPS_pu", m_fastDIPS_pu); + setBranch(tree,"fastDIPS_pc", m_fastDIPS_pc); + setBranch(tree,"fastDIPS_pb", m_fastDIPS_pb); + } + + if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty() ) { + for(auto btag : m_btags) + btag->setBranch(tree, m_name); + } + + if( m_infoSwitch.m_area ) { + setBranch(tree,"GhostArea", m_GhostArea); + setBranch(tree,"ActiveArea", m_ActiveArea); + setBranch(tree,"VoronoiArea", m_VoronoiArea); + setBranch(tree,"ActiveArea4vec_pt", m_ActiveArea4vec_pt); + setBranch(tree,"ActiveArea4vec_eta", m_ActiveArea4vec_eta); + setBranch(tree,"ActiveArea4vec_phi", m_ActiveArea4vec_phi); + setBranch(tree,"ActiveArea4vec_m", m_ActiveArea4vec_m); + } + + if ( m_infoSwitch.m_truth && m_mc ) { + setBranch(tree,"ConeTruthLabelID", m_ConeTruthLabelID ); + setBranch(tree,"TruthCount", m_TruthCount ); + setBranch(tree,"TruthLabelDeltaR_B", m_TruthLabelDeltaR_B ); + setBranch(tree,"TruthLabelDeltaR_C", m_TruthLabelDeltaR_C ); + setBranch(tree,"TruthLabelDeltaR_T", m_TruthLabelDeltaR_T ); + setBranch(tree,"PartonTruthLabelID", m_PartonTruthLabelID ); + setBranch(tree,"GhostTruthAssociationFraction", m_GhostTruthAssociationFraction); + setBranch(tree,"truth_E", m_truth_E); + setBranch(tree,"truth_pt", m_truth_pt); + setBranch(tree,"truth_phi", m_truth_phi); + setBranch(tree,"truth_eta", m_truth_eta); + } + + + if ( m_infoSwitch.m_truthDetails ) { + setBranch(tree,"GhostBHadronsFinalCount", m_GhostBHadronsFinalCount ); + setBranch(tree,"GhostBHadronsInitialCount", m_GhostBHadronsInitialCount ); + setBranch(tree,"GhostBQuarksFinalCount", m_GhostBQuarksFinalCount ); + setBranch(tree,"GhostBHadronsFinalPt", m_GhostBHadronsFinalPt ); + setBranch(tree,"GhostBHadronsInitialPt", m_GhostBHadronsInitialPt ); + setBranch(tree,"GhostBQuarksFinalPt", m_GhostBQuarksFinalPt ); + + setBranch(tree,"GhostCHadronsFinalCount" , m_GhostCHadronsFinalCount ); + setBranch(tree,"GhostCHadronsInitialCount", m_GhostCHadronsInitialCount); + setBranch(tree,"GhostCQuarksFinalCount" , m_GhostCQuarksFinalCount ); + setBranch(tree,"GhostCHadronsFinalPt" , m_GhostCHadronsFinalPt ); + setBranch(tree,"GhostCHadronsInitialPt" , m_GhostCHadronsInitialPt ); + setBranch(tree,"GhostCQuarksFinalPt" , m_GhostCQuarksFinalPt ); + + setBranch(tree,"GhostTausFinalCount", m_GhostTausFinalCount ); + setBranch(tree,"GhostTausFinalPt" , m_GhostTausFinalPt ); + + setBranch(tree,"truth_pdgId" , m_truth_pdgId); + setBranch(tree,"truth_partonPt", m_truth_partonPt); + setBranch(tree,"truth_partonDR", m_truth_partonDR); + } + + if ( m_infoSwitch.m_charge ) { + setBranch(tree,"charge", m_charge); + } + + if ( m_infoSwitch.m_passSel ) { + setBranch(tree,"passSel", m_passSel); + } + + if ( m_infoSwitch.m_passOR ) { + setBranch(tree,"passOR", m_passOR); + } + + return; + } + + + void JetContainer::clear() + { + + ParticleContainer::clear(); + + // rapidity + if( m_infoSwitch.m_rapidity ) { + m_rapidity->clear(); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched->clear(); + m_isTrigMatchedToChain->clear(); + m_listTrigChains->clear(); + } + + // clean + if( m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) { + if(m_infoSwitch.m_clean){ + m_Timing ->clear(); + m_LArQuality ->clear(); + m_HECQuality ->clear(); + m_NegativeE ->clear(); + m_AverageLArQF ->clear(); + m_BchCorrCell ->clear(); + m_N90Constituents ->clear(); + m_LArBadHVEnergyFrac ->clear(); + m_LArBadHVNCell ->clear(); + m_ChargedFraction ->clear(); + m_OotFracClusters5 ->clear(); + m_OotFracClusters10 ->clear(); + m_LeadingClusterPt ->clear(); + m_LeadingClusterSecondLambda->clear(); + m_LeadingClusterCenterLambda->clear(); + m_LeadingClusterSecondR ->clear(); + if(m_infoSwitch.m_cleanTrig) { + m_clean_passLooseBadTriggerUgly->clear(); + } + else { + m_clean_passTightBadUgly ->clear(); + m_clean_passLooseBadUgly ->clear(); + } + } + if(m_infoSwitch.m_cleanTrig) { + m_clean_passLooseBadTrigger ->clear(); + } + else { + m_clean_passLooseBad ->clear(); + m_clean_passTightBad ->clear(); + } + if(m_infoSwitch.m_cleanLLP) { + m_clean_passLooseBadLLP ->clear(); + } + } + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + m_Timing->clear(); + } + + + // energy + if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) { + if ( m_infoSwitch.m_energy ){ + m_HECFrac ->clear(); + m_CentroidR ->clear(); + m_LowEtConstituentsFrac ->clear(); + } + m_EMFrac ->clear(); + m_FracSamplingMax ->clear(); + m_FracSamplingMaxIndex ->clear(); + m_GhostMuonSegmentCount ->clear(); + m_Width ->clear(); + } + + // each step of the calibration sequence + if ( m_infoSwitch.m_scales ) { + m_emScalePt ->clear(); + m_constScalePt ->clear(); + m_pileupScalePt ->clear(); + m_originConstitScalePt ->clear(); + m_etaJESScalePt ->clear(); + m_gscScalePt ->clear(); + m_jmsScalePt ->clear(); + m_insituScalePt ->clear(); + + m_emScaleM ->clear(); + m_constScaleM ->clear(); + m_pileupScaleM ->clear(); + m_originConstitScaleM ->clear(); + m_etaJESScaleM ->clear(); + m_gscScaleM ->clear(); + m_jmsScaleM ->clear(); + m_insituScaleM ->clear(); + } + + // eta at constScale + if ( m_infoSwitch.m_constscaleEta ) { + m_constScaleEta ->clear(); + } + + // detector eta + if ( m_infoSwitch.m_detectorEta ) { + m_detectorEta ->clear(); + } + + // layer + if ( m_infoSwitch.m_layer ) { + m_EnergyPerSampling->clear(); + } + + // trackAll + if ( m_infoSwitch.m_trackAll ) { + m_NumTrkPt1000 ->clear(); + m_SumPtTrkPt1000 ->clear(); + m_TrackWidthPt1000 ->clear(); + m_NumTrkPt500 ->clear(); + m_SumPtTrkPt500 ->clear(); + m_TrackWidthPt500 ->clear(); + m_JVF ->clear(); + } + + // trackPV + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) { + if ( m_infoSwitch.m_trackPV ) { + m_NumTrkPt1000PV ->clear(); + m_SumPtTrkPt1000PV ->clear(); + m_TrackWidthPt1000PV->clear(); + m_NumTrkPt500PV ->clear(); + m_SumPtTrkPt500PV ->clear(); + m_TrackWidthPt500PV ->clear(); + m_JVFPV ->clear(); + m_JvtJvfcorr ->clear(); + m_JvtRpt ->clear(); + } + m_Jvt ->clear(); + } + + if (m_infoSwitch.m_fJvt){ + m_fJvt->clear(); + } + + if (m_infoSwitch.m_NNJvt){ + m_NNJvt->clear(); + m_NNJvtPass->clear(); + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) { + m_JvtPass_Loose ->clear(); + if ( m_mc ) { + m_JvtEff_SF_Loose ->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) { + m_JvtPass_Medium ->clear(); + if ( m_mc ) { + m_JvtEff_SF_Medium->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) { + m_JvtPass_Tight ->clear(); + if ( m_mc ) { + m_JvtEff_SF_Tight ->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) { + m_JvtPass_FixedEffPt ->clear(); + if ( m_mc ) { + m_JvtEff_SF_FixedEffPt->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) { + m_JvtPass_TightFwd ->clear(); + if ( m_mc ) { + m_JvtEff_SF_TightFwd ->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) { + m_fJvtPass_Loose ->clear(); + if ( m_mc ) { + m_fJvtEff_SF_Loose->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) { + m_fJvtPass_Medium ->clear(); + if ( m_mc ) { + m_fJvtEff_SF_Medium->clear(); + } + } + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) { + m_fJvtPass_Tight ->clear(); + if ( m_mc ) { + m_fJvtEff_SF_Tight ->clear(); + } + } + + // chargedPFOPV + if ( m_infoSwitch.m_chargedPFOPV ) { + m_SumPtChargedPFOPt500PV->clear(); + m_fCharged->clear(); + + } + + if ( m_infoSwitch.m_allTrack ) { + m_GhostTrackCount ->clear(); + m_GhostTrackPt ->clear(); + m_GhostTrack_pt ->clear(); + m_GhostTrack_qOverP ->clear(); + m_GhostTrack_eta ->clear(); + m_GhostTrack_phi ->clear(); + m_GhostTrack_e ->clear(); + m_GhostTrack_d0 ->clear(); + m_GhostTrack_z0 ->clear(); + + if ( m_infoSwitch.m_allTrackDetail ) { + m_GhostTrack_nPixelHits ->clear(); + m_GhostTrack_nSCTHits ->clear(); + m_GhostTrack_nTRTHits ->clear(); + m_GhostTrack_nPixelSharedHits ->clear(); + m_GhostTrack_nPixelSplitHits ->clear(); + m_GhostTrack_nInnermostPixelLayerHits ->clear(); + m_GhostTrack_nInnermostPixelLayerSharedHits ->clear(); + m_GhostTrack_nInnermostPixelLayerSplitHits ->clear(); + m_GhostTrack_nNextToInnermostPixelLayerHits ->clear(); + m_GhostTrack_nNextToInnermostPixelLayerSharedHits ->clear(); + m_GhostTrack_nNextToInnermostPixelLayerSplitHits ->clear(); + } + } + + if( m_infoSwitch.m_constituent ) { + m_numConstituents->clear(); + } + + if( m_infoSwitch.m_constituentAll ) { + m_constituentWeights ->clear(); + m_constituent_pt ->clear(); + m_constituent_eta ->clear(); + m_constituent_phi ->clear(); + m_constituent_e ->clear(); + } + + if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) { + m_HadronConeExclTruthLabelID ->clear(); + m_HadronConeExclExtendedTruthLabelID->clear(); + } + + // flavor tag + if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) { + + m_DL1r ->clear(); + m_DL1r_pu ->clear(); + m_DL1r_pc ->clear(); + m_DL1r_pb ->clear(); + m_DL1dv00 ->clear(); + m_DL1dv00_pu ->clear(); + m_DL1dv00_pc ->clear(); + m_DL1dv00_pb ->clear(); + m_DL1dv01 ->clear(); + m_DL1dv01_pu ->clear(); + m_DL1dv01_pc ->clear(); + m_DL1dv01_pb ->clear(); + m_GN1 ->clear(); + m_GN1_pu ->clear(); + m_GN1_pc ->clear(); + m_GN1_pb ->clear(); + m_GN2v00LegacyWP ->clear(); + m_GN2v00LegacyWP_pu ->clear(); + m_GN2v00LegacyWP_pc ->clear(); + m_GN2v00LegacyWP_pb ->clear(); + m_GN2v00NewAliasWP ->clear(); + m_GN2v00NewAliasWP_pu ->clear(); + m_GN2v00NewAliasWP_pc ->clear(); + m_GN2v00NewAliasWP_pb ->clear(); + m_GN2v01 ->clear(); + m_GN2v01_pu ->clear(); + m_GN2v01_pc ->clear(); + m_GN2v01_pb ->clear(); + m_GN2v01_ptau ->clear(); + + if( m_infoSwitch.m_jetFitterDetails){ + m_JetFitter_nVTX ->clear(); + m_JetFitter_nSingleTracks ->clear(); + m_JetFitter_nTracksAtVtx ->clear(); + m_JetFitter_mass ->clear(); + m_JetFitter_energyFraction ->clear(); + m_JetFitter_significance3d ->clear(); + m_JetFitter_deltaeta ->clear(); + m_JetFitter_deltaphi ->clear(); + m_JetFitter_N2Tpar ->clear(); + } + + if( m_infoSwitch.m_svDetails){ + m_SV0 ->clear(); + m_sv0_NGTinSvx ->clear(); + m_sv0_N2Tpair ->clear(); + m_sv0_massvx ->clear(); + m_sv0_efracsvx ->clear(); + m_sv0_normdist ->clear(); + + m_SV1 ->clear(); + m_SV1IP3D ->clear(); + m_COMBx ->clear(); + m_sv1_pu ->clear(); + m_sv1_pb ->clear(); + m_sv1_pc ->clear(); + m_sv1_c ->clear(); + m_sv1_cu ->clear(); + m_sv1_NGTinSvx ->clear(); + m_sv1_N2Tpair ->clear(); + m_sv1_massvx ->clear(); + m_sv1_efracsvx ->clear(); + m_sv1_normdist ->clear(); + m_sv1_Lxy ->clear(); + m_sv1_sig3d ->clear(); + m_sv1_L3d ->clear(); + m_sv1_distmatlay ->clear(); + m_sv1_dR ->clear(); + } + + if( m_infoSwitch.m_ipDetails){ + m_IP2D_pu ->clear(); + m_IP2D_pb ->clear(); + m_IP2D_pc ->clear(); + m_IP2D ->clear(); + m_IP2D_c ->clear(); + m_IP2D_cu ->clear(); + m_nIP2DTracks ->clear(); + + m_IP2D_gradeOfTracks ->clear(); + m_IP2D_flagFromV0ofTracks ->clear(); + m_IP2D_valD0wrtPVofTracks ->clear(); + m_IP2D_sigD0wrtPVofTracks ->clear(); + m_IP2D_weightBofTracks ->clear(); + m_IP2D_weightCofTracks ->clear(); + m_IP2D_weightUofTracks ->clear(); + + m_IP3D ->clear(); + m_IP3D_pu ->clear(); + m_IP3D_pb ->clear(); + m_IP3D_pc ->clear(); + m_IP3D ->clear(); + m_IP3D_c ->clear(); + m_IP3D_cu ->clear(); + m_nIP3DTracks ->clear(); + m_IP3D_gradeOfTracks ->clear(); + m_IP3D_flagFromV0ofTracks ->clear(); + m_IP3D_valD0wrtPVofTracks ->clear(); + m_IP3D_sigD0wrtPVofTracks ->clear(); + m_IP3D_valZ0wrtPVofTracks ->clear(); + m_IP3D_sigZ0wrtPVofTracks ->clear(); + m_IP3D_weightBofTracks ->clear(); + m_IP3D_weightCofTracks ->clear(); + m_IP3D_weightUofTracks ->clear(); + } + + if( m_infoSwitch.m_JVC ){ + m_JetVertexCharge_discriminant->clear(); + } + } + + if ( m_infoSwitch.m_flavorTagHLT ) { + m_vtxOnlineValid->clear(); + m_vtxHadDummy->clear(); + m_bs_online_vx->clear(); + m_bs_online_vy->clear(); + m_bs_online_vz->clear(); + + m_vtx_offline_x0->clear(); + m_vtx_offline_y0->clear(); + m_vtx_offline_z0->clear(); + + m_vtx_online_x0->clear(); + m_vtx_online_y0->clear(); + m_vtx_online_z0->clear(); + + m_vtx_online_bkg_x0->clear(); + m_vtx_online_bkg_y0->clear(); + m_vtx_online_bkg_z0->clear(); + + } + + if ( m_infoSwitch.m_flavorTagTLA ) { + m_fastDIPS ->clear(); + m_fastDIPS_pu ->clear(); + m_fastDIPS_pc ->clear(); + m_fastDIPS_pb ->clear(); + } + + if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty()) { // just clear them all.... + for(auto btag : m_btags) + btag->clear(); + } + + if ( m_infoSwitch.m_area ) { + m_GhostArea ->clear(); + m_ActiveArea ->clear(); + m_VoronoiArea ->clear(); + m_ActiveArea4vec_pt ->clear(); + m_ActiveArea4vec_eta ->clear(); + m_ActiveArea4vec_phi ->clear(); + m_ActiveArea4vec_m ->clear(); + } + + // truth + if ( m_infoSwitch.m_truth && m_mc ) { + m_ConeTruthLabelID ->clear(); + m_TruthCount ->clear(); + m_TruthLabelDeltaR_B->clear(); + m_TruthLabelDeltaR_C->clear(); + m_TruthLabelDeltaR_T->clear(); + m_PartonTruthLabelID->clear(); + m_GhostTruthAssociationFraction->clear(); + m_truth_E ->clear(); + m_truth_pt ->clear(); + m_truth_phi->clear(); + m_truth_eta->clear(); + } + + // truth_detail + if ( m_infoSwitch.m_truthDetails ) { + m_GhostBHadronsFinalCount ->clear(); + m_GhostBHadronsInitialCount ->clear(); + m_GhostBQuarksFinalCount ->clear(); + m_GhostBHadronsFinalPt ->clear(); + m_GhostBHadronsInitialPt ->clear(); + m_GhostBQuarksFinalPt ->clear(); + + m_GhostCHadronsFinalCount ->clear(); + m_GhostCHadronsInitialCount ->clear(); + m_GhostCQuarksFinalCount ->clear(); + m_GhostCHadronsFinalPt ->clear(); + m_GhostCHadronsInitialPt ->clear(); + m_GhostCQuarksFinalPt ->clear(); + + m_GhostTausFinalCount ->clear(); + m_GhostTausFinalPt ->clear(); + + m_truth_pdgId ->clear(); + m_truth_partonPt ->clear(); + m_truth_partonDR ->clear(); + + } + + if( m_infoSwitch.m_charge ) { + m_charge->clear(); + } + + if( m_infoSwitch.m_passSel ) { + m_passSel->clear(); + } + + if( m_infoSwitch.m_passOR ) { + m_passOR->clear(); + } + + return; + } + + void JetContainer::FillJet( const xAOD::Jet* jet, const xAOD::Vertex* pv, int pvLocation ){ + return FillJet(static_cast(jet), pv, pvLocation); + } + + void JetContainer::FillJet( const xAOD::IParticle* particle, const xAOD::Vertex* pv, int pvLocation ){ + if(m_debug) std::cout << "In JetContainer::FillJet " << std::endl; + + ParticleContainer::FillParticle(particle); + + const xAOD::Jet* jet=dynamic_cast(particle); + + if( m_infoSwitch.m_rapidity ){ + m_rapidity->push_back( jet->rapidity() ); + } + + if ( m_infoSwitch.m_trigger ) { + + // retrieve map w/ + // + static SG::AuxElement::Accessor< std::map > isTrigMatchedMapJetAcc("isTrigMatchedMapJet"); + + std::vector matches; + + if ( isTrigMatchedMapJetAcc.isAvailable( *jet ) ) { + // loop over map and fill branches + // + for ( auto const &it : (isTrigMatchedMapJetAcc( *jet )) ) { + matches.push_back( static_cast(it.second) ); + m_listTrigChains->push_back( it.first ); + } + } else { + matches.push_back( -1 ); + m_listTrigChains->push_back("NONE"); + } + + m_isTrigMatchedToChain->push_back(matches); + + // if at least one match among the chains is found, say this jet is trigger matched + if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); } + else { m_isTrigMatched->push_back(0); } + + } + + if (m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) { + + if(m_infoSwitch.m_clean){ + + + static SG::AuxElement::ConstAccessor jetTime ("Timing"); + safeFill(jet, jetTime, m_Timing, -999); + + static SG::AuxElement::ConstAccessor LArQuality ("LArQuality"); + safeFill(jet, LArQuality, m_LArQuality, -999); + + static SG::AuxElement::ConstAccessor hecq ("HECQuality"); + safeFill(jet, hecq, m_HECQuality, -999); + + static SG::AuxElement::ConstAccessor negE ("NegativeE"); + safeFill(jet, negE, m_NegativeE, -999, m_units); + + static SG::AuxElement::ConstAccessor avLArQF ("AverageLArQF"); + safeFill(jet, avLArQF, m_AverageLArQF, -999); + + static SG::AuxElement::ConstAccessor bchCorrCell ("BchCorrCell"); + safeFill(jet, bchCorrCell, m_BchCorrCell, -999); + + static SG::AuxElement::ConstAccessor N90Const ("N90Constituents"); + safeFill(jet, N90Const, m_N90Constituents, -999); + + static SG::AuxElement::ConstAccessor LArBadHVEFrac ("LArBadHVEnergyFrac"); + safeFill(jet, LArBadHVEFrac, m_LArBadHVEnergyFrac, -999); + + static SG::AuxElement::ConstAccessor LArBadHVNCell ("LArBadHVNCell"); + safeFill(jet, LArBadHVNCell, m_LArBadHVNCell, -999); + + static SG::AuxElement::ConstAccessor OotFracClus5 ("OotFracClusters5"); + safeFill(jet, OotFracClus5, m_OotFracClusters5, -999); + + static SG::AuxElement::ConstAccessor OotFracClus10 ("OotFracClusters10"); + safeFill(jet, OotFracClus10, m_OotFracClusters10, -999); + + static SG::AuxElement::ConstAccessor leadClusPt ("LeadingClusterPt"); + safeFill(jet, leadClusPt, m_LeadingClusterPt, -999); + + static SG::AuxElement::ConstAccessor leadClusSecondLambda ("LeadingClusterSecondLambda"); + safeFill(jet, leadClusSecondLambda, m_LeadingClusterSecondLambda, -999); + + static SG::AuxElement::ConstAccessor leadClusCenterLambda ("LeadingClusterCenterLambda"); + safeFill(jet, leadClusCenterLambda, m_LeadingClusterCenterLambda, -999); + + static SG::AuxElement::ConstAccessor leadClusSecondR ("LeadingClusterSecondR"); + safeFill(jet, leadClusSecondR, m_LeadingClusterSecondR, -999); + + if(!m_infoSwitch.m_cleanTrig) { + static SG::AuxElement::ConstAccessor clean_passLooseBadUgly ("clean_passLooseBadUgly"); + safeFill(jet, clean_passLooseBadUgly, m_clean_passLooseBadUgly, -999); + + static SG::AuxElement::ConstAccessor clean_passTightBadUgly ("clean_passTightBadUgly"); + safeFill(jet, clean_passTightBadUgly, m_clean_passTightBadUgly, -999); + } + else { + static SG::AuxElement::ConstAccessor clean_passLooseBadTriggerUgly ("clean_passLooseBadTriggerUgly"); + safeFill(jet, clean_passLooseBadTriggerUgly, m_clean_passLooseBadTriggerUgly, -999); + } + + } + + if(!m_infoSwitch.m_cleanTrig) { + static SG::AuxElement::ConstAccessor clean_passLooseBad ("clean_passLooseBad"); + safeFill(jet, clean_passLooseBad, m_clean_passLooseBad, -999); + + static SG::AuxElement::ConstAccessor clean_passTightBad ("clean_passTightBad"); + safeFill(jet, clean_passTightBad, m_clean_passTightBad, -999); + } + else { + static SG::AuxElement::ConstAccessor clean_passLooseBadTrigger ("clean_passLooseBadTrigger"); + safeFill(jet, clean_passLooseBadTrigger, m_clean_passLooseBadTrigger, -999); + } + if(m_infoSwitch.m_cleanLLP) { + static SG::AuxElement::ConstAccessor clean_passLooseBadLLP ("clean_passLooseBadLLP"); + safeFill(jet, clean_passLooseBadLLP, m_clean_passLooseBadLLP, -999); + } + + } // clean + if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){ + static SG::AuxElement::ConstAccessor jetTime ("Timing"); + safeFill(jet, jetTime, m_Timing, -999); + } + + + if ( m_infoSwitch.m_energy | m_infoSwitch.m_energyLight ) { + + if ( m_infoSwitch.m_energy ){ + + static SG::AuxElement::ConstAccessor HECf ("HECFrac"); + safeFill(jet, HECf, m_HECFrac, -999); + + static SG::AuxElement::ConstAccessor centroidR ("CentroidR"); + safeFill(jet, centroidR, m_CentroidR, -999); + + static SG::AuxElement::ConstAccessor lowEtFrac ("LowEtConstituentsFrac"); + safeFill(jet, lowEtFrac, m_LowEtConstituentsFrac, -999); + + } + + static SG::AuxElement::ConstAccessor EMf ("EMFrac"); + safeFill(jet, EMf, m_EMFrac, -999); + + static SG::AuxElement::ConstAccessor fracSampMax ("FracSamplingMax"); + safeFill(jet, fracSampMax, m_FracSamplingMax, -999); + + static SG::AuxElement::ConstAccessor fracSampMaxIdx ("FracSamplingMaxIndex"); + safeFill(jet, fracSampMaxIdx, m_FracSamplingMaxIndex, -999); + + static SG::AuxElement::ConstAccessor muonSegCount ("GhostMuonSegmentCount"); + safeFill(jet, muonSegCount, m_GhostMuonSegmentCount, -999); + + static SG::AuxElement::ConstAccessor width ("Width"); + safeFill(jet, width, m_Width, -999); + + } // energy + + // each step of the calibration sequence + if ( m_infoSwitch.m_scales ) { + xAOD::JetFourMom_t fourVec; + bool status(false); + // EM Scale + status = jet->getAttribute( "JetEMScaleMomentum", fourVec ); + if( status ) { + m_emScalePt->push_back( fourVec.Pt() / m_units ); + m_emScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_emScalePt->push_back( -999 ); + m_emScaleM->push_back( -999 ); + } + // Constit Scale + status = jet->getAttribute( "JetConstitScaleMomentum", fourVec ); + if( status ) { + m_constScalePt->push_back( fourVec.Pt() / m_units ); + m_constScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_constScalePt->push_back( -999 ); + m_constScaleM->push_back( -999 ); + } + // Pileup Scale + status = jet->getAttribute( "JetPileupScaleMomentum", fourVec ); + if( status ) { + m_pileupScalePt->push_back( fourVec.Pt() / m_units ); + m_pileupScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_pileupScalePt->push_back( -999 ); + m_pileupScaleM->push_back( -999 ); + } + // OriginConstit Scale + status = jet->getAttribute( "JetOriginConstitScaleMomentum", fourVec ); + if( status ) { + m_originConstitScalePt->push_back( fourVec.Pt() / m_units ); + m_originConstitScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_originConstitScalePt->push_back( -999 ); + m_originConstitScaleM->push_back( -999 ); + } + // EtaJES Scale + status = jet->getAttribute( "JetEtaJESScaleMomentum", fourVec ); + if( status ) { + m_etaJESScalePt->push_back( fourVec.Pt() / m_units ); + m_etaJESScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_etaJESScalePt->push_back( -999 ); + m_etaJESScaleM->push_back( -999 ); + } + // GSC Scale + status = jet->getAttribute( "JetGSCScaleMomentum", fourVec ); + if( status ) { + m_gscScalePt->push_back( fourVec.Pt() / m_units ); + m_gscScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_gscScalePt->push_back( -999 ); + m_gscScaleM->push_back( -999 ); + } + // EtaJES Scale + status = jet->getAttribute( "JetJMSScaleMomentum", fourVec ); + if( status ) { + m_jmsScalePt->push_back( fourVec.Pt() / m_units ); + m_jmsScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_jmsScalePt->push_back( -999 ); + m_jmsScaleM->push_back( -999 ); + } + // only available in data + status = jet->getAttribute( "JetInsituScaleMomentum", fourVec ); + if(status) { + m_insituScalePt->push_back( fourVec.Pt() / m_units ); + m_insituScaleM->push_back( fourVec.M() / m_units ); + } + else { + m_insituScalePt->push_back( -999 ); + m_insituScaleM->push_back( -999 ); + } + } + + if ( m_infoSwitch.m_constscaleEta ) { + xAOD::JetFourMom_t fourVec; + bool status(false); + status = jet->getAttribute( "JetConstitScaleMomentum", fourVec ); + if( status ) { m_constScaleEta->push_back( fourVec.Eta() ); } + else { m_constScaleEta->push_back( -999 ); } + } + + if ( m_infoSwitch.m_detectorEta ) { + static SG::AuxElement::ConstAccessor DetEta ("DetectorEta"); + safeFill(jet, DetEta, m_detectorEta, -999); + } + + if ( m_infoSwitch.m_layer ) { + static SG::AuxElement::ConstAccessor< std::vector > ePerSamp ("EnergyPerSampling"); + if ( ePerSamp.isAvailable( *jet ) ) { + m_EnergyPerSampling->push_back( ePerSamp( *jet ) ); + m_EnergyPerSampling->back(); + std::transform((m_EnergyPerSampling->back()).begin(), + (m_EnergyPerSampling->back()).end(), + (m_EnergyPerSampling->back()).begin(), + std::bind2nd(std::divides(), m_units)); + } else { + // could push back a vector of 24... + // ... waste of space vs prevention of out of range down stream + std::vector junk(1,-999); + m_EnergyPerSampling->push_back( junk ); + } + } + + + if ( m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt || m_infoSwitch.m_clean || m_infoSwitch.m_chargedPFOPV ) { + + // several moments calculated from all verticies + // one accessor for each and just use appropiately in the following + static SG::AuxElement::ConstAccessor< std::vector > nTrk1000("NumTrkPt1000"); + static SG::AuxElement::ConstAccessor< std::vector > sumPt1000("SumPtTrkPt1000"); + static SG::AuxElement::ConstAccessor< std::vector > trkWidth1000("TrackWidthPt1000"); + static SG::AuxElement::ConstAccessor< std::vector > nTrk500 ("NumTrkPt500"); + static SG::AuxElement::ConstAccessor< std::vector > sumPt500 ("SumPtTrkPt500"); + static SG::AuxElement::ConstAccessor< std::vector > trkWidth500 ("TrackWidthPt500"); + static SG::AuxElement::ConstAccessor< std::vector > jvf("JVF"); + + static SG::AuxElement::ConstAccessor< std::vector > sumPtChargedPFO500 ("SumPtChargedPFOPt500"); + + + if ( m_infoSwitch.m_trackAll ) { + + std::vector junkInt(1,-999); + std::vector junkFlt(1,-999); + + if ( nTrk1000.isAvailable( *jet ) ) { + m_NumTrkPt1000->push_back( nTrk1000( *jet ) ); + } else { m_NumTrkPt1000->push_back( junkInt ); } + + if ( sumPt1000.isAvailable( *jet ) ) { + m_SumPtTrkPt1000->push_back( sumPt1000( *jet ) ); + std::transform((m_SumPtTrkPt1000->back()).begin(), + (m_SumPtTrkPt1000->back()).end(), + (m_SumPtTrkPt1000->back()).begin(), + std::bind2nd(std::divides(), m_units)); + } else { m_SumPtTrkPt1000->push_back( junkFlt ); } + + if ( trkWidth1000.isAvailable( *jet ) ) { + m_TrackWidthPt1000->push_back( trkWidth1000( *jet ) ); + } else { m_TrackWidthPt1000->push_back( junkFlt ); } + + if ( nTrk500.isAvailable( *jet ) ) { + m_NumTrkPt500->push_back( nTrk500( *jet ) ); + } else { m_NumTrkPt500->push_back( junkInt ); } + + if ( sumPt500.isAvailable( *jet ) ) { + m_SumPtTrkPt500->push_back( sumPt500( *jet ) ); + std::transform((m_SumPtTrkPt500->back()).begin(), + (m_SumPtTrkPt500->back()).end(), + (m_SumPtTrkPt500->back()).begin(), + std::bind2nd(std::divides(), m_units)); + } else { m_SumPtTrkPt500->push_back( junkFlt ); } + + if ( trkWidth500.isAvailable( *jet ) ) { + m_TrackWidthPt500->push_back( trkWidth500( *jet ) ); + } else { m_TrackWidthPt500->push_back( junkFlt ); } + + if ( jvf.isAvailable( *jet ) ) { + m_JVF->push_back( jvf( *jet ) ); + } else { m_JVF->push_back( junkFlt ); } + + } // trackAll + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_chargedPFOPV || m_infoSwitch.m_jvt ) { + + if ( m_infoSwitch.m_trackPV && pvLocation >= 0 ) { + + if ( nTrk1000.isAvailable( *jet ) ) { + m_NumTrkPt1000PV->push_back( nTrk1000( *jet )[pvLocation] ); + } else { m_NumTrkPt1000PV->push_back( -999 ); } + + if ( sumPt1000.isAvailable( *jet ) ) { + m_SumPtTrkPt1000PV->push_back( sumPt1000( *jet )[pvLocation] / m_units ); + } else { m_SumPtTrkPt1000PV->push_back( -999 ); } + + if ( trkWidth1000.isAvailable( *jet ) ) { + m_TrackWidthPt1000PV->push_back( trkWidth1000( *jet )[pvLocation] ); + } else { m_TrackWidthPt1000PV->push_back( -999 ); } + + if ( nTrk500.isAvailable( *jet ) ) { + m_NumTrkPt500PV->push_back( nTrk500( *jet )[pvLocation] ); + } else { m_NumTrkPt500PV->push_back( -999 ); } + + if ( sumPt500.isAvailable( *jet ) ) { + m_SumPtTrkPt500PV->push_back( sumPt500( *jet )[pvLocation] / m_units ); + } else { m_SumPtTrkPt500PV->push_back( -999 ); } + + if ( trkWidth500.isAvailable( *jet ) ) { + m_TrackWidthPt500PV->push_back( trkWidth500( *jet )[pvLocation] ); + } else { m_TrackWidthPt500PV->push_back( -999 ); } + + if ( jvf.isAvailable( *jet ) ) { + m_JVFPV->push_back( jvf( *jet )[pvLocation] ); + } else { m_JVFPV->push_back( -999 ); } + + static SG::AuxElement::ConstAccessor< float > jvtJvfcorr ("JVFCorr"); + safeFill(jet, jvtJvfcorr, m_JvtJvfcorr, -999); + + static SG::AuxElement::ConstAccessor< float > jvtRpt ("JvtRpt"); + safeFill(jet, jvtRpt, m_JvtRpt, -999); + + } // trackPV + + + if ( m_infoSwitch.m_chargedPFOPV && pvLocation >= 0) { + + if ( sumPtChargedPFO500.isAvailable( *jet ) ) { + m_SumPtChargedPFOPt500PV->push_back( sumPtChargedPFO500( *jet)[pvLocation] ); + + xAOD::JetFourMom_t jetconstitP4 = jet->jetP4("JetConstitScaleMomentum"); + if (jetconstitP4.Pt()==0.0) + { + m_fCharged->push_back(-999); + }else + { + m_fCharged->push_back( sumPtChargedPFO500( *jet)[pvLocation] / jetconstitP4.Pt()); + } + + } else { + m_SumPtChargedPFOPt500PV->push_back(-999); + m_fCharged->push_back(-999); + } + + } + + static SG::AuxElement::ConstAccessor< float > jvt ("Jvt"); + safeFill(jet, jvt, m_Jvt, -999); + + // static SG::AuxElement::ConstAccessor ghostTrackAssFrac("GhostTrackAssociationFraction"); + // if ( ghostTrackAssFrac.isAvailable( *jet) ) { + // m_ghostTrackAssFrac->push_back( ghostTrackAssFrac( *jet) ); + // } else { m_ghostTrackAssFrac->push_back( -999 ) ; } + + } // trackPV || chargedPFOPV || JVT + + if (m_infoSwitch.m_fJvt) { + static SG::AuxElement::ConstAccessor< float > fJvt ("DFCommonJets_fJvt"); + safeFill(jet, fJvt, m_fJvt, -999); + } + + if (m_infoSwitch.m_NNJvt) { + static SG::AuxElement::ConstAccessor< float > NNJvt ("NNJvt"); + static SG::AuxElement::ConstAccessor< char > NNJvtPass ("NNJvtPass"); + safeFill(jet, NNJvt, m_NNJvt, -999); + safeFill(jet, NNJvtPass, m_NNJvtPass, 0); + } + + if ( m_infoSwitch.m_clean && pvLocation >= 0 ) { + + static SG::AuxElement::ConstAccessor< float > ChargedFraction("ChargedFraction"); + static SG::AuxElement::Decorator< float > chargedFractionDecor("ChargedFraction"); + if ( !chargedFractionDecor.isAvailable( *jet ) ) { + // calculate and decorate + if ( sumPt500.isAvailable( *jet ) ) { + m_ChargedFraction->push_back( sumPt500( *jet )[pvLocation] / jet->pt() ); // units cancel out + } else { + m_ChargedFraction->push_back( -999. ); + } + + chargedFractionDecor( *jet ) = m_ChargedFraction->back(); + } else { + safeFill(jet, ChargedFraction, m_ChargedFraction, -999); + } + } // clean + + } // trackAll || trackPV || JVT + + static SG::AuxElement::ConstAccessor< char > jvtPass_Loose("JetJVT_Passed_Loose"); + static SG::AuxElement::ConstAccessor< char > jvtPass_Medium("JetJVT_Passed_Medium"); + static SG::AuxElement::ConstAccessor< char > jvtPass_Tight("JetJVT_Passed_Tight"); + static SG::AuxElement::ConstAccessor< char > jvtPass_FixedEffPt("JetJVT_Passed_FixedEffPt"); + static SG::AuxElement::ConstAccessor< char > jvtPass_TightFwd("JetJVT_Passed_TightFwd"); + static SG::AuxElement::ConstAccessor< char > fjvtPass_Loose("JetfJVT_Passed_Loose"); + static SG::AuxElement::ConstAccessor< char > fjvtPass_Medium("JetfJVT_Passed_Medium"); + static SG::AuxElement::ConstAccessor< char > fjvtPass_Tight("JetfJVT_Passed_Tight"); + static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Loose("JetJvtEfficiency_JVTSyst_JVT_Loose"); + static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Medium("JetJvtEfficiency_JVTSyst_JVT_Medium"); + static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Tight("JetJvtEfficiency_JVTSyst_JVT_Tight"); + static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_FixedEffPt("JetJvtEfficiency_JVTSyst_JVT_FixedEffPt"); + static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_TightFwd("JetJvtEfficiency_JVTSyst_JVT_TightFwd"); + static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Loose("JetJvtEfficiency_fJVTSyst_fJVT_Loose"); + static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Medium("JetJvtEfficiency_fJVTSyst_fJVT_Medium"); + static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Tight("JetJvtEfficiency_fJVTSyst_fJVT_Tight"); + + std::vector junkSF(1,1.0); + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) { + safeFill(jet, jvtPass_Loose, m_JvtPass_Loose, -1); + if ( m_mc ) { + if ( jvtSF_Loose.isAvailable( *jet ) ) { + m_JvtEff_SF_Loose->push_back( jvtSF_Loose( *jet ) ); + } else { + m_JvtEff_SF_Loose->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) { + safeFill(jet, jvtPass_Medium, m_JvtPass_Medium, -1); + if ( m_mc ) { + if ( jvtSF_Medium.isAvailable( *jet ) ) { + m_JvtEff_SF_Medium->push_back( jvtSF_Medium( *jet ) ); + } else { + m_JvtEff_SF_Medium->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) { + safeFill(jet, jvtPass_Tight, m_JvtPass_Tight, -1); + if ( m_mc ) { + if ( jvtSF_Tight.isAvailable( *jet ) ) { + m_JvtEff_SF_Tight->push_back( jvtSF_Tight( *jet ) ); + } else { + m_JvtEff_SF_Tight->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) { + safeFill(jet, jvtPass_FixedEffPt, m_JvtPass_FixedEffPt, -1); + if ( m_mc ) { + if ( jvtSF_FixedEffPt.isAvailable( *jet ) ) { + m_JvtEff_SF_FixedEffPt->push_back( jvtSF_FixedEffPt( *jet ) ); + } else { + m_JvtEff_SF_FixedEffPt->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) { + safeFill(jet, jvtPass_TightFwd, m_JvtPass_TightFwd, -1); + if ( m_mc ) { + if ( jvtSF_TightFwd.isAvailable( *jet ) ) { + m_JvtEff_SF_TightFwd->push_back( jvtSF_TightFwd( *jet ) ); + } else { + m_JvtEff_SF_TightFwd->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) { + safeFill(jet, fjvtPass_Loose, m_fJvtPass_Loose, -1); + if ( m_mc ) { + if ( fjvtSF_Loose.isAvailable( *jet ) ) { + m_fJvtEff_SF_Loose->push_back( fjvtSF_Loose( *jet ) ); + } else { + m_fJvtEff_SF_Loose->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) { + safeFill(jet, fjvtPass_Medium, m_fJvtPass_Medium, -1); + if ( m_mc ) { + if ( fjvtSF_Medium.isAvailable( *jet ) ) { + m_fJvtEff_SF_Medium->push_back( fjvtSF_Medium( *jet ) ); + } else { + m_fJvtEff_SF_Medium->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) { + safeFill(jet, fjvtPass_Tight, m_fJvtPass_Tight, -1); + if ( m_mc ) { + if ( fjvtSF_Tight.isAvailable( *jet ) ) { + m_fJvtEff_SF_Tight->push_back( fjvtSF_Tight( *jet ) ); + } else { + m_fJvtEff_SF_Tight->push_back( junkSF ); + } + } + } + + if ( m_infoSwitch.m_allTrack ) { + static SG::AuxElement::ConstAccessor< int > ghostTrackCount("GhostTrackCount"); + safeFill(jet, ghostTrackCount, m_GhostTrackCount, -999); + + static SG::AuxElement::ConstAccessor< float > ghostTrackPt ("GhostTrackPt"); + safeFill(jet, ghostTrackPt, m_GhostTrackPt, -999, m_units); + + std::vector pt; + std::vector qOverP; + std::vector eta; + std::vector phi; + std::vector e; + std::vector d0; + std::vector z0; + std::vector nPixHits; + std::vector nSCTHits; + std::vector nTRTHits; + std::vector nPixSharedHits; + std::vector nPixSplitHits; + std::vector nIMLPixHits; + std::vector nIMLPixSharedHits; + std::vector nIMLPixSplitHits; + std::vector nNIMLPixHits; + std::vector nNIMLPixSharedHits; + std::vector nNIMLPixSplitHits; + static SG::AuxElement::ConstAccessor< std::vector > > >ghostTrack ("GhostTrack"); + if ( ghostTrack.isAvailable( *jet ) ) { + std::vector > > trackLinks = ghostTrack( *jet ); + //std::vector pt(trackLinks.size(),-999); + for ( auto link_itr : trackLinks ) { + if( !link_itr.isValid() ) { continue; } + const xAOD::TrackParticle* track = dynamic_cast( *link_itr ); + // if asking for tracks passing PV selection ( i.e. JVF JVT tracks ) + if( m_infoSwitch.m_allTrackPVSel ) { + // PV selection from + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JvtManualRecalculation + if( track->pt() < 500 ) { continue; } // pT cut + if( !m_trkSelTool->accept(*track,pv) ) { continue; } // ID quality cut + // if( track->vertex() != pv ) { // if not in PV vertex fit + // if( track->vertex() != 0 ) { continue; } // make sure in no vertex fits + // if( fabs((track->z0()+track->vz()-pv->z())*sin(track->theta())) > 3.0 ) { continue; } // make sure close to PV in z + // } + } + pt. push_back( track->pt() / m_units ); + qOverP.push_back( track->qOverP() * m_units ); + eta.push_back( track->eta() ); + phi.push_back( track->phi() ); + e. push_back( track->e() / m_units ); + d0. push_back( track->d0() ); + z0. push_back( track->z0() + track->vz() - pv->z() ); // store z0 wrt PV...most useful + if( m_infoSwitch.m_allTrackDetail ) { + uint8_t getInt(0); + // n pix, sct, trt + track->summaryValue( getInt, xAOD::numberOfPixelHits ); + nPixHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfSCTHits ); + nSCTHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfTRTHits ); + nTRTHits.push_back( getInt ); + // pixel split shared + track->summaryValue( getInt, xAOD::numberOfPixelSharedHits ); + nPixSharedHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfPixelSplitHits ); + nPixSplitHits.push_back( getInt ); + // n ibl, split, shared + track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerHits ); + nIMLPixHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerSharedHits ); + nIMLPixSharedHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerSplitHits ); + nIMLPixSplitHits.push_back( getInt ); + // n bl, split, shared + track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerHits ); + nNIMLPixHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerSharedHits ); + nNIMLPixSharedHits.push_back( getInt ); + track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerSplitHits ); + nNIMLPixSplitHits.push_back( getInt ); + } + } + } // if ghostTrack available + m_GhostTrack_pt-> push_back( pt ); + m_GhostTrack_qOverP-> push_back( qOverP ); + m_GhostTrack_eta->push_back( eta ); + m_GhostTrack_phi->push_back( phi ); + m_GhostTrack_e-> push_back( e ); + m_GhostTrack_d0-> push_back( d0 ); + m_GhostTrack_z0-> push_back( z0 ); + if( m_infoSwitch.m_allTrackDetail ) { + m_GhostTrack_nPixelHits->push_back( nPixHits ); + m_GhostTrack_nSCTHits->push_back( nSCTHits ); + m_GhostTrack_nTRTHits->push_back( nTRTHits ); + m_GhostTrack_nPixelSharedHits->push_back( nPixSharedHits ); + m_GhostTrack_nPixelSplitHits->push_back( nPixSplitHits ); + m_GhostTrack_nInnermostPixelLayerHits->push_back( nIMLPixHits ); + m_GhostTrack_nInnermostPixelLayerSharedHits->push_back( nIMLPixSharedHits ); + m_GhostTrack_nInnermostPixelLayerSplitHits->push_back( nIMLPixSplitHits ); + m_GhostTrack_nNextToInnermostPixelLayerHits->push_back( nNIMLPixHits ); + m_GhostTrack_nNextToInnermostPixelLayerSharedHits->push_back( nNIMLPixSharedHits ); + m_GhostTrack_nNextToInnermostPixelLayerSplitHits->push_back( nNIMLPixSplitHits ); + } + } // allTrack switch + + if( m_infoSwitch.m_constituent ) { + m_numConstituents->push_back( jet->numConstituents() ); + } + + if( m_infoSwitch.m_constituentAll ) { + m_constituentWeights->push_back( jet->getAttribute< std::vector >( "constituentWeights" ) ); + std::vector pt; + std::vector eta; + std::vector phi; + std::vector e; + xAOD::JetConstituentVector consVec = jet->getConstituents(); + if( consVec.isValid() ) { + // don't use auto since iterator can also set the scale ... + // not sure what that does with auto - probably default but just incase + // use the example provided in + // http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Event/xAOD/xAODJet/xAODJet/JetConstituentVector.h + xAOD::JetConstituentVector::iterator constit = consVec.begin(); + xAOD::JetConstituentVector::iterator constitE = consVec.end(); + for( ; constit != constitE; constit++){ + pt. push_back( constit->pt() / m_units ); + eta.push_back( constit->eta() ); + phi.push_back( constit->phi() ); + e. push_back( constit->e() / m_units ); + } + } + m_constituent_pt-> push_back( pt ); + m_constituent_eta->push_back( eta ); + m_constituent_phi->push_back( phi ); + m_constituent_e-> push_back( e ); + } + + + if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) { + // flavor groups truth definition + static SG::AuxElement::ConstAccessor hadConeExclTruthLabel("HadronConeExclTruthLabelID"); + safeFill(jet, hadConeExclTruthLabel, m_HadronConeExclTruthLabelID, -999); + + static SG::AuxElement::ConstAccessor hadConeExclExtendedTruthLabel("HadronConeExclExtendedTruthLabelID"); + safeFill(jet, hadConeExclExtendedTruthLabel, m_HadronConeExclExtendedTruthLabelID, -999); + } + + if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) { + const xAOD::BTagging * myBTag(0); + + if(m_infoSwitch.m_flavorTag){ + myBTag = xAOD::BTaggingUtilities::getBTagging(*jet); + }else if(m_infoSwitch.m_flavorTagHLT){ + myBTag = jet->auxdata< const xAOD::BTagging* >("HLTBTag"); + } + + if(m_infoSwitch.m_JVC ) { + static SG::AuxElement::ConstAccessor JetVertexCharge_discriminant("JetVertexCharge_discriminant"); + safeFill(myBTag, JetVertexCharge_discriminant, m_JetVertexCharge_discriminant, -999); + } + + float pu, pb, pc, ptau, score; + + pu=0; pb=0; pc=0; + myBTag->variable("DL1r" , "pu", pu); + myBTag->variable("DL1r" , "pc", pc); + myBTag->variable("DL1r" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.018*pc+0.982*pu) ); + m_DL1r_pu->push_back(pu); + m_DL1r_pc->push_back(pc); + m_DL1r_pb->push_back(pb); + m_DL1r->push_back( score ); + + pu=0; pb=0; pc=0; + myBTag->variable("DL1dv00" , "pu", pu); + myBTag->variable("DL1dv00" , "pc", pc); + myBTag->variable("DL1dv00" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.018*pc+0.982*pu) ); + m_DL1dv00_pu->push_back(pu); + m_DL1dv00_pc->push_back(pc); + m_DL1dv00_pb->push_back(pb); + m_DL1dv00->push_back( score ); + pu=0; pb=0; pc=0; + myBTag->variable("DL1dv01" , "pu", pu); + myBTag->variable("DL1dv01" , "pc", pc); + myBTag->variable("DL1dv01" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.018*pc+0.982*pu) ); + m_DL1dv01_pu->push_back(pu); + m_DL1dv01_pc->push_back(pc); + m_DL1dv01_pb->push_back(pb); + m_DL1dv01->push_back( score ); + + pu=0; pb=0; pc=0; + myBTag->variable("GN120220509" , "pu", pu); + myBTag->variable("GN120220509" , "pc", pc); + myBTag->variable("GN120220509" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.05*pc+0.95*pu) ); // GN1 uses a different f_c value than DL1d which is 0.05 + m_GN1_pu->push_back(pu); + m_GN1_pc->push_back(pc); + m_GN1_pb->push_back(pb); + m_GN1->push_back( score ); + + pu=0; pb=0; pc=0; + myBTag->variable("GN2v00LegacyWP" , "pu", pu); + myBTag->variable("GN2v00LegacyWP" , "pc", pc); + myBTag->variable("GN2v00LegacyWP" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.10*pc+0.90*pu) ); // GN2 uses a different f_c value than DL1d which is 0.01 + m_GN2v00LegacyWP_pu->push_back(pu); + m_GN2v00LegacyWP_pc->push_back(pc); + m_GN2v00LegacyWP_pb->push_back(pb); + m_GN2v00LegacyWP->push_back( score ); + + pu=0; pb=0; pc=0; + myBTag->variable("GN2v00NewAliasWP" , "pu", pu); + myBTag->variable("GN2v00NewAliasWP" , "pc", pc); + myBTag->variable("GN2v00NewAliasWP" , "pb", pb); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.10*pc+0.90*pu) ); // GN2 uses a different f_c value than DL1d which is 0.01 + m_GN2v00NewAliasWP_pu->push_back(pu); + m_GN2v00NewAliasWP_pc->push_back(pc); + m_GN2v00NewAliasWP_pb->push_back(pb); + m_GN2v00NewAliasWP->push_back( score ); + + pu=0; pb=0; pc=0; ptau=0; + myBTag->variable("GN2v01" , "pu", pu); + myBTag->variable("GN2v01" , "pc", pc); + myBTag->variable("GN2v01" , "pb", pb); + myBTag->variable("GN2v01" , "ptau", ptau); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.20*pc+0.01*ptau+0.79*pu) ); // GN2v01 uses a different f_c value than DL1dv01 which is 0.018 + m_GN2v01_pu->push_back(pu); + m_GN2v01_pc->push_back(pc); + m_GN2v01_pb->push_back(pb); + m_GN2v01_ptau->push_back(ptau); + m_GN2v01->push_back( score ); + + if(m_infoSwitch.m_jetFitterDetails ) { + + static SG::AuxElement::ConstAccessor< int > jf_nVTXAcc ("JetFitter_nVTX"); + safeFill(myBTag, jf_nVTXAcc, m_JetFitter_nVTX, -999); + + static SG::AuxElement::ConstAccessor< int > jf_nSingleTracks ("JetFitter_nSingleTracks"); + safeFill(myBTag, jf_nSingleTracks, m_JetFitter_nSingleTracks, -999); + + static SG::AuxElement::ConstAccessor< int > jf_nTracksAtVtx ("JetFitter_nTracksAtVtx"); + safeFill(myBTag, jf_nTracksAtVtx, m_JetFitter_nTracksAtVtx, -999); + + static SG::AuxElement::ConstAccessor< float > jf_mass ("JetFitter_mass"); + safeFill(myBTag, jf_mass, m_JetFitter_mass, -999); + + static SG::AuxElement::ConstAccessor< float > jf_energyFraction("JetFitter_energyFraction"); + safeFill(myBTag, jf_energyFraction, m_JetFitter_energyFraction, -999); + + static SG::AuxElement::ConstAccessor< float > jf_significance3d("JetFitter_significance3d"); + safeFill(myBTag, jf_significance3d, m_JetFitter_significance3d, -999); + + static SG::AuxElement::ConstAccessor< float > jf_deltaeta ("JetFitter_deltaeta"); + safeFill(myBTag, jf_deltaeta, m_JetFitter_deltaeta, -999); + + static SG::AuxElement::ConstAccessor< float > jf_deltaphi ("JetFitter_deltaphi"); + safeFill(myBTag, jf_deltaphi, m_JetFitter_deltaphi, -999); + + static SG::AuxElement::ConstAccessor< int > jf_N2Tpar ("JetFitter_N2Tpair"); + safeFill(myBTag, jf_N2Tpar, m_JetFitter_N2Tpar, -999); + + //static SG::AuxElement::ConstAccessor< double > jf_pb ("JetFitterCombNN_pb"); + //safeFill(myBTag, jf_pb, m_JetFitter_pb, -999); + // + //static SG::AuxElement::ConstAccessor< double > jf_pc ("JetFitterCombNN_pc"); + //safeFill(myBTag, jf_pc, m_JetFitter_pc, -999); + // + //static SG::AuxElement::ConstAccessor< double > jf_pu ("JetFitterCombNN_pu"); + //safeFill(myBTag, jf_pu, m_JetFitter_pu, -999); + + } + + if(m_infoSwitch.m_svDetails ) { + if(m_debug) std::cout << "Filling m_svDetails " << std::endl; + + static SG::AuxElement::ConstAccessor< int > sv0_NGTinSvxAcc ("SV0_NGTinSvx"); + safeFill(myBTag, sv0_NGTinSvxAcc, m_sv0_NGTinSvx, -999); + + // @brief SV0 : Number of 2-track pairs + static SG::AuxElement::ConstAccessor< int > sv0_N2TpairAcc ("SV0_N2Tpair"); + safeFill(myBTag, sv0_N2TpairAcc, m_sv0_N2Tpair, -999); + + static SG::AuxElement::ConstAccessor< float > sv0_masssvxAcc ("SV0_masssvx"); + safeFill(myBTag, sv0_masssvxAcc, m_sv0_massvx, -999); + + static SG::AuxElement::ConstAccessor< float > sv0_efracsvxAcc ("SV0_efracsvx"); + safeFill(myBTag, sv0_efracsvxAcc, m_sv0_efracsvx, -999); + + static SG::AuxElement::ConstAccessor< float > sv0_normdistAcc ("SV0_normdist"); + safeFill(myBTag, sv0_normdistAcc, m_sv0_normdist, -999); + + double sv0; + myBTag->variable("SV0", "significance3D", sv0); + m_SV0->push_back(sv0); + + m_SV1IP3D->push_back( myBTag -> SV1plusIP3D_discriminant() ); + + double w=(myBTag->IP3D_pb()/myBTag->IP3D_pu()) * (myBTag->SV1_pb()/myBTag->SV1_pu()); + double x=50; + if(w/(1+w)<1) x=-1.0*TMath::Log10(1-(w/(1+w))); + m_COMBx->push_back(x); + + static SG::AuxElement::ConstAccessor< int > sv1_NGTinSvxAcc ("SV1_NGTinSvx"); + safeFill(myBTag, sv1_NGTinSvxAcc, m_sv1_NGTinSvx, -999); + + // @brief SV1 : Number of 2-track pairs + static SG::AuxElement::ConstAccessor< int > sv1_N2TpairAcc ("SV1_N2Tpair"); + safeFill(myBTag, sv1_N2TpairAcc, m_sv1_N2Tpair, -999); + + static SG::AuxElement::ConstAccessor< float > sv1_masssvxAcc ("SV1_masssvx"); + safeFill(myBTag, sv1_masssvxAcc, m_sv1_massvx, -999); + + static SG::AuxElement::ConstAccessor< float > sv1_efracsvxAcc ("SV1_efracsvx"); + safeFill(myBTag, sv1_efracsvxAcc, m_sv1_efracsvx, -999); + + static SG::AuxElement::ConstAccessor< float > sv1_normdistAcc ("SV1_normdist"); + safeFill(myBTag, sv1_normdistAcc, m_sv1_normdist, -999); + + double sv1_pu = -30; myBTag->variable("SV1", "pu", sv1_pu); + double sv1_pb = -30; myBTag->variable("SV1", "pb", sv1_pb); + double sv1_pc = -30; myBTag->variable("SV1", "pc", sv1_pc); + + m_sv1_pu ->push_back(sv1_pu); + m_sv1_pb ->push_back(sv1_pb); + m_sv1_pc ->push_back(sv1_pc); + m_SV1 ->push_back( myBTag->calcLLR(sv1_pb,sv1_pu) ); + m_sv1_c ->push_back( myBTag->calcLLR(sv1_pb,sv1_pc) ); + m_sv1_cu ->push_back( myBTag->calcLLR(sv1_pc,sv1_pu) ); + + float sv1_Lxy; myBTag->variable("SV1", "Lxy" , sv1_Lxy); + float sv1_sig3d; myBTag->variable("SV1", "significance3d" , sv1_sig3d); + float sv1_L3d; myBTag->variable("SV1", "L3d" , sv1_L3d); + float sv1_distmatlay; myBTag->variable("SV1", "dstToMatLay" , sv1_distmatlay); + float sv1_dR; myBTag->variable("SV1", "deltaR" , sv1_dR ); + + m_sv1_Lxy ->push_back(sv1_Lxy ); + m_sv1_sig3d ->push_back(sv1_sig3d ); + m_sv1_L3d ->push_back(sv1_L3d ); + m_sv1_distmatlay ->push_back(sv1_distmatlay ); + m_sv1_dR ->push_back(sv1_dR ); + + + } + + if(m_infoSwitch.m_ipDetails ) { + if(m_debug) std::cout << "Filling m_ipDetails " << std::endl; + + // + // IP2D + // + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_gradeOfTracksAcc ("IP2D_gradeOfTracks"); + safeVecFill(myBTag, IP2D_gradeOfTracksAcc, m_IP2D_gradeOfTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_flagFromV0ofTracksAcc("IP2D_flagFromV0ofTracks"); + safeVecFill(myBTag, IP2D_flagFromV0ofTracksAcc, m_IP2D_flagFromV0ofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_valD0wrtPVofTracksAcc("IP2D_valD0wrtPVofTracks"); + safeVecFill(myBTag, IP2D_valD0wrtPVofTracksAcc, m_IP2D_valD0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_sigD0wrtPVofTracksAcc("IP2D_sigD0wrtPVofTracks"); + safeVecFill(myBTag, IP2D_sigD0wrtPVofTracksAcc, m_IP2D_sigD0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_weightBofTracksAcc ("IP2D_weightBofTracks"); + safeVecFill(myBTag, IP2D_weightBofTracksAcc, m_IP2D_weightBofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_weightCofTracksAcc ("IP2D_weightCofTracks"); + safeVecFill(myBTag, IP2D_weightCofTracksAcc, m_IP2D_weightCofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP2D_weightUofTracksAcc ("IP2D_weightUofTracks"); + safeVecFill(myBTag, IP2D_weightUofTracksAcc, m_IP2D_weightUofTracks); + + double ip2_pu = -99; myBTag->variable("IP2D", "pu", ip2_pu); + double ip2_pb = -99; myBTag->variable("IP2D", "pb", ip2_pb); + double ip2_pc = -99; myBTag->variable("IP2D", "pc", ip2_pc); + + m_IP2D_pu ->push_back(ip2_pu); + m_IP2D_pb ->push_back(ip2_pb); + m_IP2D_pc ->push_back(ip2_pc); + + m_IP2D ->push_back( myBTag->calcLLR(ip2_pb,ip2_pu) ); + m_IP2D_c ->push_back( myBTag->calcLLR(ip2_pb,ip2_pc) ); + m_IP2D_cu ->push_back( myBTag->calcLLR(ip2_pc,ip2_pu) ); + + + // + // IP3D + // + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_gradeOfTracksAcc ("IP3D_gradeOfTracks"); + safeVecFill(myBTag, IP3D_gradeOfTracksAcc, m_IP3D_gradeOfTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_flagFromV0ofTracksAcc("IP3D_flagFromV0ofTracks"); + safeVecFill(myBTag, IP3D_flagFromV0ofTracksAcc, m_IP3D_flagFromV0ofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_valD0wrtPVofTracksAcc("IP3D_valD0wrtPVofTracks"); + safeVecFill(myBTag, IP3D_valD0wrtPVofTracksAcc, m_IP3D_valD0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_sigD0wrtPVofTracksAcc("IP3D_sigD0wrtPVofTracks"); + safeVecFill(myBTag, IP3D_sigD0wrtPVofTracksAcc, m_IP3D_sigD0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_valZ0wrtPVofTracksAcc("IP3D_valZ0wrtPVofTracks"); + safeVecFill(myBTag, IP3D_valZ0wrtPVofTracksAcc, m_IP3D_valZ0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_sigZ0wrtPVofTracksAcc("IP3D_sigZ0wrtPVofTracks"); + safeVecFill(myBTag, IP3D_sigZ0wrtPVofTracksAcc, m_IP3D_sigZ0wrtPVofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_weightBofTracksAcc ("IP3D_weightBofTracks"); + safeVecFill(myBTag, IP3D_weightBofTracksAcc, m_IP3D_weightBofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_weightCofTracksAcc ("IP3D_weightCofTracks"); + safeVecFill(myBTag, IP3D_weightCofTracksAcc, m_IP3D_weightCofTracks); + + static SG::AuxElement::ConstAccessor< std::vector > IP3D_weightUofTracksAcc ("IP3D_weightUofTracks"); + safeVecFill(myBTag, IP3D_weightUofTracksAcc, m_IP3D_weightUofTracks); + + double ip3_pu = -30; myBTag->variable("IP3D", "pu", ip3_pu); + double ip3_pb = -30; myBTag->variable("IP3D", "pb", ip3_pb); + double ip3_pc = -30; myBTag->variable("IP3D", "pc", ip3_pc); + + m_IP3D_pu ->push_back(ip3_pu ); + m_IP3D_pb ->push_back(ip3_pb ); + m_IP3D_pc ->push_back(ip3_pc ); + + m_IP3D ->push_back( myBTag->calcLLR(ip3_pb,ip3_pu) ); + m_IP3D_c ->push_back( myBTag->calcLLR(ip3_pb,ip3_pc) ); + m_IP3D_cu ->push_back( myBTag->calcLLR(ip3_pc,ip3_pu) ); + + } + + + + if(m_infoSwitch.m_flavorTagHLT ) { + if(m_debug) std::cout << "Filling m_flavorTagHLT " << std::endl; + const xAOD::Vertex *online_pvx = jet->auxdata("HLTBJetTracks_vtx"); + const xAOD::Vertex *online_pvx_bkg = jet->auxdata("HLTBJetTracks_vtx_bkg"); + const xAOD::Vertex *offline_pvx = jet->auxdata("offline_vtx"); + + if(online_pvx) m_vtxOnlineValid->push_back(1.0); + else m_vtxOnlineValid->push_back(0.0); + + char hadDummyPV = jet->auxdata< char >("hadDummyPV"); + if( hadDummyPV == '0') m_vtxHadDummy->push_back(0.0); + if( hadDummyPV == '1') m_vtxHadDummy->push_back(1.0); + if( hadDummyPV == '2') m_vtxHadDummy->push_back(2.0); + + static SG::AuxElement::ConstAccessor< float > acc_bs_online_vs ("bs_online_vz"); + if(acc_bs_online_vs.isAvailable( *jet) ){ + if(m_debug) std::cout << "Have bs_online_vz " << std::endl; + float bs_online_vz = jet->auxdata< float >("bs_online_vz"); + //std::cout << "**bs_online_vz " << bs_online_vz << std::endl; + m_bs_online_vz->push_back( bs_online_vz ); + + float bs_online_vx = jet->auxdata< float >("bs_online_vx"); + //std::cout << "**bs_online_vx " << bs_online_vx << std::endl; + m_bs_online_vx->push_back( bs_online_vx ); + + float bs_online_vy = jet->auxdata< float >("bs_online_vy"); + //std::cout << "**bs_online_vy " << bs_online_vy << std::endl; + m_bs_online_vy->push_back( bs_online_vy ); + }else{ + m_bs_online_vz->push_back( -999 ); + m_bs_online_vx->push_back( -999 ); + m_bs_online_vy->push_back( -999 ); + } + + if(m_debug) std::cout << "Filling m_vtx_offline " << std::endl; + if(offline_pvx){ + m_vtx_offline_x0->push_back( offline_pvx->x() ); + m_vtx_offline_y0->push_back( offline_pvx->y() ); + m_vtx_offline_z0->push_back( offline_pvx->z() ); + }else{ + m_vtx_offline_x0->push_back( -999 ); + m_vtx_offline_y0->push_back( -999 ); + m_vtx_offline_z0->push_back( -999 ); + } + + if(m_debug) std::cout << "Done Filling m_vtx_offline " << std::endl; + + if(m_debug) std::cout << "Filling m_vtx_online... " << std::endl; + if(online_pvx){ + if(m_debug) std::cout << " ... online_pvx valid " << std::endl; + m_vtx_online_x0->push_back( online_pvx->x() ); + m_vtx_online_y0->push_back( online_pvx->y() ); + m_vtx_online_z0->push_back( online_pvx->z() ); + }else{ + m_vtx_online_x0->push_back( -999 ); + m_vtx_online_y0->push_back( -999 ); + m_vtx_online_z0->push_back( -999 ); + } + + if(m_debug) std::cout << "Filling m_vtx_online... " << std::endl; + if(online_pvx_bkg){ + if(m_debug) std::cout << " ...online_pvx_bkg valid " << std::endl; + m_vtx_online_bkg_x0->push_back( online_pvx_bkg->x() ); + m_vtx_online_bkg_y0->push_back( online_pvx_bkg->y() ); + m_vtx_online_bkg_z0->push_back( online_pvx_bkg->z() ); + }else{ + m_vtx_online_bkg_x0->push_back( -999 ); + m_vtx_online_bkg_y0->push_back( -999 ); + m_vtx_online_bkg_z0->push_back( -999 ); + } + + }// m_flavorTagHLT + if(m_debug) std::cout << "Done m_flavorTagHLT " << std::endl; + } + + if (m_infoSwitch.m_flavorTagTLA){ + if(m_debug) std::cout << "Filling m_flavorTagHLT " << std::endl; + + float pu=0, pb=0, pc=0, score=0; + pu = jet->auxdata( "fastDIPS20211215_pu" ); + pc = jet->auxdata( "fastDIPS20211215_pc" ); + pb = jet->auxdata( "fastDIPS20211215_pb" ); + //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach + score=log( pb / (0.018*pc+0.982*pu) ); + + m_fastDIPS_pu->push_back( pu ); + m_fastDIPS_pc->push_back( pc ); + m_fastDIPS_pb->push_back( pb ); + m_fastDIPS->push_back( score ); + + if(m_debug) std::cout << "Done m_flavorTagTLA " << std::endl; + } + + if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty() ) { + for(auto btag : m_btags) + btag->Fill( jet ); + } // jetBTag + + if ( m_infoSwitch.m_area ) { + + static SG::AuxElement::ConstAccessor ghostArea("JetGhostArea"); + safeFill(jet, ghostArea, m_GhostArea, -999); + + static SG::AuxElement::ConstAccessor activeArea("ActiveArea"); + safeFill(jet, activeArea, m_ActiveArea, -999); + + static SG::AuxElement::ConstAccessor voronoiArea("VoronoiArea"); + safeFill(jet, voronoiArea, m_VoronoiArea, -999); + + static SG::AuxElement::ConstAccessor activeArea_pt("ActiveArea4vec_pt"); + safeFill(jet, activeArea_pt, m_ActiveArea4vec_pt, -999); + + static SG::AuxElement::ConstAccessor activeArea_eta("ActiveArea4vec_eta"); + safeFill(jet, activeArea_eta, m_ActiveArea4vec_eta, -999); + + static SG::AuxElement::ConstAccessor activeArea_phi("ActiveArea4vec_phi"); + safeFill(jet, activeArea_phi, m_ActiveArea4vec_phi, -999); + + static SG::AuxElement::ConstAccessor activeArea_m("ActiveArea4vec_m"); + safeFill(jet, activeArea_m, m_ActiveArea4vec_m, -999); + } + + + if ( m_infoSwitch.m_truth && m_mc ) { + + static SG::AuxElement::ConstAccessor ConeTruthLabelID ("ConeTruthLabelID"); + safeFill(jet, ConeTruthLabelID, m_ConeTruthLabelID, -999); + + static SG::AuxElement::ConstAccessor TruthCount ("TruthCount"); + safeFill(jet, TruthCount, m_TruthCount, -999); + + // seems to be empty + // static SG::AuxElement::ConstAccessor TruthPt ("TruthPt"); + // if ( TruthPt.isAvailable( *jet) ) { + // m_truthPt->push_back( TruthPt( *jet)/1000 ); + // } else { m_truthPt->push_back( -999 ); } + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_B ("TruthLabelDeltaR_B"); + safeFill(jet, TruthLabelDeltaR_B, m_TruthLabelDeltaR_B, -999); + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_C ("TruthLabelDeltaR_C"); + safeFill(jet, TruthLabelDeltaR_C, m_TruthLabelDeltaR_C, -999); + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_T ("TruthLabelDeltaR_T"); + safeFill(jet, TruthLabelDeltaR_T, m_TruthLabelDeltaR_T, -999); + + static SG::AuxElement::ConstAccessor partonLabel("PartonTruthLabelID"); + safeFill(jet, partonLabel, m_PartonTruthLabelID, -999); + + static SG::AuxElement::ConstAccessor ghostTruthAssFrac("GhostTruthAssociationFraction"); + safeFill(jet, ghostTruthAssFrac, m_GhostTruthAssociationFraction, -999); + + const xAOD::Jet* truthJet = HelperFunctions::getLink( jet, "GhostTruthAssociationLink" ); + if(truthJet) { + m_truth_pt->push_back ( truthJet->pt() / m_units ); + m_truth_eta->push_back( truthJet->eta() ); + m_truth_phi->push_back( truthJet->phi() ); + m_truth_E->push_back ( truthJet->e() / m_units ); + } else { + m_truth_pt->push_back ( -999 ); + m_truth_eta->push_back( -999 ); + m_truth_phi->push_back( -999 ); + m_truth_E->push_back ( -999 ); + } + + } + + if ( m_infoSwitch.m_truthDetails ) { + + // + // B-Hadron Details + // + static SG::AuxElement::ConstAccessor GhostBHadronsFinalCount ("GhostBHadronsFinalCount"); + safeFill(jet, GhostBHadronsFinalCount, m_GhostBHadronsFinalCount, -999); + + static SG::AuxElement::ConstAccessor GhostBHadronsInitialCount ("GhostBHadronsInitialCount"); + safeFill(jet, GhostBHadronsInitialCount, m_GhostBHadronsInitialCount, -999); + + static SG::AuxElement::ConstAccessor GhostBQuarksFinalCount ("GhostBQuarksFinalCount"); + safeFill(jet, GhostBQuarksFinalCount, m_GhostBQuarksFinalCount, -999); + + static SG::AuxElement::ConstAccessor GhostBHadronsFinalPt ("GhostBHadronsFinalPt"); + safeFill(jet, GhostBHadronsFinalPt, m_GhostBHadronsFinalPt, -999); + + static SG::AuxElement::ConstAccessor GhostBHadronsInitialPt ("GhostBHadronsInitialPt"); + safeFill(jet, GhostBHadronsInitialPt, m_GhostBHadronsInitialPt, -999); + + static SG::AuxElement::ConstAccessor GhostBQuarksFinalPt ("GhostBQuarksFinalPt"); + safeFill(jet, GhostBQuarksFinalPt, m_GhostBQuarksFinalPt, -999); + + // + // C-Hadron Details + // + static SG::AuxElement::ConstAccessor GhostCHadronsFinalCount ("GhostCHadronsFinalCount"); + safeFill(jet, GhostCHadronsFinalCount, m_GhostCHadronsFinalCount, -999); + + static SG::AuxElement::ConstAccessor GhostCHadronsInitialCount ("GhostCHadronsInitialCount"); + safeFill(jet, GhostCHadronsInitialCount, m_GhostCHadronsInitialCount, -999); + + static SG::AuxElement::ConstAccessor GhostCQuarksFinalCount ("GhostCQuarksFinalCount"); + safeFill(jet, GhostCQuarksFinalCount, m_GhostCQuarksFinalCount, -999); + + static SG::AuxElement::ConstAccessor GhostCHadronsFinalPt ("GhostCHadronsFinalPt"); + safeFill(jet, GhostCHadronsFinalPt, m_GhostCHadronsFinalPt, -999); + + static SG::AuxElement::ConstAccessor GhostCHadronsInitialPt ("GhostCHadronsInitialPt"); + safeFill(jet, GhostCHadronsInitialPt, m_GhostCHadronsInitialPt, -999); + + static SG::AuxElement::ConstAccessor GhostCQuarksFinalPt ("GhostCQuarksFinalPt"); + safeFill(jet, GhostCQuarksFinalPt, m_GhostCQuarksFinalPt, -999); + + // + // Tau Details + // + static SG::AuxElement::ConstAccessor GhostTausFinalCount ("GhostTausFinalCount"); + safeFill(jet, GhostTausFinalCount, m_GhostTausFinalCount, -999); + + // THE ONLY UN-OFFICIAL PIECE OF CODE HERE USE WITH CAUTION + static SG::AuxElement::ConstAccessor GhostTausFinalPt ("GhostTausFinalPt"); + safeFill(jet, GhostTausFinalPt, m_GhostTausFinalPt, -999); + + // light quark(1,2,3) , gluon (21 or 9), charm(4) and b(5) + // GhostPartons should select for these pdgIds only + // static SG::AuxElement::ConstAccessor< std::vector > ghostPartons("GhostPartons"); + // if( ghostPartons.isAvailable( *jet )) { + // std::vector truthPartons = ghostPartons( *jet ); + + std::vector truthPartons = jet->getAssociatedObjects("GhostPartons"); + + if( truthPartons.size() == 0){ + m_truth_pdgId->push_back(-999); + } else { + int iParent = 0; + for(unsigned int i=1; i < truthPartons.size(); ++i){ + if( (truthPartons.at(i)->pt() > 0.001) && (truthPartons.at(i)->e() > truthPartons.at(iParent)->e()) ) + iParent = i; + } + m_truth_pdgId->push_back(truthPartons.at(iParent)->pdgId()); + m_truth_partonPt->push_back(truthPartons.at(iParent)->pt() / m_units); + m_truth_partonDR->push_back(truthPartons.at(iParent)->p4().DeltaR( jet->p4() )); + } + + } + + + if ( m_infoSwitch.m_charge ) { + xAOD::JetFourMom_t p4UsedInJetCharge; + bool status = jet->getAttribute( "JetPileupScaleMomentum", p4UsedInJetCharge ); + static SG::AuxElement::ConstAccessor uncalibratedJetCharge ("Charge"); + + if(status){ + float ptUsedInJetCharge = p4UsedInJetCharge.Pt(); + float calibratedJetCharge = jet->pt() ? (ptUsedInJetCharge * uncalibratedJetCharge(*jet) / jet->pt()) : -99; + m_charge->push_back(calibratedJetCharge); + }else{ + m_charge->push_back(-99); + } + + } + + if ( m_infoSwitch.m_passSel ) { + char passSel; + bool status = jet->getAttribute( "passSel", passSel ); + if(status){ + m_passSel->push_back(passSel); + }else{ + m_passSel->push_back(-99); + } + } + + if ( m_infoSwitch.m_passOR ) { + char passOR; + bool status = jet->getAttribute( "passOR", passOR ); + if(status){ + m_passOR->push_back(passOR); + }else{ + m_passOR->push_back(-99); + } + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_JetHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_JetHists.cxx.rst.txt new file mode 100644 index 0000000000..ab67144c11 --- /dev/null +++ b/_sources/api/program_listing_file_Root_JetHists.cxx.rst.txt @@ -0,0 +1,2002 @@ + +.. _program_listing_file_Root_JetHists.cxx: + +Program Listing for File JetHists.cxx +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/JetHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include "xAODBTagging/BTaggingUtilities.h" + #include + #include /* hypot */ + + ANA_MSG_SOURCE(msgJetHists, "JetHists") + + using std::vector; + + JetHists :: JetHists (std::string name, std::string detailStr, const std::string& prefix, const std::string& titlePrefix) : + IParticleHists(name, detailStr, prefix, titlePrefix), + m_infoSwitch(new HelperClasses::JetInfoSwitch(m_detailStr)), + m_titlePrefix(titlePrefix), + m_onlineBSTool(), + m_tracksInJet(0) + { } + + JetHists :: ~JetHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + + StatusCode JetHists::initialize() { + using namespace msgJetHists; + ANA_CHECK( IParticleHists::initialize()); + + if(m_debug) Info("JetHists::initialize()", m_name.c_str()); + + // details for jet cleaning + if( m_infoSwitch->m_clean ) { + if(m_debug) Info("JetHists::initialize()", "adding clean plots"); + // units? + m_jetTime = book(m_name, "JetTimming" , m_titlePrefix+"Jet Timming", 120, -80, 80); + m_LArQuality = book(m_name, "LArQuality" , m_titlePrefix+"LAr Quality", 120, -600, 600); + m_hecq = book(m_name, "HECQuality" , m_titlePrefix+"HEC Quality", 120, -10, 10); + m_negE = book(m_name, "NegativeE" , m_titlePrefix+"Negative Energy", 120, -10, 10); + m_avLArQF = book(m_name, "AverageLArQF" , m_titlePrefix+"" , 120, 0, 1000); + m_bchCorrCell = book(m_name, "BchCorrCell" , m_titlePrefix+"BCH Corr Cell" , 120, 0, 600); + m_N90Const = book(m_name, "N90Constituents", m_titlePrefix+"N90 Constituents" , 120, 0, 40); + + //m_LArBadHVEFrac =book(m_name, "LArBadHVEFrac", m_titlePrefix+" jet LAr Bad HV Energy Fraction", 120, 0, 1); + //m_LArBadHVNCell =book(m_name, "LArBadHVNCell", m_titlePrefix+" jet LAr Bad HV N_{cells}", 120, -0.5,499.5); + // Range is [0, 2] instead of [0, 1] to include tail of events that spill over 1 + m_ChargedFraction = book(m_name, "ChargedFraction", m_titlePrefix+" Sum of charged tracks p_{T}/jet p_{T}", 120, 0, 2); + //m_OotFracClusters5 =book(m_name, "OotFracClusters5", m_titlePrefix+" jet OotFracClusters5" , 120, 0, 1); + //m_OotFracClusters10 =book(m_name, "OotFracClusters10", m_titlePrefix+" jet OotFracClusters10" , 120, 0, 1); + //m_LeadingClusterPt =book(m_name, "LeadingClusterPt", m_titlePrefix+" jet Leading Cluster P_{T}" , 120, 0, 1000); + //m_LeadingClusterSecondLambda =book(m_name, "LeadingClusterSecondLambda", m_titlePrefix+" jet LeadingClusterSecondLambda", 120, 0, 1000e3); + //m_LeadingClusterCenterLambda =book(m_name, "LeadingClusterCenterLambda", m_titlePrefix+" jet LeadingClusterCenterLambda", 120, 0, 5000); + //m_LeadingClusterSecondR =book(m_name, "LeadingClusterSecondR", m_titlePrefix+" jet LeadingClusterSecondR" , 120, 0, 300e3); + //m_clean_passLooseBad =book(m_name, "clean_passLooseBad", m_titlePrefix+" jet LooseBad Cleaning Flag" , 2, -0.5, 1.5); + //m_clean_passLooseBadUgly =book(m_name, "clean_passLooseBadUgly", m_titlePrefix+" jet LooseBadUgly Cleaning Flag", 2, -0.5, 1.5); + //m_clean_passTightBad =book(m_name, "clean_passTightBad", m_titlePrefix+" jet TightBad Cleaning Flag" , 2, -0.5, 1.5); + //m_clean_passTightBadUgly =book(m_name, "clean_passTightBadUgly", m_titlePrefix+" jet TightBadUgly Cleaning Flag", 2, -0.5, 1.5); + + } + + // details for jet energy information + if( m_infoSwitch->m_energy ) { + if(m_debug) Info("JetHists::initialize()", "adding energy plots"); + m_HECf = book(m_name, "HECFrac", m_titlePrefix+"HEC Fraction" , 120, 0, 5); + m_EMf = book(m_name, "EMFrac", m_titlePrefix+"EM Fraction" , 120, 0, 2); + m_actArea = book(m_name, "ActiveArea", m_titlePrefix+"Jet Active Area" , 120, 0, 1); + m_centroidR = book(m_name, "CentroidR", m_titlePrefix+"CentroidR" , 120, 0, 600); + //m_FracSamplingMax = book(m_name, "FracSamplingMax", m_titlePrefix+" jet FracSamplingMax" , 120, 0, 1); + //m_FracSamplingMaxIndex = book(m_name, "FracSamplingMaxIndex", m_titlePrefix+" jet FracSamplingMaxIndex" , 22, -0.5, 21.5); + //m_LowEtConstituentsFrac = book(m_name, "LowEtConstituentsFrac", m_titlePrefix+" jet LowEtConstituentsFrac" , 120, 0, 1); + //m_GhostMuonSegmentCount = book(m_name, "GhostMuonSegmentCount", m_titlePrefix+" jet GhostMuonSegmentCount" , 10, -0.5, 9.5); + //m_Width = book(m_name, "Width", m_titlePrefix+" jet Width", 100, 0, 0.5); + + } + + // details for jet energy in each layer + // plotted as fraction instead of absolute to make the plotting easier + if( m_infoSwitch->m_layer ) { + m_PreSamplerB = book(m_name, "PreSamplerB", "Pre sample barrel", 120, -0.1, 1.1); + m_EMB1 = book(m_name, "EMB1", "EM Barrel 1", 120, -0.1, 1.1); + m_EMB2 = book(m_name, "EMB2", "EM Barrel 2", 120, -0.1, 1.1); + m_EMB3 = book(m_name, "EMB3", "EM Barrel 3", 120, -0.1, 1.1); + m_PreSamplerE = book(m_name, "PreSamplerE", "Pre sample end cap", 120, -0.1, 1.1); + m_EME1 = book(m_name, "EME1", "EM Endcap 1", 120, -0.1, 1.1); + m_EME2 = book(m_name, "EME2", "EM Endcap 2", 120, -0.1, 1.1); + m_EME3 = book(m_name, "EME3", "EM Endcap 3", 120, -0.1, 1.1); + m_HEC0 = book(m_name, "HEC0", "Hadronic Endcap 0", 120, -0.1, 1.1); + m_HEC1 = book(m_name, "HEC1", "Hadronic Endcap 1", 120, -0.1, 1.1); + m_HEC2 = book(m_name, "HEC2", "Hadronic Endcap 2", 120, -0.1, 1.1); + m_HEC3 = book(m_name, "HEC3", "Hadronic Endcap 3", 120, -0.1, 1.1); + m_TileBar0 = book(m_name, "TileBar0", "Tile Barrel 0", 120, -0.1, 1.1); + m_TileBar1 = book(m_name, "TileBar1", "Tile Barrel 1", 120, -0.1, 1.1); + m_TileBar2 = book(m_name, "TileBar2", "Tile Barrel 2", 120, -0.1, 1.1); + m_TileGap1 = book(m_name, "TileGap1", "Tile Gap 1", 120, -0.1, 1.1); + m_TileGap2 = book(m_name, "TileGap2", "Tile Gap 2", 120, -0.1, 1.1); + m_TileGap3 = book(m_name, "TileGap3", "Tile Gap 3", 120, -0.1, 1.1); + m_TileExt0 = book(m_name, "TileExt0", "Tile extended barrel 0", 120, -0.1, 1.1); + m_TileExt1 = book(m_name, "TileExt1", "Tile extended barrel 1", 120, -0.1, 1.1); + m_TileExt2 = book(m_name, "TileExt2", "Tile extended barrel 2", 120, -0.1, 1.1); + m_FCAL0 = book(m_name, "FCAL0", "Foward EM endcap 0", 120, -0.1, 1.1); + m_FCAL1 = book(m_name, "FCAL1", "Foward EM endcap 1", 120, -0.1, 1.1); + m_FCAL2 = book(m_name, "FCAL2", "Foward EM endcap 2", 120, -0.1, 1.1); + + // LAr calo barrel + // PreSamplerB 0 + // EMB1 1 + // EMB2 2 + // EMB3 3 + // LAr calo endcap + // PreSamplerE 4 + // EME1 5 + // EME2 6 + // EME3 7 + // Hadronic endcap + // HEC0 8 + // HEC1 9 + // HEC2 10 + // HEC3 11 + // Tile barrel + // TileBar0 12 + // TileBar1 13 + // TileBar2 14 + // Tile gap (ITC & scint) + // TileGap1 15 + // TileGap2 16 + // TileGap3 17 + // Tile extended barrel + // TileExt0 18 + // TileExt1 19 + // TileExt2 20 + // Forward EM endcap + // FCAL0 21 + // FCAL1 22 + // FCAL2 23 + // Mini FCAL + // MINIFCAL0 24 + // MINIFCAL1 25 + // MINIFCAL2 26 + // MINIFCAL3 27 + + } + + //m_chf = book(m_name, "chfPV" , "PV(chf)" , 120, 0, 600); + + // details for jet resolutions + if( m_infoSwitch->m_resolution ) { + if(m_debug) Info("JetHists::initialize()", "adding resolution plots"); + // 1D + m_jetGhostTruthPt = book(m_name, "jetGhostTruthPt", "jet ghost truth p_{T} [GeV]", 120, 0, 600); + // 2D + m_jetPt_vs_resolution = book(m_name, "jetPt_vs_resolution", + "jet p_{T} [GeV]", 120, 0, 600, + "resolution", 30, -5, 35 + ); + m_jetGhostTruthPt_vs_resolution = book(m_name, "jetGhostTruthPt_vs_resolution", + "jet ghost truth p_{T} [GeV]", 120, 0, 600, + "resolution", 30, -5, 35 + ); + } + + // details for jet energy information + if( m_infoSwitch->m_truth ) { + if(m_debug) Info("JetHists::initialize()", "adding truth plots"); + + m_truthLabelID = book(m_name, "TruthLabelID", m_titlePrefix+"Truth Label" , 40, -10.5, 29.5); + m_hadronConeExclTruthLabelID = book(m_name, "HadronConeExclTruthLabelID", m_titlePrefix+"HadronConeExclTruthLabelID" , 40, -10.5, 29.5); + m_truthCount = book(m_name, "TruthCount", m_titlePrefix+"Truth Count" , 60, -10.5, 49.5); + m_truthPt = book(m_name, "TruthPt", m_titlePrefix+"Truth Pt", 100, 0, 100.0); + + m_truthDr_B = book(m_name, "TruthLabelDeltaR_B", m_titlePrefix+"Truth Label dR(b)" , 120, -0.1, 1.0); + m_truthDr_C = book(m_name, "TruthLabelDeltaR_C", m_titlePrefix+"Truth Label dR(c)" , 120, -0.1, 1.0); + m_truthDr_T = book(m_name, "TruthLabelDeltaR_T", m_titlePrefix+"Truth Label dR(tau)" , 120, -0.1, 1.0); + + //m_PartonTruthLabelID= book(m_name, "PartonTruthLabelID", m_titlePrefix+"jet PartonTruthLabelID", 22, -0.5, 21.5); + //m_GhostTruthAssociationFraction= book(m_name, "GhostTruthAssociationFraction", m_titlePrefix+" jet GhostTruthAssociationFraction", 100, 0, 1); + //m + //m_truth_pt_m = book(m_name, "truth_pt_m" , m_titlePrefix+" jet truth p_{T} [GeV]", 100, 0, 1000); + //m_truth_pt_l = book(m_name, "truth_pt_l" , m_titlePrefix+" jet truth p_{T} [GeV]", 100, 0, 5000); + //m + //m_truth_eta = book(m_name, "truth_eta" , m_titlePrefix+" jet truth #eta", 100, -3 , 3); + //m_truth_phi = book(m_name, "truth_phi" , m_titlePrefix+" jet truth #phi", 100, -TMath::Pi(), TMath::Pi()); + + + } + + if( m_infoSwitch->m_truthDetails ) { + if(m_debug) Info("JetHists::initialize()", "adding detailed truth plots"); + + m_truthCount_BhadFinal = book(m_name, "GhostBHadronsFinalCount", "Truth Count BHad (final)" , 10, -0.5, 9.5); + m_truthCount_BhadInit = book(m_name, "GhostBHadronsInitialCount", "Truth Count BHad (initial)" , 10, -0.5, 9.5); + m_truthCount_BQFinal = book(m_name, "GhostBQuarksFinalCount", "Truth Count BQuark (final)" , 10, -0.5, 9.5); + m_truthPt_BhadFinal = book(m_name, "GhostBHadronsFinalPt", "Truth p_{T} BHad (final)" , 100, 0, 100); + m_truthPt_BhadInit = book(m_name, "GhostBHadronsInitialPt", "Truth p_{T} BHad (initial)" , 100, 0, 100); + m_truthPt_BQFinal = book(m_name, "GhostBQuarksFinalPt", "Truth p_{T} BQuark (final)" , 100, 0, 100); + + m_truthCount_ChadFinal = book(m_name, "GhostCHadronsFinalCount", "Truth Count CHad (final)" , 10, -0.5, 9.5); + m_truthCount_ChadInit = book(m_name, "GhostCHadronsInitialCount", "Truth Count CHad (initial)" , 10, -0.5, 9.5); + m_truthCount_CQFinal = book(m_name, "GhostCQuarksFinalCount", "Truth Count CQuark (final)" , 10, -0.5, 9.5); + m_truthPt_ChadFinal = book(m_name, "GhostCHadronsFinalPt", "Truth p_{T} CHad (final)" , 100, 0, 100); + m_truthPt_ChadInit = book(m_name, "GhostCHadronsInitialPt", "Truth p_{T} CHad (initial)" , 100, 0, 100); + m_truthPt_CQFinal = book(m_name, "GhostCQuarksFinalPt", "Truth p_{T} CQuark (final)" , 100, 0, 100); + + m_truthCount_TausFinal = book(m_name, "GhostTausFinalCount", "Truth Count Taus (final)" , 10, -0.5, 9.5); + m_truthPt_TausFinal = book(m_name, "GhostTausFinalPt", "Truth p_{T} Taus (final)" , 100, 0, 100); + + } + + if(m_infoSwitch->m_JVC){ + if(m_debug) Info("JetHists::initialize()", "adding JVC plots"); + m_JVC = book(m_name, "JVC", m_titlePrefix+"JVC", 100, -5, 5); + } + + if( m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT ) { + if(m_debug) Info("JetHists::initialize()", "adding btagging plots"); + + m_COMB = book(m_name, "COMB", m_titlePrefix+"COMB" , 100, -20, 40); + m_JetFitter = book(m_name, "JetFitter", m_titlePrefix+"JetFitter" , 100, -10, 10); + + if(m_infoSwitch->m_vsActualMu){ + // counts (e.g. numbers of jets) vs. proton-proton Interactions + m_actualMu = book(m_name, "actualMu", "number vs. actual #mu", 50, 0, 100); + } + + } + + if(m_infoSwitch->m_btag_jettrk) { + m_trkSum_ntrk = book(m_name, "trkSum_ntrk", "trkSum_ntrk" , 40, -0.5, 39.5); + m_trkSum_sPt = book(m_name, "trkSum_sPt", "trkSum_sPt" , 100, -10, 200.0); + m_trkSum_vPt = book(m_name, "trkSum_vPt", "trkSum_vPt" , 100, -10, 200.0); + m_trkSum_vAbsEta = book(m_name, "trkSum_vAbsEta", "trkSum_vAbsEta" , 50, -0.1, 3.0); + m_width = book(m_name, "width", "width" , 100, -0.1, 0.5); + m_n_trk_sigd0cut = book(m_name, "n_trk_sigd0cut", "n_trk_sigd0cut" , 30, -0.5, 29.5); + m_trk3_d0sig = book(m_name, "trk3_d0sig", "trk3_d0sig" , 100, -20., 20.0); + m_trk3_z0sig = book(m_name, "trk3_z0sig", "trk3_z0sig" , 100, -20., 20.0); + m_sv_scaled_efc = book(m_name, "sv_scaled_efc", "sv_scaled_efc" , 100, -0.1, 10.1); + m_jf_scaled_efc = book(m_name, "jf_scaled_efc", "jf_scaled_efc" , 100, -0.1, 10.1); + } + + if( m_infoSwitch->m_jetFitterDetails ) { + if(m_debug) Info("JetHists::initialize()", "adding JetFitter Detail plots"); + + m_jf_nVTX = book(m_name, "JetFitter_nVTX" , "JetFitter_nVTX" , 10, -0.5, 9.5 ); + m_jf_nSingleTracks = book(m_name, "JetFitter_nSingleTracks" , "JetFitter_nSingleTracks" , 10, -0.5, 9.5 ); + m_jf_nTracksAtVtx = book(m_name, "JetFitter_nTracksAtVtx" , "JetFitter_nTracksAtVtx" , 20, -0.5, 19.5 ); + m_jf_mass = book(m_name, "JetFitter_mass" , "JetFitter_mass" , 100, 0, 10 ); + m_jf_energyFraction = book(m_name, "JetFitter_energyFraction", "JetFitter_energyFraction", 100, -0.1, 1.1 ); + m_jf_significance3d = book(m_name, "JetFitter_significance3d", "JetFitter_significance3d", 100, 0, 100 ); + m_jf_deltaeta = book(m_name, "JetFitter_deltaeta" , "JetFitter_deltaeta" , 100, -0.2, 0.2); + m_jf_deltaeta_l = book(m_name, "JetFitter_deltaeta_l" , "JetFitter_deltaeta" , 100, -0.4, 0.4); + m_jf_deltaphi = book(m_name, "JetFitter_deltaphi" , "JetFitter_deltaphi" , 100, -0.2, 0.2); + m_jf_deltaR = book(m_name, "JetFitter_deltaR" , "JetFitter_deltaR" , 100, -0.01, 0.5); + m_jf_deltaphi_l = book(m_name, "JetFitter_deltaphi_l" , "JetFitter_deltaphi" , 100, -0.4, 0.4); + m_jf_N2Tpar = book(m_name, "JetFitter_N2Tpair" , "JetFitter_N2Tpair" , 20, -0.5, 19.5); + m_jf_pb = book(m_name, "JetFitter_pb" , "JetFitter_pb" , 100, -0.1, 1); + m_jf_pc = book(m_name, "JetFitter_pc" , "JetFitter_pc" , 100, -0.1, 1); + m_jf_pu = book(m_name, "JetFitter_pu" , "JetFitter_pu" , 100, -0.1, 1); + m_jf_mass_unco = book(m_name, "JetFitter_mass_unco" , "JetFitter_mass_unco" , 100, -0.1, 10); + m_jf_dR_flight = book(m_name, "JetFitter_dR_flight" , "JetFitter_dR_flight" , 100, -0.1, 1); + + } + + if( m_infoSwitch->m_svDetails ) { + if(m_debug) Info("JetHists::initialize()", "adding JetFitter Detail plots"); + m_SV0 = book(m_name, "SV0", "SV0" , 100, -20, 200); + m_sv0_NGTinSvx = book(m_name, "SV0_NGTinSvx", "SV0_NGTinSvx", 20, -0.5, 19.5); + m_sv0_N2Tpair = book(m_name, "SV0_N2Tpair ", "SV0_N2Tpair ", 40, -9.5, 29.5); + m_sv0_massvx = book(m_name, "SV0_massvx ", "SV0_massvx ", 100, -0.1, 8); + m_sv0_efracsvx = book(m_name, "SV0_efracsvx", "SV0_efracsvx", 100, -0.1, 1.2); + m_sv0_normdist = book(m_name, "SV0_normdist", "SV0_normdist", 100, -10, 70); + + m_SV1_pu = book(m_name, "SV1_pu", "SV1_pu" , 100, -0.1, 1.1); + m_SV1_pb = book(m_name, "SV1_pb", "SV1_pb" , 100, -0.1, 1.1); + m_SV1_pc = book(m_name, "SV1_pc", "SV1_pc" , 100, -0.1, 1.1); + m_SV1 = book(m_name, "SV1", "SV1" , 100, -5, 15); + m_SV1_c = book(m_name, "SV1_c", "SV1_c" , 100, -5, 15); + m_SV1_cu = book(m_name, "SV1_cu", "SV1_cu" , 100, -5, 15); + + m_sv1_NGTinSvx = book(m_name, "SV1_NGTinSvx", "SV1_NGTinSvx", 20, -0.5, 19.5); + m_sv1_N2Tpair = book(m_name, "SV1_N2Tpair ", "SV1_N2Tpair ", 40, -9.5, 29.5); + m_sv1_massvx = book(m_name, "SV1_massvx ", "SV1_massvx ", 100, -0.1, 8); + m_sv1_efracsvx = book(m_name, "SV1_efracsvx", "SV1_efracsvx", 100, -0.1, 1.2); + m_sv1_normdist = book(m_name, "SV1_normdist", "SV1_normdist", 100, -10, 70); + m_SV1_Lxy = book(m_name, "SV1_Lxy", "SV1_Lxy", 100, -1, 70); + m_SV1_sig3d = book(m_name, "SV1_sig3d", "SV1_sig3d", 100, 0, 100); + m_SV1_L3d = book(m_name, "SV1_L3d", "SV1_L3d", 100, -1, 70); + m_SV1_distmatlay = book(m_name, "SV1_distmatlay","SV1_distmatlay", 100, -1, 30); + m_SV1_dR = book(m_name, "SV1_dR", "SV1_dR", 100, -0.1, 2); + + } + + if( m_infoSwitch->m_ipDetails ) { + m_IP2D_pu = book(m_name, "IP2D_pu", "IP2D_pu" , 100, -0.1, 1.1); + m_IP2D_pb = book(m_name, "IP2D_pb", "IP2D_pb" , 100, -0.1, 1.1); + m_IP2D_pc = book(m_name, "IP2D_pc", "IP2D_pc" , 100, -0.1, 1.1); + m_IP2D = book(m_name, "IP2D", "IP2D" , 100, -10, 40); + m_IP2D_c = book(m_name, "IP2D_c", "IP2D_c" , 100, -10, 40); + m_IP2D_cu = book(m_name, "IP2D_cu", "IP2D_cu" , 100, -10, 40); + m_nIP2DTracks = book(m_name, "nIP2DTracks" , "nIP2DTracks" , 20, -0.5, 19.5); + m_IP2D_gradeOfTracks = book(m_name, "IP2D_gradeOfTracks" , "IP2D_gradeOfTracks" , 20, -0.5, 19.5); + m_IP2D_flagFromV0ofTracks = book(m_name, "IP2D_flagFromV0ofTracks" , "IP2D_flagFromV0ofTracks", 5, -0.5, 4.5); + m_IP2D_valD0wrtPVofTracks = book(m_name, "IP2D_valD0wrtPVofTracks" , "IP2D_valD0wrtPVofTracks", 100, -2.0, 2.0); + m_IP2D_sigD0wrtPVofTracks = book(m_name, "IP2D_sigD0wrtPVofTracks" , "IP2D_sigD0wrtPVofTracks", 100, -15.0, 15.0); + m_IP2D_sigD0wrtPVofTracks_l = book(m_name, "IP2D_sigD0wrtPVofTracks_l", "IP2D_sigD0wrtPVofTracks", 100, -50.0, 50.0); + m_IP2D_errD0wrtPVofTracks = book(m_name, "IP2D_errD0wrtPVofTracks" , "IP2D_errD0wrtPVofTracks", 100, 0.0, 1.0); + + m_IP2D_weightBofTracks = book(m_name, "IP2D_weightBofTracks" , "IP2D_weightBofTracks" , 100, -0.1, 1.5); + m_IP2D_weightCofTracks = book(m_name, "IP2D_weightCofTracks" , "IP2D_weightCofTracks" , 100, -0.1, 1.5); + m_IP2D_weightUofTracks = book(m_name, "IP2D_weightUofTracks" , "IP2D_weightUofTracks" , 100, -0.1, 1.5); + + m_IP3D_pu = book(m_name, "IP3D_pu", "IP3D_pu" , 100, -0.1, 1.1); + m_IP3D_pb = book(m_name, "IP3D_pb", "IP3D_pb" , 100, -0.1, 1.1); + m_IP3D_pc = book(m_name, "IP3D_pc", "IP3D_pc" , 100, -0.1, 1.1); + m_IP3D = book(m_name, "IP3D", "IP3D" , 100, -20, 40); + m_IP3D_c = book(m_name, "IP3D_c", "IP3D_c" , 100, -20, 40); + m_IP3D_cu = book(m_name, "IP3D_cu", "IP3D_cu" , 100, -20, 40); + m_nIP3DTracks = book(m_name, "nIP3DTracks" , "nIP3DTracks" , 20, -0.5, 19.5); + m_IP3D_gradeOfTracks = book(m_name, "IP3D_gradeOfTracks" , "IP3D_gradeOfTracks" , 20, -0.5, 19.5); + m_IP3D_flagFromV0ofTracks = book(m_name, "IP3D_flagFromV0ofTracks" , "IP3D_flagFromV0ofTracks", 5, -0.5, 4.5); + m_IP3D_valD0wrtPVofTracks = book(m_name, "IP3D_valD0wrtPVofTracks" , "IP3D_valD0wrtPVofTracks", 100, -2.0, 2.0); + m_IP3D_sigD0wrtPVofTracks = book(m_name, "IP3D_sigD0wrtPVofTracks" , "IP3D_sigD0wrtPVofTracks", 100, -15.0, 15.0); + m_IP3D_sigD0wrtPVofTracks_l = book(m_name, "IP3D_sigD0wrtPVofTracks_l", "IP3D_sigD0wrtPVofTracks", 100, -50.0, 50.0); + m_IP3D_errD0wrtPVofTracks = book(m_name, "IP3D_errD0wrtPVofTracks" , "IP3D_errD0wrtPVofTracks", 100, 0.0, 1.0); + + m_IP3D_valZ0wrtPVofTracks = book(m_name, "IP3D_valZ0wrtPVofTracks" , "IP3D_valZ0wrtPVofTracks", 100, -2.0, 2.0); + m_IP3D_sigZ0wrtPVofTracks = book(m_name, "IP3D_sigZ0wrtPVofTracks" , "IP3D_sigZ0wrtPVofTracks", 100, -15.0, 15.0); + m_IP3D_sigZ0wrtPVofTracks_l = book(m_name, "IP3D_sigZ0wrtPVofTracks_l", "IP3D_sigZ0wrtPVofTracks", 100, -50.0, 50.0); + m_IP3D_errZ0wrtPVofTracks = book(m_name, "IP3D_errZ0wrtPVofTracks" , "IP3D_errZ0wrtPVofTracks", 100, 0.0, 1.0); + + + m_IP3D_weightBofTracks = book(m_name, "IP3D_weightBofTracks" , "IP3D_weightBofTracks" , 100, -0.1, 1.5); + m_IP3D_weightCofTracks = book(m_name, "IP3D_weightCofTracks" , "IP3D_weightCofTracks" , 100, -0.1, 1.5); + m_IP3D_weightUofTracks = book(m_name, "IP3D_weightUofTracks" , "IP3D_weightUofTracks" , 100, -0.1, 1.5); + + } + + if( m_infoSwitch->m_substructure ){ + m_tau1 = book(m_name, "Tau1", "#Tau_{1}", 100, 0, 1.0); + m_tau2 = book(m_name, "Tau2", "#Tau_{2}", 100, 0, 1.0); + m_tau3 = book(m_name, "Tau3", "#Tau_{3}", 100, 0, 1.0); + m_tau21 = book(m_name, "Tau21", "#Tau_{21}", 100, 0, 1.0); + m_tau32 = book(m_name, "Tau32", "#Tau_{32}", 100, 0, 1.0); + m_tau1_wta = book(m_name, "Tau1_wta", "#Tau_{1}^{wta}", 100, 0, 1.0); + m_tau2_wta = book(m_name, "Tau2_wta", "#Tau_{2}^{wta}", 100, 0, 1.0); + m_tau3_wta = book(m_name, "Tau3_wta", "#Tau_{3}^{wta}", 100, 0, 1.0); + m_tau21_wta = book(m_name, "Tau21_wta", "#Tau_{21}^{wta}", 100, 0, 1.0); + m_tau32_wta = book(m_name, "Tau32_wta", "#Tau_{32}^{wta}", 100, 0, 1.0); + m_numConstituents = book(m_name, "numConstituents", "num. constituents", 501, -0.5, 500.5); + } + + // + // Tracks in Jet + // + if( m_infoSwitch->m_tracksInJet ){ + m_nTrk = book(m_name, "nTrk", "nTrk", 100, -0.5, 99.5); + + m_tracksInJet = new TracksInJetHists(m_name+"trk_", ""); + m_tracksInJet -> initialize( ); + } + + if( m_infoSwitch->m_byEta){ + + m_jetPt_eta_0_1 = book(m_name, "jetPt_eta_0_1", "p_{T} [GeV]",100, 0, 1000); + m_jetPt_eta_1_2 = book(m_name, "jetPt_eta_1_2", "p_{T} [GeV]",100, 0, 1000); + m_jetPt_eta_2_2p5 = book(m_name, "jetPt_eta_2_2p5", "p_{T} [GeV]",100, 0, 1000); + m_jetPt_eta_1_2p5 = book(m_name, "jetPt_eta_1_2p5", "p_{T} [GeV]",100, 0, 1000); + + } + + + if( m_infoSwitch->m_onlineBS ){ + + m_bs_online_vz = book(m_name, "bs_online_vz", "bs_online_vz", 200, -5, 5); + m_bs_online_vz_l = book(m_name, "bs_online_vz_l","bs_online_vz_l", 200, -100, 100); + m_bs_online_vy = book(m_name, "bs_online_vy", "bs_online_vy", 200, -2, 2); + m_bs_online_vx = book(m_name, "bs_online_vx", "bs_online_vx", 200, -2, 2); + + m_eta_bs_online_vz_0_1 = book(m_name, "eta_bs_online_vz_0_1", "Jet #eta", 80, -4, 4); + m_eta_bs_online_vz_1_1p5 = book(m_name, "eta_bs_online_vz_1_1p5", "Jet #eta", 80, -4, 4); + m_eta_bs_online_vz_1p5_2 = book(m_name, "eta_bs_online_vz_1p5_2", "Jet #eta", 80, -4, 4); + + } + + if( m_infoSwitch->m_onlineBS || m_infoSwitch->m_hltVtxComp ){ + + m_vtxClass = book(m_name, "vtxClass", "vtxClass", 3, -0.5, 2.5); + + } + + + if( m_infoSwitch->m_hltVtxComp ){ + + m_vtx_offline_x0 = book(m_name, "vtx_offline_x0", "vtx_offline_x0", 100, -0.2, 0.2); + m_vtx_offline_y0 = book(m_name, "vtx_offline_y0", "vtx_offline_y0", 100, -0.2, 0.2); + m_vtx_offline_z0 = book(m_name, "vtx_offline_z0", "vtx_offline_z0", 100, -200, 200); + m_vtx_offline_z0_s = book(m_name, "vtx_offline_z0_s", "vtx_offline_z0_s", 100, -10, 10); + + m_vtx_online_x0 = book(m_name, "vtx_online_x0", "vtx_online_x0", 100, -0.2, 0.2); + m_vtx_online_y0 = book(m_name, "vtx_online_y0", "vtx_online_y0", 100, -0.2, 0.2); + m_vtx_online_z0 = book(m_name, "vtx_online_z0", "vtx_online_z0", 100, -200, 200); + m_vtx_online_z0_s = book(m_name, "vtx_online_z0_s","vtx_online_z0_s", 100, -10, 10); + + m_vtx_online_x0_raw = book(m_name, "vtx_online_x0_raw", "vtx_online_x0_raw", 100, -0.2, 0.2); + m_vtx_online_y0_raw = book(m_name, "vtx_online_y0_raw", "vtx_online_y0_raw", 100, -0.2, 0.2); + m_vtx_online_z0_raw = book(m_name, "vtx_online_z0_raw", "vtx_online_z0_raw", 100, -200, 200); + + m_vtxOnlineValid = book(m_name, "vtx_online_valid", "vtx_online_valid", 2, -0.5, 1.5); + m_vtxOfflineValid = book(m_name, "vtx_offline_valid", "vtx_offline_valid", 2, -0.5, 1.5); + + m_vtxDiffx0 = book(m_name, "vtx_diff_x0", "vtx_diff_x0", 100, -0.1, 0.1); + m_vtxDiffx0_l = book(m_name, "vtx_diff_x0_l", "vtx_diff_x0_l", 100, -1, 1); + + m_vtxDiffy0 = book(m_name, "vtx_diff_y0", "vtx_diff_y0", 100, -0.1, 0.1); + m_vtxDiffy0_l = book(m_name, "vtx_diff_y0_l", "vtx_diff_y0_l", 100, -1, 1); + + m_vtxDiffz0 = book(m_name, "vtx_diff_z0", "vtx_diff_z0", 100, -100, 100); + m_vtxDiffz0_m = book(m_name, "vtx_diff_z0_m", "vtx_diff_z0_m", 100, -20, 20); + m_vtxDiffz0_s = book(m_name, "vtx_diff_z0_s", "vtx_diff_z0_s", 100, -5, 5); + + m_vtxBkgDiffz0 = book(m_name, "vtx_bkg_diff_z0", "vtx_bkg_diff_z0", 100, -100, 100); + m_vtxBkgDiffz0_m = book(m_name, "vtx_bkg_diff_z0_m", "vtx_bkg_diff_z0_m", 100, -20, 20); + m_vtxBkgDiffz0_s = book(m_name, "vtx_bkg_diff_z0_s", "vtx_bkg_diff_z0_s", 100, -5, 5); + + m_vtxDiffz0_vs_vtx_offline_z0 = book(m_name, "vtxDiffz0_vs_vtx_offline_z0", + "vtx_offline_z0", 100, -200, 200, + "vtx_diff_z0", 100, -100, 100); + + m_vtxDiffz0_s_vs_vtx_offline_z0 = book(m_name, "vtxDiffz0_s_vs_vtx_offline_z0", + "vtx_offline_z0", 100, -200, 200, + "vtx_diff_z0", 100, -10, 10); + + m_vtxDiffz0_s_vs_vtxDiffx0 = book(m_name, "vtxDiffz0_s_vs_vtxDiffx0", + "vtx_diff_x0", 100, -0.1, 0.1, + "vtx_diff_z0", 100, -10, 10); + + m_vtxDiffz0_s_vs_vtxDiffy0 = book(m_name, "vtxDiffz0_s_vs_vtxDiffy0", + "vtx_diff_y0", 100, -0.1, 0.1, + "vtx_diff_z0", 100, -10, 10); + + m_vtxClass_vs_jetPt = book(m_name, "vtxClass_vs_jetPt", + "jetPt", 100, 0, 1000, + "vtxClass", 4, -1.1, 3.1); + + m_vtx_online_y0_vs_vtx_online_z0 = book(m_name, "vtx_online_y0_vs_vtx_online_z0", + "vtx_online_z0", 100, -50, 50, + "vtx_online_y0", -50, 50); + + m_vtx_online_x0_vs_vtx_online_z0 = book(m_name, "vtx_online_x0_vs_vtx_online_z0", + "vtx_online_z0", 100, -50, 50, + "vtx_online_x0", -50, 50); + + + if(m_infoSwitch->m_vsLumiBlock){ + m_vtxDiffx0_vs_lBlock = book(m_name, "vtxDiffx0_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx_diff_x0", -0.1, 0.1); + m_vtxDiffy0_vs_lBlock = book(m_name, "vtxDiffy0_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx_diff_y0", -0.1, 0.1); + m_vtxDiffz0_vs_lBlock = book(m_name, "vtxDiffz0_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx_diff_z0", -5, 5); + m_vtxClass_vs_lBlock = book(m_name, "vtxClass_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtxClass", -0.1, 1.1); + m_vtxEff1_vs_lBlock = book(m_name, "vtxEff1_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1); + m_vtxEff10_vs_lBlock = book(m_name, "vtxEff10_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1); + m_vtxEff1_raw_vs_lBlock = book(m_name, "vtxEff1_raw_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1); + m_vtxEff10_raw_vs_lBlock = book(m_name, "vtxEff10_raw_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1); + m_vtxEff1_noDummy_vs_lBlock = book(m_name, "vtxEff1_noDummy_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1); + m_vtxEff10_noDummy_vs_lBlock = book(m_name, "vtxEff10_noDummy_vs_lBlock", "LumiBlock", 200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1); + + } + + if(m_infoSwitch->m_lumiB_runN){ + + Double_t runBins[]= { 297730, 298595, 298609, 298633, 298687, 298690, 298771, 298773, 298862, 298967, 299055, 299144, 299147, 299184, 299243, 299584, 300279, 300345, 300415, 300418, 300487, 300540, 300571, 300600, 300655, 300687, 300784, 300800, 300863, 300908, 301912, 301918, 301932, 301973, 302053, 302137, 302265, 302269, 302300, 302347, 302380, 302391, 302393, 302737, 302831, 302872, 302919, 302925, 302956, 303007, 303079, 303201, 303208, 303264, 303266, 303291, 303304, 303338, 303421, 303499, 303560, 303638, 303832, 303846, 303892, 303943, 304006, 304008, 304128, 304178, 304198, 304211, 304243, 304308, 304337, 304409, 304431, 304494, 305380, 305543, 305571, 305618, 305671, 305674, 305723, 305727, 305735, 305777, 305811, 305920, 306269, 306278, 306310, 306384, 306419, 306442, 306448, 306451, 307126, 307195, 307259, 307306, 307354, 307358, 307394, 307454, 307514, 307539, 307569, 307601, 307619, 307656, 307710, 307716, 307732, 307861, 307935, 308047, 308084, 309375, 309390, 309440, 309516, 309640, 309674, 309759, 310015, 310247, 310249, 310341, 310370, 310405, 310468, 310473, 310634, 310691, 310738, 310809, 310863, 310872, 310969, 311071, 311170, 311244, 311287, 311321, 311365, 311402, 311473, 311481, 311500 }; + int nRunBins=150; + + m_lumiB_runN = book(m_name, "lumiB_runN", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + m_lumiB_runN_bs_online_vz = book(m_name, "lumiB_runN_bs_online_vz", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + m_lumiB_runN_bs_den = book(m_name, "lumiB_runN_bs_den", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + m_lumiB_runN_vtxClass = book(m_name, "lumiB_runN_vtxClass", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + //m_lumiB_runN_vtxDiffz0 = book(m_name, "lumiB_runN_vtxDiffz0", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + m_lumiB_runN_lumiB = book(m_name, "lumiB_runN_lumiB", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins); + } + } + + + // trackPV + if(m_infoSwitch->m_trackPV) + { + //m_NumTrkPt1000PV = book(m_name, "NumTrkPt1000PV", m_titlePrefix+" jet N_{trk,P_{T}>1 GeV}" , 50, -0.5, 49.5); + //m_SumPtTrkPt1000PV = book(m_name, "SumPtTrkPt1000PV", m_titlePrefix+" jet #sum_{trk,P_{T}>1 GeV}" , 100, 0, 1000); + //m_TrackWidthPt1000PV = book(m_name, "TrackWidthPt1000P",m_titlePrefix+" jet w_{trk,P_{T}>1 GeV}" , 100, 0, 0.5); + //m_NumTrkPt500PV = book(m_name, "NumTrkPt500PV", m_titlePrefix+" jet N_{trk,P_{T}>500 MeV}" , 50, -0.5, 49.5); + //m_SumPtTrkPt500PV = book(m_name, "SumPtTrkPt500PV", m_titlePrefix+" jet #sum_{trk,P_{T}>500 MeV}", 100, 0, 1000); + //m_TrackWidthPt500PV = book(m_name, "TrackWidthPt500P", m_titlePrefix+" jet w_{trk,P_{T}>500 MeV}" , 100, 0, 0.5); + //m_JVFPV = book(m_name, "JVFPV", m_titlePrefix+" jet JVF_{PV}" , 100, 0, 0.5); + } + + // trackAll or trackPV + if(m_infoSwitch->m_trackAll || m_infoSwitch->m_trackPV) + { + //m_Jvt = book(m_name, "Jvt", m_titlePrefix+" jet JVT" , 100, -0.2, 1); + //m_JvtJvfcorr= book(m_name, "JvtJvfcorr", m_titlePrefix+" jet corrJVF" , 100, -1 , 1); + //m_JvtRpt = book(m_name, "JvtRpt", m_titlePrefix+" jet R_{p_{T}}" , 100, 0 , 1.5); + } + + + // charge + if(m_infoSwitch->m_charge) + { + //m_charge= book(m_name, "charge", m_titlePrefix+"charge", 100, -10, 10); + } + + // Average Mu + if(m_infoSwitch->m_byAverageMu){ + m_avgMu = book(m_name, "avgMu", "Average Mu", 101, -0.5, 100); + m_jetPt_avgMu_00_15 = book(m_name, "jetPt_avgMu_00_15", "jet p_{T} [GeV]", 120, 0, 600); + m_jetPt_avgMu_15_25 = book(m_name, "jetPt_avgMu_15_25", "jet p_{T} [GeV]", 120, 0, 600); + m_jetPt_avgMu_25 = book(m_name, "jetPt_avgMu_25", "jet p_{T} [GeV]", 120, 0, 600); + m_avgMu_vs_jetPt = book(m_name, "avgMu_vs_jetPt", + "jet p_{T} [GeV]", 120, 0, 600, + "Average Mu", 51, -0.5, 50); + } + + // Eta-Phi Map + if(m_infoSwitch->m_etaPhiMap) + { + m_etaPhi = book(m_name, "etaPhi", m_titlePrefix+"#eta", 100, -2.5, 2.5, + m_titlePrefix+"#phi", 120, -TMath::Pi(), TMath::Pi() ); + } + + + + return StatusCode::SUCCESS; + } + + void JetHists::record(EL::IWorker* wk) { + HistogramManager::record(wk); + + if(m_infoSwitch->m_tracksInJet){ + m_tracksInJet -> record( wk ); + } + } + + StatusCode JetHists::execute( const xAOD::Jet* jet, float eventWeight, const xAOD::EventInfo* eventInfo ) { + return execute(static_cast(jet), eventWeight, eventInfo); + } + + StatusCode JetHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgJetHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo)); + + if(m_debug) std::cout << "JetHists: in execute " <(particle); + if(m_debug) std::cout << "JetHists: got jet " << jet << std::endl; + if(jet==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Jet" ); + return StatusCode::FAILURE; + } + + // clean + if( m_infoSwitch->m_clean ) { + if(m_debug) std::cout << "JetHists: m_clean " < jetTime ("Timing"); + if( jetTime.isAvailable( *jet ) ) { + m_jetTime -> Fill( jetTime( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor LArQuality ("LArQuality"); + if( LArQuality.isAvailable( *jet ) ) { + m_LArQuality -> Fill( LArQuality( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor hecq ("HECQuality"); + if( hecq.isAvailable( *jet ) ) { + m_hecq -> Fill( hecq( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor negE ("NegativeE"); + if( negE.isAvailable( *jet ) ) { + m_negE -> Fill( negE( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor avLArQF ("AverageLArQF"); + if( avLArQF.isAvailable( *jet ) ) { + m_avLArQF -> Fill( avLArQF( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor bchCorrCell ("BchCorrCell"); + if( bchCorrCell.isAvailable( *jet ) ) { + m_bchCorrCell -> Fill( bchCorrCell( *jet ), eventWeight ); + } + + // 0062 N90Cells? + static SG::AuxElement::ConstAccessor N90Const ("N90Constituents"); + if( N90Const.isAvailable( *jet ) ) { + m_N90Const -> Fill( N90Const( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor ChargedFraction ("ChargedFraction"); + if( ChargedFraction.isAvailable( *jet ) ) { + m_ChargedFraction -> Fill( ChargedFraction( *jet ), eventWeight ); + } + + + // 0030 LArBadHVEnergy, + // 0031 LArBadHVRatio, + // 0035 NumTowers, + // 0057 isBadLoose, + // 0058 isBadMedium, + // 0059 isBadTight, + // 0060 isUgly, + // 0063 OotFracClusters10, + // 0064 OotFracClusters5, + // 0065 OotFracCells5, + // 0066 OotFracCells10, + + } // fillClean + + // Pileup + if(m_infoSwitch->m_vsActualMu){ + float actualMu = eventInfo->actualInteractionsPerCrossing(); + m_actualMu->Fill(actualMu, eventWeight); + } + + if (m_infoSwitch->m_byAverageMu) + { + float averageMu = eventInfo->averageInteractionsPerCrossing(); + m_avgMu->Fill(averageMu, eventWeight); + } + + // energy + if( m_infoSwitch->m_energy ) { + if(m_debug) std::cout << "JetHists: m_energy " < HECf ("HECFrac"); + if( HECf.isAvailable( *jet ) ) { + m_HECf -> Fill( HECf( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor EMf ("EMFrac"); + if( EMf.isAvailable( *jet ) ) { + m_EMf -> Fill( EMf( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor centroidR ("CentroidR"); + if( centroidR.isAvailable( *jet ) ) { + m_centroidR -> Fill( centroidR( *jet ), eventWeight ); + } + + /* + + static SG::AuxElement::ConstAccessor samplingMax ("SamplingMax"); + if( samplingMax.isAvailable( *jet ) ) { + m_samplingMax -> Fill( samplingMax( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor ePerSamp ("EnergyPerSampling"); + if( ePerSamp.isAvailable( *jet ) ) { + m_ePerSamp -> Fill( ePerSamp( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor fracSampMax ("FracSamplingMax"); + if( fracSampMax.isAvailable( *jet ) ) { + m_fracSampMax -> Fill( fracSampMax( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor lowEtFrac ("LowEtConstituentsFrac"); + if( lowEtFrac.isAvailable( *jet ) ) { + m_lowEtFrac -> Fill( lowEtFrac( *jet ), eventWeight ); + } + + // 0036 Offset, + // 0037 OriginIndex , + */ + + } + + if( m_infoSwitch->m_layer ){ + if(m_debug) std::cout << "JetHists: m_layer " < > ePerSamp ("EnergyPerSampling"); + if( ePerSamp.isAvailable( *jet ) ) { + vector ePerSampVals = ePerSamp( *jet ); + float jetE = jet->e(); + m_PreSamplerB -> Fill( ePerSampVals.at(0) / jetE ); + m_EMB1 -> Fill( ePerSampVals.at(1) / jetE ); + m_EMB2 -> Fill( ePerSampVals.at(2) / jetE ); + m_EMB3 -> Fill( ePerSampVals.at(3) / jetE ); + m_PreSamplerE -> Fill( ePerSampVals.at(4) / jetE ); + m_EME1 -> Fill( ePerSampVals.at(5) / jetE ); + m_EME2 -> Fill( ePerSampVals.at(6) / jetE ); + m_EME3 -> Fill( ePerSampVals.at(7) / jetE ); + m_HEC0 -> Fill( ePerSampVals.at(8) / jetE ); + m_HEC1 -> Fill( ePerSampVals.at(9) / jetE ); + m_HEC2 -> Fill( ePerSampVals.at(10) / jetE ); + m_HEC3 -> Fill( ePerSampVals.at(11) / jetE ); + m_TileBar0 -> Fill( ePerSampVals.at(12) / jetE ); + m_TileBar1 -> Fill( ePerSampVals.at(13) / jetE ); + m_TileBar2 -> Fill( ePerSampVals.at(14) / jetE ); + m_TileGap1 -> Fill( ePerSampVals.at(15) / jetE ); + m_TileGap2 -> Fill( ePerSampVals.at(16) / jetE ); + m_TileGap3 -> Fill( ePerSampVals.at(17) / jetE ); + m_TileExt0 -> Fill( ePerSampVals.at(18) / jetE ); + m_TileExt1 -> Fill( ePerSampVals.at(19) / jetE ); + m_TileExt2 -> Fill( ePerSampVals.at(20) / jetE ); + m_FCAL0 -> Fill( ePerSampVals.at(21) / jetE ); + m_FCAL1 -> Fill( ePerSampVals.at(22) / jetE ); + m_FCAL2 -> Fill( ePerSampVals.at(23) / jetE ); + } + } + + + + // area + /* + if ( m_fillArea ) { + + static SG::AuxElement::ConstAccessor actArea ("ActiveArea"); + if( actArea.isAvailable( *jet ) ) { + m_actArea -> Fill( actArea( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor voroniA ("VoronoiArea"); + if( voroniA.isAvailable( *jet ) ) { + m_voroniA -> Fill( voroniA( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor voroniAE ("VoronoiAreaE"); + if( voroniAE.isAvailable( *jet ) ) { + m_voroniAE -> Fill( voroniAE( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor voroniAPx ("VoronoiAreaPx"); + if( voroniAPx.isAvailable( *jet ) ) { + m_voroniAPx -> Fill( voroniAPx( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor voroniAPy ("CentroidR"); + if( voroniAPy.isAvailable( *jet ) ) { + m_voroniAPy -> Fill( voroniAPy( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor voroniAPz ("CentroidR"); + if( voroniAPz.isAvailable( *jet ) ) { + m_voroniAPz -> Fill( voroniAPz( *jet ), eventWeight ); + } + + } + */ + + + /* + // tracks + if ( m_fillTrks ) { + // 0040 TrackMF, + // 0041 TrackMFindex, + // 0049 WIDTH, + // 0067 NumTrkPt1000, + // 0068 NumTrkPt500, + // 0069 SumPtTrkPt1000, + // 0070 SumPtTrkPt500, + // 0071 TrackWidthPt1000, + // 0072 TrackWidthPt500, + // 0012 GhostTrackCount, + // 0011 GhostMuonSegmentCount, + // 0027 HighestJVFVtx, + } */ + + + + /* + // isolation + if ( m_fillIso ) { + // 0024 IsoKR20Par, + // 0025 IsoKR20Perp, + } + */ + + /* + // substructure + if( m_fillSubstructure) { + // 0029 KtDR, + static SG::AuxElement::ConstAccessor ktDR ("KtDR"); + if( ktDR.isAvailable( *jet ) ) { + m_ktDR -> Fill( ktDR( *jet ), eventWeight ); + } + // 0050 YFlip12, + // 0051 YFlip13, + // 0074 Tau1, + // 0075 Tau2, + // 0076 Tau3, + // 0077 Dip12, + // 0078 Dip13, + // 0079 Dip23, + // 0080 DipExcl12, + // + // 0081 ThrustMin, + // 0082 ThrustMaj, + // + // 0083 FoxWolfram0, + // 0084 FoxWolfram1, + // 0085 FoxWolfram2, + // 0086 FoxWolfram3, + // 0087 FoxWolfram4, + // + // 0088 Sphericity, + // 0089 Aplanarity, + } + + */ + + // truth + // 0073 PtTruth, + // 0013 GhostTruthParticleCount, + // 0028 JetLabel, + // 0042 TruthMF, + // 0043 TruthMFindex, + + if( m_infoSwitch->m_truth ) { + if(m_debug) std::cout << "JetHists: m_truth " < TruthLabelID ("TruthLabelID"); + if( TruthLabelID.isAvailable( *jet ) ) { + m_truthLabelID -> Fill( TruthLabelID( *jet ), eventWeight ); + }else{ + static SG::AuxElement::ConstAccessor PartonTruthLabelID ("PartonTruthLabelID"); + if( PartonTruthLabelID.isAvailable( *jet ) ) { + m_truthLabelID -> Fill( PartonTruthLabelID( *jet ), eventWeight ); + } + } + + static SG::AuxElement::ConstAccessor HadronConeExclTruthLabelID ("HadronConeExclTruthLabelID"); + if( HadronConeExclTruthLabelID.isAvailable( *jet ) ) { + m_hadronConeExclTruthLabelID -> Fill( HadronConeExclTruthLabelID( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor TruthCount ("TruthCount"); + if( TruthCount.isAvailable( *jet ) ) { + m_truthCount -> Fill( TruthCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor TruthPt ("TruthPt"); + if( TruthPt.isAvailable( *jet ) ) { + m_truthPt -> Fill( TruthPt( *jet )/1000, eventWeight ); + } + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_B ("TruthLabelDeltaR_B"); + if( TruthLabelDeltaR_B.isAvailable( *jet ) ) { + m_truthDr_B -> Fill( TruthLabelDeltaR_B( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_C ("TruthLabelDeltaR_C"); + if( TruthLabelDeltaR_C.isAvailable( *jet ) ) { + m_truthDr_C -> Fill( TruthLabelDeltaR_C( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor TruthLabelDeltaR_T ("TruthLabelDeltaR_T"); + if( TruthLabelDeltaR_T.isAvailable( *jet ) ) { + m_truthDr_T -> Fill( TruthLabelDeltaR_T( *jet ), eventWeight ); + } + + } + + + if( m_infoSwitch->m_truthDetails ) { + if(m_debug) std::cout << "JetHists: m_truthDetails " < GhostBHadronsFinalCount ("GhostBHadronsFinalCount"); + if( GhostBHadronsFinalCount.isAvailable( *jet ) ) { + m_truthCount_BhadFinal -> Fill( GhostBHadronsFinalCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostBHadronsInitialCount ("GhostBHadronsInitialCount"); + if( GhostBHadronsInitialCount.isAvailable( *jet ) ) { + m_truthCount_BhadInit -> Fill( GhostBHadronsInitialCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostBQuarksFinalCount ("GhostBQuarksFinalCount"); + if( GhostBQuarksFinalCount.isAvailable( *jet ) ) { + m_truthCount_BQFinal -> Fill( GhostBQuarksFinalCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostBHadronsFinalPt ("GhostBHadronsFinalPt"); + if( GhostBHadronsFinalPt.isAvailable( *jet ) ) { + m_truthPt_BhadFinal -> Fill( GhostBHadronsFinalPt( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostBHadronsInitialPt ("GhostBHadronsInitialPt"); + if( GhostBHadronsInitialPt.isAvailable( *jet ) ) { + m_truthPt_BhadInit -> Fill( GhostBHadronsInitialPt( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostBQuarksFinalPt ("GhostBQuarksFinalPt"); + if( GhostBQuarksFinalPt.isAvailable( *jet ) ) { + m_truthPt_BQFinal -> Fill( GhostBQuarksFinalPt( *jet ), eventWeight ); + } + + + // + // C-Hadron Details + // + static SG::AuxElement::ConstAccessor GhostCHadronsFinalCount ("GhostCHadronsFinalCount"); + if( GhostCHadronsFinalCount.isAvailable( *jet ) ) { + m_truthCount_ChadFinal -> Fill( GhostCHadronsFinalCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostCHadronsInitialCount ("GhostCHadronsInitialCount"); + if( GhostCHadronsInitialCount.isAvailable( *jet ) ) { + m_truthCount_ChadInit -> Fill( GhostCHadronsInitialCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostCQuarksFinalCount ("GhostCQuarksFinalCount"); + if( GhostCQuarksFinalCount.isAvailable( *jet ) ) { + m_truthCount_CQFinal -> Fill( GhostCQuarksFinalCount( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostCHadronsFinalPt ("GhostCHadronsFinalPt"); + if( GhostCHadronsFinalPt.isAvailable( *jet ) ) { + m_truthPt_ChadFinal -> Fill( GhostCHadronsFinalPt( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostCHadronsInitialPt ("GhostCHadronsInitialPt"); + if( GhostCHadronsInitialPt.isAvailable( *jet ) ) { + m_truthPt_ChadInit -> Fill( GhostCHadronsInitialPt( *jet ), eventWeight ); + } + + static SG::AuxElement::ConstAccessor GhostCQuarksFinalPt ("GhostCQuarksFinalPt"); + if( GhostCQuarksFinalPt.isAvailable( *jet ) ) { + m_truthPt_CQFinal -> Fill( GhostCQuarksFinalPt( *jet ), eventWeight ); + } + + + // + // Tau Details + // + static SG::AuxElement::ConstAccessor GhostTausFinalCount ("GhostTausFinalCount"); + if( GhostTausFinalCount.isAvailable( *jet ) ) { + m_truthCount_TausFinal -> Fill( GhostTausFinalCount( *jet ), eventWeight ); + } + + + static SG::AuxElement::ConstAccessor GhostTausFinalPt ("GhostTausFinalPt"); + if( GhostTausFinalPt.isAvailable( *jet ) ) { + m_truthPt_TausFinal -> Fill( GhostTausFinalPt( *jet ), eventWeight ); + } + + + } + + // + // JVC + // + // if(m_infoSwitch->m_JVC) { + // if(m_debug) std::cout << "JetHists: m_JVC " << std::endl; + // m_JVC->Fill(jet->JVC, eventWeight); + // } + + // + // BTagging + // + if( m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT ) { + if(m_debug) std::cout << "JetHists: m_flavorTag " <m_flavorTag){ + btag_info = xAOD::BTaggingUtilities::getBTagging(*jet); + }else if(m_infoSwitch->m_flavorTagHLT){ + btag_info = jet->auxdata< const xAOD::BTagging* >("HLTBTag"); + } + + static SG::AuxElement::ConstAccessor SV0_significance3DAcc ("SV0_significance3D"); + if ( SV0_significance3DAcc.isAvailable(*btag_info) ) { + m_COMB -> Fill( btag_info->SV1_loglikelihoodratio() + btag_info->IP3D_loglikelihoodratio() , eventWeight ); + m_JetFitter -> Fill( btag_info->JetFitter_loglikelihoodratio() , eventWeight ); + } + + if(m_infoSwitch->m_btag_jettrk){ + if(m_debug) std::cout << "JetHists: m_btag_jettrk " <isAvailable("trkSum_ntrk") ? btag_info->auxdata("trkSum_ntrk") : -1; + float trkSum_sPt = btag_info->isAvailable("trkSum_SPt" ) ? btag_info->auxdata("trkSum_SPt" ) : -1000;//<== -1 GeV + float trkSum_vPt = 0; + float trkSum_vAbsEta= -10; + if (trkSum_ntrk>0) { + trkSum_vPt = btag_info->isAvailable("trkSum_VPt" ) ? btag_info->auxdata("trkSum_VPt" ) : -1000; + trkSum_vAbsEta= btag_info->isAvailable("trkSum_VEta") ? fabs(btag_info->auxdata("trkSum_VEta")) : -10 ; + } + + m_trkSum_ntrk -> Fill( trkSum_ntrk , eventWeight ); + m_trkSum_sPt -> Fill( trkSum_sPt/1000 , eventWeight ); + m_trkSum_vPt -> Fill( trkSum_vPt/1000 , eventWeight ); + m_trkSum_vAbsEta -> Fill( trkSum_vAbsEta , eventWeight ); + + /*** Generating MVb variables ***/ + std::vector< ElementLink< xAOD::TrackParticleContainer > > associationLinks; + bool trksOK=btag_info->variable > > ("IP3D", "TrackParticleLinks", associationLinks ); + + std::vector vectD0, vectD0Signi, vectZ0, vectZ0Signi; vectD0.clear(), vectD0Signi.clear(), vectZ0.clear(), vectZ0Signi.clear(); + trksOK &= btag_info->variable< std::vector > ("IP3D", "valD0wrtPVofTracks", vectD0 ); + trksOK &= btag_info->variable< std::vector > ("IP3D", "sigD0wrtPVofTracks", vectD0Signi); + trksOK &= btag_info->variable< std::vector > ("IP3D", "valZ0wrtPVofTracks", vectZ0 ); + trksOK &= btag_info->variable< std::vector > ("IP3D", "sigZ0wrtPVofTracks", vectZ0Signi); + if (vectD0.size() and vectD0Signi.size() and vectZ0.size() and vectZ0Signi.size()) { + trksOK &= associationLinks.size() == vectD0.size(); + trksOK &= associationLinks.size() == vectZ0.size(); + trksOK &= associationLinks.size() == vectD0Signi.size(); + trksOK &= associationLinks.size() == vectZ0Signi.size(); + } + + int ntrks = associationLinks.size(); + int n_trk_d0cut = 0; + if (trksOK) { + + float sum_pt = 0., sum_pt_dr = 0.; + + std::vector > trk_d0_z0; + trk_d0_z0.reserve(associationLinks.size()); + + unsigned trkIndex=0; + for(auto trkIter = associationLinks.begin(); trkIter != associationLinks.end(); ++trkIter) { + const xAOD::TrackParticle* aTemp = **trkIter; + TLorentzVector trk; + trk.SetPtEtaPhiM(aTemp->pt(), aTemp->eta(), aTemp->phi(), 0.); + // no need for a dedicated selection here, the tracks are already + // selected by the IP3D algorithm + const float d0sig = vectD0Signi.at(trkIndex); + const float z0sig = vectZ0Signi.at(trkIndex); + trkIndex++; + + if (std::fabs(d0sig) > 1.8) + n_trk_d0cut++; + // track width components + sum_pt += trk.Pt(); + const float dRtoJet = trk.DeltaR(jet->p4()); + sum_pt_dr += dRtoJet * trk.Pt(); + + // for 3rd higest d0/z0 significance + trk_d0_z0.push_back(std::make_pair(d0sig, z0sig)); + } //end of trk loop + + // sort by highest signed d0 sig + std::sort(trk_d0_z0.begin(), trk_d0_z0.end(), [](const std::pair& a, const std::pair& b) { + return a.first > b.first; + } ); + + //Assign MVb variables + float width = sum_pt > 0 ? sum_pt_dr / sum_pt : 0; + int n_trk_sigd0cut = n_trk_d0cut; + float trk3_d0sig = trk_d0_z0.size() > 2 ? trk_d0_z0[2].first : -100; + float trk3_z0sig = trk_d0_z0.size() > 2 ? trk_d0_z0[2].second : -100; + + m_width -> Fill(width, eventWeight); + m_n_trk_sigd0cut -> Fill(n_trk_sigd0cut, eventWeight); + m_trk3_d0sig -> Fill(trk3_d0sig, eventWeight); + m_trk3_z0sig -> Fill(trk3_z0sig, eventWeight); + + int sv1_ntkv; btag_info->variable ("SV1", "NGTinSvx", sv1_ntkv); + float sv1_efrc; btag_info->variable("SV1", "efracsvx", sv1_efrc); + float sv_scaled_efc = sv1_ntkv>0 ? sv1_efrc * (static_cast(ntrks) / sv1_ntkv) : -1; + + int jf_ntrkv; btag_info->variable("JetFitter", "nTracksAtVtx", jf_ntrkv); + int jf_nvtx1t; btag_info->variable("JetFitter", "nSingleTracks", jf_nvtx1t); + float jf_efrc; btag_info->variable("JetFitter", "energyFraction", jf_efrc); + float jf_scaled_efc = (jf_ntrkv + jf_nvtx1t)>0 ? jf_efrc * (static_cast(ntrks) / (jf_ntrkv + jf_nvtx1t)) : -1; + + m_sv_scaled_efc->Fill(sv_scaled_efc, eventWeight); + m_jf_scaled_efc->Fill(jf_scaled_efc, eventWeight); + }//trkOK + + } + + + if(m_infoSwitch->m_jetFitterDetails){ + if(m_debug) std::cout << "JetHists: m_jetFitterDetails " < jf_nVTXAcc ("JetFitter_nVTX"); + static SG::AuxElement::ConstAccessor< int > jf_nSingleTracks ("JetFitter_nSingleTracks"); + static SG::AuxElement::ConstAccessor< int > jf_nTracksAtVtx ("JetFitter_nTracksAtVtx"); + static SG::AuxElement::ConstAccessor< float > jf_mass ("JetFitter_mass"); + static SG::AuxElement::ConstAccessor< float > jf_energyFraction("JetFitter_energyFraction"); + static SG::AuxElement::ConstAccessor< float > jf_significance3d("JetFitter_significance3d"); + static SG::AuxElement::ConstAccessor< float > jf_deltaeta ("JetFitter_deltaeta"); + static SG::AuxElement::ConstAccessor< float > jf_deltaphi ("JetFitter_deltaphi"); + static SG::AuxElement::ConstAccessor< int > jf_N2Tpar ("JetFitter_N2Tpair"); + static SG::AuxElement::ConstAccessor< double > jf_pb ("JetFitterCombNN_pb"); + static SG::AuxElement::ConstAccessor< double > jf_pc ("JetFitterCombNN_pc"); + static SG::AuxElement::ConstAccessor< double > jf_pu ("JetFitterCombNN_pu"); + + if(jf_nVTXAcc.isAvailable (*btag_info)) m_jf_nVTX ->Fill(jf_nVTXAcc (*btag_info), eventWeight); + if(jf_nSingleTracks.isAvailable (*btag_info)) m_jf_nSingleTracks ->Fill(jf_nSingleTracks (*btag_info), eventWeight); + if(jf_nTracksAtVtx.isAvailable (*btag_info)) m_jf_nTracksAtVtx ->Fill(jf_nTracksAtVtx (*btag_info), eventWeight); + if(jf_mass.isAvailable (*btag_info)) m_jf_mass ->Fill(jf_mass (*btag_info)/1000, eventWeight); + if(jf_energyFraction.isAvailable(*btag_info)) m_jf_energyFraction ->Fill(jf_energyFraction(*btag_info), eventWeight); + if(jf_significance3d.isAvailable(*btag_info)) m_jf_significance3d ->Fill(jf_significance3d(*btag_info), eventWeight); + if(jf_deltaeta.isAvailable (*btag_info)){ + m_jf_deltaeta ->Fill(jf_deltaeta (*btag_info), eventWeight); + m_jf_deltaeta_l ->Fill(jf_deltaeta (*btag_info), eventWeight); + } + if(jf_deltaphi.isAvailable (*btag_info)){ + m_jf_deltaR ->Fill(hypot(jf_deltaphi(*btag_info),jf_deltaeta(*btag_info)), eventWeight); + m_jf_deltaphi ->Fill(jf_deltaphi (*btag_info), eventWeight); + m_jf_deltaphi_l ->Fill(jf_deltaphi (*btag_info), eventWeight); + } + if(jf_N2Tpar.isAvailable (*btag_info)) m_jf_N2Tpar ->Fill(jf_N2Tpar (*btag_info), eventWeight); + if(jf_pb.isAvailable (*btag_info)) m_jf_pb ->Fill(jf_pb (*btag_info), eventWeight); + if(jf_pc.isAvailable (*btag_info)) m_jf_pc ->Fill(jf_pc (*btag_info), eventWeight); + if(jf_pu.isAvailable (*btag_info)) m_jf_pu ->Fill(jf_pu (*btag_info), eventWeight); + + + float jf_mass_unco; btag_info->variable("JetFitter", "massUncorr" , jf_mass_unco); + float jf_dR_flight; btag_info->variable("JetFitter", "dRFlightDir", jf_dR_flight); + + m_jf_mass_unco->Fill(jf_mass_unco/1000, eventWeight); + m_jf_dR_flight->Fill(jf_dR_flight, eventWeight); + + + } + + if(m_infoSwitch->m_svDetails){ + if(m_debug) std::cout << "JetHists: m_svDetails " < sv0_NGTinSvxAcc ("SV0_NGTinSvx"); + // @brief SV0 : Number of 2-track pairs + static SG::AuxElement::ConstAccessor< int > sv0_N2TpairAcc ("SV0_N2Tpair"); + static SG::AuxElement::ConstAccessor< float > sv0_masssvxAcc ("SV0_masssvx"); + static SG::AuxElement::ConstAccessor< float > sv0_efracsvxAcc ("SV0_efracsvx"); + static SG::AuxElement::ConstAccessor< float > sv0_normdistAcc ("SV0_normdist"); + + + if(sv0_NGTinSvxAcc .isAvailable(*btag_info)) m_sv0_NGTinSvx -> Fill( sv0_NGTinSvxAcc (*btag_info), eventWeight); + if(sv0_N2TpairAcc .isAvailable(*btag_info)) m_sv0_N2Tpair -> Fill( sv0_N2TpairAcc (*btag_info), eventWeight); + if(sv0_masssvxAcc .isAvailable(*btag_info)) m_sv0_massvx -> Fill( sv0_masssvxAcc (*btag_info)/1000, eventWeight); + if(sv0_efracsvxAcc .isAvailable(*btag_info)) m_sv0_efracsvx -> Fill( sv0_efracsvxAcc (*btag_info), eventWeight); + if(sv0_normdistAcc .isAvailable(*btag_info)) m_sv0_normdist -> Fill( sv0_normdistAcc (*btag_info), eventWeight); + + double sv0; + btag_info->variable("SV0", "significance3D", sv0); + m_SV0 -> Fill( sv0 , eventWeight ); + + + // + // SV1 + // + + static SG::AuxElement::ConstAccessor< int > sv1_NGTinSvxAcc ("SV1_NGTinSvx"); + // @brief SV1 : Number of 2-track pairs + static SG::AuxElement::ConstAccessor< int > sv1_N2TpairAcc ("SV1_N2Tpair"); + static SG::AuxElement::ConstAccessor< float > sv1_masssvxAcc ("SV1_masssvx"); + static SG::AuxElement::ConstAccessor< float > sv1_efracsvxAcc ("SV1_efracsvx"); + static SG::AuxElement::ConstAccessor< float > sv1_normdistAcc ("SV1_normdist"); + + if(sv1_NGTinSvxAcc .isAvailable(*btag_info)) m_sv1_NGTinSvx -> Fill( sv1_NGTinSvxAcc (*btag_info), eventWeight); + if(sv1_N2TpairAcc .isAvailable(*btag_info)) m_sv1_N2Tpair -> Fill( sv1_N2TpairAcc (*btag_info), eventWeight); + if(sv1_masssvxAcc .isAvailable(*btag_info)) m_sv1_massvx -> Fill( sv1_masssvxAcc (*btag_info)/1000, eventWeight); + if(sv1_efracsvxAcc .isAvailable(*btag_info)) m_sv1_efracsvx -> Fill( sv1_efracsvxAcc (*btag_info), eventWeight); + if(sv1_normdistAcc .isAvailable(*btag_info)) m_sv1_normdist -> Fill( sv1_normdistAcc (*btag_info), eventWeight); + + double sv1_pu = -30; btag_info->variable("SV1", "pu", sv1_pu); + double sv1_pb = -30; btag_info->variable("SV1", "pb", sv1_pb); + double sv1_pc = -30; btag_info->variable("SV1", "pc", sv1_pc); + + m_SV1_pu -> Fill(sv1_pu , eventWeight ); + m_SV1_pb -> Fill(sv1_pb , eventWeight ); + m_SV1_pc -> Fill(sv1_pc , eventWeight ); + + m_SV1 -> Fill( btag_info->calcLLR(sv1_pb,sv1_pu) , eventWeight ); + m_SV1_c -> Fill( btag_info->calcLLR(sv1_pb,sv1_pc) , eventWeight ); + m_SV1_cu -> Fill( btag_info->calcLLR(sv1_pc,sv1_pu) , eventWeight ); + + float sv1_Lxy; btag_info->variable("SV1", "Lxy" , sv1_Lxy); + float sv1_sig3d; btag_info->variable("SV1", "significance3d" , sv1_sig3d); + float sv1_L3d; btag_info->variable("SV1", "L3d" , sv1_L3d); + float sv1_distmatlay; btag_info->variable("SV1", "dstToMatLay" , sv1_distmatlay); + float sv1_dR; btag_info->variable("SV1", "deltaR" , sv1_dR ); + + m_SV1_Lxy -> Fill(sv1_Lxy, eventWeight); + m_SV1_sig3d -> Fill(sv1_sig3d, eventWeight); + m_SV1_L3d -> Fill(sv1_L3d, eventWeight); + m_SV1_distmatlay -> Fill(sv1_distmatlay, eventWeight); + m_SV1_dR -> Fill(sv1_dR, eventWeight); + + } + + + if(m_infoSwitch->m_ipDetails){ + if(m_debug) std::cout << "JetHists: m_ipDetails " < > IP2D_gradeOfTracksAcc ("IP2D_gradeOfTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_flagFromV0ofTracksAcc("IP2D_flagFromV0ofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_valD0wrtPVofTracksAcc("IP2D_valD0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_sigD0wrtPVofTracksAcc("IP2D_sigD0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_weightBofTracksAcc ("IP2D_weightBofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_weightCofTracksAcc ("IP2D_weightCofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP2D_weightUofTracksAcc ("IP2D_weightUofTracks"); + + if(IP2D_gradeOfTracksAcc .isAvailable(*btag_info)){ + unsigned int nIP2DTracks = IP2D_gradeOfTracksAcc(*btag_info).size(); + m_nIP2DTracks -> Fill( nIP2DTracks, eventWeight); + for(int grade : IP2D_gradeOfTracksAcc(*btag_info)) m_IP2D_gradeOfTracks->Fill(grade, eventWeight); + } + + if(IP2D_flagFromV0ofTracksAcc .isAvailable(*btag_info)){ + for(bool flag : IP2D_flagFromV0ofTracksAcc(*btag_info)) m_IP2D_flagFromV0ofTracks->Fill(flag, eventWeight); + } + + if(IP2D_valD0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float d0 : IP2D_valD0wrtPVofTracksAcc(*btag_info)) m_IP2D_valD0wrtPVofTracks->Fill(d0, eventWeight); + } + + if(IP2D_sigD0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float d0Sig : IP2D_sigD0wrtPVofTracksAcc(*btag_info)) { + m_IP2D_sigD0wrtPVofTracks ->Fill(d0Sig, eventWeight); + m_IP2D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight); + + + } + } + + if(IP2D_weightBofTracksAcc .isAvailable(*btag_info)){ + for(float weightB : IP2D_weightBofTracksAcc(*btag_info)) m_IP2D_weightBofTracks->Fill(weightB, eventWeight); + } + + if(IP2D_weightCofTracksAcc .isAvailable(*btag_info)){ + for(float weightC : IP2D_weightCofTracksAcc(*btag_info)) m_IP2D_weightCofTracks->Fill(weightC, eventWeight); + } + + if(IP2D_weightUofTracksAcc .isAvailable(*btag_info)){ + for(float weightU : IP2D_weightUofTracksAcc(*btag_info)) m_IP2D_weightUofTracks->Fill(weightU, eventWeight); + } + + double ip2_pu = -30; btag_info->variable("IP2D", "pu", ip2_pu); + double ip2_pb = -30; btag_info->variable("IP2D", "pb", ip2_pb); + double ip2_pc = -30; btag_info->variable("IP2D", "pc", ip2_pc); + + m_IP2D_pu -> Fill(ip2_pu , eventWeight ); + m_IP2D_pb -> Fill(ip2_pb , eventWeight ); + m_IP2D_pc -> Fill(ip2_pc , eventWeight ); + + m_IP2D -> Fill( btag_info->calcLLR(ip2_pb,ip2_pu) , eventWeight ); + m_IP2D_c -> Fill( btag_info->calcLLR(ip2_pb,ip2_pc) , eventWeight ); + m_IP2D_cu -> Fill( btag_info->calcLLR(ip2_pc,ip2_pu) , eventWeight ); + + + // + // IP3D + // + + static SG::AuxElement::ConstAccessor< vector > IP3D_gradeOfTracksAcc ("IP3D_gradeOfTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_flagFromV0ofTracksAcc("IP3D_flagFromV0ofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_valD0wrtPVofTracksAcc("IP3D_valD0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_sigD0wrtPVofTracksAcc("IP3D_sigD0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_valZ0wrtPVofTracksAcc("IP3D_valZ0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_sigZ0wrtPVofTracksAcc("IP3D_sigZ0wrtPVofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_weightBofTracksAcc ("IP3D_weightBofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_weightCofTracksAcc ("IP3D_weightCofTracks"); + static SG::AuxElement::ConstAccessor< vector > IP3D_weightUofTracksAcc ("IP3D_weightUofTracks"); + + if(IP3D_gradeOfTracksAcc .isAvailable(*btag_info)){ + unsigned int nIP3DTracks = IP3D_gradeOfTracksAcc(*btag_info).size(); + m_nIP3DTracks -> Fill( nIP3DTracks, eventWeight); + for(int grade : IP3D_gradeOfTracksAcc(*btag_info)) m_IP3D_gradeOfTracks->Fill(grade, eventWeight); + } + + if(IP3D_flagFromV0ofTracksAcc .isAvailable(*btag_info)){ + for(bool flag : IP3D_flagFromV0ofTracksAcc(*btag_info)) m_IP3D_flagFromV0ofTracks->Fill(flag, eventWeight); + } + + if(IP3D_valD0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float d0 : IP3D_valD0wrtPVofTracksAcc(*btag_info)) m_IP3D_valD0wrtPVofTracks->Fill(d0, eventWeight); + } + + if(IP3D_sigD0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float d0Sig : IP3D_sigD0wrtPVofTracksAcc(*btag_info)){ + m_IP3D_sigD0wrtPVofTracks ->Fill(d0Sig, eventWeight); + m_IP3D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight); + } + } + + if(IP3D_valZ0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float z0 : IP3D_valZ0wrtPVofTracksAcc(*btag_info)) m_IP3D_valZ0wrtPVofTracks->Fill(z0, eventWeight); + } + + if(IP3D_sigZ0wrtPVofTracksAcc .isAvailable(*btag_info)){ + for(float z0Sig : IP3D_sigZ0wrtPVofTracksAcc(*btag_info)){ + m_IP3D_sigZ0wrtPVofTracks ->Fill(z0Sig, eventWeight); + m_IP3D_sigZ0wrtPVofTracks_l->Fill(z0Sig, eventWeight); + } + } + + if(IP3D_weightBofTracksAcc .isAvailable(*btag_info)){ + for(float weightB : IP3D_weightBofTracksAcc(*btag_info)) m_IP3D_weightBofTracks->Fill(weightB, eventWeight); + } + + if(IP3D_weightCofTracksAcc .isAvailable(*btag_info)){ + for(float weightC : IP3D_weightCofTracksAcc(*btag_info)) m_IP3D_weightCofTracks->Fill(weightC, eventWeight); + } + + if(IP3D_weightUofTracksAcc .isAvailable(*btag_info)){ + for(float weightU : IP3D_weightUofTracksAcc(*btag_info)) m_IP3D_weightUofTracks->Fill(weightU, eventWeight); + } + + double ip3_pu = -30; btag_info->variable("IP3D", "pu", ip3_pu); + double ip3_pb = -30; btag_info->variable("IP3D", "pb", ip3_pb); + double ip3_pc = -30; btag_info->variable("IP3D", "pc", ip3_pc); + + m_IP3D_pu -> Fill(ip3_pu , eventWeight ); + m_IP3D_pb -> Fill(ip3_pb , eventWeight ); + m_IP3D_pc -> Fill(ip3_pc , eventWeight ); + + m_IP3D -> Fill( btag_info->calcLLR(ip3_pb,ip3_pu) , eventWeight ); + m_IP3D_c -> Fill( btag_info->calcLLR(ip3_pb,ip3_pc) , eventWeight ); + m_IP3D_cu -> Fill( btag_info->calcLLR(ip3_pc,ip3_pu) , eventWeight ); + + + } + } + + + + + /* + vector chfs = jet->getAttribute< vector >(xAOD::JetAttribute::SumPtTrkPt1000); + float chf(-1); + if( pvLoc >= 0 && pvLoc < (int)chfs.size() ) { + m_chf -> Fill( chfs.at( pvLoc ) , eventWeight ); + } + */ + + + // testing + if( m_infoSwitch->m_resolution ) { + if(m_debug) std::cout << "JetHists: m_resolution " <getAttribute( xAOD::JetAttribute::GhostTruthPt ); + float ghostTruthPt = jet->auxdata< float >( "GhostTruthPt" ); + m_jetGhostTruthPt -> Fill( ghostTruthPt/1e3, eventWeight ); + float resolution = jet->pt()/ghostTruthPt - 1; + m_jetPt_vs_resolution -> Fill( jet->pt()/1e3, resolution, eventWeight ); + m_jetGhostTruthPt_vs_resolution -> Fill( ghostTruthPt/1e3, resolution, eventWeight ); + } + + if( m_infoSwitch->m_substructure ){ + if(m_debug) std::cout << "JetHists: m_substructure " < Tau1("Tau1"); + static SG::AuxElement::ConstAccessor Tau2("Tau2"); + static SG::AuxElement::ConstAccessor Tau3("Tau3"); + static SG::AuxElement::ConstAccessor Tau1_wta("Tau1_wta"); + static SG::AuxElement::ConstAccessor Tau2_wta("Tau2_wta"); + static SG::AuxElement::ConstAccessor Tau3_wta("Tau3_wta"); + + if(Tau1.isAvailable(*jet)) m_tau1->Fill( Tau1(*jet), eventWeight ); + if(Tau2.isAvailable(*jet)) m_tau2->Fill( Tau2(*jet), eventWeight ); + if(Tau3.isAvailable(*jet)) m_tau3->Fill( Tau3(*jet), eventWeight ); + if(Tau1.isAvailable(*jet) && Tau2.isAvailable(*jet)) m_tau21->Fill( Tau2(*jet)/Tau1(*jet), eventWeight ); + if(Tau2.isAvailable(*jet) && Tau3.isAvailable(*jet)) m_tau32->Fill( Tau3(*jet)/Tau2(*jet), eventWeight ); + if(Tau1_wta.isAvailable(*jet)) m_tau1_wta->Fill( Tau1_wta(*jet), eventWeight ); + if(Tau2_wta.isAvailable(*jet)) m_tau2_wta->Fill( Tau2_wta(*jet), eventWeight ); + if(Tau3_wta.isAvailable(*jet)) m_tau3_wta->Fill( Tau3_wta(*jet), eventWeight ); + if(Tau1_wta.isAvailable(*jet) && Tau2_wta.isAvailable(*jet)) m_tau21_wta->Fill( Tau2_wta(*jet)/Tau1_wta(*jet), eventWeight ); + if(Tau2_wta.isAvailable(*jet) && Tau3_wta.isAvailable(*jet)) m_tau32_wta->Fill( Tau3_wta(*jet)/Tau2_wta(*jet), eventWeight ); + + m_numConstituents->Fill( jet->numConstituents(), eventWeight ); + + } + + if(m_debug) std::cout << m_name << "::Matching tracks in Jet: " << m_infoSwitch->m_tracksInJet << std::endl; + + if( m_infoSwitch->m_tracksInJet ){ + if(m_debug) std::cout << "JetHists: m_tracksInJet " < matchedTracks = jet->auxdata< vector >(m_infoSwitch->m_trackName); + const xAOD::Vertex *pvx = jet->auxdata(m_infoSwitch->m_trackName+"_vtx"); + + m_nTrk->Fill(matchedTracks.size(), eventWeight); + + if(m_debug) std::cout << "Track Size " << matchedTracks.size() << std::endl; + for(auto& trkPtr: matchedTracks){ + ANA_CHECK( m_tracksInJet->execute(trkPtr, jet, pvx, eventWeight, eventInfo)); + } + } + + if( m_infoSwitch->m_byEta ){ + if (fabs(jet->eta()) < 1) m_jetPt_eta_0_1 -> Fill(jet->pt()/1e3, eventWeight); + else if ( fabs(jet->eta()) < 2 ){ m_jetPt_eta_1_2 -> Fill(jet->pt()/1e3, eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->pt()/1e3, eventWeight);} + else if ( fabs(jet->eta()) < 2.5 ){ m_jetPt_eta_2_2p5 -> Fill(jet->pt()/1e3, eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->pt()/1e3, eventWeight);} + } + + if( m_infoSwitch->m_onlineBS ){ + + float bs_online_vx = jet->auxdata< float >("bs_online_vx"); + float bs_online_vy = jet->auxdata< float >("bs_online_vy"); + float bs_online_vz = jet->auxdata< float >("bs_online_vz"); + + if( m_infoSwitch->m_onlineBSTool ){ + // Over-ride with onlineBSToolInfo + bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx); + bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy); + bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz); + } + + m_bs_online_vy -> Fill( bs_online_vy , eventWeight); + m_bs_online_vx -> Fill( bs_online_vx , eventWeight); + m_bs_online_vz -> Fill( bs_online_vz , eventWeight); + m_bs_online_vz_l -> Fill( bs_online_vz , eventWeight); + + if (fabs(bs_online_vz) < 1) { m_eta_bs_online_vz_0_1 -> Fill( jet->eta(), eventWeight); } + else if ( fabs(bs_online_vz) < 1.5 ) { m_eta_bs_online_vz_1_1p5 -> Fill( jet->eta(), eventWeight); } + else if ( fabs(bs_online_vz) < 2 ) { m_eta_bs_online_vz_1p5_2 -> Fill( jet->eta(), eventWeight); } + + + + if(m_infoSwitch->m_lumiB_runN){ + uint32_t lumiBlock = eventInfo->lumiBlock(); + uint32_t runNumber = eventInfo->runNumber(); + + if( fabs(bs_online_vz) < 900){ + m_lumiB_runN_bs_online_vz -> Fill(lumiBlock, runNumber, eventWeight * bs_online_vz); + m_lumiB_runN_bs_den -> Fill(lumiBlock, runNumber, eventWeight ); + } + + } + } + + + if( m_infoSwitch->m_hltVtxComp || m_infoSwitch->m_onlineBS ){ + const xAOD::Vertex *online_pvx = jet->auxdata("HLTBJetTracks_vtx"); + const xAOD::Vertex *online_pvx_bkg = jet->auxdata("HLTBJetTracks_vtx_bkg"); + const xAOD::Vertex *offline_pvx = jet->auxdata("offline_vtx"); + + // Use of vtxClass is new, hadDummyPV is old but need backward compatibility. + char vtxClass = jet->auxdata< char >("hadDummyPV"); + int vtxClassInt = int(vtxClass); + + if( vtxClass == '0') vtxClassInt = 0; + if( vtxClass == '1') vtxClassInt = 1; + if( vtxClass == '2') vtxClassInt = 2; + + m_vtxClass -> Fill(vtxClassInt, eventWeight); + + if(m_infoSwitch->m_hltVtxComp){ + + if(online_pvx) m_vtxOnlineValid ->Fill(1.0, eventWeight); + else m_vtxOnlineValid ->Fill(0.0, eventWeight); + + if(offline_pvx) m_vtxOfflineValid->Fill(1.0, eventWeight); + else m_vtxOfflineValid->Fill(0.0, eventWeight); + + + //if(hadDummyPV) m_vtxClass ->Fill(1.0, eventWeight); + //else m_vtxClass ->Fill(0.0, eventWeight); + + if(offline_pvx && online_pvx && online_pvx_bkg){ + float online_x0_raw = online_pvx->x(); + float online_y0_raw = online_pvx->y(); + float online_z0_raw = online_pvx->z(); + if(vtxClass!='0'){ + online_x0_raw = 0; + online_y0_raw = 0; + online_z0_raw = 0; + } + + m_vtx_offline_x0 -> Fill(offline_pvx->x(), eventWeight); + m_vtx_online_x0 -> Fill(online_pvx->x(), eventWeight); + m_vtx_online_x0_raw -> Fill(online_x0_raw, eventWeight); + float vtxDiffx0 = online_pvx->x() - offline_pvx->x(); + m_vtxDiffx0 ->Fill(vtxDiffx0, eventWeight); + m_vtxDiffx0_l->Fill(vtxDiffx0, eventWeight); + + m_vtx_offline_y0 -> Fill(offline_pvx->y(), eventWeight); + m_vtx_online_y0 -> Fill(online_pvx->y(), eventWeight); + m_vtx_online_y0_raw -> Fill(online_y0_raw, eventWeight); + float vtxDiffy0 = online_pvx->y() - offline_pvx->y(); + m_vtxDiffy0 ->Fill(vtxDiffy0, eventWeight); + m_vtxDiffy0_l->Fill(vtxDiffy0, eventWeight); + + m_vtx_offline_z0 -> Fill(offline_pvx->z(), eventWeight); + m_vtx_online_z0 -> Fill(online_pvx->z(), eventWeight); + m_vtx_online_z0_raw -> Fill(online_z0_raw, eventWeight); + float vtxDiffz0 = online_pvx->z() - offline_pvx->z(); + float vtxDiffz0_raw = online_z0_raw - offline_pvx->z(); + m_vtxDiffz0 ->Fill(vtxDiffz0, eventWeight); + m_vtxDiffz0_m->Fill(vtxDiffz0, eventWeight); + m_vtxDiffz0_s->Fill(vtxDiffz0, eventWeight); + + float vtxBkgDiffz0 = online_pvx_bkg->z() - offline_pvx->z(); + m_vtxBkgDiffz0 ->Fill(vtxBkgDiffz0, eventWeight); + m_vtxBkgDiffz0_m->Fill(vtxBkgDiffz0, eventWeight); + m_vtxBkgDiffz0_s->Fill(vtxBkgDiffz0, eventWeight); + + m_vtxDiffz0_s_vs_vtx_offline_z0->Fill(offline_pvx->z(), vtxDiffz0, eventWeight); + m_vtxDiffz0_vs_vtx_offline_z0 ->Fill(offline_pvx->z(), vtxDiffz0, eventWeight); + m_vtxDiffz0_s_vs_vtxDiffx0 ->Fill(vtxDiffx0, vtxDiffz0, eventWeight); + m_vtxDiffz0_s_vs_vtxDiffy0 ->Fill(vtxDiffy0, vtxDiffz0, eventWeight); + + m_vtxClass_vs_jetPt ->Fill(jet->pt()/1e3, vtxClassInt, eventWeight); + + m_vtx_online_y0_vs_vtx_online_z0 -> Fill(online_pvx->z(), online_pvx->y(), eventWeight); + m_vtx_online_x0_vs_vtx_online_z0 -> Fill(online_pvx->z(), online_pvx->x(), eventWeight); + + + if(m_infoSwitch->m_vsLumiBlock){ + uint32_t lumiBlock = eventInfo->lumiBlock(); + + m_vtxDiffx0_vs_lBlock ->Fill(lumiBlock, vtxDiffx0 , eventWeight); + m_vtxDiffy0_vs_lBlock ->Fill(lumiBlock, vtxDiffy0 , eventWeight); + m_vtxDiffz0_vs_lBlock ->Fill(lumiBlock, vtxDiffz0 , eventWeight); + m_vtxClass_vs_lBlock ->Fill(lumiBlock, vtxClassInt, eventWeight); + + bool correctVtx1 = (fabs(vtxDiffz0) < 1); + bool correctVtx10 = (fabs(vtxDiffz0) < 10); + m_vtxEff1_vs_lBlock ->Fill(lumiBlock, correctVtx1, eventWeight); + m_vtxEff10_vs_lBlock ->Fill(lumiBlock, correctVtx10, eventWeight); + + if(!vtxClass){ + m_vtxEff1_noDummy_vs_lBlock ->Fill(lumiBlock, correctVtx1, eventWeight); + m_vtxEff10_noDummy_vs_lBlock ->Fill(lumiBlock, correctVtx10, eventWeight); + } + + bool correctVtx1_raw = (fabs(vtxDiffz0_raw) < 1); + bool correctVtx10_raw = (fabs(vtxDiffz0_raw) < 10); + m_vtxEff1_raw_vs_lBlock ->Fill(lumiBlock, correctVtx1_raw, eventWeight); + m_vtxEff10_raw_vs_lBlock ->Fill(lumiBlock, correctVtx10_raw, eventWeight); + + } + + + if(m_infoSwitch->m_lumiB_runN){ + uint32_t lumiBlock = eventInfo->lumiBlock(); + uint32_t runNumber = eventInfo->runNumber(); + m_lumiB_runN -> Fill(lumiBlock, runNumber, eventWeight); + m_lumiB_runN_vtxClass -> Fill(lumiBlock, runNumber, eventWeight * vtxClassInt); + m_lumiB_runN_lumiB -> Fill(lumiBlock, runNumber, eventWeight * lumiBlock); + + + //if(offline_pvx && online_pvx){ + // float vtxDiffz0 = online_pvx->z() - offline_pvx->z(); + // m_lumiB_runN_vtxDiffz0 -> Fill(lumiBlock, runNumber, eventWeight * vtxDiffz0); + //} + + } + } + } + } + + if(m_debug) std::cout << "JetHists: leave " <(jet), eventWeight, eventInfo); + } + + StatusCode JetHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo ) { + using namespace msgJetHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight)); + + if(m_debug) std::cout << "JetHists: in execute " <(particle); + if(m_debug) std::cout << "JetHists: got jet " << jet << std::endl; + if(jet==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Jet" ); + return StatusCode::FAILURE; + } + + if(m_infoSwitch->m_clean) + { + m_jetTime ->Fill(jet->Timing ,eventWeight); + m_LArQuality ->Fill(jet->LArQuality ,eventWeight); + m_hecq ->Fill(jet->HECQuality ,eventWeight); + m_negE ->Fill(jet->NegativeE ,eventWeight); + m_avLArQF ->Fill(jet->AverageLArQF ,eventWeight); + m_bchCorrCell ->Fill(jet->BchCorrCell ,eventWeight); + m_N90Const ->Fill(jet->N90Constituents ,eventWeight); + //m_LArQmean ->Fill(jet->AverageLArQF/65535 ,eventWeight); + //m_LArBadHVEFrac ->Fill(jet->LArBadHVEFrac ,eventWeight); + //m_LArBadHVNCell ->Fill(jet->LArBadHVNCell ,eventWeight); + m_ChargedFraction ->Fill(jet->ChargedFraction ,eventWeight); + //m_OotFracClusters5 ->Fill(jet->OotFracClusters5 ,eventWeight); + //m_OotFracClusters10 ->Fill(jet->OotFracClusters10 ,eventWeight); + //m_LeadingClusterPt ->Fill(jet->LeadingClusterPt ,eventWeight); + //m_LeadingClusterSecondLambda->Fill(jet->LeadingClusterSecondLambda,eventWeight); + //m_LeadingClusterCenterLambda->Fill(jet->LeadingClusterCenterLambda,eventWeight); + //m_LeadingClusterSecondR ->Fill(jet->LeadingClusterSecondR ,eventWeight); + //m_clean_passLooseBad ->Fill(jet->clean_passLooseBad ,eventWeight); + //m_clean_passLooseBadUgly ->Fill(jet->clean_passLooseBadUgly ,eventWeight); + //m_clean_passTightBad ->Fill(jet->clean_passTightBad ,eventWeight); + //m_clean_passTightBadUgly ->Fill(jet->clean_passTightBadUgly ,eventWeight); + } + + + if(m_infoSwitch->m_energy) + { + m_HECf ->Fill(jet->HECFrac, eventWeight); + m_EMf ->Fill(jet->EMFrac, eventWeight); + m_centroidR ->Fill(jet->CentroidR, eventWeight); + //m_FracSamplingMax ->Fill(jet->FracSamplingMax, eventWeight); + //m_FracSamplingMaxIndex ->Fill(jet->FracSamplingMaxIndex, eventWeight); + //m_LowEtConstituentsFrac->Fill(jet->LowEtConstituentsFrac,eventWeight); + //m_GhostMuonSegmentCount->Fill(jet->GhostMuonSegmentCount,eventWeight); + //m_Width ->Fill(jet->Width, eventWeight); + } + + if(m_infoSwitch->m_trackPV) + { + // m_NumTrkPt1000PV ->Fill(jet->NumTrkPt1000PV , eventWeight); + // m_SumPtTrkPt1000PV ->Fill(jet->SumPtTrkPt1000PV , eventWeight); + // m_TrackWidthPt1000PV->Fill(jet->TrackWidthPt1000PV, eventWeight); + // m_NumTrkPt500PV ->Fill(jet->NumTrkPt500PV , eventWeight); + // m_SumPtTrkPt500PV ->Fill(jet->SumPtTrkPt500PV , eventWeight); + // m_TrackWidthPt500PV ->Fill(jet->TrackWidthPt500PV , eventWeight); + // m_JVFPV ->Fill(jet->JVFPV , eventWeight); + } + + + + if(m_infoSwitch->m_trackPV || m_infoSwitch->m_trackAll) + { + // m_Jvt ->Fill(jet->Jvt , eventWeight); + // m_JvtJvfcorr->Fill(jet->JvtJvfcorr , eventWeight); + // m_JvtRpt ->Fill(jet->JvtRpt , eventWeight); + } + + if(m_infoSwitch->m_JVC) + { + m_JVC->Fill(jet->JVC, eventWeight); + } + + + if(m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT) + { + // h_SV0 ->Fill(jet->SV0 , eventWeight); + // h_SV1 ->Fill(jet->SV1 , eventWeight); + // h_IP3D ->Fill(jet->IP3D , eventWeight); + + m_COMB ->Fill(jet->SV1IP3D , eventWeight); + //m_JetFitter ->Fill(jet->JetFitter , eventWeight); + + // + + } + + if( m_infoSwitch->m_byEta ){ + if (fabs(jet->p4.Eta()) < 1) m_jetPt_eta_0_1 -> Fill(jet->p4.Pt(), eventWeight); + else if ( fabs(jet->p4.Eta()) < 2 ) {m_jetPt_eta_1_2 -> Fill(jet->p4.Pt(), eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->p4.Pt(), eventWeight);} + else if ( fabs(jet->p4.Eta()) < 2.5 ) {m_jetPt_eta_2_2p5 -> Fill(jet->p4.Pt(), eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->p4.Pt(), eventWeight);} + } + + if( m_infoSwitch->m_onlineBS ){ + + float bs_online_vx = jet->bs_online_vx; + float bs_online_vy = jet->bs_online_vy; + float bs_online_vz = jet->bs_online_vz; + + if( m_infoSwitch->m_onlineBSTool ){ + // Over-ride with onlineBSToolInfo + + bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx); + bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy); + bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz); + + } + + m_bs_online_vx -> Fill( bs_online_vx , eventWeight); + m_bs_online_vy -> Fill( bs_online_vy , eventWeight); + m_bs_online_vz -> Fill( bs_online_vz , eventWeight); + m_bs_online_vz_l -> Fill( bs_online_vz , eventWeight); + + if (fabs(bs_online_vz) < 1) { m_eta_bs_online_vz_0_1 -> Fill( jet->p4.Eta(), eventWeight); } + else if ( fabs(bs_online_vz) < 1.5 ) { m_eta_bs_online_vz_1_1p5 -> Fill( jet->p4.Eta(), eventWeight); } + else if ( fabs(bs_online_vz) < 2 ) { m_eta_bs_online_vz_1p5_2 -> Fill( jet->p4.Eta(), eventWeight); } + + if(m_infoSwitch->m_lumiB_runN){ + uint32_t lumiBlock = eventInfo->m_lumiBlock; + uint32_t runNumber = eventInfo->m_runNumber; + if( fabs(bs_online_vz) < 900 ){ + m_lumiB_runN_bs_online_vz -> Fill(lumiBlock, runNumber, eventWeight * bs_online_vz); + m_lumiB_runN_bs_den -> Fill(lumiBlock, runNumber, eventWeight ); + } + + + } + } + + if(m_infoSwitch->m_hltVtxComp || m_infoSwitch->m_onlineBS ) + { + + // vtxHadDummy is an old var. I am moving to a new variable name here. + float vtxClass=jet->vtxHadDummy; + + m_vtxClass ->Fill(vtxClass , eventWeight); + + if(m_infoSwitch->m_hltVtxComp){ + + float online_x0_raw = jet->vtx_online_x0; + float online_y0_raw = jet->vtx_online_y0; + float online_z0_raw = jet->vtx_online_z0; + if(vtxClass){ + online_x0_raw = 0; + online_y0_raw = 0; + online_z0_raw = 0; + } + + + //if( fabs(bs_online_vy) < 0.1 ){ + // std::cout << " -> bs_online_vx" << bs_online_vx << "bs_online_vy" << bs_online_vy << "bs_online_vz" << bs_online_vz << std::endl; + //} + + float vtxDiffx0 = jet->vtx_online_x0 - jet->vtx_offline_x0; + + m_vtx_offline_x0 ->Fill(jet->vtx_offline_x0 , eventWeight); + m_vtx_online_x0 ->Fill(jet->vtx_online_x0 , eventWeight); + m_vtx_online_x0_raw ->Fill(online_x0_raw , eventWeight); + m_vtxDiffx0 ->Fill(vtxDiffx0 , eventWeight); + m_vtxDiffx0_l ->Fill(vtxDiffx0 , eventWeight); + + m_vtx_offline_y0 ->Fill(jet->vtx_offline_y0 , eventWeight); + m_vtx_online_y0 ->Fill(jet->vtx_online_y0 , eventWeight); + m_vtx_online_y0_raw ->Fill(online_y0_raw , eventWeight); + float vtxDiffy0 = jet->vtx_online_y0 - jet->vtx_offline_y0; + m_vtxDiffy0 ->Fill(vtxDiffy0 , eventWeight); + m_vtxDiffy0_l ->Fill(vtxDiffy0 , eventWeight); + + m_vtx_offline_z0 ->Fill(jet->vtx_offline_z0 , eventWeight); + m_vtx_online_z0 ->Fill(jet->vtx_online_z0 , eventWeight); + m_vtx_offline_z0_s ->Fill(jet->vtx_offline_z0 , eventWeight); + m_vtx_online_z0_s ->Fill(jet->vtx_online_z0 , eventWeight); + m_vtx_online_z0_raw ->Fill(online_z0_raw , eventWeight); + float vtxDiffz0 = jet->vtx_online_z0 - jet->vtx_offline_z0; + float vtxDiffz0_raw = online_z0_raw - jet->vtx_offline_z0; + m_vtxDiffz0 ->Fill(vtxDiffz0 , eventWeight); + m_vtxDiffz0_m ->Fill(vtxDiffz0 , eventWeight); + m_vtxDiffz0_s ->Fill(vtxDiffz0 , eventWeight); + //m_vtx_offline_z ->Fill(jet->vtx_offline_z0 , eventWeight); + //m_vtx_online_z ->Fill(jet->vtx_online_z0 , eventWeight); + + + float vtxBkgDiffz0 = jet->vtx_online_bkg_z0 - jet->vtx_offline_z0; + m_vtxBkgDiffz0 ->Fill(vtxBkgDiffz0 , eventWeight); + m_vtxBkgDiffz0_m ->Fill(vtxBkgDiffz0 , eventWeight); + m_vtxBkgDiffz0_s ->Fill(vtxBkgDiffz0 , eventWeight); + + + m_vtxDiffz0_s_vs_vtx_offline_z0->Fill(jet->vtx_offline_z0, vtxDiffz0, eventWeight); + m_vtxDiffz0_vs_vtx_offline_z0 ->Fill(jet->vtx_offline_z0, vtxDiffz0, eventWeight); + m_vtxDiffz0_s_vs_vtxDiffx0 ->Fill(vtxDiffx0, vtxDiffz0, eventWeight); + m_vtxDiffz0_s_vs_vtxDiffy0 ->Fill(vtxDiffy0, vtxDiffz0, eventWeight); + + m_vtxClass_vs_jetPt ->Fill(jet->p4.Pt(), vtxClass, eventWeight); + + m_vtx_online_y0_vs_vtx_online_z0 ->Fill(jet->vtx_online_z0, jet->vtx_online_y0, eventWeight); + m_vtx_online_x0_vs_vtx_online_z0 ->Fill(jet->vtx_online_z0, jet->vtx_online_x0, eventWeight); + + if(m_infoSwitch->m_vsLumiBlock && eventInfo){ + uint32_t lumiBlock = eventInfo->m_lumiBlock; + + m_vtxDiffx0_vs_lBlock ->Fill(lumiBlock, vtxDiffx0 , eventWeight); + m_vtxDiffy0_vs_lBlock ->Fill(lumiBlock, vtxDiffy0 , eventWeight); + m_vtxDiffz0_vs_lBlock ->Fill(lumiBlock, vtxDiffz0 , eventWeight); + m_vtxClass_vs_lBlock ->Fill(lumiBlock, vtxClass, eventWeight); + + bool correctVtx1 = (fabs(vtxDiffz0) < 1); + bool correctVtx10 = (fabs(vtxDiffz0) < 10); + m_vtxEff1_vs_lBlock ->Fill(lumiBlock, correctVtx1, eventWeight); + m_vtxEff10_vs_lBlock ->Fill(lumiBlock, correctVtx10, eventWeight); + + if(!vtxClass){ + m_vtxEff1_noDummy_vs_lBlock ->Fill(lumiBlock, correctVtx1, eventWeight); + m_vtxEff10_noDummy_vs_lBlock ->Fill(lumiBlock, correctVtx10, eventWeight); + } + + bool correctVtx1_raw = (fabs(vtxDiffz0_raw) < 1); + bool correctVtx10_raw = (fabs(vtxDiffz0_raw) < 10); + m_vtxEff1_raw_vs_lBlock ->Fill(lumiBlock, correctVtx1_raw, eventWeight); + m_vtxEff10_raw_vs_lBlock ->Fill(lumiBlock, correctVtx10_raw, eventWeight); + + } + + if(m_infoSwitch->m_lumiB_runN){ + uint32_t lumiBlock = eventInfo->m_lumiBlock; + uint32_t runNumber = eventInfo->m_runNumber; + m_lumiB_runN -> Fill(lumiBlock, runNumber, eventWeight); + m_lumiB_runN_vtxClass -> Fill(lumiBlock, runNumber, eventWeight * vtxClass); + m_lumiB_runN_lumiB -> Fill(lumiBlock, runNumber, eventWeight*lumiBlock); + + } + + } + + } + + if(m_infoSwitch->m_jetFitterDetails){ + + m_jf_nVTX ->Fill(jet->JetFitter_nVTX , eventWeight); + m_jf_nSingleTracks ->Fill(jet->JetFitter_nSingleTracks , eventWeight); + m_jf_nTracksAtVtx ->Fill(jet->JetFitter_nTracksAtVtx , eventWeight); + m_jf_mass ->Fill(jet->JetFitter_mass /1000, eventWeight); + m_jf_energyFraction ->Fill(jet->JetFitter_energyFraction , eventWeight); + m_jf_significance3d ->Fill(jet->JetFitter_significance3d , eventWeight); + m_jf_deltaeta ->Fill(jet->JetFitter_deltaeta , eventWeight); + m_jf_deltaeta_l ->Fill(jet->JetFitter_deltaeta , eventWeight); + m_jf_deltaR ->Fill(hypot(jet->JetFitter_deltaphi ,jet->JetFitter_deltaeta), eventWeight); + m_jf_deltaphi ->Fill(jet->JetFitter_deltaphi , eventWeight); + m_jf_deltaphi_l ->Fill(jet->JetFitter_deltaphi , eventWeight); + m_jf_N2Tpar ->Fill(jet->JetFitter_N2Tpar , eventWeight); + } + + if(m_infoSwitch->m_svDetails){ + // + // SV0 + // + m_sv0_NGTinSvx -> Fill( jet->sv0_NGTinSvx, eventWeight); + m_sv0_N2Tpair -> Fill( jet->sv0_N2Tpair , eventWeight); + m_sv0_massvx -> Fill( jet->sv0_massvx /1000, eventWeight); + m_sv0_efracsvx -> Fill( jet->sv0_efracsvx, eventWeight); + m_sv0_normdist -> Fill( jet->sv0_normdist, eventWeight); + + // + // SV1 + // + m_sv1_NGTinSvx -> Fill( jet->sv1_NGTinSvx, eventWeight); + m_sv1_N2Tpair -> Fill( jet->sv1_N2Tpair , eventWeight); + m_sv1_massvx -> Fill( jet->sv1_massvx /1000, eventWeight); + m_sv1_efracsvx -> Fill( jet->sv1_efracsvx, eventWeight); + m_sv1_normdist -> Fill( jet->sv1_normdist, eventWeight); + + + m_SV1_pu -> Fill(jet->sv1_pu , eventWeight ); + m_SV1_pb -> Fill(jet->sv1_pb , eventWeight ); + m_SV1_pc -> Fill(jet->sv1_pc , eventWeight ); + + m_SV1_c -> Fill(jet->sv1_c , eventWeight ); + m_SV1_cu -> Fill(jet->sv1_cu , eventWeight ); + + m_SV1_Lxy -> Fill(jet->sv1_Lxy, eventWeight); + m_SV1_sig3d -> Fill(jet->sv1_sig3d, eventWeight); + m_SV1_L3d -> Fill(jet->sv1_L3d, eventWeight); + m_SV1_distmatlay -> Fill(jet->sv1_distmatlay, eventWeight); + m_SV1_dR -> Fill(jet->sv1_dR, eventWeight); + + } + + + if(m_infoSwitch->m_ipDetails){ + // + // IP2D + // + m_nIP2DTracks -> Fill( jet->nIP2DTracks, eventWeight); + for(float grade : jet->IP2D_gradeOfTracks) m_IP2D_gradeOfTracks->Fill(grade, eventWeight); + for(float flag : jet->IP2D_flagFromV0ofTracks) m_IP2D_flagFromV0ofTracks->Fill(flag, eventWeight); + + if(jet->IP2D_sigD0wrtPVofTracks.size() == jet->IP2D_valD0wrtPVofTracks.size()){ + for(unsigned int i=0; iIP2D_sigD0wrtPVofTracks.size(); i++){ + float d0Sig=jet->IP2D_sigD0wrtPVofTracks[i]; + float d0Val=jet->IP2D_valD0wrtPVofTracks[i]; + float d0Err=d0Val/d0Sig; + m_IP2D_errD0wrtPVofTracks->Fill (d0Err, eventWeight); + m_IP2D_sigD0wrtPVofTracks->Fill (d0Sig, eventWeight); + m_IP2D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight); + m_IP2D_valD0wrtPVofTracks->Fill (d0Val, eventWeight); + } + } + + for(float weightB : jet->IP2D_weightBofTracks) m_IP2D_weightBofTracks->Fill(weightB, eventWeight); + for(float weightC : jet->IP2D_weightCofTracks) m_IP2D_weightCofTracks->Fill(weightC, eventWeight); + for(float weightU : jet->IP2D_weightUofTracks) m_IP2D_weightUofTracks->Fill(weightU, eventWeight); + + + m_IP2D_pu -> Fill(jet->IP2D_pu , eventWeight ); + m_IP2D_pb -> Fill(jet->IP2D_pb , eventWeight ); + m_IP2D_pc -> Fill(jet->IP2D_pc , eventWeight ); + + m_IP2D -> Fill( jet->IP2D , eventWeight ); + m_IP2D_c -> Fill( jet->IP2D_c , eventWeight ); + m_IP2D_cu -> Fill( jet->IP2D_cu , eventWeight ); + + + // + // IP3D + // + m_nIP3DTracks -> Fill( jet->nIP3DTracks, eventWeight); + for(float grade : jet->IP3D_gradeOfTracks ) m_IP3D_gradeOfTracks->Fill(grade, eventWeight); + for(float flag : jet->IP3D_flagFromV0ofTracks) m_IP3D_flagFromV0ofTracks->Fill(flag, eventWeight); + + for(unsigned int i=0; iIP3D_sigD0wrtPVofTracks.size(); i++){ + float d0Sig=jet->IP3D_sigD0wrtPVofTracks[i]; + float d0Val=jet->IP3D_valD0wrtPVofTracks[i]; + float d0Err=d0Val/d0Sig; + m_IP3D_errD0wrtPVofTracks->Fill (d0Err, eventWeight); + m_IP3D_sigD0wrtPVofTracks->Fill (d0Sig, eventWeight); + m_IP3D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight); + m_IP3D_valD0wrtPVofTracks->Fill (d0Val, eventWeight); + } + + for(unsigned int i=0; iIP3D_sigZ0wrtPVofTracks.size(); i++){ + float z0Sig=jet->IP3D_sigZ0wrtPVofTracks[i]; + float z0Val=jet->IP3D_valZ0wrtPVofTracks[i]; + float z0Err=z0Val/z0Sig; + m_IP3D_errZ0wrtPVofTracks->Fill (z0Err, eventWeight); + m_IP3D_sigZ0wrtPVofTracks->Fill (z0Sig, eventWeight); + m_IP3D_sigZ0wrtPVofTracks_l->Fill(z0Sig, eventWeight); + m_IP3D_valZ0wrtPVofTracks->Fill (z0Val, eventWeight); + } + + for(float weightB : jet->IP3D_weightBofTracks) m_IP3D_weightBofTracks->Fill(weightB, eventWeight); + for(float weightC : jet->IP3D_weightCofTracks) m_IP3D_weightCofTracks->Fill(weightC, eventWeight); + for(float weightU : jet->IP3D_weightUofTracks) m_IP3D_weightUofTracks->Fill(weightU, eventWeight); + + m_IP3D_pu -> Fill(jet->IP3D_pu , eventWeight ); + m_IP3D_pb -> Fill(jet->IP3D_pb , eventWeight ); + m_IP3D_pc -> Fill(jet->IP3D_pc , eventWeight ); + + m_IP3D -> Fill( jet->IP3D , eventWeight ); + m_IP3D_c -> Fill( jet->IP3D_c , eventWeight ); + m_IP3D_cu -> Fill( jet->IP3D_cu, eventWeight ); + + } + + + + + // truth + if(m_infoSwitch->m_truth) + { + m_truthLabelID ->Fill(jet->ConeTruthLabelID , eventWeight); + m_truthCount ->Fill(jet->TruthCount , eventWeight); + m_truthDr_B->Fill(jet->TruthLabelDeltaR_B, eventWeight); + m_truthDr_C->Fill(jet->TruthLabelDeltaR_C, eventWeight); + m_truthDr_T->Fill(jet->TruthLabelDeltaR_T, eventWeight); + //m_PartonTruthLabelID->Fill(jet->PartonTruthLabelID, eventWeight); + //m_GhostTruthAssociationFraction->Fill(jet->GhostTruthAssociationFraction, eventWeight); + m_hadronConeExclTruthLabelID->Fill(jet->HadronConeExclTruthLabelID, eventWeight); + + m_truthPt ->Fill(jet->truth_p4.Pt(), eventWeight); + //m_truth_pt_m ->Fill(jet->truth_p4.Pt(), eventWeight); + //m_truth_pt_l ->Fill(jet->truth_p4.Pt(), eventWeight); + // + //m_truth_eta ->Fill(jet->truth_p4.Eta(), eventWeight); + //m_truth_phi ->Fill(jet->truth_p4.Phi(), eventWeight); + } + + + // charge + if(m_infoSwitch->m_charge) + { + //h_charge->Fill(jet->charge, eventWeight); + } + + + + if(m_infoSwitch->m_byAverageMu) + { + + float avg_mu=-99; + avg_mu = eventInfo->m_averageMu; + m_avgMu->Fill(avg_mu, eventWeight); + if(avg_mu < 15.0) m_jetPt_avgMu_00_15 -> Fill(jet->p4.Pt(), eventWeight); + if(avg_mu >= 15.0 && avg_mu < 25.0) m_jetPt_avgMu_15_25 -> Fill(jet->p4.Pt(), eventWeight); + if(avg_mu >= 25.0) m_jetPt_avgMu_25 -> Fill(jet->p4.Pt(), eventWeight); + m_avgMu_vs_jetPt->Fill(jet->p4.Pt(), avg_mu, eventWeight); + + } + + if (m_infoSwitch->m_vsActualMu) + { + float actualMu = eventInfo->m_actualMu; + m_actualMu->Fill(actualMu, eventWeight); + } + + + if(m_infoSwitch->m_etaPhiMap) + { + m_etaPhi->Fill(jet->p4.Eta(), jet->p4.Phi(), eventWeight); + + } + + + return StatusCode::SUCCESS; + + + } + + + StatusCode JetHists::finalize() { + if(m_tracksInJet){ + m_tracksInJet->finalize(); + delete m_tracksInJet; + } + return IParticleHists::finalize(); + } diff --git a/_sources/api/program_listing_file_Root_JetHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_JetHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..c4c15204e1 --- /dev/null +++ b/_sources/api/program_listing_file_Root_JetHistsAlgo.cxx.rst.txt @@ -0,0 +1,45 @@ + +.. _program_listing_file_Root_JetHistsAlgo.cxx: + +Program Listing for File JetHistsAlgo.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/JetHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + + #include + + #include + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(JetHistsAlgo) + + JetHistsAlgo :: JetHistsAlgo () : + IParticleHistsAlgo("JetHistsAlgo") + { } + + EL::StatusCode JetHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("JetHistsAlgo").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode JetHistsAlgo::AddHists( std::string name ) { + return IParticleHistsAlgo::AddHists(name); + } + + EL::StatusCode JetHistsAlgo :: execute () + { + return IParticleHistsAlgo::execute(); + } diff --git a/_sources/api/program_listing_file_Root_JetSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_JetSelector.cxx.rst.txt new file mode 100644 index 0000000000..205c865df6 --- /dev/null +++ b/_sources/api/program_listing_file_Root_JetSelector.cxx.rst.txt @@ -0,0 +1,1447 @@ + +.. _program_listing_file_Root_JetSelector.cxx: + +Program Listing for File JetSelector.cxx +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/JetSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include + #include + #include + #include "xAODCore/ShallowCopy.h" + #include "AthContainers/ConstDataVector.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/SystematicRegistry.h" + + // package include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/JetSelector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + // external tools include(s): + #include "JetMomentTools/JetForwardJvtTool.h" + #include "xAODBTaggingEfficiency/BTaggingSelectionTool.h" + #include "TriggerMatchingTool/MatchingTool.h" + #include "TriggerMatchingTool/MatchFromCompositeTool.h" + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(JetSelector) + + + JetSelector :: JetSelector () : + Algorithm("JetSelector") + { + } + + EL::StatusCode JetSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_DEBUG( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "JetSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_DEBUG( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_DEBUG( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_DEBUG( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_DEBUG( "Calling initialize"); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_jet_cutflowHist_1 = (TH1D*)file->Get("cutflow_jets_1"); + + m_jet_cutflow_all = m_jet_cutflowHist_1->GetXaxis()->FindBin("all"); + m_jet_cutflow_ptmax_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut"); + m_jet_cutflow_ptmin_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut"); + m_jet_cutflow_etmax_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("etmax_cut"); + m_jet_cutflow_etmin_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("etmin_cut"); + m_jet_cutflow_eta_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); + m_jet_cutflow_jvt_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("JVT_cut"); + m_jet_cutflow_timing_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("timing_cut"); + m_jet_cutflow_btag_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("BTag_cut"); + m_jet_cutflow_cleaning_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("cleaning_cut"); + + } + + //If not set, find default from input container name + if (m_jetScaleType.size() == 0){ + if( m_inContainerName.find("EMTopo") != std::string::npos){ + m_jetScaleType = "JetEMScaleMomentum"; + }else{ + m_jetScaleType = "JetConstitScaleMomentum"; + } + } + + + if ( m_outputAlgo.empty() ) { + m_outputAlgo = m_inputAlgo + "_JetSelect"; + } + + m_isEMjet = m_inContainerName.find("EMTopoJets") != std::string::npos; + m_isLCjet = m_inContainerName.find("LCTopoJets") != std::string::npos; + + // parse and split by comma + std::string token; + + std::istringstream ss(m_passAuxDecorKeys); + while ( std::getline(ss, token, ',') ) { + m_passKeys.push_back(token); + } + + ss.clear(); + ss.str(m_failAuxDecorKeys); + while ( std::getline(ss, token, ',') ) { + ANA_MSG_INFO(token); + m_failKeys.push_back(token); + } + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + bool allOK(true); + if (!m_operatingPt.empty() || m_doBTagCut ) { allOK = false; } + if (m_operatingPt == "FixedCutBEff_30") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_50") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_60") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_70") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_77") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_80") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_85") { allOK = true; } + if (m_operatingPt == "FixedCutBEff_90") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_30") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_40") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_50") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_60") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_70") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_77") { allOK = true; } + if (m_operatingPt == "FlatCutBEff_85") { allOK = true; } + + if( !allOK ) { + ANA_MSG_ERROR( "Requested operating point is not known to xAH. Arrow v Indian? " << m_operatingPt); + return EL::StatusCode::FAILURE; + } + + if ( m_decorateSelectedObjects ) { + ANA_MSG_INFO(" Decorate Jets with " << m_decor); + } + + // if applying cut on nr. bjets, configure it + // + if ( m_doBTagCut ) { + + // initialize the BJetSelectionTool + // A few which are not configurable as of yet.... + // is there a reason to have this configurable here??...I think no (GF to self) + ANA_CHECK( m_BJetSelectTool_handle.setProperty("MaxEta",m_b_eta_max)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("MinPt",m_b_pt_min)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("FlvTagCutDefinitionsFileName", m_corrFileName)); + // configurable parameters + ANA_CHECK( m_BJetSelectTool_handle.setProperty("TaggerName", m_taggerName)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("OperatingPoint", m_operatingPt)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("JetAuthor", m_jetAuthor)); + ANA_CHECK( m_BJetSelectTool_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_BJetSelectTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_BJetSelectTool_handle); + + } + + // initialize the JetPileupLabelingTool to (re-)evaluate decorators using in Jvt efficiency tools + if ( m_doTruthJetTagging ) { + m_jetPileupLabelingTool.setTypeAndName("JetPileupLabelingTool/PileupLabelingTool"); + ATH_CHECK( m_jetPileupLabelingTool.setProperty("RecoJetContainer", m_outContainerName) ); + ATH_CHECK( m_jetPileupLabelingTool.setProperty("TruthJetContainer", m_truthJetContainer) ); + #ifndef XAOD_STANDALONE + ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressInputDependence", true) ); + ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressOutputDependence", true) ); + #endif + ATH_CHECK( m_jetPileupLabelingTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetPileupLabelingTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetPileupLabelingTool); + } + + // initialize CP tools related to NNJvt + if (m_doJVT) { + + // initialize jet NNJvt moment tool + m_jetNNJvtMomentTool.setTypeAndName("JetPileupTag::JetVertexNNTagger/NNJvtMomentTool"); + ATH_CHECK( m_jetNNJvtMomentTool.setProperty("JetContainer", m_outContainerName) ); + #ifndef XAOD_STANDALONE + ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressInputDependence", true) ); + ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressOutputDependence", true) ); + #endif + ATH_CHECK( m_jetNNJvtMomentTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetNNJvtMomentTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtMomentTool); + + // initialize jet NNJvt selection tool + m_jetNNJvtSelectionTool.setTypeAndName("CP::NNJvtSelectionTool/NNJvtSelectionTool"); + ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("JetContainer", m_outContainerName) ); + ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("WorkingPoint", m_WorkingPointJVT) ); + ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetNNJvtSelectionTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtSelectionTool); + + // initialize jet NNJvt efficiency tool (scale factors) + m_jetNNJvtEfficiencyTool.setTypeAndName("CP::NNJvtEfficiencyTool/NNJvtEfficiencyTool"); + ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("JetContainer", m_outContainerName) ); + ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("WorkingPoint", m_WorkingPointJVT) ); + ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("SFFile", m_SFFileJVT) ); + ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetNNJvtEfficiencyTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtEfficiencyTool); + + // Add the chosen WP to the string labelling the vector decoration + m_outputSystNamesJVT = m_outputSystNamesJVT + "_JVT_" + m_WorkingPointJVT; + // Create a passed label for JVT cut + m_outputJVTPassed = m_outputJVTPassed + "_" + m_WorkingPointJVT; + + CP::SystematicSet affectSystsJVT = m_jetNNJvtEfficiencyTool->affectingSystematics(); + for ( const auto& syst_it : affectSystsJVT ) { ANA_MSG_DEBUG("NNJvtEfficiencyTool can be affected by NNJvt efficiency systematic: " << syst_it.name()); } + + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + + const CP::SystematicSet recSystsJVT = m_jetNNJvtEfficiencyTool->recommendedSystematics(); + m_systListJVT = HelperFunctions::getListofSystematics( recSystsJVT, m_systNameJVT, m_systValJVT, msg() ); + + ANA_MSG_INFO("Will be using NNJvtEfficiencyTool tool JVT efficiency systematic:"); + for ( const auto& syst_it : m_systListJVT ) { + if ( m_systNameJVT.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // initialize CP tools related to fJvt + if (m_dofJVT) { + + // initialize jet fJvt selection tool + m_jetfJvtSelectionTool.setTypeAndName("CP::FJvtSelectionTool/fJvtSelectionTool"); + ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JetContainer", m_outContainerName) ); + ATH_CHECK( m_jetfJvtSelectionTool.setProperty("WorkingPoint", m_WorkingPointfJVT) ); + ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JvtMomentName", "DFCommonJets_fJvt") ); + ATH_CHECK( m_jetfJvtSelectionTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetfJvtSelectionTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetfJvtSelectionTool); + + // initialize jet fJvt efficiency tool (scale factors) + m_jetfJvtEfficiencyTool.setTypeAndName("CP::FJvtEfficiencyTool/fJvtEfficiencyTool"); + ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("JetContainer", m_outContainerName) ); + ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("WorkingPoint", m_WorkingPointfJVT) ); + ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("SFFile", m_SFFilefJVT) ); + ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("OutputLevel", msg().level()) ); + ATH_CHECK( m_jetfJvtEfficiencyTool.retrieve() ); + ANA_MSG_DEBUG("Retrieved tool: " << m_jetfJvtEfficiencyTool); + + // Add the chosen WP to the string labelling the vector decoration + m_outputSystNamesfJVT = m_outputSystNamesfJVT + "_fJVT_" + m_WorkingPointfJVT; + // Create a passed label for JVT cut + m_outputfJVTPassed = m_outputfJVTPassed + "_" + m_WorkingPointfJVT; + + CP::SystematicSet affectSystsfJVT = m_jetfJvtEfficiencyTool->affectingSystematics(); + for ( const auto& syst_it : affectSystsfJVT ) { ANA_MSG_DEBUG("FJvtSelectionTool can be affected by fJVT efficiency systematic: " << syst_it.name()); } + + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + + const CP::SystematicSet recSystsfJVT = m_jetfJvtEfficiencyTool->recommendedSystematics(); + m_systListfJVT = HelperFunctions::getListofSystematics( recSystsfJVT, m_systNamefJVT, m_systValfJVT, msg() ); + + ANA_MSG_INFO("Will be using FJvtEfficiencyTool tool fJvt efficiency systematic:"); + for ( const auto& syst_it : m_systListfJVT ) { + if ( m_systNamefJVT.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systListJVT, m_outputSystNamesJVT, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListfJVT, m_outputSystNamesfJVT, fileMD); + } + + ANA_MSG_DEBUG( "Number of events in file: " << m_event->getEntries() ); + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + + // ************************************** + // + // Initialise Trig::MatchingTool + // + // ************************************** + if( !( m_singleJetTrigChains.empty() && m_diJetTrigChains.empty() ) ) { + + if( !isPHYS() ) { + // Grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + ANA_CHECK( m_scoreTool.retrieve()); + + // everything went fine, let's initialise the tool! + m_trigJetMatchTool_handle = asg::AnaToolHandle("Trig::MatchingTool/MatchingTool"); + ANA_CHECK( m_trigJetMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigJetMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigJetMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigJetMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigJetMatchTool_handle); + } else { // For DAOD_PHYS samples + m_trigJetMatchTool_handle = asg::AnaToolHandle("Trig::MatchFromCompositeTool/MatchFromCompositeTool"); + ANA_CHECK( m_trigJetMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigJetMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigJetMatchTool_handle); + } + + } else { + + m_doTrigMatch = false; + + ANA_MSG_WARNING("***********************************************************"); + ANA_MSG_WARNING( "Will not perform any jet trigger matching at this stage b/c :"); + ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore"); + ANA_MSG_WARNING("\t AND/OR"); + ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty"); + ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!"); + ANA_MSG_WARNING("***********************************************************"); + } + + // Check MC cleaning option + if ( m_doMCCleaning && (m_mcCleaningCut < 1.0) ) { + ANA_MSG_WARNING("***********************************************************"); + ANA_MSG_WARNING( "(MC-only) pileup overlay event cleaning has been set :" ); + ANA_MSG_WARNING( "\t reconstructed jet avg(pT1,pT2) > x*(truth jet pT1), x = " << m_mcCleaningCut ); + ANA_MSG_WARNING( "As the specified cut < 1.0 is not the intended use of this procedure, will be reset to default = 1.4!" ); + ANA_MSG_WARNING("***********************************************************"); + m_mcCleaningCut = 1.4; + } + + ANA_MSG_DEBUG( "JetSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Jet Selection... " << m_name); + + // retrieve event + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + float mcEvtWeight(1.0); + if(eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ) ){ + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + } + + m_numEvent++; + + // QUESTION: why this must be done in execute(), and does not work in initialize()? + // + if ( m_numEvent == 1 && m_trigJetMatchTool_handle.isInitialized() ) { + + // parse input jet trigger chain list, split by comma and fill vector + // + std::string singlejet_trig; + std::istringstream ss_singlejet_trig(m_singleJetTrigChains); + + while ( std::getline(ss_singlejet_trig, singlejet_trig, ',') ) { + m_singleJetTrigChainsList.push_back(singlejet_trig); + } + + std::string dijet_trig; + std::istringstream ss_dijet_trig(m_diJetTrigChains); + + while ( std::getline(ss_dijet_trig, dijet_trig, ',') ) { + m_diJetTrigChainsList.push_back(dijet_trig); + } + + ANA_MSG_INFO( "Input single jet trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_singleJetTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + ANA_MSG_INFO( "Input di-jet trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_diJetTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + } + + // did any collection pass the cuts? + bool pass(false); + bool count(true); // count for the 1st collection in the container - could be better as + // shoudl only count for the nominal + const xAOD::JetContainer* inJets(nullptr); + + const xAOD::JetContainer *truthJets = nullptr; + if ( isMC() && (m_doJVT || m_dofJVT || m_doMCCleaning ) && m_haveTruthJets) ANA_CHECK( HelperFunctions::retrieve(truthJets, m_truthJetContainer, m_event, m_store, msg()) ); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + if ( m_inputAlgo.empty() ) { + + // this will be the collection processed - no matter what!! + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName, m_event, m_store, msg()) ); + + // Check against pile-up only jets: + if ( isMC() && m_doMCCleaning && m_haveTruthJets ){ + float pTAvg = (inJets->size() > 0) ? inJets->at(0)->pt() : 0; + if ( inJets->size() > 1 ) pTAvg = ( inJets->at(0)->pt() + inJets->at(1)->pt() ) / 2.0; + if( truthJets->size() == 0 || ( pTAvg / truthJets->at(0)->pt() ) > m_mcCleaningCut ) { + ANA_MSG_DEBUG("Failed MC cleaning, skipping event"); + wk()->skipEvent(); + } + } + + pass = executeSelection( inJets, mcEvtWeight, count, m_outContainerName, true ); + + } else { // get the list of systematics to run over + + // get vector of string giving the names + std::vector* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) ); + + // loop over systematics + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + bool passOne(false); + bool passMCcleaning(true); + for ( auto systName : *systNames ) { + + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName+systName, m_event, m_store, msg()) ); + + // Check against pile-up only jets (if nominal do not pass the selection then throw the event for all systs too) + if ( isMC() && m_doMCCleaning && m_haveTruthJets && systName.empty() ){ + float pTAvg = (inJets->size() > 0) ? inJets->at(0)->pt() : 0; + if ( inJets->size() > 1 ) pTAvg = ( inJets->at(0)->pt() + inJets->at(1)->pt() ) / 2.0; + if( truthJets->size() == 0 || ( pTAvg / truthJets->at(0)->pt() ) > m_mcCleaningCut ) { + passMCcleaning = false; + } + } + + passOne = executeSelection( inJets, mcEvtWeight, count, m_outContainerName+systName, systName.empty() ); + if ( count ) { count = false; } // only count for 1 collection + // save the string if passing the selection + if ( passOne ) { + vecOutContainerNames->push_back( systName ); + } + // the final decision - if at least one passes keep going! + pass = pass || passOne; + pass = (passMCcleaning) ? pass : false; // if nominal do not pass MC cleaning then event should be skip for all systs + } + + // save list of systs that should be considered down stream + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgo)); + //delete vecOutContainerNames; + + } + + // look what we have in TStore + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if ( !pass ) { + wk()->skipEvent(); + } + + ANA_MSG_DEBUG( "Leave Jet Selection... "); + + return EL::StatusCode::SUCCESS; + + } + + bool JetSelector :: executeSelection ( const xAOD::JetContainer* inJets, + float mcEvtWeight, + bool count, + std::string outContainerName, + bool isNominal + ) + { + ANA_MSG_DEBUG("in executeSelection... " << m_name); + + // create output container (if requested) + ConstDataVector* selectedJets(nullptr); + if ( m_createSelectedContainer ) { + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // if doing JVF or JVT get PV location + if ( m_doJVF ) { + const xAOD::VertexContainer* vertices(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + m_pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices, msg() ); + } + + int nPass(0); int nObj(0); + bool passEventClean(true); + + static SG::AuxElement::Accessor< int > isCleanAcc("cleanJet"); + + // + // This cannot be static as multiple instance of Jet Selector would + // then share the same passSelDecor, including the m_decor name + // + SG::AuxElement::Decorator< char > passSelDecor( m_decor ); + + + // identify duplicates + std::vector badIndices; + badIndices.clear(); + int i_jet = 0; + if(m_removeDuplicates) { + ANA_MSG_DEBUG("removing duplicates"); + + // fill pairs with jet eta and index + std::vector< std::pair > etaPairs; + ANA_MSG_DEBUG("All jets:"); + i_jet = 0; + for ( auto jet_itr : *inJets ) { + ANA_MSG_DEBUG( " jet " << i_jet << ": " << jet_itr->pt() << ", " << jet_itr->eta() << ", " << jet_itr->phi() ); + etaPairs.push_back( std::make_pair(jet_itr->eta(), i_jet) ); + i_jet++; + } + + // sort pairs by eta + sort(etaPairs.begin(), etaPairs.end()); + + bool allChecked = false; + if(int(etaPairs.size())<=1) allChecked = true; + while(!allChecked) { + for(int i_etaPair=1; i_etaPair < int(etaPairs.size()); i_etaPair++) { // start with second jet + + // if i and i-1 have identical etas then remove i, and add the relevant index to badIndices + if(etaPairs[i_etaPair].first == etaPairs[i_etaPair-1].first) { + badIndices.push_back(etaPairs[i_etaPair].second); + etaPairs.erase(etaPairs.begin()+i_etaPair); + break; + } + + // if made it to the end with no duplicates, then we're done + if(i_etaPair==int(etaPairs.size())-1) + allChecked = true; + } + } + + ANA_MSG_DEBUG( "duplicates removed:" ); + i_jet = 0; + for ( auto jet_itr : *inJets ) { + if(std::find(badIndices.begin(), badIndices.end(), i_jet) != badIndices.end()) { + continue; + } + ANA_MSG_DEBUG( " jet " << i_jet << ": " << jet_itr->pt() << ", " << jet_itr->eta() << ", " << jet_itr->phi() ); + i_jet++; + } + if(!badIndices.empty()) + m_count_events_with_duplicates++; + } + + // add isHS labels to jets (required for Jvt efficiency tools) + if (m_doTruthJetTagging && isMC()) { + ATH_CHECK(m_jetPileupLabelingTool->decorate(*inJets)); + } + + // recalculate the NNJvt scores and decisions + if (m_doJVT && m_recalculateJvtScores) { + ATH_CHECK(m_jetNNJvtMomentTool->decorate(*inJets)); + } + + i_jet = 0; + + for ( auto jet_itr : *inJets ) { // duplicated of basic loop + + // removing of duplicates + if(m_removeDuplicates) { + if(!badIndices.empty()) { + if(std::find(badIndices.begin(), badIndices.end(), i_jet) != badIndices.end()) { + continue; + } + } + i_jet++; + } + + // if only looking at a subset of jets make sure all are decorated + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *jet_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + // All selections but Cleaning + int passSel = this->PassCuts( jet_itr ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *jet_itr ) = passSel; + } + + // Cleaning Selection must come after kinematic and JVT selections + if ( m_cleanJets && passSel && isCleanAcc.isAvailable( *jet_itr ) ) { + if( !isCleanAcc( *jet_itr ) ) { + passSel = false; + if ( m_decorateSelectedObjects ) + passSelDecor( *jet_itr ) = passSel; + + // If any of the passing jets fail the recommendation is to remove the jet (and MET is wrong) + // If any of the N leading jets are not clean the event should be removed + if( m_markCleanEvent || m_cleanEvent || nObj <= m_cleanEvtLeadJets ){ + passEventClean = false; + ANA_MSG_DEBUG("Remove event due to bad jet with pt " << jet_itr->pt() ); + }// if cleaning the event + + }// if jet is not clean + }// if jet clean aux missing + if( m_useCutFlow && passSel ) + m_jet_cutflowHist_1->Fill( m_jet_cutflow_cleaning_cut, 1 ); + + + + if ( passSel ) { + ANA_MSG_DEBUG("passSel"); + nPass++; + if ( m_createSelectedContainer ) { + selectedJets->push_back( jet_itr ); + } + } + } + + // decorator with flag if it is a hard-scatter jet + static const SG::AuxElement::Decorator isJvtHS("isJvtHS"); + + // Loop over selected jets and decorate with JVT efficiency SF + // Do it only for MC + // + if ( isMC() && !m_haveTruthJets && m_getJVTSF && m_doJVT) { + ANA_MSG_ERROR("Truth jets are needed to retrieve JVT SFs (set m_haveTruthJets to True to retrieve SFs OR set m_getJVTSF to False not to retrieve SFs"); + return EL::StatusCode::FAILURE; + } + if ( isMC() && m_doJVT) { + + auto sysVariationNamesJVT = std::make_unique< std::vector< std::string > >(); + + // Do it only if a tool with *this* name hasn't already been used + // + if ( m_jetNNJvtSelectionTool.isInitialized() && !m_jvtUsedBefore) { + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* jet) + // + static const SG::AuxElement::Decorator< std::vector > dec_sfJVT( m_outputSystNamesJVT ); + + // Create the name of the SF weight to be recorded + // template: SYSNAME_JVTEff_SF + // Only need to do it once per call of executeSelection() + for ( const auto& syst_it : m_systListJVT ) { + std::string sfName = "JVTEff_SF_" + m_WorkingPointJVT; + if ( !syst_it.name().empty() ) { + std::string prepend = syst_it.name() + "_"; + sfName.insert( 0, prepend ); + } + ANA_MSG_DEBUG("JVT SF sys name (to be recorded in xAOD::TStore) is: " << sfName); + sysVariationNamesJVT->push_back(sfName); + } + + unsigned int idx(0); + for ( auto jet : *(selectedJets) ) { + // Create Scale Factor aux for all jets + std::vector sfVecJVT; + + for ( const auto& syst_it : m_systListJVT ) { + // we do not need all SF for non-nominal trees + if ( !syst_it.name().empty() && !isNominal ) + continue; + + // apply syst + + if ( m_jetNNJvtEfficiencyTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure CP::NNJvtEfficiencyTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG("Successfully applied systematic: " << syst_it.name()); + + // and now apply JVT SF! + // + ANA_MSG_DEBUG("Applying JVT SF" ); + + // create passed JVT decorator + static const SG::AuxElement::Decorator passedJVT( m_outputJVTPassed ); + if ( syst_it.name().empty() ) { + passedJVT( *jet ) = 1; // passes by default + } + // obtain JVT SF as a float (to be stored away separately) + float jvtSF(1.0); + CP::CorrectionCode result_code; + // If we do not enforce JVT veto and the jet hasn't passed the JVT cut, we need to calculate the inefficiency scale factor for it + if ( m_noJVTVeto && !bool(m_jetNNJvtSelectionTool->accept(jet)) ) { + if ( syst_it.name().empty() ) { + passedJVT( *jet ) = 0; // mark as not passed + } + if ( m_getJVTSF ){ + result_code = m_jetNNJvtEfficiencyTool->getInefficiencyScaleFactor( *jet, jvtSF ); + if (result_code == CP::CorrectionCode::OutOfValidityRange) { + jvtSF = 1; + } else if (result_code != CP::CorrectionCode::Ok and result_code != CP::CorrectionCode::OutOfValidityRange) { + ANA_MSG_ERROR( "Error in JNNJvtEfficiencyTool getInefficiencyScaleFactor"); + return EL::StatusCode::FAILURE; + } + } + } else { // otherwise classic efficiency scale factor + if ( syst_it.name().empty() ) { + passedJVT( *jet ) = 1; + } + if ( m_getJVTSF ){ + result_code = m_jetNNJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, jvtSF ); + if (result_code == CP::CorrectionCode::OutOfValidityRange) { + jvtSF = 1; + } else if (result_code != CP::CorrectionCode::Ok and result_code != CP::CorrectionCode::OutOfValidityRange) { + ANA_MSG_ERROR( "Error in NNJvtEfficiencyTool getEfficiencyScaleFactor"); + return EL::StatusCode::FAILURE; + } + } + } + sfVecJVT.push_back(jvtSF); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Jet " << idx << ", pt = " << jet->pt()*1e-3 << " GeV, |eta| = " << std::fabs(jet->eta()) << " isJvtHS " << bool(isJvtHS(*jet)) ); + ANA_MSG_DEBUG( "JVT SF decoration: " << m_outputSystNamesJVT ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "JVT SF:"); + ANA_MSG_DEBUG( "\t " << jvtSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + } + ++idx; + // + // Add it to decoration vector + // + dec_sfJVT( *jet ) = sfVecJVT; + } + } + + // Add list of JVT systematics names to TStore + // + // NB: we need to make sure that this is not pushed more than once in TStore! + // This will be the case when this executeSelection() function gets called for every syst varied input container, + // e.g. the different SC containers w/ calibration systematics upstream. + // + if ( !m_store->contains >(m_outputSystNamesJVT) ) { ANA_CHECK( m_store->record( std::move(sysVariationNamesJVT), m_outputSystNamesJVT)); } + } else if ( !isMC() && m_doJVT ) { + // Loop over selected jets and decorate with JVT passed status + for ( auto jet : *(selectedJets) ) { + // create passed JVT decorator + static const SG::AuxElement::Decorator passedJVT( m_outputJVTPassed ); + passedJVT( *jet ) = 1; // passes by default + + if ( m_noJVTVeto && !bool(m_jetNNJvtSelectionTool->accept(jet)) ) { + passedJVT( *jet ) = 0; // mark as not passed + } else { + passedJVT( *jet ) = 1; + } + } + } + + // Loop over selected jets and decorate with fJVT efficiency SF + // Do it only for MC + // + if ( isMC() && m_dofJVT ) { + + auto sysVariationNamesfJVT = std::make_unique< std::vector< std::string > >(); + + // Do it only if a tool with *this* name hasn't already been used + // + if (m_jetfJvtEfficiencyTool.isInitialized() && !m_fjvtUsedBefore) + { + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* jet) + // + static const SG::AuxElement::Decorator> dec_sffJVT(m_outputSystNamesfJVT); + + // Create the name of the SF weight to be recorded + // template: SYSNAME_fJVTEff_SF + // Only need to do it once per call of executeSelection() + for (const auto &syst_it : m_systListfJVT) + { + std::string sfName = "fJVTEff_SF"; + if (!syst_it.name().empty()) + { + std::string prepend = syst_it.name() + "_"; + sfName.insert(0, prepend); + } + ANA_MSG_DEBUG("fJVT SF sys name (to be recorded in xAOD::TStore) is: " << sfName); + sysVariationNamesfJVT->push_back(sfName); + } + + unsigned int idx(0); + for (auto jet : *(selectedJets)) + { + // Create Scale Factor aux for all jets + std::vector sfVecfJVT; + + for (const auto &syst_it : m_systListfJVT) + { + // we do not need all SF for non-nominal trees + if (!syst_it.name().empty() && !isNominal) + continue; + + // apply syst + // + if (m_jetfJvtEfficiencyTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS) + { + ANA_MSG_ERROR("Failed to configure CP::FJvtEfficiencyTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG("Successfully applied systematic: " << syst_it.name()); + + // and now apply fJVT SF! + // + ANA_MSG_DEBUG("Applying fJVT SF"); + + static const SG::AuxElement::Decorator passedfJVT(m_outputfJVTPassed); + if (syst_it.name().empty()) + { + passedfJVT(*jet) = bool(m_jetfJvtSelectionTool->accept(jet)); + } + + float fjvtSF(1.0); + CP::CorrectionCode result_code; + // If we do not enforce JVT veto and the jet hasn't passed the JVT cut, we need to calculate the inefficiency scale factor for it + if ( !m_dofJVTVeto && !bool(m_jetfJvtSelectionTool->accept(jet)) ) { + result_code = m_jetfJvtEfficiencyTool->getInefficiencyScaleFactor( *jet, fjvtSF ); + if ( result_code == CP::CorrectionCode::OutOfValidityRange) { + fjvtSF = 1; + } else if ( result_code != CP::CorrectionCode::Ok ) { + ANA_MSG_ERROR( "Error in fJVT Tool getInefficiencyScaleFactor"); + return EL::StatusCode::FAILURE; + } + } else { // otherwise classic efficiency scale factor + result_code = m_jetfJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, fjvtSF ); + if ( result_code == CP::CorrectionCode::OutOfValidityRange) { + fjvtSF = 1; + } else if ( m_jetfJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, fjvtSF ) != CP::CorrectionCode::Ok ) { + ANA_MSG_ERROR( "Error in fJVT Tool getEfficiencyScaleFactor"); + return EL::StatusCode::FAILURE; + } + } + sfVecfJVT.push_back(fjvtSF); + + ANA_MSG_DEBUG("===>>>"); + ANA_MSG_DEBUG("Jet " << idx << ", pt = " << jet->pt() * 1e-3 << " GeV, |eta| = " << std::fabs(jet->eta()) << " isJvtHS " << bool(isJvtHS(*jet)) ); + ANA_MSG_DEBUG("fJVT SF decoration: " << m_outputSystNamesfJVT); + ANA_MSG_DEBUG("Systematic: " << syst_it.name()); + ANA_MSG_DEBUG("fJVT SF:"); + ANA_MSG_DEBUG("\t " << fjvtSF << " (from getEfficiencyScaleFactor())"); + ANA_MSG_DEBUG("--------------------------------------"); + } + ++idx; + // + // Add it to decoration vector + // + dec_sffJVT(*jet) = sfVecfJVT; + } + + // Add list of fJVT systematics names to TStore + // + // NB: we need to make sure that this is not pushed more than once in TStore! + // This will be the case when this executeSelection() function gets called for every syst varied input container, + // e.g. the different SC containers w/ calibration systematics upstream. + // + if (!m_store->contains>(m_outputSystNamesfJVT)) + { + ANA_CHECK(m_store->record(std::move(sysVariationNamesfJVT), m_outputSystNamesfJVT)); + } + } + else if (!isMC() && m_dofJVT) + { + // Loop over selected jets and decorate with fJVT passed status + for (auto jet : *(selectedJets)) + { + // create passed fJVT decorator + static const SG::AuxElement::Decorator passedfJVT(m_outputfJVTPassed); + passedfJVT(*jet) = bool(m_jetfJvtSelectionTool->accept(jet)); + } + } + } + + // add ConstDataVector to TStore + if ( m_createSelectedContainer ) { + ANA_CHECK( m_store->record( selectedJets, outContainerName )); + } + + if ( count ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + // + // Mark Event as pass/fail cleaning for nominal selection + // + if ( m_markCleanEvent && count ) { + ANA_MSG_DEBUG("Marking Clean"); + // Decorator + SG::AuxElement::Decorator< char > isCleanEventDecor( "cleanEvent_"+m_name ); + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + isCleanEventDecor(*eventInfo) = passEventClean; + } + + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + if ( m_cleanEvent && !passEventClean ) { return false; } + if ( m_pass_min > 0 && nPass < m_pass_min ) { + return false; + } + if ( m_pass_max >= 0 && nPass > m_pass_max ) { + return false; + } + + if ( count ) { + m_numEventPass++; + m_weightNumEventPass += mcEvtWeight; + } + + // Perform trigger matching on the "good" (selected) jets + // + // NB: this part will be skipped if: + // + // 1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!) + // 2. there are no selected jets in the event + // + if ( m_doTrigMatch && selectedJets ) { + + unsigned int nSelectedJets = selectedJets->size(); + + static SG::AuxElement::Decorator< std::map > isTrigMatchedMapJetDecor( "isTrigMatchedMapJet" ); + + if ( nSelectedJets > 0 ) { + + ANA_MSG_DEBUG( "Doing single jet trigger matching..."); + + for ( auto const &chain : m_singleJetTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + for ( auto const jet : *selectedJets ) { + + // For each jet, decorate w/ a map with the 'isMatched' info associated + // to each trigger chain in the input list. + // If decoration map doesn't exist for this jet yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !isTrigMatchedMapJetDecor.isAvailable( *jet ) ) { + isTrigMatchedMapJetDecor( *jet ) = std::map(); + } + + // check whether the pair is matched (NOTE: no DR is needed for jets) + // + char matched = ( m_trigJetMatchTool_handle->match( *jet, chain ) ); + + ANA_MSG_DEBUG( "\t\t is jet trigger matched? " << matched); + + ( isTrigMatchedMapJetDecor( *jet ) )[chain] = matched; + } + } + + } + + // If checking dijet trigger, form jet pairs and test matching for each one. + // Save a: + // + // multimap< chain, pair< pair, ismatched > > + // + // as *event* decoration to store which + // pairs are matched (to a given chain) and which aren't. + // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trijet events. + // + // By retrieving this map later on, user can decide what to do with the event + // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain) + + if ( nSelectedJets > 1 && !m_diJetTrigChains.empty() ) { + + ANA_MSG_DEBUG( "Doing di-jet trigger matching..."); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + typedef std::pair< std::pair, char> dijet_trigmatch_pair; + typedef std::multimap< std::string, dijet_trigmatch_pair > dijet_trigmatch_pair_map; + static SG::AuxElement::Decorator< dijet_trigmatch_pair_map > diJetTrigMatchPairMapDecor( "diJetTrigMatchPairMap" ); + + for ( auto const &chain : m_diJetTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + // If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !diJetTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) { + diJetTrigMatchPairMapDecor( *eventInfo ) = dijet_trigmatch_pair_map(); + } + + std::vector myJets; + + for ( unsigned int imu = 0; imu < selectedJets->size()-1; ++imu ) { + + for ( unsigned int jmu = imu+1; jmu < selectedJets->size(); ++jmu ) { + + // test a new pair + // + myJets.clear(); + myJets.push_back( selectedJets->at(imu) ); + myJets.push_back( selectedJets->at(jmu) ); + + // check whether the pair is matched (NOTE: no DR is needed for jets) + // + char matched = m_trigJetMatchTool_handle->match( myJets, chain ); + + ANA_MSG_DEBUG( "\t\t is the jet pair ("< chain_idxs = std::make_pair(imu,jmu); + dijet_trigmatch_pair chain_decision = std::make_pair(chain_idxs,matched); + diJetTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dijet_trigmatch_pair >(chain,chain_decision) ); + + } + } + } //for m_diJetTrigChainsList + } //if nSelectedJets > 1 && !m_diJetTrigChains.empty() + } //if m_doTrigMatch && selectedJets + + if(m_sort) { + std::sort( selectedJets->begin(), selectedJets->end(), HelperFunctions::sort_pt ); + } + + ANA_MSG_DEBUG("leave executeSelection... "); + return true; + } + + + EL::StatusCode JetSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_DEBUG( m_name ); + + if ( m_useCutFlow ) { + ANA_MSG_DEBUG( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + if(m_removeDuplicates) { + ANA_MSG_INFO("removed duplicate " << m_inContainerName << " from " << m_count_events_with_duplicates << " events"); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode JetSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_DEBUG( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + int JetSelector :: PassCuts( const xAOD::Jet* jet ) { + ANA_MSG_DEBUG("In pass cuts"); + + double jetPt = 0; + double jetET = 0; + double jetEta = 0; + double jetPhi = 0; + double jetM = 0; + double jetRapidity = 0; + if(m_jetScale4Selection=="Final"){ // default + jetPt = jet->pt(); + jetET = jet->p4().Et(); + jetEta = jet->eta(); + jetPhi = jet->phi(); + jetM = jet->m(); + jetRapidity = jet->rapidity(); + } else { // retrieve chosen jet momentum scale + xAOD::JetFourMom_t tmp; + if(!jet->getAttribute(m_jetScale4Selection.c_str(),tmp)){ + ATH_MSG_ERROR("Jet does not have the requested momentum state: " << m_jetScale4Selection); + return 0; + } else { + jetPt = jet->jetP4(m_jetScale4Selection.c_str()).Pt(); + jetET = jet->jetP4(m_jetScale4Selection.c_str()).Et(); + jetEta = jet->jetP4(m_jetScale4Selection.c_str()).Eta(); + jetPhi = jet->jetP4(m_jetScale4Selection.c_str()).Phi(); + jetM = jet->jetP4(m_jetScale4Selection.c_str()).M(); + jetRapidity = jet->jetP4(m_jetScale4Selection.c_str()).Rapidity(); + } + } + + // fill cutflow bin 'all' before any cut + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_all, 1 ); + + // pT + if ( m_pT_max != 1e8 ) { + if ( jetPt > m_pT_max ) { return 0; } + } + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_ptmax_cut, 1 ); + + if ( m_pT_min != 1e8 ) { + if ( jetPt < m_pT_min ) { return 0; } + } + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_ptmin_cut, 1 ); + + // ET + if ( m_ET_max != 1e8 ) { + if ( jetET > m_ET_max ) { return 0; } + } + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_etmax_cut, 1 ); + + if ( m_ET_min != 1e8 ) { + if ( jetET < m_ET_min ) { return 0; } + } + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_etmin_cut, 1 ); + + // eta + if ( m_eta_max != 1e8 ) { + if ( fabs(jetEta) > m_eta_max ) { return 0; } + } + if ( m_eta_min != 1e8 ) { + if ( fabs(jetEta) < m_eta_min ) { return 0; } + } + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_eta_cut, 1 ); + + // detEta + if ( m_detEta_max != 1e8 ) { + if ( fabs( ( jet->getAttribute(m_jetScaleType.c_str()) ).eta() ) > m_detEta_max ) { return 0; } + } + if ( m_detEta_min != 1e8 ) { + if ( fabs( ( jet->getAttribute(m_jetScaleType.c_str()) ).eta() ) < m_detEta_min ) { return 0; } + } + + // mass + if ( m_mass_max != 1e8 ) { + if ( jetM > m_mass_max ) { return 0; } + } + if ( m_mass_min != 1e8 ) { + if ( jetM < m_mass_min ) { return 0; } + } + + // rapidity + if ( m_rapidity_max != 1e8 ) { + if ( jetRapidity > m_rapidity_max ) { return 0; } + } + if ( m_rapidity_min != 1e8 ) { + if ( jetRapidity < m_rapidity_min ) { return 0; } + } + + // JVF pileup cut + if ( m_doJVF ){ + ANA_MSG_DEBUG("Doing JVF"); + ANA_MSG_DEBUG("Jet Pt " << jetPt); + if ( jetPt < m_pt_max_JVF ) { + xAOD::JetFourMom_t jetScaleP4 = jet->getAttribute< xAOD::JetFourMom_t >( m_jetScaleType.c_str() ); + if ( fabs(jetScaleP4.eta()) < m_eta_max_JVF ){ + if ( m_pvLocation < 0 ) + return 0; + if ( jet->getAttribute< std::vector >( "JVF" ).at( m_pvLocation ) < m_JVFCut ) { + return 0; + } + } + } + } // m_doJVF + + if(m_dofJVT){ + if (!bool(m_jetfJvtSelectionTool->accept(jet))){ + ANA_MSG_DEBUG("jet pt = "<eta()>2.5) ) { + ANA_MSG_DEBUG("jet pt = " << jetPt << ",eta = "< 0 ){ + // NB: origin-correction is applied at constituent level. Eta for Jvt needs to be the DetectorEta explicitly. + float jet_eta = jet->getAttribute("DetectorEta"); + float jet_jvt = jet->getAttribute("NNJvt"); + ANA_MSG_DEBUG("Checking Jvt cut for jet pT=" << jetPt << " MeV, DetectorEta=" << jet_eta <<", and Jvt="<< jet_jvt ); + ANA_MSG_DEBUG("Custom JVT working point with pT<" << m_pt_max_JVT << ", |eta|<" << m_eta_max_JVT << ", Jvt<" << m_JVTCut); + // JVT should only be applied at low pt and central eta. If outside this, result = true. + if (jetPt < m_pt_max_JVT && std::fabs(jet_eta) < m_eta_max_JVT) { + result = (jet_jvt > m_JVTCut); + } else { + result = true; + } + } else { + result = bool(m_jetNNJvtSelectionTool->accept(jet)); + } + + if(result) ANA_MSG_DEBUG(" ... jet passes Jvt cut"); + else ANA_MSG_DEBUG(" ... jet does not pass Jvt cut"); + if ( !m_noJVTVeto && !result ) return 0; + } + if ( m_useCutFlow ) m_jet_cutflowHist_1->Fill( m_jet_cutflow_jvt_cut, 1 ); + + if ( m_doJetTimingCut ) { + ANA_MSG_DEBUG("Doing Jet Timing cut"); + float jet_timing; + if (jet->getAttribute("Timing", jet_timing)) { + if ( std::fabs(jet_timing) > m_jetTiming_max) { return 0; } + if ( m_useCutFlow ) m_jet_cutflowHist_1->Fill( m_jet_cutflow_timing_cut, 1 ); + } else { + ANA_MSG_ERROR("Jet timing decoration doesn't exist for this jet collection!"); + return 0; + } + } + + // + // BTagging + // + if ( m_doBTagCut ) { + ANA_MSG_DEBUG("Doing BTagging"); + if ( m_BJetSelectTool_handle->accept( jet ) ) { + if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_btag_cut, 1 ); + } else { + return 0; + } + } + + + // + // HLT BTagging + // + if ( m_doHLTBTagCut ) { + const xAOD::BTagging *btag_info = jet->auxdata< const xAOD::BTagging* >("HLTBTag"); + double tagValue = -99; + if(m_HLTBTagTaggerName=="COMB"){ + float wIP3D = btag_info->IP3D_loglikelihoodratio(); + float wSV1 = btag_info->SV1_loglikelihoodratio(); + tagValue = wIP3D + wSV1; + } + + if(tagValue < m_HLTBTagCutValue){return 0;} + } + + // + // HLT Valid Vtx + // + if ( m_requireHLTVtx ) { + const xAOD::Vertex *online_pvx = jet->auxdata("HLTBJetTracks_vtx"); + if(!online_pvx) {return 0;} + } + + if ( m_requireNoHLTVtx ) { + const xAOD::Vertex *online_pvx = jet->auxdata("HLTBJetTracks_vtx"); + if(online_pvx) {return 0;} + } + + + // + // Pass Keys + // + for ( auto& passKey : m_passKeys ) { + if ( !(jet->auxdata< char >(passKey) == '1') ) { return 0;} + } + + // + // Fail Keys + // + for ( auto& failKey : m_failKeys ){ + if ( !(jet->auxdata< char >(failKey) == '0') ) { return 0;} + } + + // + // Truth Label + // + if ( m_truthLabel != -1 ) { + ANA_MSG_DEBUG("Doing Truth Label"); + int this_TruthLabel = 0; + + static SG::AuxElement::ConstAccessor HadronConeExclTruthLabelID ("HadronConeExclTruthLabelID"); + static SG::AuxElement::ConstAccessor TruthLabelID ("TruthLabelID"); + static SG::AuxElement::ConstAccessor PartonTruthLabelID ("PartonTruthLabelID"); + + if( m_useHadronConeExcl && HadronConeExclTruthLabelID.isAvailable( *jet) ){ + this_TruthLabel = HadronConeExclTruthLabelID(( *jet) ); + } else if ( TruthLabelID.isAvailable( *jet) ) { + this_TruthLabel = TruthLabelID( *jet ); + if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0; + } else { + this_TruthLabel = PartonTruthLabelID( *jet ); + if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0; + } + + if ( this_TruthLabel == -1 ) {return 0;} + if ( (m_truthLabel == 5) && this_TruthLabel != 5 ) { return 0;} + if ( (m_truthLabel == 4) && this_TruthLabel != 4 ) { return 0;} + if ( (m_truthLabel == 0) && this_TruthLabel != 0 ) { return 0;} + + } + + ANA_MSG_DEBUG("Passed Cuts"); + return 1; + } diff --git a/_sources/api/program_listing_file_Root_L1JetContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_L1JetContainer.cxx.rst.txt new file mode 100644 index 0000000000..11aa078154 --- /dev/null +++ b/_sources/api/program_listing_file_Root_L1JetContainer.cxx.rst.txt @@ -0,0 +1,91 @@ + +.. _program_listing_file_Root_L1JetContainer.cxx: + +Program Listing for File L1JetContainer.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/L1JetContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/L1JetContainer.h" + #include + + using namespace xAH; + + L1JetContainer::L1JetContainer(const std::string& name, float units, bool mc) + : ParticleContainer(name,"",units,mc) + { + m_l1Jet_et =new std::vector(); + m_l1Jet_eta =new std::vector(); + m_l1Jet_phi =new std::vector(); + } + + L1JetContainer::~L1JetContainer() + { + if(m_debug) std::cout << " Deleting L1JetContainer " << std::endl; + delete m_l1Jet_et; + delete m_l1Jet_eta; + delete m_l1Jet_phi; + } + + void L1JetContainer::setTree(TTree *tree) + { + ParticleContainer::setTree(tree); + connectBranch(tree,"et",&m_l1Jet_et); + connectBranch(tree,"eta", &m_l1Jet_eta); + connectBranch(tree,"phi", &m_l1Jet_phi); + } + + void L1JetContainer::updateParticle(uint idx, Jet& jet) + { + ParticleContainer::updateParticle(idx,jet); + } + + void L1JetContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + setBranch(tree,"et",m_l1Jet_et); // et8x8 for the case of Legacy L1 jet RoIs + setBranch(tree,"eta", m_l1Jet_eta); + setBranch(tree,"phi", m_l1Jet_phi); + return; + } + + void L1JetContainer::clear() + { + ParticleContainer::clear(); + m_l1Jet_et->clear(); + m_l1Jet_eta ->clear(); + m_l1Jet_phi ->clear(); + return; + } + + void L1JetContainer::FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, bool sort){ + if(!sort) { + for( auto jet_itr : *jets ) { + m_l1Jet_et->push_back ( jet_itr->et8x8() / m_units ); + m_l1Jet_eta->push_back( jet_itr->eta() ); + m_l1Jet_phi->push_back( jet_itr->phi() ); + } + } else { + std::vector< std::vector > vec; + for( auto jet_itr : *jets ) { + std::vector row; + row.clear(); + row.push_back(jet_itr->et8x8()); + row.push_back(jet_itr->eta()); + row.push_back(jet_itr->phi()); + vec.push_back(row); + } + + std::sort(vec.begin(), vec.end(), [&](const std::vector a, const std::vector b) { return a.at(0) < b.at(0);}); + for (int i = int(vec.size())-1; i >= 0; i--) { + m_l1Jet_et->push_back((vec.at(i)).at(0) / m_units); + m_l1Jet_eta->push_back((vec.at(i)).at(1)); + m_l1Jet_phi->push_back((vec.at(i)).at(2)); + } + vec.clear(); + } + } diff --git a/_sources/api/program_listing_file_Root_LinkDef.h.rst.txt b/_sources/api/program_listing_file_Root_LinkDef.h.rst.txt new file mode 100644 index 0000000000..90871d958e --- /dev/null +++ b/_sources/api/program_listing_file_Root_LinkDef.h.rst.txt @@ -0,0 +1,130 @@ + +.. _program_listing_file_Root_LinkDef.h: + +Program Listing for File LinkDef.h +================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/LinkDef.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /* Algorithm Wrapper */ + #include + + /* Event and Jet Selectors */ + #include + #include + #include + #include + #include + #include + #include + #include + #include + + /* Calibrations */ + #include + #include + #include + #include + #include + /*#include */ + #include + #include + + /* Missing Energy Reconstruction */ + #include + + /* Scale Factors */ + #include + #include + #include + #include + + /* Plotting Tools */ + #include + #include + #include + #include + #include + #include + #include + #include + + /* Tree */ + #include + + /* Mini xAOD */ + #include + + /* Other */ + #include + #include + #include + #include + #include + #include + #include + + #ifdef __CINT__ + + #pragma link off all globals; + #pragma link off all classes; + #pragma link off all functions; + #pragma link C++ nestedclass; + + #pragma link C++ namespace xAH; + #pragma link C++ function xAH::addRucio; + + #pragma link C++ class xAH::Algorithm+; + + #pragma link C++ class BasicEventSelection+; + #pragma link C++ class ElectronSelector+; + #pragma link C++ class PhotonSelector+; + #pragma link C++ class TauSelector+; + #pragma link C++ class JetSelector+; + #pragma link C++ class DebugTool+; + #pragma link C++ class TruthSelector+; + #pragma link C++ class TrackSelector+; + #pragma link C++ class MuonSelector+; + + #pragma link C++ class ElectronCalibrator+; + #pragma link C++ class PhotonCalibrator+; + #pragma link C++ class JetCalibrator+; + #pragma link C++ class HLTJetRoIBuilder+; + #pragma link C++ class MuonCalibrator+; + #pragma link C++ class TauCalibrator+; + #pragma link C++ class HLTJetGetter+; + /*#pragma link C++ class GroomedFatJets+;*/ + + #pragma link C++ class METConstructor+; + + #pragma link C++ class ElectronEfficiencyCorrector+; + #pragma link C++ class MuonEfficiencyCorrector+; + #pragma link C++ class TauEfficiencyCorrector+; + #pragma link C++ class BJetEfficiencyCorrector+; + + #pragma link C++ class IParticleHistsAlgo+; + #pragma link C++ class JetHistsAlgo+; + #pragma link C++ class MuonHistsAlgo+; + #pragma link C++ class PhotonHistsAlgo+; + #pragma link C++ class ElectronHistsAlgo+; + #pragma link C++ class MetHistsAlgo+; + #pragma link C++ class TrackHistsAlgo+; + #pragma link C++ class ClusterHistsAlgo+; + + #pragma link C++ class TreeAlgo+; + + #pragma link C++ class MinixAOD+; + + #pragma link C++ class OverlapRemover+; + #pragma link C++ class IsoCloseByCorr+; + #pragma link C++ class TrigMatcher+; + #pragma link C++ class TauJetMatching+; + #pragma link C++ class Writer+; + #pragma link C++ class MessagePrinterAlgo+; + #pragma link C++ class MuonInFatJetCorrector+; + + #endif diff --git a/_sources/api/program_listing_file_Root_METConstructor.cxx.rst.txt b/_sources/api/program_listing_file_Root_METConstructor.cxx.rst.txt new file mode 100644 index 0000000000..fb9967355b --- /dev/null +++ b/_sources/api/program_listing_file_Root_METConstructor.cxx.rst.txt @@ -0,0 +1,659 @@ + +.. _program_listing_file_Root_METConstructor.cxx: + +Program Listing for File METConstructor.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/METConstructor.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + + #include + #include + #include + + #include "xAODAnaHelpers/METConstructor.h" + + #include "METUtilities/CutsMETMaker.h" + #include "METUtilities/METHelpers.h" + #include "PATInterfaces/SystematicVariation.h" + + #include "xAODEventInfo/EventInfo.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODJet/JetContainer.h" + + #include "xAODCore/ShallowCopy.h" + + #include "xAODMissingET/MissingETContainer.h" + #include "xAODMissingET/MissingETAuxContainer.h" + #include "xAODMissingET/MissingETComposition.h" + #include "xAODMissingET/MissingETAssociationMap.h" + + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + #include "TEnv.h" + #include "TSystem.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(METConstructor) + + + METConstructor :: METConstructor () : + Algorithm("METConstructor") + { + } + + EL::StatusCode METConstructor :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "METConstructor" ).ignore(); // call before opening first file + + // to validate and check: + //enable status code failures + //CP::CorrectionCode::enableFailure(); + //CP::SystematicCode::enableFailure(); + //StatusCode::enableFailure();// do not decomment this, maybe an unchecked status code gives a crash... + + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing METConstructor Interface..."); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_DEBUG( "Is MC? " << isMC() ); + + if ( m_dofJVTCut ) { + ANA_CHECK(m_metmaker_handle.setProperty("JetRejectionDec", m_fJVTdecorName)); + } + if ( m_doPFlow ) { + ANA_CHECK(m_metmaker_handle.setProperty("DoPFlow", true)); + } + if ( !m_METWorkingPoint.empty() ){ + ANA_CHECK(m_metmaker_handle.setProperty("JetSelection", m_METWorkingPoint)); + } + ANA_CHECK(m_metmaker_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_metmaker_handle); + + if (!m_systConfigPrefix.empty()) { + ANA_CHECK(m_metSyst_handle.setProperty("ConfigPrefix", m_systConfigPrefix)); + } + if (!m_systConfigSoftTrkFile.empty()) { + ANA_CHECK(m_metSyst_handle.setProperty("ConfigSoftTrkFile", m_systConfigSoftTrkFile)); + } + ANA_CHECK(m_metSyst_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_metSyst_handle); + + ANA_CHECK(m_tauSelTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_tauSelTool_handle); + + if ( m_calculateSignificance ) { + ANA_CHECK( m_metSignificance_handle.setProperty("TreatPUJets", m_significanceTreatPUJets) ); + ANA_CHECK( m_metSignificance_handle.setProperty("SoftTermReso", m_significanceSoftTermReso) ); + + // For AFII samples + if ( isFastSim() ){ + ANA_MSG_INFO( "Setting simulation flavour to AFII"); + ANA_CHECK( m_metSignificance_handle.setProperty("IsAFII", true)); + } + ANA_CHECK( m_metSignificance_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_metSignificance_handle); + } + + ANA_MSG_INFO( "METConstructor Interface " << m_name << " succesfully initialized!"); + + //use the helper function getlistofsystematics: + + // run syst + if ( !m_runNominal && !m_systName.empty() ) { // m_systName is set by default to m_systName= "All", do not change it + // get the syst from met syst tool + const CP::SystematicSet recSyst = m_metSyst_handle->recommendedSystematics(); + m_sysList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + } else { //run nominal + m_sysList.push_back(CP::SystematicSet()); // add empty systematic (Nominal case) + } + + ANA_MSG_INFO("Will be using METSystematicsTool systematic:"); + for ( const auto& syst_it : m_sysList ) { + ANA_MSG_INFO("\t " << syst_it.name()); + } + + m_numEvent = 0; //just as a check + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_sysList, m_name, fileMD); + } + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode METConstructor :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Performing MET reconstruction..."); + + m_numEvent ++ ; + //ANA_MSG_DEBUG("number of processed events now is : "<< m_numEvent); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg())); + + const xAOD::MissingETContainer* coreMet(0); + ANA_CHECK( HelperFunctions::retrieve(coreMet, m_coreName, m_event, m_store, msg())); + + const xAOD::MissingETAssociationMap* metMap = 0; + ANA_CHECK( HelperFunctions::retrieve(metMap, m_mapName, m_event, m_store, msg())); + xAOD::MissingETAssociationHelper metHelper(metMap); + + std::vector::const_iterator sysListItr; + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + // + // get vector of string giving the Systematic names: + // + // load each object systematic. This is done at the execution level + // as systematic containers have to exist. To avoid adding several + // times the same systematic a check has to be performed on sysList + // + + //add the syst for jets + std::vector* sysJetsNames(nullptr); + if(!m_runNominal && !m_jetSystematics.empty()){ + ANA_CHECK( HelperFunctions::retrieve(sysJetsNames, m_jetSystematics, 0, m_store, msg())); + + for ( auto systName : *sysJetsNames ) { + if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) { + m_sysList.push_back(CP::SystematicSet(systName)); + ANA_MSG_DEBUG("jet syst added is = "<< systName); + } + } + } + + //add the syst for electrons + std::vector* sysElectronsNames(nullptr); + if(!m_runNominal && !m_eleSystematics.empty()){ + ANA_CHECK( HelperFunctions::retrieve(sysElectronsNames, m_eleSystematics, 0, m_store, msg())); + + for ( auto systName : *sysElectronsNames ) { + if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) { + m_sysList.push_back(CP::SystematicSet(systName)); + ANA_MSG_DEBUG("ele syst added is = "<< systName); + } + } + } + + //add the syst for muons + std::vector* sysMuonsNames(nullptr); + if(!m_runNominal && !m_muonSystematics.empty()){ + ANA_CHECK( HelperFunctions::retrieve(sysMuonsNames, m_muonSystematics, 0, m_store, msg())); + + for ( auto systName : *sysMuonsNames ) { + if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) { + m_sysList.push_back(CP::SystematicSet(systName)); + ANA_MSG_DEBUG("muon syst added is = "<< systName); + } + } + } + + //add the syst for tau + std::vector* sysTausNames(nullptr); + if(!m_runNominal && !m_tauSystematics.empty()){ + ANA_CHECK( HelperFunctions::retrieve(sysTausNames, m_tauSystematics, 0, m_store, msg())); + + for ( auto systName : *sysTausNames ) { + if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) { + m_sysList.push_back(CP::SystematicSet(systName)); + ANA_MSG_DEBUG("tau syst added is = "<< systName); + } + } + } + + //add the syst for photons + std::vector* sysPhotonsNames(nullptr); + if(!m_runNominal && !m_phoSystematics.empty()){ + ANA_CHECK( HelperFunctions::retrieve(sysPhotonsNames, m_phoSystematics, 0, m_store, msg())); + + for ( auto systName : *sysPhotonsNames ) { + if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) { + m_sysList.push_back(CP::SystematicSet(systName)); + ANA_MSG_DEBUG("photon syst added is = "<< systName); + } + } + } + + // now start the loop over systematics + for (sysListItr = m_sysList.begin(); sysListItr != m_sysList.end(); ++sysListItr) { // loop over systematics + + //this is kind of annoying, but applySystematicVariation only takes a SystematicSet, but *sysListItr is a SystematicVariation. + //We use the SystematicSet constructor which just takes a SystematicVariation + //CP::SystematicSet systSet({systName}); + //tell the tool that we are using this SystematicSet (of one SystematicVariation for now) + //after this call, when we use applyCorrection, the given met term will be adjusted with this systematic applied + //assert( m_metSyst_handle->applySystematicVariation(sysList) ); + // + // info from https://svnweb.cern.ch/trac/atlasoff/browser/Reconstruction/MET/METUtilities/trunk/util/example_METMaker_METSystematicsTool.cxx + + // just for convenience, to retrieve the containers + std::string systName = (*sysListItr).name(); + + ANA_MSG_DEBUG(" loop over systematic = " << systName); + + vecOutContainerNames->push_back( systName ); + + // Reset all the met map associations + metHelper.resetObjSelectionFlags(); + + //create a met container, one for each syst + auto newMet = std::make_unique(); + auto metAuxCont = std::make_unique(); + newMet->setStore(metAuxCont.get()); + + // now retrieve the object containers and build the met + // if the syst varied container exists take it, otherwise take the nominal one + + + if ( !m_inputElectrons.empty() ) { + const xAOD::ElectronContainer* eleCont(0); + std::string suffix = ""; + if (sysElectronsNames && std::find(std::begin(*sysElectronsNames), std::end(*sysElectronsNames), systName) != std::end(*sysElectronsNames)) { + if (systName != "") ANA_MSG_DEBUG("doing electron systematics"); + suffix = systName; + } + + if ( m_store->contains(m_inputElectrons + suffix) || m_event->contains(m_inputElectrons + suffix) ) { + ANA_CHECK( HelperFunctions::retrieve(eleCont, m_inputElectrons + suffix, m_event, m_store, msg())); + ANA_MSG_DEBUG("retrieving ele container " << m_inputElectrons + suffix << " to be added to the MET"); + } else { + ANA_MSG_DEBUG("container " << m_inputElectrons + suffix << " not available upstream - skipping systematics"); + continue; + } + + ANA_MSG_DEBUG("rebuilding MET term: RefEle"); + if (m_doElectronCuts) { + ConstDataVector metElectrons(SG::VIEW_ELEMENTS); + for (const auto& el : *eleCont) if (CutsMETMaker::accept(el)) metElectrons.push_back(el); + ANA_CHECK( m_metmaker_handle->rebuildMET("RefEle", xAOD::Type::Electron, newMet.get(), metElectrons.asDataVector(), metHelper)); + } else { + ANA_CHECK( m_metmaker_handle->rebuildMET("RefEle", xAOD::Type::Electron, newMet.get(), eleCont, metHelper)); + } + } // close "if( m_inputElectrons.Length() > 0 )" + + + + if ( !m_inputPhotons.empty() ) { + const xAOD::PhotonContainer* phoCont(0); + std::string suffix = ""; + if (sysPhotonsNames && std::find(std::begin(*sysPhotonsNames), std::end(*sysPhotonsNames), systName) != std::end(*sysPhotonsNames)) { + if (systName != "") ANA_MSG_DEBUG("doing photon systematics"); + suffix = systName; + } + + if ( m_store->contains(m_inputPhotons + suffix) || m_event->contains(m_inputPhotons + suffix) ) { + ANA_CHECK( HelperFunctions::retrieve(phoCont, m_inputPhotons + suffix, m_event, m_store, msg())); + ANA_MSG_DEBUG("retrieving ph container " << m_inputPhotons + suffix << " to be added to the MET"); + } else { + ANA_MSG_DEBUG("container " << m_inputPhotons + suffix << " not available upstream - skipping systematics"); + continue; + } + + ANA_MSG_DEBUG("rebuilding MET term: RefGamma"); + if (m_doPhotonCuts) { + ConstDataVector metPhotons(SG::VIEW_ELEMENTS); + for (const auto& ph : *phoCont) { + + bool testPID = 0; + ph->passSelection(testPID, "Tight"); + if( !testPID ) continue; + + //ANA_MSG_VERBOSE("Photon author = " << ph->author() << " test " << (ph->author()&20)); + if (!(ph->author() & 20)) continue; + + if (ph->pt() < 25e3) continue; + + float feta = fabs(ph->eta()); + if (feta > 2.37 || (1.37 < feta && feta < 1.52)) continue; + + metPhotons.push_back(ph); + } + + ANA_CHECK( m_metmaker_handle->rebuildMET("RefGamma", xAOD::Type::Photon, newMet.get(), metPhotons.asDataVector(), metHelper)); + + } else { + ANA_CHECK( m_metmaker_handle->rebuildMET("RefGamma", xAOD::Type::Photon, newMet.get(), phoCont, metHelper)); + } + } + + + if ( !m_inputTaus.empty() ) { + const xAOD::TauJetContainer* tauCont(0); + std::string suffix = ""; + if (sysTausNames && std::find(std::begin(*sysTausNames), std::end(*sysTausNames), systName) != std::end(*sysTausNames)) { + if (systName != "") ANA_MSG_DEBUG("doing tau systematics"); + suffix = systName; + } + + if ( m_store->contains(m_inputTaus + suffix) || m_event->contains(m_inputTaus + suffix) ) { + ANA_CHECK( HelperFunctions::retrieve(tauCont, m_inputTaus + suffix, m_event, m_store, msg())); + ANA_MSG_DEBUG("retrieving tau container " << m_inputTaus + suffix << " to be added to the MET"); + } else { + ANA_MSG_DEBUG("container " << m_inputTaus + suffix << " not available upstream - skipping systematics"); + continue; + } + + ANA_MSG_DEBUG("rebuilding MET term: RefTau"); + if (m_doTauCuts) { + ConstDataVector metTaus(SG::VIEW_ELEMENTS); + for (const auto& tau : *tauCont) { + + if (tau->pt() < 20e3) continue; + if (fabs(tau->eta()) > 2.37) continue; + if (!m_tauSelTool_handle->accept(tau)) continue; + + metTaus.push_back(tau); + } + ANA_CHECK( m_metmaker_handle->rebuildMET("RefTau", xAOD::Type::Tau, newMet.get(), metTaus.asDataVector(), metHelper)); + } else { + ANA_CHECK( m_metmaker_handle->rebuildMET("RefTau", xAOD::Type::Tau, newMet.get(), tauCont, metHelper)); + } + } + + + if ( !m_inputMuons.empty() ) { + const xAOD::MuonContainer* muonCont(0); + std::string suffix = ""; + if (sysMuonsNames && std::find(std::begin(*sysMuonsNames), std::end(*sysMuonsNames), systName) != std::end(*sysMuonsNames)) { + if (systName != "") ANA_MSG_DEBUG("doing muon systematics"); + suffix = systName; + } + + if ( m_store->contains(m_inputMuons + suffix) || m_event->contains(m_inputMuons + suffix) ) { + ANA_CHECK( HelperFunctions::retrieve(muonCont, m_inputMuons + suffix, m_event, m_store, msg())); + ANA_MSG_DEBUG("retrieving muon container " << m_inputMuons + suffix << " to be added to the MET"); + } else { + ANA_MSG_DEBUG("container " << m_inputMuons + suffix << " not available upstream - skipping systematics"); + continue; + } + + ANA_MSG_DEBUG("rebuilding MET term: Muons"); + if (m_doMuonCuts) { + ConstDataVector metMuons(SG::VIEW_ELEMENTS); + for (const auto& mu : *muonCont) if (CutsMETMaker::accept(mu)) metMuons.push_back(mu); + ANA_CHECK( m_metmaker_handle->rebuildMET("Muons", xAOD::Type::Muon, newMet.get(), metMuons.asDataVector(), metHelper)); + } else { + ANA_CHECK( m_metmaker_handle->rebuildMET("Muons", xAOD::Type::Muon, newMet.get(), muonCont, metHelper)); + } + } + + + if ( m_inputJets.empty() ) { + ANA_MSG_ERROR("Jets are required for MET calculation."); + return EL::StatusCode::FAILURE; + } + + const xAOD::JetContainer* jetCont(0); + std::string suffix = ""; + if (sysJetsNames && std::find(std::begin(*sysJetsNames), std::end(*sysJetsNames), systName) != std::end(*sysJetsNames)) { + if (systName != "") ANA_MSG_DEBUG("doing jet systematics"); + suffix = systName; + } + + if ( m_store->contains(m_inputJets + suffix) || m_event->contains(m_inputJets + suffix) ) { + ANA_CHECK( HelperFunctions::retrieve(jetCont, m_inputJets + suffix, m_event, m_store, msg())); + ANA_MSG_DEBUG("retrieving jet container " << m_inputJets + suffix << " to be added to the MET"); + } else { + ANA_MSG_DEBUG("container " << m_inputJets + suffix << " not available upstream - skipping systematics"); + continue; + } + + // the jet term and soft term(s) are built simultaneously using METMaker::rebuildJetMET(...) or METMaker::rebuildTrackMET(...) + // to build MET using a calorimeter or track based jet term, respectively. + // pass to rebuildJetMET calibrated jets (full container) + // + + // NOTE: you have to set m_doJVTCut correctly when running! + + // By default: rebuild MET using jets without soft cluster terms (just TST, no CST) + // You can configure to add Cluster Soft Term (only affects the "use Jets" option) + // or to rebuild MET using the Tracks in Calorimeter Jets which doesn't make sense to have CST + if( !m_rebuildUsingTracksInJets ) { + if( m_addSoftClusterTerms ){ + ANA_MSG_DEBUG("rebuilding MET term: RefJet + SoftClus + PVSoftTrk"); + ANA_CHECK( m_metmaker_handle->rebuildJetMET("RefJet", "SoftClus", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut)); + } else { + ANA_MSG_DEBUG("rebuilding MET term: RefJet + PVSoftTrk"); + ANA_CHECK( m_metmaker_handle->rebuildJetMET("RefJet", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut)); + } + } else { + ANA_MSG_DEBUG("rebuilding MET term: RefJetTrk"); + ANA_CHECK( m_metmaker_handle->rebuildTrackMET("RefJetTrk", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut)); + } + + //now tell the m_metSyst_handle that we are using this SystematicSet (of one SystematicVariation for now) + //after this call, when we use applyCorrection, the given met term will be adjusted with this systematic applied + // assert( m_metSyst_handle->applySystematicVariation(systSet) ); + if (isMC()) { + CP::SystematicSet systSet({systName}); // to pass from SystematicVariation to SystematicSet + if( m_metSyst_handle->applySystematicVariation(systSet) != EL::StatusCode::SUCCESS) { + ANA_MSG_ERROR("not able to applySystematicVariation "); + } + } + + if(!m_rebuildUsingTracksInJets && m_addSoftClusterTerms){ + //get the soft cluster term, and applyCorrection + xAOD::MissingET * softClusMet = (*newMet)["SoftClus"]; + //assert( softClusMet != 0); //check we retrieved the clust term + if( isMC() && m_metSyst_handle->applyCorrection(*softClusMet, metHelper) != CP::CorrectionCode::Ok) { + ANA_MSG_ERROR( "Could not apply correction to soft clus met !!!! "); + } + ANA_MSG_DEBUG("Soft cluster met term met : " << softClusMet->met()); + } + + //get the track soft term, and applyCorrection + xAOD::MissingET * softTrkMet = (*newMet)["PVSoftTrk"]; + if( isMC() && m_metSyst_handle->applyCorrection(*softTrkMet, metHelper) != CP::CorrectionCode::Ok) { + ANA_MSG_ERROR( "Could not apply correction to soft track met !!!! "); + } + ANA_MSG_DEBUG("track met soft term : " << softTrkMet->met()); + + //only for track jets + /*xAOD::MissingET * jetMet = (*newMet)["RefJet"]; + if( (*jetMet)->applyCorrection(iSysSet) != CP::CorrectionCode::Ok) { + ANA_MSG_ERROR( "Could not apply correction to jet met !!!! "); + }; + ANA_MSG_DEBUG("Jet met term met " << jetMet->met());*/ + + // build met: + + ANA_CHECK( met::buildMETSum("FinalClus", newMet.get(), static_cast(MissingETBase::Source::Signal::LCTopo) )); + ANA_CHECK( met::buildMETSum("FinalTrk", newMet.get(), static_cast(MissingETBase::Source::Signal::Track) )); + + // Calculate MET significance if enabled + if ( m_calculateSignificance ) { + std::vector totalMETNames = {"FinalTrk", "FinalClus"}; + + for ( const std::string &name : totalMETNames ) { + // Calculate MET significance + if ( !m_rebuildUsingTracksInJets ) { + ANA_CHECK( m_metSignificance_handle->varianceMET(newMet.get(), eventInfo->averageInteractionsPerCrossing(), "RefJet", "PVSoftTrk", name) ); + } else { + ANA_CHECK( m_metSignificance_handle->varianceMET(newMet.get(), eventInfo->averageInteractionsPerCrossing(), "RefJetTrk", "PVSoftTrk", name) ); + } + + // Decorate MET object with results + const xAOD::MissingET *met = *(newMet->find(name)); + if ( !met ) { + ANA_MSG_WARNING( "Cannot find MET object with name: " << name ); + } + + met->auxdecor("METOverSqrtSumET") = m_metSignificance_handle->GetMETOverSqrtSumET(); + met->auxdecor("METOverSqrtHT") = m_metSignificance_handle->GetMETOverSqrtHT(); + met->auxdecor("Significance") = m_metSignificance_handle->GetSignificance(); + met->auxdecor("SigDirectional") = m_metSignificance_handle->GetSigDirectional(); + met->auxdecor("Rho") = m_metSignificance_handle->GetRho(); + met->auxdecor("VarL") = m_metSignificance_handle->GetVarL(); + met->auxdecor("VarT") = m_metSignificance_handle->GetVarT(); + met->auxdecor("JetVarL") = m_metSignificance_handle->GetTermVarL(1); + met->auxdecor("JetVarT") = m_metSignificance_handle->GetTermVarT(1); + met->auxdecor("SoftVarL") = m_metSignificance_handle->GetTermVarL(2); + met->auxdecor("SoftVarT") = m_metSignificance_handle->GetTermVarT(2); + met->auxdecor("EleVarL") = m_metSignificance_handle->GetTermVarL(3); + met->auxdecor("EleVarT") = m_metSignificance_handle->GetTermVarT(3); + met->auxdecor("MuonVarL") = m_metSignificance_handle->GetTermVarL(4); + met->auxdecor("MuonVarT") = m_metSignificance_handle->GetTermVarT(4); + met->auxdecor("PhotonVarL") = m_metSignificance_handle->GetTermVarL(5); + met->auxdecor("PhotonVarT") = m_metSignificance_handle->GetTermVarT(5); + met->auxdecor("TauVarL") = m_metSignificance_handle->GetTermVarL(6); + met->auxdecor("TauVarT") = m_metSignificance_handle->GetTermVarT(6); + } + } + + ANA_MSG_DEBUG(" FinalClus met, for syst " << systName << " is = " << (*newMet->find("FinalClus"))->met()); + ANA_MSG_DEBUG(" FinalTrk met, for syst " << systName << " is = " << (*newMet->find("FinalTrk"))->met()); + ANA_MSG_DEBUG("storing met container : " << (m_outputContainer + systName)); + ANA_MSG_DEBUG("storing Aux met container : "<< (m_outputContainer + systName + "Aux.")); + + // Store MET + ANA_CHECK( m_store->record( std::move(newMet), (m_outputContainer + systName) )); + ANA_CHECK( m_store->record( std::move(metAuxCont), (m_outputContainer + systName + "Aux."))); + + } //end loop over systematics + + // might have already been stored by another execution of this algo + // or by a previous iteration of the same + if ( !m_store->contains< std::vector >( m_outputAlgoSystNames ) ) { + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + } + + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + + } + + + + EL::StatusCode METConstructor :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor::finalize() + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + // if (m_metmaker_handle) { + // delete m_metmaker_handle; + // m_metmaker_handle = 0; + // } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode METConstructor :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MessagePrinterAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_MessagePrinterAlgo.cxx.rst.txt new file mode 100644 index 0000000000..7fa265150b --- /dev/null +++ b/_sources/api/program_listing_file_Root_MessagePrinterAlgo.cxx.rst.txt @@ -0,0 +1,64 @@ + +.. _program_listing_file_Root_MessagePrinterAlgo.cxx: + +Program Listing for File MessagePrinterAlgo.cxx +=============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MessagePrinterAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // EL include(s): + #include + #include + #include "EventLoop/OutputStream.h" + + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(MessagePrinterAlgo) + + MessagePrinterAlgo :: MessagePrinterAlgo () : + Algorithm("MessagePrinterAlgo") + { + } + + + EL::StatusCode MessagePrinterAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("MessagePrinterAlgo").ignore(); // call before opening first file + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MessagePrinterAlgo :: histInitialize () + { + ANA_CHECK( xAH::Algorithm::algInitialize()); + if(numInstances() != 1){ + ANA_MSG_FATAL( "More than one instance of MessagePrinterAlgo was created. Aborting."); + return EL::StatusCode::FAILURE; + } + + // otherwise, we're fine, let's just set up the messaging correctly + m_messagePrinter.reset(new asg::MessagePrinter(m_sourceWidth)); + m_messagePrinterOverlay.reset(new asg::MessagePrinterOverlay(m_messagePrinter.get())); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MessagePrinterAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MessagePrinterAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + EL::StatusCode MessagePrinterAlgo :: initialize () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MessagePrinterAlgo :: execute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MessagePrinterAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MessagePrinterAlgo :: finalize () { return EL::StatusCode::SUCCESS; } + + EL::StatusCode MessagePrinterAlgo :: histFinalize () + { + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MetContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_MetContainer.cxx.rst.txt new file mode 100644 index 0000000000..6fc0d9cca2 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MetContainer.cxx.rst.txt @@ -0,0 +1,396 @@ + +.. _program_listing_file_Root_MetContainer.cxx: + +Program Listing for File MetContainer.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MetContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/MetContainer.h" + #include + + + using namespace xAH; + + MetContainer::MetContainer(const std::string& name, const std::string& detailStr, float units) + : m_name(name), m_infoSwitch(detailStr), m_debug(false), m_units(units) + { + } + + MetContainer::~MetContainer() + { + if(m_debug) std::cout << " Deleting MetContainer " << std::endl; + } + + void MetContainer::setTree(TTree *tree) + { + + if ( m_infoSwitch.m_metClus ) { + connectBranch(tree, "FinalClus", &m_metFinalClus ); + connectBranch(tree, "FinalClusPx", &m_metFinalClusPx ); + connectBranch(tree, "FinalClusPy", &m_metFinalClusPy ); + connectBranch(tree, "FinalClusSumEt", &m_metFinalClusSumEt); + connectBranch(tree, "FinalClusPhi", &m_metFinalClusPhi ); + } + + if ( m_infoSwitch.m_sigClus ) { + connectBranch(tree, "FinalClusOverSqrtSumEt", &m_metFinalClusOverSqrtSumEt ); + connectBranch(tree, "FinalClusOverSqrtHt", &m_metFinalClusOverSqrtHt ); + connectBranch(tree, "FinalClusSignificance", &m_metFinalClusSignificance ); + connectBranch(tree, "FinalClusSigDirectional", &m_metFinalClusSigDirectional); + } + + if ( m_infoSwitch.m_sigResolutionClus ) { + connectBranch(tree, "FinalClusRho", &m_metFinalClusRho ); + connectBranch(tree, "FinalClusVarL", &m_metFinalClusVarL); + connectBranch(tree, "FinalClusVarT", &m_metFinalClusVarT); + } + + if ( m_infoSwitch.m_metTrk ) { + connectBranch(tree, "FinalTrk", &m_metFinalTrk ); + connectBranch(tree, "FinalTrkPx", &m_metFinalTrkPx ); + connectBranch(tree, "FinalTrkPy", &m_metFinalTrkPy ); + connectBranch(tree, "FinalTrkSumEt", &m_metFinalTrkSumEt); + connectBranch(tree, "FinalTrkPhi", &m_metFinalTrkPhi ); + } + + if ( m_infoSwitch.m_sigTrk ) { + connectBranch(tree, "FinalTrkOverSqrtSumEt", &m_metFinalTrkOverSqrtSumEt ); + connectBranch(tree, "FinalTrkOverSqrtHt", &m_metFinalTrkOverSqrtHt ); + connectBranch(tree, "FinalTrkSignificance", &m_metFinalTrkSignificance ); + connectBranch(tree, "FinalTrkSigDirectional", &m_metFinalTrkSigDirectional); + } + + if ( m_infoSwitch.m_sigResolutionTrk ) { + connectBranch(tree, "FinalTrkRho", &m_metFinalTrkRho ); + connectBranch(tree, "FinalTrkVarL", &m_metFinalTrkVarL); + connectBranch(tree, "FinalTrkVarT", &m_metFinalTrkVarT); + } + + if ( m_infoSwitch.m_refEle ) { + connectBranch(tree, "Ele", &m_metEle ); + connectBranch(tree, "EleSumEt", &m_metEleSumEt ); + connectBranch(tree, "ElePhi", &m_metElePhi ); + } + + if ( m_infoSwitch.m_refGamma ) { + connectBranch(tree, "Gamma", &m_metGamma ); + connectBranch(tree, "GammaSumEt", &m_metGammaSumEt); + connectBranch(tree, "GammaPhi", &m_metGammaPhi ); + } + + if ( m_infoSwitch.m_refTau ) { + connectBranch(tree, "Tau", &m_metTau ); + connectBranch(tree, "TauSumEt", &m_metTauSumEt ); + connectBranch(tree, "TauPhi", &m_metTauPhi ); + } + + if ( m_infoSwitch.m_refMuons ) { + connectBranch(tree, "Muons", &m_metMuons ); + connectBranch(tree, "MuonsSumEt", &m_metMuonsSumEt ); + connectBranch(tree, "MuonsPhi", &m_metMuonsPhi ); + } + + if ( m_infoSwitch.m_refJet ) { + connectBranch(tree, "Jet", &m_metJet ); + connectBranch(tree, "JetSumEt", &m_metJetSumEt ); + connectBranch(tree, "JetPhi", &m_metJetPhi ); + } + + if ( m_infoSwitch.m_refJetTrk ) { + connectBranch(tree, "JetTrk", &m_metJetTrk ); + connectBranch(tree, "JetTrkSumEt", &m_metJetTrkSumEt); + connectBranch(tree, "JetTrkPhi", &m_metJetTrkPhi ); + } + + if ( m_infoSwitch.m_softClus) { + connectBranch(tree, "SoftClus", &m_metSoftClus ); + connectBranch(tree, "SoftClusSumEt", &m_metSoftClusSumEt); + connectBranch(tree, "SoftClusPhi", &m_metSoftClusPhi ); + } + + if ( m_infoSwitch.m_softTrk) { + connectBranch(tree, "SoftTrk", &m_metSoftTrk ); + connectBranch(tree, "SoftTrkSumEt", &m_metSoftTrkSumEt); + connectBranch(tree, "SoftTrkPhi", &m_metSoftTrkPhi ); + } + + } + + + void MetContainer::setBranches(TTree *tree) + { + + if ( m_infoSwitch.m_metClus ) { + setBranch(tree, "FinalClus", &m_metFinalClus, "F"); + setBranch(tree, "FinalClusPx", &m_metFinalClusPx, "F"); + setBranch(tree, "FinalClusPy", &m_metFinalClusPy, "F"); + setBranch(tree, "FinalClusSumEt", &m_metFinalClusSumEt, "F"); + setBranch(tree, "FinalClusPhi", &m_metFinalClusPhi, "F"); + } + + if ( m_infoSwitch.m_sigClus ) { + setBranch(tree, "FinalClusOverSqrtSumEt", &m_metFinalClusOverSqrtSumEt, "F"); + setBranch(tree, "FinalClusOverSqrtHt", &m_metFinalClusOverSqrtHt, "F"); + setBranch(tree, "FinalClusSignificance", &m_metFinalClusSignificance, "F"); + setBranch(tree, "FinalClusSigDirectional", &m_metFinalClusSigDirectional, "F"); + } + + if ( m_infoSwitch.m_sigResolutionClus ) { + setBranch(tree, "FinalClusRho", &m_metFinalClusRho, "F"); + setBranch(tree, "FinalClusVarL", &m_metFinalClusVarL, "F"); + setBranch(tree, "FinalClusVarT", &m_metFinalClusVarT, "F"); + } + + if ( m_infoSwitch.m_metTrk ) { + setBranch(tree, "FinalTrk", &m_metFinalTrk, "F"); + setBranch(tree, "FinalTrkPx", &m_metFinalTrkPx, "F"); + setBranch(tree, "FinalTrkPy", &m_metFinalTrkPy, "F"); + setBranch(tree, "FinalTrkSumEt", &m_metFinalTrkSumEt, "F"); + setBranch(tree, "FinalTrkPhi", &m_metFinalTrkPhi, "F"); + } + + if ( m_infoSwitch.m_sigTrk ) { + setBranch(tree, "FinalTrkOverSqrtSumEt", &m_metFinalTrkOverSqrtSumEt, "F"); + setBranch(tree, "FinalTrkOverSqrtHt", &m_metFinalTrkOverSqrtHt, "F"); + setBranch(tree, "FinalTrkSignificance", &m_metFinalTrkSignificance, "F"); + setBranch(tree, "FinalTrkSigDirectional", &m_metFinalTrkSigDirectional, "F"); + } + + if ( m_infoSwitch.m_sigResolutionTrk ) { + setBranch(tree, "FinalTrkRho", &m_metFinalTrkRho, "F"); + setBranch(tree, "FinalTrkVarL", &m_metFinalTrkVarL, "F"); + setBranch(tree, "FinalTrkVarT", &m_metFinalTrkVarT, "F"); + } + + if ( m_infoSwitch.m_refEle ) { + setBranch(tree, "Ele", &m_metEle, "F"); + setBranch(tree, "EleSumEt", &m_metEleSumEt, "F"); + setBranch(tree, "ElePhi", &m_metElePhi, "F"); + } + + if ( m_infoSwitch.m_refGamma ) { + setBranch(tree, "Gamma", &m_metGamma, "F"); + setBranch(tree, "GammaSumEt", &m_metGammaSumEt, "F"); + setBranch(tree, "GammaPhi", &m_metGammaPhi, "F"); + } + + if ( m_infoSwitch.m_refTau ) { + setBranch(tree, "Tau", &m_metTau, "F"); + setBranch(tree, "TauSumEt", &m_metTauSumEt, "F"); + setBranch(tree, "TauPhi", &m_metTauPhi, "F"); + } + + if ( m_infoSwitch.m_refMuons ) { + setBranch(tree, "Muons", &m_metMuons, "F"); + setBranch(tree, "MuonsSumEt", &m_metMuonsSumEt, "F"); + setBranch(tree, "MuonsPhi", &m_metMuonsPhi, "F"); + } + + if ( m_infoSwitch.m_refJet ) { + setBranch(tree, "Jet", &m_metJet, "F"); + setBranch(tree, "JetSumEt", &m_metJetSumEt, "F"); + setBranch(tree, "JetPhi", &m_metJetPhi, "F"); + } + + if ( m_infoSwitch.m_refJetTrk ) { + setBranch(tree, "JetTrk", &m_metJetTrk, "F"); + setBranch(tree, "JetTrkSumEt", &m_metJetTrkSumEt, "F"); + setBranch(tree, "JetTrkPhi", &m_metJetTrkPhi, "F"); + } + + if ( m_infoSwitch.m_softClus) { + setBranch(tree, "SoftClus", &m_metSoftClus, "F"); + setBranch(tree, "SoftClusSumEt", &m_metSoftClusSumEt, "F"); + setBranch(tree, "SoftClusPhi", &m_metSoftClusPhi, "F"); + } + + if ( m_infoSwitch.m_softTrk) { + setBranch(tree, "SoftTrk", &m_metSoftTrk, "F"); + setBranch(tree, "SoftTrkSumEt", &m_metSoftTrkSumEt, "F"); + setBranch(tree, "SoftTrkPhi", &m_metSoftTrkPhi, "F"); + } + + + return; + } + + + void MetContainer::clear() + { + if ( m_infoSwitch.m_metClus ) { + m_metFinalClus = -999; + m_metFinalClusPx = -999; + m_metFinalClusPy = -999; + m_metFinalClusSumEt = -999; + m_metFinalClusPhi = -999; + } + + if ( m_infoSwitch.m_metTrk ) { + m_metFinalTrk = -999; + m_metFinalTrkPx = -999; + m_metFinalTrkPy = -999; + m_metFinalTrkSumEt = -999; + m_metFinalTrkPhi = -999; + } + + if ( m_infoSwitch.m_sigClus ) { + m_metFinalClusOverSqrtSumEt = -999; + m_metFinalClusOverSqrtHt = -999; + m_metFinalClusSignificance = -999; + m_metFinalClusSigDirectional = -999; + } + if ( m_infoSwitch.m_sigTrk ) { + m_metFinalTrkOverSqrtSumEt = -999; + m_metFinalTrkOverSqrtHt = -999; + m_metFinalTrkSignificance = -999; + m_metFinalTrkSigDirectional = -999; + } + if ( m_infoSwitch.m_sigResolutionClus ) { + m_metFinalClusRho = -999; + m_metFinalClusVarL = -999; + m_metFinalClusVarT = -999; + } + if ( m_infoSwitch.m_sigResolutionTrk ) { + m_metFinalTrkRho = -999; + m_metFinalTrkVarL = -999; + m_metFinalTrkVarT = -999; + } + + if ( m_infoSwitch.m_refEle ) { + m_metEle = m_metEleSumEt = m_metElePhi = -999; + } + if ( m_infoSwitch.m_refGamma ) { + m_metGamma = m_metGammaSumEt = m_metGammaPhi = -999; + } + if ( m_infoSwitch.m_refTau ) { + m_metTau = m_metTauSumEt = m_metTauPhi = -999; + } + if ( m_infoSwitch.m_refMuons ) { + m_metMuons = m_metMuonsSumEt = m_metMuonsPhi = -999; + } + if ( m_infoSwitch.m_refJet ) { + m_metJet = m_metJetSumEt = m_metJetPhi = -999; + } + if ( m_infoSwitch.m_refJetTrk ) { + m_metJetTrk = m_metJetTrkSumEt = m_metJetTrkPhi = -999; + } + if ( m_infoSwitch.m_softClus) { + m_metSoftClus = m_metSoftClusSumEt = m_metSoftClusPhi = -999; + } + + return; + } + + void MetContainer::FillMET( const xAOD::MissingETContainer* met) { + + + //if ( m_debug ) { Info("HelpTreeBase::FillMET()", "Filling MET info"); } + + if ( m_infoSwitch.m_metClus ) { + const xAOD::MissingET* final_clus = *met->find("FinalClus"); // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based onleares) + m_metFinalClus = final_clus->met() / m_units; + m_metFinalClusPx = final_clus->mpx() / m_units; + m_metFinalClusPy = final_clus->mpy() / m_units; + m_metFinalClusSumEt = final_clus->sumet() / m_units; + m_metFinalClusPhi = final_clus->phi(); + + if ( m_infoSwitch.m_sigClus ) { + m_metFinalClusOverSqrtSumEt = final_clus->auxdecor("METOverSqrtSumET"); + m_metFinalClusOverSqrtHt = final_clus->auxdecor("METOverSqrtHT"); + m_metFinalClusSignificance = final_clus->auxdecor("Significance"); + m_metFinalClusSigDirectional = final_clus->auxdecor("SigDirectional"); + } + + if ( m_infoSwitch.m_sigResolutionClus ) { + m_metFinalClusRho = final_clus->auxdecor("Rho"); + m_metFinalClusVarL = final_clus->auxdecor("VarL"); + m_metFinalClusVarT = final_clus->auxdecor("VarT"); + } + } + + if ( m_infoSwitch.m_metTrk ) { + const xAOD::MissingET* final_trk = *met->find("FinalTrk"); // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based ones) + m_metFinalTrk = final_trk->met() / m_units; + m_metFinalTrkPx = final_trk->mpx() / m_units; + m_metFinalTrkPy = final_trk->mpy() / m_units; + m_metFinalTrkSumEt = final_trk->sumet() / m_units; + m_metFinalTrkPhi = final_trk->phi(); + + if ( m_infoSwitch.m_sigTrk ) { + m_metFinalTrkOverSqrtSumEt = final_trk->auxdecor("METOverSqrtSumET"); + m_metFinalTrkOverSqrtHt = final_trk->auxdecor("METOverSqrtHT"); + m_metFinalTrkSignificance = final_trk->auxdecor("Significance"); + m_metFinalTrkSigDirectional = final_trk->auxdecor("SigDirectional"); + } + + if ( m_infoSwitch.m_sigResolutionTrk ) { + m_metFinalTrkRho = final_trk->auxdecor("Rho"); + m_metFinalTrkVarL = final_trk->auxdecor("VarL"); + m_metFinalTrkVarT = final_trk->auxdecor("VarT"); + } + } + + if ( m_infoSwitch.m_refEle ) { + const xAOD::MissingET* ref_ele = *met->find("RefEle"); + m_metEle = ref_ele->met() / m_units; + m_metEleSumEt = ref_ele->sumet() / m_units; + m_metElePhi = ref_ele->phi(); + } + + if ( m_infoSwitch.m_refGamma ) { + const xAOD::MissingET* ref_gamma = *met->find("RefGamma"); + m_metGamma = ref_gamma->met() / m_units; + m_metGammaSumEt = ref_gamma->sumet() / m_units; + m_metGammaPhi = ref_gamma->phi(); + } + + if ( m_infoSwitch.m_refTau ) { + const xAOD::MissingET* ref_tau = *met->find("RefTau"); + m_metTau = ref_tau->met() / m_units; + m_metTauSumEt = ref_tau->sumet() / m_units; + m_metTauPhi = ref_tau->phi(); + } + + if ( m_infoSwitch.m_refMuons ) { + const xAOD::MissingET* ref_muon = *met->find("Muons"); + m_metMuons = ref_muon->met() / m_units; + m_metMuonsSumEt = ref_muon->sumet() / m_units; + m_metMuonsPhi = ref_muon->phi(); + } + + if ( m_infoSwitch.m_refJet ) { + const xAOD::MissingET* ref_jet = *met->find("RefJet"); + m_metJet = ref_jet->met() / m_units; + m_metJetSumEt = ref_jet->sumet() / m_units; + m_metJetPhi = ref_jet->phi(); + } + + if ( m_infoSwitch.m_refJetTrk ) { + const xAOD::MissingET* ref_jet_trk = *met->find("RefJetTrk"); + m_metJetTrk = ref_jet_trk->met() / m_units; + m_metJetTrkSumEt = ref_jet_trk->sumet() / m_units; + m_metJetTrkPhi = ref_jet_trk->phi(); + } + + if ( m_infoSwitch.m_softClus) { + const xAOD::MissingET* ref_soft_clus = *met->find("SoftClus"); + m_metSoftClus = ref_soft_clus->met() / m_units; + m_metSoftClusSumEt = ref_soft_clus->sumet() / m_units; + m_metSoftClusPhi = ref_soft_clus->phi(); + } + + if ( m_infoSwitch.m_softTrk) { + const xAOD::MissingET* ref_soft_trk = *met->find("PVSoftTrk"); + m_metSoftTrk = ref_soft_trk->met() / m_units; + m_metSoftTrkSumEt = ref_soft_trk->sumet() / m_units; + m_metSoftTrkPhi = ref_soft_trk->phi(); + } + + + return; + } diff --git a/_sources/api/program_listing_file_Root_MetHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_MetHists.cxx.rst.txt new file mode 100644 index 0000000000..1b70fb7fb8 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MetHists.cxx.rst.txt @@ -0,0 +1,83 @@ + +.. _program_listing_file_Root_MetHists.cxx: + +Program Listing for File MetHists.cxx +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MetHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************** + * + * Met Histogramming + * + * J. Alison (john.alison@cern.ch) + * + *******************************************************/ + + + #include + #include + + #include + + using std::vector; + + MetHists :: MetHists (std::string name, std::string detailStr) : + HistogramManager(name, detailStr), + m_infoSwitch(new HelperClasses::METInfoSwitch(m_detailStr)) + { + m_debug = false; + } + + MetHists :: ~MetHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + StatusCode MetHists::initialize() { + + m_metFinalClus = book(m_name, "metFinalClus", "metFinalClus", 100, 0, 200); + m_metFinalClusPx = book(m_name, "metFinalClusPx", "metFinalClusPx", 100, -200, 200); + m_metFinalClusPy = book(m_name, "metFinalClusPy", "metFinalClusPy", 100, -200, 200); + m_metFinalClusSumEt = book(m_name, "metFinalClusSumEt", "metFinalClusSumEt", 100, 0, 2000); + m_metFinalClusPhi = book(m_name, "metFinalClusPhi", "metFinalClusPhi", 100, -3.2, 3.2); + + m_metFinalTrk = book(m_name, "metFinalTrk", "metFinalTrk", 100, 0, 200); + m_metFinalTrkPx = book(m_name, "metFinalTrkPx", "metFinalTrkPx", 100, -200, 200); + m_metFinalTrkPy = book(m_name, "metFinalTrkPy", "metFinalTrkPy", 100, -200, 200); + m_metFinalTrkSumEt = book(m_name, "metFinalTrkSumEt", "metFinalTrkSumEt", 100, 0, 2000); + m_metFinalTrkPhi = book(m_name, "metFinalTrkPhi", "metFinalTrkPhi", 100, -3.2, 3.2); + + return StatusCode::SUCCESS; + } + + StatusCode MetHists::execute( const xAOD::MissingETContainer* met, float eventWeight ) { + + if(m_debug) std::cout << "MetHists: in execute " <find("FinalClus"); + m_metFinalClus -> Fill( final_clus->met() / 1e3, eventWeight); + m_metFinalClusPx -> Fill( final_clus->mpx() / 1e3, eventWeight); + m_metFinalClusPy -> Fill( final_clus->mpy() / 1e3, eventWeight); + m_metFinalClusSumEt -> Fill( final_clus->sumet() / 1e3, eventWeight); + m_metFinalClusPhi -> Fill( final_clus->phi() , eventWeight); + + // + // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based ones) + // + const xAOD::MissingET* final_trk = *met->find("FinalTrk"); + m_metFinalTrk -> Fill( final_trk->met() / 1e3, eventWeight); + m_metFinalTrkPx -> Fill( final_trk->mpx() / 1e3, eventWeight); + m_metFinalTrkPy -> Fill( final_trk->mpy() / 1e3, eventWeight); + m_metFinalTrkSumEt -> Fill( final_trk->sumet() / 1e3, eventWeight); + m_metFinalTrkPhi -> Fill( final_trk->phi() , eventWeight); + + return StatusCode::SUCCESS; + } + diff --git a/_sources/api/program_listing_file_Root_MetHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_MetHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..7682d9f46a --- /dev/null +++ b/_sources/api/program_listing_file_Root_MetHistsAlgo.cxx.rst.txt @@ -0,0 +1,97 @@ + +.. _program_listing_file_Root_MetHistsAlgo.cxx: + +Program Listing for File MetHistsAlgo.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MetHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + #include "AthContainers/ConstDataVector.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(MetHistsAlgo) + + MetHistsAlgo :: MetHistsAlgo () : + Algorithm("MetHistsAlgo") + { + } + + EL::StatusCode MetHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + + // let's initialize the algorithm to use the xAODRootAccess package + xAOD::Init("MetHistsAlgo").ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MetHistsAlgo :: histInitialize () + { + + ANA_MSG_INFO( m_name ); + ANA_CHECK( xAH::Algorithm::algInitialize()); + if( m_inContainerName.empty() || m_detailStr.empty() ){ + ANA_MSG_ERROR( "One or more required configuration values are empty"); + return EL::StatusCode::FAILURE; + } + + // declare class and add histograms to output + m_plots = new MetHists(m_name, m_detailStr); + ANA_CHECK( m_plots -> initialize()); + m_plots -> record( wk() ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MetHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MetHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + + EL::StatusCode MetHistsAlgo :: initialize () + { + ANA_MSG_INFO( "MetHistsAlgo"); + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MetHistsAlgo :: execute () + { + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + + float eventWeight(1); + if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) { + eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" ); + } + + const xAOD::MissingETContainer* met(nullptr); + ANA_CHECK( HelperFunctions::retrieve(met, m_inContainerName, m_event, m_store, msg()) ); + + ANA_CHECK( m_plots->execute( met, eventWeight )); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MetHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MetHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; } + EL::StatusCode MetHistsAlgo :: histFinalize () + { + // clean up memory + if(m_plots) delete m_plots; + + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MinixAOD.cxx.rst.txt b/_sources/api/program_listing_file_Root_MinixAOD.cxx.rst.txt new file mode 100644 index 0000000000..9d0e9fe840 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MinixAOD.cxx.rst.txt @@ -0,0 +1,356 @@ + +.. _program_listing_file_Root_MinixAOD.cxx: + +Program Listing for File MinixAOD.cxx +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MinixAOD.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + // output stream + #include "EventLoop/OutputStream.h" + + // EDM include(s): + #include "xAODCore/AuxContainerBase.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODCore/ShallowCopy.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/ElectronAuxContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/JetAuxContainer.h" + #include "xAODJet/Jet.h" + #include "xAODMissingET/MissingETContainer.h" + #include "xAODMissingET/MissingETAuxContainer.h" + #include "xAODMissingET/MissingET.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODMuon/MuonAuxContainer.h" + #include "xAODMuon/Muon.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODEgamma/PhotonAuxContainer.h" + #include "xAODEgamma/Photon.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODTau/TauJetAuxContainer.h" + #include "xAODTau/TauJet.h" + + // package include(s): + #include "xAODAnaHelpers/MinixAOD.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(MinixAOD) + + MinixAOD :: MinixAOD () : + Algorithm("MinixAOD") + { + } + + EL::StatusCode MinixAOD :: setupJob (EL::Job& job) + { + ANA_MSG_DEBUG("Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "MinixAOD" ).ignore(); // call before opening first file + + // only create the output xaod if requested + if(m_createOutputFile){ + EL::OutputStream out_xAOD (m_outputFileName, "xAOD"); + job.outputAdd (out_xAOD); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MinixAOD :: histInitialize () + { + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MinixAOD :: changeInput (bool firstFile) + { + // + // Update CutBookkeeper + if(m_copyCutBookkeeper) + { + // Retrieve the input container: + const xAOD::CutBookkeeperContainer* inputCBKContainer(nullptr); + ANA_CHECK( wk()->xaodEvent()->retrieveMetaInput(inputCBKContainer, "CutBookkeepers")); + + if(firstFile) + { + // Create an output container + m_outputCBKContainer = new xAOD::CutBookkeeperContainer(); + m_outputCBKContainer_aux = new xAOD::CutBookkeeperAuxContainer(); + m_outputCBKContainer->setStore( m_outputCBKContainer_aux ); + + // Create an empty incomplete output container + m_outputInCBKContainer = new xAOD::CutBookkeeperContainer(); + m_outputInCBKContainer_aux = new xAOD::CutBookkeeperAuxContainer(); + m_outputInCBKContainer->setStore( m_outputInCBKContainer_aux ); + + // Create our cutbookkeeper + m_outputCBK=new xAOD::CutBookkeeper(); + m_outputCBK->setName("MinixAODKernel"); + m_outputCBK->setCycle(inputCBKContainer->maxCycle()+1); + } + + // Merge + m_outputCBKContainer->merge(inputCBKContainer); + } + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MinixAOD :: fileExecute () { return EL::StatusCode::SUCCESS; } + + EL::StatusCode MinixAOD :: initialize () + { + ANA_MSG_DEBUG("Calling initialize"); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // always do this, obviously + TFile *file_xAOD = wk()->getOutputFile(m_outputFileName); + ANA_CHECK( m_event->writeTo(file_xAOD)); + + if(m_copyFileMetaData){ + m_fileMetaDataTool = new xAODMaker::FileMetaDataTool(); + + ANA_CHECK( m_fileMetaDataTool->setProperty("OutputLevel", msg().level() )); + + + ANA_CHECK( m_fileMetaDataTool->initialize()); + ANA_MSG_DEBUG("FileMetaDataTool initialized..."); + } + + if(m_copyTriggerInfo){ + // m_trigMetaDataTool = new xAODMaker::TriggerMenuMetaDataTool(); + + // ANA_CHECK( m_trigMetaDataTool->setProperty("OutputLevel", msg().level() )); + + // ANA_CHECK( m_trigMetaDataTool->initialize()); + // ANA_MSG_DEBUG("TriggerMenuMetaDataTool initialized..."); + + ANA_MSG_DEBUG("Adding xTrigDecision and TrigConfKeys to the list of keys copied from the input file."); + m_simpleCopyKeys_vec.push_back("xTrigDecision"); + m_simpleCopyKeys_vec.push_back("TrigConfKeys"); + } + + // parse and split by comma + std::string token; + std::istringstream ss(""); + + // A B C D ... Z -> {A, B, C, D, ..., Z} + ss.clear(); ss.str(m_simpleCopyKeys); + while(std::getline(ss, token, ' ')) + m_simpleCopyKeys_vec.push_back(token); + + // A B C D ... Z -> {A, B, C, D, ..., Z} + ss.clear(); ss.str(m_storeCopyKeys); + while(std::getline(ss, token, ' ')) + m_copyFromStoreToEventKeys_vec.push_back(token); + + // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)} + ss.clear(); ss.str(m_shallowCopyKeys); + while(std::getline(ss, token, ' ')){ + int pos = token.find_first_of('|'); + m_shallowCopyKeys_vec.push_back(std::pair(token.substr(0, pos), token.substr(pos+1))); + } + + // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)} + ss.clear(); ss.str(m_deepCopyKeys); + while(std::getline(ss, token, ' ')){ + int pos = token.find_first_of('|'); + m_deepCopyKeys_vec.push_back(std::pair(token.substr(0, pos), token.substr(pos+1))); + } + + // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)} + ss.clear(); ss.str(m_vectorCopyKeys); + while(std::getline(ss, token, ' ')){ + int pos = token.find_first_of('|'); + m_vectorCopyKeys_vec.push_back(std::pair(token.substr(0, pos), token.substr(pos+1))); + } + + ANA_MSG_DEBUG("MinixAOD Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MinixAOD :: execute () + { + ANA_MSG_VERBOSE( "Dumping objects..."); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, "EventInfo", m_event, m_store, msg()) ); + + // + // Fill cutbookkeeper + if(m_copyCutBookkeeper) + { + float eventWeight(1); + if ( eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION) ) + eventWeight = eventInfo->mcEventWeight(); + + m_outputCBK->addNAcceptedEvents(1); + m_outputCBK->addSumOfEventWeights(eventWeight); + m_outputCBK->addSumOfEventWeightsSquared(eventWeight*eventWeight); + } + + // + // Copy code + + // simple copy is easiest - it's in the input, copy over, no need for types + for(const auto& key: m_simpleCopyKeys_vec){ + ANA_CHECK( m_event->copy(key)); + ANA_MSG_DEBUG("Copying " << key << " from input file"); + } + + // we need to make deep copies + for(const auto& keypair: m_deepCopyKeys_vec){ + auto in_key = keypair.first; + auto out_key = keypair.second; + + const xAOD::IParticleContainer* cont(nullptr); + ANA_CHECK( HelperFunctions::retrieve(cont, in_key, nullptr, m_store, msg())); + + if(const xAOD::ElectronContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else if(const xAOD::JetContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else if(const xAOD::MissingETContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else if(const xAOD::MuonContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else if(const xAOD::PhotonContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else if(const xAOD::TauJetContainer* t_cont = dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::makeDeepCopy(m_store, out_key.c_str(), t_cont))); + } else { + ANA_MSG_ERROR("Could not identify what container " << in_key << " corresponds to for deep-copying."); + return EL::StatusCode::FAILURE; + } + m_copyFromStoreToEventKeys_vec.push_back(out_key); + + ANA_MSG_DEBUG("Deep-Copied " << in_key << " to " << out_key << " to record to output file"); + } + + // shallow IO handling (if no parent, assume deep copy) + for(const auto& keypair: m_shallowCopyKeys_vec){ + auto key = keypair.first; + auto parent = keypair.second; + + // only add the parent if it doesn't exist + if(!parent.empty()) m_copyFromStoreToEventKeys_vec.push_back(parent); + + ANA_MSG_DEBUG("Copying " << key); + if(!parent.empty()) ANA_MSG_DEBUG(" as well as it's parent " << parent); + + m_copyFromStoreToEventKeys_vec.push_back(key); + } + + // vector handling (if no parent, assume deep copy) + for(const auto& keypair: m_vectorCopyKeys_vec){ + auto vectorName = keypair.first; + auto parent = keypair.second; + + std::vector* vector(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vector, vectorName, nullptr, m_store, msg())); + + // only add the parent if it doesn't exist + if(!parent.empty()) m_copyFromStoreToEventKeys_vec.push_back(parent); + + ANA_MSG_INFO("The following containers are being copied over:"); + for(const auto& key: *vector){ + ANA_MSG_DEBUG("\t" << key); + m_copyFromStoreToEventKeys_vec.push_back(key); + } + if(!parent.empty()) ANA_MSG_DEBUG("... along with their parent " << parent); + + } + + // remove duplicates from m_copyFromStoreToEventKeys_vec + // - see http://stackoverflow.com/a/1041939/1532974 + std::set s; + unsigned size = m_copyFromStoreToEventKeys_vec.size(); + for( unsigned i = 0; i < size; ++i ) s.insert( m_copyFromStoreToEventKeys_vec[i] ); + m_copyFromStoreToEventKeys_vec.assign( s.begin(), s.end() ); + + // all we need to do is retrieve it and figure out what type it is to record it and we're done + for(const auto& key: m_copyFromStoreToEventKeys_vec){ + const xAOD::IParticleContainer* cont(nullptr); + ANA_CHECK( HelperFunctions::retrieve(cont, key, nullptr, m_store, msg())); + + if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else if(dynamic_cast(cont)){ + ANA_CHECK( (HelperFunctions::recordOutput(m_event, m_store, key))); + } else { + ANA_MSG_ERROR("Could not identify what container " << key << " corresponds to for copying from TStore to TEvent."); + return EL::StatusCode::FAILURE; + } + + ANA_MSG_DEBUG("Copied " << key << " and it's auxiliary container from TStore to TEvent"); + } + + + m_event->fill(); + ANA_MSG_DEBUG("Finished dumping objects..."); + + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode MinixAOD :: postExecute () { return EL::StatusCode::SUCCESS; } + + EL::StatusCode MinixAOD :: finalize () { + // + // Save cutbookkeeper + if(m_copyCutBookkeeper) + { + ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputCBKContainer ,"CutBookkeepers") ); + ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputCBKContainer_aux ,"CutBookkeepersAux.") ); + ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputInCBKContainer ,"IncompleteCutBookkeepers") ); + ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputInCBKContainer_aux,"IncompleteCutBookkeepersAux.")); + + m_outputCBKContainer->push_back(m_outputCBK); + } + + // + // Close file + TFile *file_xAOD = wk()->getOutputFile(m_outputFileName); + ANA_CHECK( m_event->finishWritingTo(file_xAOD)); + + if(m_fileMetaDataTool) delete m_fileMetaDataTool; + // if(m_trigMetaDataTool) delete m_trigMetaDataTool; + + return EL::StatusCode::SUCCESS; + } + EL::StatusCode MinixAOD :: histFinalize () + { + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MuonCalibrator.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..b55af337ea --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonCalibrator.cxx.rst.txt @@ -0,0 +1,369 @@ + +.. _program_listing_file_Root_MuonCalibrator.cxx: + +Program Listing for File MuonCalibrator.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonCalibrator.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************** + * + * Interface to CP Muon calibration tool(s). + * + * M. Milesi (marco.milesi@cern.ch) + * F. Scutti (federico.scutti@cern.ch) + ********************************************/ + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODMuon/Muon.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/MuonCalibrator.h" + #include "PATInterfaces/CorrectionCode.h" // to check the return correction code status of tools + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(MuonCalibrator) + + MuonCalibrator :: MuonCalibrator () : + Algorithm("MuonCalibrator") + { + } + + EL::StatusCode MuonCalibrator :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "MuonCalibrator" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing MuonCalibrator Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + // shallow copies are made with this output container name + m_outSCContainerName = m_outContainerName + "ShallowCopy"; + m_outSCAuxContainerName = m_outSCContainerName + "Aux."; // the period is very important! + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + + // Initialize the CP::MuonCalibrationPeriodTool + // set calibrationMode (the default is "noOption", forcing analyses to make an explicit choice) + if(m_calibrationMode == "correctData_CB"){ + ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 0)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::correctData_CB + } else if(m_calibrationMode == "correctData_IDMS"){ + ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 1)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::correctData_IDMS + } else if(m_calibrationMode == "notCorrectData_IDMS"){ + ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 2)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::notCorrectData_IDMS + } else if(m_calibrationMode == "notCorrectData_CB"){ + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesR22#CP_MuonCalibTool_tool + ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 3)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::notCorrectData_CB + } + // special corrections for muons with only 2 stations; to be switched on only for the muon highPt WP + if (m_do2StationsHighPt){ + ANA_CHECK(m_muonCalibrationTool_handle.setProperty("do2StationsHighPt", m_do2StationsHighPt)); + } + ANA_CHECK(m_muonCalibrationTool_handle.setProperty( "IsRun3Geo", m_isRun3Geo )); + ANA_CHECK(m_muonCalibrationTool_handle.setProperty( "OutputLevel", msg().level())); + ANA_CHECK(m_muonCalibrationTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_muonCalibrationTool_handle); + + + // *********************************************************** + + // Get a list of recommended systematics for this tool + // + const CP::SystematicSet& recSyst = m_muonCalibrationTool_handle->recommendedSystematics(); + + ANA_MSG_INFO(" Initializing Muon Calibrator Systematics :"); + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + + ANA_MSG_INFO("Will be using MuonCalibrationAndSmearingTool systematic:"); + auto SystMuonsNames = std::make_unique< std::vector< std::string > >(); + for ( const auto& syst_it : m_systList ) { + if ( m_systName.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + SystMuonsNames->push_back(syst_it.name()); + ANA_MSG_INFO("\t " << syst_it.name()); + } + + ANA_CHECK(m_store->record(std::move(SystMuonsNames), "muons_Syst"+m_name )); + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD); + } + + ANA_MSG_INFO( "MuonCalibrator Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode MuonCalibrator :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Muon Calibration And Smearing ... "); + + m_numEvent++; + + if ( !isMC() && !m_forceDataCalib ) { + if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Muon Calibration... "); } + } + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // get the collections from TEvent or TStore + // + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + const xAOD::MuonContainer* inMuons(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName, m_event, m_store, msg()) ); + + // loop over available systematics - remember syst == EMPTY_STRING --> baseline + // prepare a vector of the names of CDV containers + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + + std::string outSCContainerName(m_outSCContainerName); + std::string outSCAuxContainerName(m_outSCAuxContainerName); + std::string outContainerName(m_outContainerName); + + // always append the name of the variation, including nominal which is an empty string + // + outSCContainerName += syst_it.name(); + outSCAuxContainerName += syst_it.name(); + outContainerName += syst_it.name(); + vecOutContainerNames->push_back( syst_it.name() ); + + // apply syst + // + if ( m_muonCalibrationTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure MuonCalibrationAndSmearingTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + + // create shallow copy for calibration - one per syst + // + std::pair< xAOD::MuonContainer*, xAOD::ShallowAuxContainer* > calibMuonsSC = xAOD::shallowCopyContainer( *inMuons ); + // create ConstDataVector to be eventually stored in TStore + // + ConstDataVector* calibMuonsCDV = new ConstDataVector(SG::VIEW_ELEMENTS); + calibMuonsCDV->reserve( calibMuonsSC.first->size() ); + + // now calibrate! + // + unsigned int idx(0); + if ( isMC() || m_forceDataCalib ) { + + for ( auto muSC_itr : *(calibMuonsSC.first) ) { + + ANA_MSG_VERBOSE( " uncailbrated muon " << idx << ", pt = " << muSC_itr->pt()*1e-3 << " GeV"); + if(muSC_itr-> primaryTrackParticle()){ + if ( m_muonCalibrationTool_handle->applyCorrection(*muSC_itr) == CP::CorrectionCode::Error ) { // Can have CorrectionCode values of Ok, OutOfValidityRange, or Error. Here only checking for Error. + ANA_MSG_WARNING( "MuonCalibrationAndSmearingTool returned Error CorrectionCode"); // If OutOfValidityRange is returned no modification is made and the original muon values are taken. + } + } + + ANA_MSG_VERBOSE( " corrected muon pt = " << muSC_itr->pt()*1e-3 << " GeV"); + ++idx; + + } // close calibration loop + } + + ANA_MSG_DEBUG( "setOriginalObjectLink"); + if ( !xAOD::setOriginalObjectLink(*inMuons, *(calibMuonsSC.first)) ) { + ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed."); + } + + // save pointers in ConstDataVector with same order + // + ANA_MSG_DEBUG( "makeSubsetCont"); + ANA_CHECK( HelperFunctions::makeSubsetCont(calibMuonsSC.first, calibMuonsCDV, msg())); + ANA_MSG_DEBUG( "done makeSubsetCont"); + + // sort after coping to CDV + if ( m_sort ) { + ANA_MSG_DEBUG( "sorting"); + std::sort( calibMuonsCDV->begin(), calibMuonsCDV->end(), HelperFunctions::sort_pt ); + } + + // add SC container to TStore + // + ANA_MSG_DEBUG( "recording calibMuonsSC"); + ANA_CHECK( m_store->record( calibMuonsSC.first, outSCContainerName )); + ANA_CHECK( m_store->record( calibMuonsSC.second, outSCAuxContainerName )); + + // + // add ConstDataVector to TStore + // + ANA_MSG_DEBUG( "record calibMuonsCDV"); + ANA_CHECK( m_store->record( calibMuonsCDV, outContainerName)); + + } // close loop on systematics + + // add vector to TStore + // + ANA_MSG_DEBUG( "record m_outputAlgoSystNames"); + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + ANA_MSG_DEBUG( "Left "); + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode MuonCalibrator :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_DEBUG( "Calling finalize"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonCalibrator :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MuonContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonContainer.cxx.rst.txt new file mode 100644 index 0000000000..b708031d3f --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonContainer.cxx.rst.txt @@ -0,0 +1,1097 @@ + +.. _program_listing_file_Root_MuonContainer.cxx: + +Program Listing for File MuonContainer.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/MuonContainer.h" + + #include + + using namespace xAH; + using std::vector; + using std::string; + + MuonContainer::MuonContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs) + : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs) + { + + if ( m_infoSwitch.m_kinematic ) { + m_charge = new std::vector (); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched = new vector (); + m_isTrigMatchedToChain = new vector > (); + m_listTrigChains = new vector >(); + } + + // isolation + if ( m_infoSwitch.m_isolation ) { + m_isIsolated = new std::map< std::string, std::vector< int >* >(); + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + (*m_isIsolated)[ isol ] = new std::vector< int >; + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20 = new vector (); + m_neflowisol20 = new vector (); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 = new vector (); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 = new vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 = new vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 = new vector (); + } + if (m_infoSwitch.m_closeByCorr) { + m_topoetcone20_CloseByCorr = new vector (); + m_neflowisol20_CloseByCorr = new vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr = new vector (); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr = new vector (); //not available for LRT + } + + // quality + if ( m_infoSwitch.m_quality ) { + m_quality = new std::map< std::string, std::vector< int >* >(); + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + (*m_quality)[ quality ] = new std::vector< int >; + } + } + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + m_RecoEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_IsoEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_TrigEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >(); + m_TrigMCEff = new std::map< std::string, std::vector< std::vector< float > >* >(); + + for (auto& reco : m_infoSwitch.m_recoWPs) { + (*m_RecoEff_SF)[ reco ] = new std::vector< std::vector< float > >; + + for (auto& trig : m_infoSwitch.m_trigWPs) { + (*m_TrigEff_SF)[ trig+reco ] = new std::vector< std::vector< float > >; + (*m_TrigMCEff)[ trig+reco ] = new std::vector< std::vector< float > >; + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + (*m_IsoEff_SF)[ isol ] = new std::vector< std::vector< float > >; + } + + m_TTVAEff_SF = new vector< vector< float > > (); + + } + // track parameters + if ( m_infoSwitch.m_trackparams ) { + m_trkd0 = new vector (); + m_trkd0sig = new vector (); + m_trkz0 = new vector (); + m_trkz0sintheta = new vector (); + m_trkphi0 = new vector (); + m_trktheta = new vector (); + m_trkcharge = new vector (); + m_trkqOverP = new vector (); + } + + // track hit content + if ( m_infoSwitch.m_trackhitcont ) { + m_trknSiHits = new vector (); + m_trknPixHits = new vector (); + m_trknPixHoles = new vector (); + m_trknSCTHits = new vector (); + m_trknSCTHoles = new vector (); + m_trknTRTHits = new vector (); + m_trknTRTHoles = new vector (); + m_trknBLayerHits = new vector (); + m_trknInnermostPixLayHits = new vector (); // not available in DC14 + m_trkPixdEdX = new vector (); // not available in DC14 + } + + if ( m_infoSwitch.m_energyLoss ) { + m_EnergyLoss = new vector (); + m_EnergyLossSigma = new vector (); + m_energyLossType = new vector (); + m_MeasEnergyLoss = new vector (); + m_MeasEnergyLossSigma = new vector (); + m_ParamEnergyLoss = new vector (); + m_ParamEnergyLossSigmaMinus = new vector (); + m_ParamEnergyLossSigmaPlus = new vector (); + } + + if ( m_infoSwitch.m_promptlepton ) { + m_PromptLeptonInput_DL1mu = new std::vector (); + m_PromptLeptonInput_DRlj = new std::vector (); + m_PromptLeptonInput_LepJetPtFrac = new std::vector (); + m_PromptLeptonInput_PtFrac = new std::vector (); + m_PromptLeptonInput_PtRel = new std::vector (); + m_PromptLeptonInput_TrackJetNTrack = new std::vector (); + m_PromptLeptonInput_ip2 = new std::vector (); + m_PromptLeptonInput_ip3 = new std::vector (); + m_PromptLeptonInput_rnnip = new std::vector (); + m_PromptLeptonInput_sv1_jf_ntrkv = new std::vector (); + m_PromptLeptonIso = new std::vector (); + m_PromptLeptonVeto = new std::vector (); + } + + if ( m_infoSwitch.m_doLRT ){ + m_isLRT = new std::vector(); + m_passIDcuts = new std::vector(); + } + + if ( m_infoSwitch.m_passSel ) { + m_passSel = new std::vector(); + } + if ( m_infoSwitch.m_passOR ) { + m_passOR = new std::vector(); + } + + } + + MuonContainer::~MuonContainer() + { + if ( m_infoSwitch.m_kinematic ) { + delete m_charge; + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + delete m_isTrigMatched ; + delete m_isTrigMatchedToChain ; + delete m_listTrigChains ; + } + + // isolation + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + delete (*m_isIsolated)[ isol ]; + } + } + delete m_isIsolated; + } + + if ( m_infoSwitch.m_isolationKinematics ) { + delete m_topoetcone20 ; + delete m_neflowisol20 ; + delete m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ; + delete m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000; + } + + if (m_infoSwitch.m_closeByCorr) { + delete m_topoetcone20_CloseByCorr ; + delete m_neflowisol20_CloseByCorr ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ; + delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ; //not available for LRT + } + + // quality + if ( m_infoSwitch.m_quality ) { + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + delete (*m_quality)[ quality ]; + } + } + delete m_quality; + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& reco : m_infoSwitch.m_recoWPs) { + delete (*m_RecoEff_SF)[ reco ]; + + for (auto& trig : m_infoSwitch.m_trigWPs) { + delete (*m_TrigEff_SF)[ trig+reco ]; + delete (*m_TrigMCEff)[ trig+reco ]; + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + delete (*m_IsoEff_SF)[ isol ]; + } + + delete m_RecoEff_SF ; + delete m_IsoEff_SF ; + delete m_TrigEff_SF ; + delete m_TrigMCEff ; + + delete m_TTVAEff_SF ; + + } + // track parameters + if ( m_infoSwitch.m_trackparams ) { + delete m_trkd0 ; + delete m_trkd0sig ; + delete m_trkz0 ; + delete m_trkz0sintheta ; + delete m_trkphi0 ; + delete m_trktheta ; + delete m_trkcharge ; + delete m_trkqOverP ; + } + + // track hit content + if ( m_infoSwitch.m_trackhitcont ) { + delete m_trknSiHits ; + delete m_trknPixHits ; + delete m_trknPixHoles ; + delete m_trknSCTHits ; + delete m_trknSCTHoles ; + delete m_trknTRTHits ; + delete m_trknTRTHoles ; + delete m_trknBLayerHits ; + delete m_trknInnermostPixLayHits ; // not available in DC14 + delete m_trkPixdEdX ; // not available in DC14 + } + + if ( m_infoSwitch.m_energyLoss ) { + delete m_EnergyLoss ; + delete m_EnergyLossSigma ; + delete m_energyLossType ; + delete m_MeasEnergyLoss ; + delete m_MeasEnergyLossSigma ; + delete m_ParamEnergyLoss ; + delete m_ParamEnergyLossSigmaMinus ; + delete m_ParamEnergyLossSigmaPlus ; + } + + if ( m_infoSwitch.m_promptlepton ) { + delete m_PromptLeptonInput_DL1mu ; + delete m_PromptLeptonInput_DRlj ; + delete m_PromptLeptonInput_LepJetPtFrac ; + delete m_PromptLeptonInput_PtFrac ; + delete m_PromptLeptonInput_PtRel ; + delete m_PromptLeptonInput_TrackJetNTrack ; + delete m_PromptLeptonInput_ip2 ; + delete m_PromptLeptonInput_ip3 ; + delete m_PromptLeptonInput_rnnip ; + delete m_PromptLeptonInput_sv1_jf_ntrkv ; + delete m_PromptLeptonIso ; + delete m_PromptLeptonVeto ; + } + + if ( m_infoSwitch.m_doLRT ){ + delete m_isLRT; + delete m_passIDcuts; + } + + if ( m_infoSwitch.m_passSel ) { + delete m_passSel; + } + if ( m_infoSwitch.m_passOR ) { + delete m_passOR; + } + + } + + void MuonContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + if ( m_infoSwitch.m_kinematic ) { + connectBranch(tree, "charge", &m_charge); + } + + if ( m_infoSwitch.m_trigger ){ + connectBranch (tree, "isTrigMatched", &m_isTrigMatched); + connectBranch >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain ); + connectBranch >(tree, "listTrigChains", &m_listTrigChains ); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + tree->SetBranchStatus ( (m_name + "_isIsolated_" + isol).c_str() , 1); + tree->SetBranchAddress( (m_name + "_isIsolated_" + isol).c_str() , & (*m_isIsolated)[ isol ] ); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + connectBranch(tree,"topoetcone20", &m_topoetcone20); + connectBranch(tree,"neflowisol20", &m_neflowisol20); + connectBranch(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt500", &m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500); + connectBranch(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000", &m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000); + connectBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500); + connectBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000); + } + if (m_infoSwitch.m_closeByCorr) { + connectBranch(tree,"topoetcone20_CloseByCorr", &m_topoetcone20_CloseByCorr ); + connectBranch(tree,"neflowisol20_CloseByCorr", &m_neflowisol20_CloseByCorr ); + connectBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ); + connectBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr); //not available for LRT + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + for (auto& reco : m_infoSwitch.m_recoWPs) { + tree->SetBranchStatus ( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , 1); + tree->SetBranchAddress( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , & (*m_RecoEff_SF)[ reco ] ); + + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->SetBranchStatus ( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , & (*m_TrigEff_SF)[ trig+reco ] ); + + tree->SetBranchStatus ( (m_name + "_TrigMCEff_" + trig + "_Reco" + reco).c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_TrigMCEff_" + trig + "_Reco" + reco).c_str() , & (*m_TrigMCEff) [ trig+reco ] ); + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + tree->SetBranchStatus ( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , 1); + tree->SetBranchAddress( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , & (*m_IsoEff_SF)[ isol ] ); + } + } + + connectBranch >(tree,"TTVAEff_SF", &m_TTVAEff_SF); + } + + if ( m_infoSwitch.m_quality ) { + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + tree->SetBranchStatus ( (m_name + "_is" + quality).c_str() , 1); + tree->SetBranchAddress( (m_name + "_is" + quality).c_str() , & (*m_quality)[ quality ] ); + } + } + } + + if ( m_infoSwitch.m_trackparams ) { + connectBranch(tree,"trkd0", &m_trkd0); + connectBranch(tree,"trkd0sig", &m_trkd0sig); + connectBranch(tree,"trkz0", &m_trkz0); + connectBranch(tree,"trkz0sintheta", &m_trkz0sintheta); + connectBranch(tree,"trkphi0", &m_trkphi0); + connectBranch(tree,"trktheta", &m_trktheta); + connectBranch(tree,"trkcharge", &m_trkcharge); + connectBranch(tree,"trkqOverP", &m_trkqOverP); + } + + if ( m_infoSwitch.m_trackhitcont ) { + connectBranch(tree,"trknSiHits", &m_trknSiHits); + connectBranch(tree,"trknPixHits", &m_trknPixHits); + connectBranch(tree,"trknPixHoles", &m_trknPixHoles); + connectBranch(tree,"trknSCTHits", &m_trknSCTHits); + connectBranch(tree,"trknSCTHoles", &m_trknSCTHoles); + connectBranch(tree,"trknTRTHits", &m_trknTRTHits); + connectBranch(tree,"trknTRTHoles", &m_trknTRTHoles); + connectBranch(tree,"trknBLayerHits",&m_trknBLayerHits); + connectBranch(tree,"trknInnermostPixLayHits", &m_trknInnermostPixLayHits); + connectBranch(tree,"trkPixdEdX", &m_trkPixdEdX); + } + + if(m_infoSwitch.m_energyLoss ) { + connectBranch(tree,"EnergyLoss" , &m_EnergyLoss ); + connectBranch(tree,"EnergyLossSigma" , &m_EnergyLossSigma ); + connectBranch(tree,"energyLossType" , &m_energyLossType ); + connectBranch(tree,"MeasEnergyLoss" , &m_MeasEnergyLoss ); + connectBranch(tree,"MeasEnergyLossSigma" , &m_MeasEnergyLossSigma ); + connectBranch(tree,"ParamEnergyLoss" , &m_ParamEnergyLoss ); + connectBranch(tree,"ParamEnergyLossSigmaMinus" , &m_ParamEnergyLossSigmaMinus); + connectBranch(tree,"ParamEnergyLossSigmaPlus" , &m_ParamEnergyLossSigmaPlus ); + } + + if ( m_infoSwitch.m_promptlepton ) { + connectBranch(tree, "PromptLeptonInput_DL1mu", &m_PromptLeptonInput_DL1mu); + connectBranch(tree, "PromptLeptonInput_DRlj", &m_PromptLeptonInput_DRlj); + connectBranch(tree, "PromptLeptonInput_LepJetPtFrac", &m_PromptLeptonInput_LepJetPtFrac); + connectBranch(tree, "PromptLeptonInput_PtFrac", &m_PromptLeptonInput_PtFrac); + connectBranch(tree, "PromptLeptonInput_PtRel", &m_PromptLeptonInput_PtRel); + connectBranch (tree, "PromptLeptonInput_TrackJetNTrack", &m_PromptLeptonInput_TrackJetNTrack); + connectBranch(tree, "PromptLeptonInput_ip2", &m_PromptLeptonInput_ip2); + connectBranch(tree, "PromptLeptonInput_ip3", &m_PromptLeptonInput_ip3); + connectBranch(tree, "PromptLeptonInput_rnnip", &m_PromptLeptonInput_rnnip); + connectBranch (tree, "PromptLeptonInput_sv1_jf_ntrkv", &m_PromptLeptonInput_sv1_jf_ntrkv); + connectBranch(tree, "PromptLeptonIso", &m_PromptLeptonIso); + connectBranch(tree, "PromptLeptonVeto", &m_PromptLeptonVeto); + } + + if ( m_infoSwitch.m_doLRT ){ + connectBranch(tree,"isLRT",&m_isLRT); + connectBranch(tree,"passIDcuts",&m_passIDcuts); + } + if(m_infoSwitch.m_passSel) connectBranch(tree,"passSel",&m_passSel); + if(m_infoSwitch.m_passOR) connectBranch(tree,"passOR",&m_passOR); + + } + + void MuonContainer::updateParticle(uint idx, Muon& muon) + { + ParticleContainer::updateParticle(idx,muon); + + if ( m_infoSwitch.m_kinematic ) { + muon.charge = m_charge->at(idx); + } + + // trigger + if ( m_infoSwitch.m_trigger ) { + muon.isTrigMatched = m_isTrigMatched ->at(idx); + muon.isTrigMatchedToChain = m_isTrigMatchedToChain ->at(idx); + muon.listTrigChains = m_listTrigChains ->at(idx); + } + + // isolation + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + muon.isIsolated[isol] = (*m_isIsolated)[ isol ]->at(idx); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + muon.topoetcone20 = m_topoetcone20 ->at(idx); + muon.neflowisol20 = m_neflowisol20 ->at(idx); + muon.ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 = m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 -> at(idx); + muon.ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 = m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 -> at(idx); + muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 -> at(idx); + muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 -> at(idx); + } + if (m_infoSwitch.m_closeByCorr) { + muon.topoetcone20_CloseByCorr = m_topoetcone20_CloseByCorr ->at(idx); + muon.neflowisol20_CloseByCorr = m_neflowisol20_CloseByCorr ->at(idx); + muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ->at(idx); + muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ->at(idx); //not available for LRT + } + + // quality + if ( m_infoSwitch.m_quality ) { + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + muon.quality[quality] = (*m_quality)[ quality ]->at(idx); + } + } + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& reco : m_infoSwitch.m_recoWPs) { + muon.RecoEff_SF[ reco ] = (*m_RecoEff_SF)[ reco ]->at(idx); + + for (auto& trig : m_infoSwitch.m_trigWPs) { + muon.TrigEff_SF[ trig+reco ] = (*m_TrigEff_SF)[ trig+reco ]->at(idx); + muon.TrigMCEff [ trig+reco ] = (*m_TrigMCEff )[ trig+reco ]->at(idx); + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + muon.IsoEff_SF[ isol ] = (*m_IsoEff_SF)[ isol ]->at(idx); + } + + muon.TTVAEff_SF = m_TTVAEff_SF -> at(idx); + } + // track parameters + if ( m_infoSwitch.m_trackparams ) { + muon.trkd0 = m_trkd0 ->at(idx); + muon.trkd0sig = m_trkd0sig ->at(idx); + muon.trkz0 = m_trkz0 ->at(idx); + muon.trkz0sintheta = m_trkz0sintheta ->at(idx); + muon.trkphi0 = m_trkphi0 ->at(idx); + muon.trktheta = m_trktheta ->at(idx); + muon.trkcharge = m_trkcharge ->at(idx); + muon.trkqOverP = m_trkqOverP ->at(idx); + } + + // track hit content + if ( m_infoSwitch.m_trackhitcont ) { + muon.trknSiHits = m_trknSiHits ->at(idx); + muon.trknPixHits = m_trknPixHits ->at(idx); + muon.trknPixHoles = m_trknPixHoles ->at(idx); + muon.trknSCTHits = m_trknSCTHits ->at(idx); + muon.trknSCTHoles = m_trknSCTHoles ->at(idx); + muon.trknTRTHits = m_trknTRTHits ->at(idx); + muon.trknTRTHoles = m_trknTRTHoles ->at(idx); + muon.trknBLayerHits = m_trknBLayerHits ->at(idx); + muon.trknInnermostPixLayHits = m_trknInnermostPixLayHits ->at(idx); // not available in DC14 + muon.trkPixdEdX = m_trkPixdEdX ->at(idx); // not available in DC14 + } + + if ( m_infoSwitch.m_energyLoss ) { + muon.EnergyLoss = m_EnergyLoss ->at(idx); + muon.EnergyLossSigma = m_EnergyLossSigma ->at(idx); + muon.energyLossType = m_energyLossType ->at(idx); + muon.MeasEnergyLoss = m_MeasEnergyLoss ->at(idx); + muon.MeasEnergyLossSigma = m_MeasEnergyLossSigma ->at(idx); + muon.ParamEnergyLoss = m_ParamEnergyLoss ->at(idx); + muon.ParamEnergyLossSigmaMinus = m_ParamEnergyLossSigmaMinus ->at(idx); + muon.ParamEnergyLossSigmaPlus = m_ParamEnergyLossSigmaPlus ->at(idx); + } + + // prompt lepton + if ( m_infoSwitch.m_promptlepton ) { + muon.PromptLeptonInput_DL1mu = m_PromptLeptonInput_DL1mu ->at(idx); + muon.PromptLeptonInput_DRlj = m_PromptLeptonInput_DRlj ->at(idx); + muon.PromptLeptonInput_LepJetPtFrac = m_PromptLeptonInput_LepJetPtFrac ->at(idx); + muon.PromptLeptonInput_PtFrac = m_PromptLeptonInput_PtFrac ->at(idx); + muon.PromptLeptonInput_PtRel = m_PromptLeptonInput_PtRel ->at(idx); + muon.PromptLeptonInput_TrackJetNTrack = m_PromptLeptonInput_TrackJetNTrack ->at(idx); + muon.PromptLeptonInput_ip2 = m_PromptLeptonInput_ip2 ->at(idx); + muon.PromptLeptonInput_ip3 = m_PromptLeptonInput_ip3 ->at(idx); + muon.PromptLeptonInput_rnnip = m_PromptLeptonInput_rnnip ->at(idx); + muon.PromptLeptonInput_sv1_jf_ntrkv = m_PromptLeptonInput_sv1_jf_ntrkv ->at(idx); + muon.PromptLeptonIso = m_PromptLeptonIso ->at(idx); + muon.PromptLeptonVeto = m_PromptLeptonVeto ->at(idx); + } + + if ( m_infoSwitch.m_doLRT ){ + muon.isLRT = m_isLRT->at(idx); + muon.passIDcuts = m_passIDcuts->at(idx); + } + + // passSel + if(m_infoSwitch.m_passSel) muon.passSel = m_passSel->at(idx); + // passOR + if(m_infoSwitch.m_passOR) muon.passOR = m_passOR->at(idx); + + } + + + void MuonContainer::setBranches(TTree *tree) + { + + ParticleContainer::setBranches(tree); + + if ( m_infoSwitch.m_kinematic ) { + setBranch(tree, "charge", m_charge); + } + + if ( m_infoSwitch.m_trigger ){ + // this is true if there's a match for at least one trigger chain + setBranch(tree,"isTrigMatched", m_isTrigMatched); + // a vector of trigger match decision for each muon trigger chain + setBranch >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain ); + // a vector of strings for each muon trigger chain - 1:1 correspondence w/ vector above + setBranch >(tree, "listTrigChains", m_listTrigChains ); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + setBranch(tree, "isIsolated_" + isol, (*m_isIsolated)[isol]); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + setBranch(tree,"topoetcone20", m_topoetcone20); + setBranch(tree,"neflowisol20", m_neflowisol20); + setBranch(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt500", m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500); + setBranch(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000", m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000); + setBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500); + setBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000); + } + if (m_infoSwitch.m_closeByCorr) { + setBranch(tree,"topoetcone20_CloseByCorr", m_topoetcone20_CloseByCorr ); + setBranch(tree,"neflowisol20_CloseByCorr", m_neflowisol20_CloseByCorr ); + setBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ); + setBranch(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ); //not available for LRT + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& reco : m_infoSwitch.m_recoWPs) { + tree->Branch( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , (*m_RecoEff_SF)[ reco ] ); + + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->Branch( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , (*m_TrigEff_SF)[ trig+reco ] ); + tree->Branch( (m_name + "_TrigMCEff_" + trig + "_Reco" + reco).c_str() , (*m_TrigMCEff)[ trig+reco ] ); + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + tree->Branch( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , (*m_IsoEff_SF)[ isol ] ); + } + + setBranch >(tree,"TTVAEff_SF", m_TTVAEff_SF); + + } + + if ( m_infoSwitch.m_quality ) { + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + setBranch(tree, "is" + quality, (*m_quality)[quality]); + } + } + } + + if ( m_infoSwitch.m_trackparams ) { + setBranch(tree,"trkd0", m_trkd0); + setBranch(tree,"trkd0sig", m_trkd0sig); + setBranch(tree,"trkz0", m_trkz0); + setBranch(tree,"trkz0sintheta", m_trkz0sintheta); + setBranch(tree,"trkphi0", m_trkphi0); + setBranch(tree,"trktheta", m_trktheta); + setBranch(tree,"trkcharge", m_trkcharge); + setBranch(tree,"trkqOverP", m_trkqOverP); + } + + if ( m_infoSwitch.m_trackhitcont ) { + setBranch(tree,"trknSiHits", m_trknSiHits); + setBranch(tree,"trknPixHits", m_trknPixHits); + setBranch(tree,"trknPixHoles", m_trknPixHoles); + setBranch(tree,"trknSCTHits", m_trknSCTHits); + setBranch(tree,"trknSCTHoles", m_trknSCTHoles); + setBranch(tree,"trknTRTHits", m_trknTRTHits); + setBranch(tree,"trknTRTHoles", m_trknTRTHoles); + setBranch(tree,"trknBLayerHits",m_trknBLayerHits); + setBranch(tree,"trknInnermostPixLayHits", m_trknInnermostPixLayHits); + setBranch(tree,"trkPixdEdX", m_trkPixdEdX); + } + + if( m_infoSwitch.m_energyLoss ) { + setBranch(tree,"EnergyLoss" , m_EnergyLoss ); + setBranch(tree,"EnergyLossSigma" , m_EnergyLossSigma ); + setBranch(tree,"energyLossType" , m_energyLossType ); + setBranch(tree,"MeasEnergyLoss" , m_MeasEnergyLoss ); + setBranch(tree,"MeasEnergyLossSigma" , m_MeasEnergyLossSigma ); + setBranch(tree,"ParamEnergyLoss" , m_ParamEnergyLoss ); + setBranch(tree,"ParamEnergyLossSigmaMinus" , m_ParamEnergyLossSigmaMinus); + setBranch(tree,"ParamEnergyLossSigmaPlus" , m_ParamEnergyLossSigmaPlus ); + } + + if ( m_infoSwitch.m_promptlepton ) { + setBranch(tree, "PromptLeptonInput_DL1mu", m_PromptLeptonInput_DL1mu); + setBranch(tree, "PromptLeptonInput_DRlj", m_PromptLeptonInput_DRlj); + setBranch(tree, "PromptLeptonInput_LepJetPtFrac", m_PromptLeptonInput_LepJetPtFrac); + setBranch(tree, "PromptLeptonInput_PtFrac", m_PromptLeptonInput_PtFrac); + setBranch(tree, "PromptLeptonInput_PtRel", m_PromptLeptonInput_PtRel); + setBranch (tree, "PromptLeptonInput_TrackJetNTrack", m_PromptLeptonInput_TrackJetNTrack); + setBranch(tree, "PromptLeptonInput_ip2", m_PromptLeptonInput_ip2); + setBranch(tree, "PromptLeptonInput_ip3", m_PromptLeptonInput_ip3); + setBranch(tree, "PromptLeptonInput_rnnip", m_PromptLeptonInput_rnnip); + setBranch (tree, "PromptLeptonInput_sv1_jf_ntrkv", m_PromptLeptonInput_sv1_jf_ntrkv); + setBranch(tree, "PromptLeptonIso", m_PromptLeptonIso); + setBranch(tree, "PromptLeptonVeto", m_PromptLeptonVeto); + } + + if ( m_infoSwitch.m_doLRT ){ + setBranch(tree,"isLRT",m_isLRT); + setBranch(tree,"passIDcuts",m_passIDcuts); + } + + if ( m_infoSwitch.m_passSel ) { + setBranch(tree,"passSel",m_passSel); + } + if ( m_infoSwitch.m_passOR ) { + setBranch(tree,"passOR",m_passOR); + } + + return; + } + + + + void MuonContainer::clear() + { + + ParticleContainer::clear(); + + if ( m_infoSwitch.m_kinematic ) { + m_charge->clear(); + } + + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched->clear(); + m_isTrigMatchedToChain->clear(); + m_listTrigChains->clear(); + } + + if ( m_infoSwitch.m_isolation ) { + for (auto& isol : m_infoSwitch.m_isolWPs) { + (*m_isIsolated)[ isol ]->clear(); + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20->clear(); + m_neflowisol20->clear(); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500->clear(); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000->clear(); + } + if (m_infoSwitch.m_closeByCorr) { + m_topoetcone20_CloseByCorr ->clear(); + m_neflowisol20_CloseByCorr ->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ->clear(); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr->clear(); //not available for LRT + } + + if ( m_infoSwitch.m_quality ) { + for (auto& quality : m_infoSwitch.m_recoWPs) { + (*m_quality)[ quality ]->clear(); + } + } + + if ( m_infoSwitch.m_trackparams ) { + m_trkd0->clear(); + m_trkd0sig->clear(); + m_trkz0->clear(); + m_trkz0sintheta->clear(); + m_trkphi0->clear(); + m_trktheta->clear(); + m_trkcharge->clear(); + m_trkqOverP->clear(); + } + + if ( m_infoSwitch.m_trackhitcont ) { + m_trknSiHits->clear(); + m_trknPixHits->clear(); + m_trknPixHoles->clear(); + m_trknSCTHits->clear(); + m_trknSCTHoles->clear(); + m_trknTRTHits->clear(); + m_trknTRTHoles->clear(); + m_trknBLayerHits->clear(); + m_trknInnermostPixLayHits->clear(); + m_trkPixdEdX->clear(); + } + + if ( m_infoSwitch.m_promptlepton ) { + m_PromptLeptonInput_DL1mu -> clear(); + m_PromptLeptonInput_DRlj -> clear(); + m_PromptLeptonInput_LepJetPtFrac -> clear(); + m_PromptLeptonInput_PtFrac -> clear(); + m_PromptLeptonInput_PtRel -> clear(); + m_PromptLeptonInput_TrackJetNTrack -> clear(); + m_PromptLeptonInput_ip2 -> clear(); + m_PromptLeptonInput_ip3 -> clear(); + m_PromptLeptonInput_rnnip -> clear(); + m_PromptLeptonInput_sv1_jf_ntrkv -> clear(); + m_PromptLeptonIso -> clear(); + m_PromptLeptonVeto -> clear(); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& reco : m_infoSwitch.m_recoWPs) { + (*m_RecoEff_SF)[ reco ]->clear(); + + for (auto& trig : m_infoSwitch.m_trigWPs) { + (*m_TrigEff_SF)[ trig+reco ]->clear(); + (*m_TrigMCEff)[ trig+reco ]->clear(); + } + } + + for (auto& isol : m_infoSwitch.m_isolWPs) { + (*m_IsoEff_SF)[ isol ]->clear(); + } + + m_TTVAEff_SF->clear(); + } + + if ( m_infoSwitch.m_energyLoss ) { + m_EnergyLoss->clear(); + m_EnergyLossSigma->clear(); + m_energyLossType->clear(); + m_MeasEnergyLoss->clear(); + m_MeasEnergyLossSigma->clear(); + m_ParamEnergyLoss->clear(); + m_ParamEnergyLossSigmaMinus->clear(); + m_ParamEnergyLossSigmaPlus->clear(); + + } + + if ( m_infoSwitch.m_doLRT ){ + m_isLRT->clear(); + m_passIDcuts->clear(); + } + + if(m_infoSwitch.m_passSel){ + m_passSel->clear(); + } + if(m_infoSwitch.m_passOR){ + m_passOR->clear(); + } + + } + + + void MuonContainer::FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex ){ + return FillMuon(static_cast(muon), primaryVertex); + } + + void MuonContainer::FillMuon( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex ) + { + + ParticleContainer::FillParticle(particle); + + const xAOD::Muon* muon=dynamic_cast(particle); + + if ( m_infoSwitch.m_kinematic ) { + m_charge->push_back( muon->charge() ); + } + + if ( m_infoSwitch.m_trigger ) { + + // retrieve map w/ + // + static SG::AuxElement::Accessor< std::map > isTrigMatchedMapMuAcc("isTrigMatchedMapMu"); + + std::vector matches; + std::vector trigChains; + + if ( isTrigMatchedMapMuAcc.isAvailable( *muon ) ) { + // loop over map and fill branches + // + for ( auto const &it : (isTrigMatchedMapMuAcc( *muon )) ) { + matches.push_back( static_cast(it.second) ); + trigChains.push_back( static_cast(it.first) ); + } + } else { + matches.push_back( -1 ); + trigChains.push_back("NONE"); + } + + m_isTrigMatchedToChain->push_back(matches); + m_listTrigChains->push_back(trigChains); + + // if at least one match among the chains is found, say this muon is trigger matched + if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); } + else { m_isTrigMatched->push_back(0); } + + } + + + if ( m_infoSwitch.m_isolation ) { + static std::map< std::string, SG::AuxElement::Accessor > accIsol; + + for (auto& isol : m_infoSwitch.m_isolWPs) { + if (!isol.empty()) { + std::string isolWP = "isIsolated_" + isol; + accIsol.insert( std::pair > ( isol , SG::AuxElement::Accessor( isolWP ) ) ); + safeFill( muon, accIsol.at( isol ), m_isIsolated->at( isol ), -1 ); + } + } + } + + if ( m_infoSwitch.m_isolationKinematics ) { + m_topoetcone20->push_back( muon->isolation( xAOD::Iso::topoetcone20 )/m_units ); + m_neflowisol20->push_back( muon->isolation( xAOD::Iso::neflowisol20 )/m_units ); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ->push_back( muon->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ) /m_units ); + m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000->push_back( muon->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 )/m_units ); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ->push_back( muon->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ) /m_units ); + m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000->push_back( muon->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 )/m_units ); + } + if (m_infoSwitch.m_closeByCorr) { + SG::AuxElement::Accessor acc_topoetcone20_CloseByCorr ("topoetcone20_CloseByCorr"); + SG::AuxElement::Accessor acc_neflowisol20_CloseByCorr ("neflowisol20_CloseByCorr"); + SG::AuxElement::Accessor acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr"); + SG::AuxElement::Accessor acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr"); + safeFill(muon, acc_topoetcone20_CloseByCorr, m_topoetcone20_CloseByCorr, -1, m_units); + safeFill(muon, acc_neflowisol20_CloseByCorr, m_neflowisol20_CloseByCorr, -1, m_units); + safeFill(muon, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr, -1, m_units); + if (m_infoSwitch.m_doLRT) m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ->push_back(-1.); + else safeFill(muon, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr, -1, m_units); + } + + if ( m_infoSwitch.m_quality ) { + static std::map< std::string, SG::AuxElement::Accessor > accQuality; + + for (auto& quality : m_infoSwitch.m_recoWPs) { + if (!quality.empty()) { + accQuality.insert( std::pair > ( quality , SG::AuxElement::Accessor( "is" + quality + "Q" ) ) ); + safeFill( muon, accQuality.at( quality ), m_quality->at( quality ), -1 ); + } + } + } + + const xAOD::TrackParticle* trk = muon->primaryTrackParticle(); + + if ( m_infoSwitch.m_trackparams ) { + if ( trk ) { + // + // NB.: + // All track parameters are calculated at the perigee, i.e., the point of closest approach to the origin of some r.f. (which in RunII is NOT the ATLAS detector r.f!). + // The reference frame is chosen to be a system centered in the beamspot position, with z axis parallel to the beam line. + // Remember that the beamspot size ( of O(10 micrometers) in the transverse plane) is << average vertex transverse position resolution ( O(60-80 micrometers) ) + // The coordinates of this r.f. wrt. the ATLAS system origin are returned by means of vx(), vy(), vz() + // + m_trkd0->push_back( trk->d0() ); + + static SG::AuxElement::Accessor d0SigAcc ("d0sig"); + float d0_significance = ( d0SigAcc.isAvailable( *muon ) ) ? d0SigAcc( *muon ) : -1.0; + m_trkd0sig->push_back( d0_significance ); + + if (primaryVertex) + m_trkz0->push_back( trk->z0() - ( primaryVertex->z() - trk->vz() ) ); + else + m_trkz0->push_back( -999.0 ); + + static SG::AuxElement::Accessor z0sinthetaAcc("z0sintheta"); + float z0sintheta = ( z0sinthetaAcc.isAvailable( *muon ) ) ? z0sinthetaAcc( *muon ) : -999.0; + m_trkz0sintheta->push_back( z0sintheta ); + m_trkphi0 ->push_back( trk->phi0() ); + m_trktheta ->push_back( trk->theta() ); + m_trkcharge->push_back( trk->charge() ); + m_trkqOverP->push_back( trk->qOverP() ); + + } else { + m_trkd0 -> push_back( -999.0 ); + m_trkd0sig -> push_back( -999.0 ); + m_trkz0 -> push_back( -999.0 ); + m_trkz0sintheta -> push_back( -999.0 ); + m_trkphi0 -> push_back( -999.0 ); + m_trktheta -> push_back( -999.0 ); + m_trkcharge -> push_back( -999.0 ); + m_trkqOverP -> push_back( -999.0 ); + } + + } + + if ( m_infoSwitch.m_trackhitcont ) { + uint8_t nPixHits(-1), nPixHoles(-1), nSCTHits(-1), nSCTHoles(-1), nTRTHits(-1), nTRTHoles(-1), nBLayerHits(-1), nInnermostPixLayHits(-1); + float pixdEdX(-1.0); + + if ( trk ) { + trk->summaryValue( nPixHits, xAOD::numberOfPixelHits ); + trk->summaryValue( nPixHoles, xAOD::numberOfPixelHoles ); + trk->summaryValue( nSCTHits, xAOD::numberOfSCTHits ); + trk->summaryValue( nSCTHoles, xAOD::numberOfSCTHoles ); + trk->summaryValue( nTRTHits, xAOD::numberOfTRTHits ); + trk->summaryValue( nTRTHoles, xAOD::numberOfTRTHoles ); + trk->summaryValue( nBLayerHits, xAOD::numberOfBLayerHits ); + trk->summaryValue( nInnermostPixLayHits, xAOD::numberOfInnermostPixelLayerHits ); + trk->summaryValue( pixdEdX, xAOD::pixeldEdx); + } + + m_trknSiHits -> push_back( nPixHits + nSCTHits ); + m_trknPixHits -> push_back( nPixHits ); + m_trknPixHoles -> push_back( nPixHoles ); + m_trknSCTHits -> push_back( nSCTHits ); + m_trknSCTHoles -> push_back( nSCTHoles ); + m_trknTRTHits -> push_back( nTRTHits ); + m_trknTRTHoles -> push_back( nTRTHoles ); + m_trknBLayerHits -> push_back( nBLayerHits ); + m_trknInnermostPixLayHits -> push_back( nInnermostPixLayHits ); + m_trkPixdEdX -> push_back( pixdEdX ); + } + + if ( m_infoSwitch.m_promptlepton ) { + SG::AuxElement::ConstAccessor acc_DL1mu ("PromptLeptonInput_DL1mu"); + SG::AuxElement::ConstAccessor acc_DRlj ("PromptLeptonInput_DRlj"); + SG::AuxElement::ConstAccessor acc_LepJetPtFrac ("PromptLeptonInput_LepJetPtFrac"); + SG::AuxElement::ConstAccessor acc_PtFrac ("PromptLeptonInput_PtFrac"); + SG::AuxElement::ConstAccessor acc_PtRel ("PromptLeptonInput_PtRel"); + SG::AuxElement::ConstAccessor acc_TrackJetNTrack ("PromptLeptonInput_TrackJetNTrack"); + SG::AuxElement::ConstAccessor acc_ip2 ("PromptLeptonInput_ip2"); + SG::AuxElement::ConstAccessor acc_ip3 ("PromptLeptonInput_ip3"); + SG::AuxElement::ConstAccessor acc_rnnip ("PromptLeptonInput_rnnip"); + SG::AuxElement::ConstAccessor acc_sv1_jf_ntrkv ("PromptLeptonInput_sv1_jf_ntrkv"); + SG::AuxElement::ConstAccessor acc_Iso ("PromptLeptonIso"); + SG::AuxElement::ConstAccessor acc_Veto ("PromptLeptonVeto"); + + m_PromptLeptonInput_DL1mu ->push_back( acc_DL1mu .isAvailable(*muon) ? acc_DL1mu(*muon) : -100); + m_PromptLeptonInput_DRlj ->push_back( acc_DRlj .isAvailable(*muon) ? acc_DRlj(*muon) : -100); + m_PromptLeptonInput_LepJetPtFrac ->push_back( acc_LepJetPtFrac .isAvailable(*muon) ? acc_LepJetPtFrac(*muon) : -100); + m_PromptLeptonInput_PtFrac ->push_back( acc_PtFrac .isAvailable(*muon) ? acc_PtFrac(*muon) : -100); + m_PromptLeptonInput_PtRel ->push_back( acc_PtRel .isAvailable(*muon) ? acc_PtRel(*muon) : -100); + m_PromptLeptonInput_TrackJetNTrack ->push_back( acc_TrackJetNTrack .isAvailable(*muon) ? acc_TrackJetNTrack(*muon) : -100); + m_PromptLeptonInput_ip2 ->push_back( acc_ip2 .isAvailable(*muon) ? acc_ip2(*muon) : -100); + m_PromptLeptonInput_ip3 ->push_back( acc_ip3 .isAvailable(*muon) ? acc_ip3(*muon) : -100); + m_PromptLeptonInput_rnnip ->push_back( acc_rnnip .isAvailable(*muon) ? acc_rnnip(*muon) : -100); + m_PromptLeptonInput_sv1_jf_ntrkv ->push_back( acc_sv1_jf_ntrkv .isAvailable(*muon) ? acc_sv1_jf_ntrkv(*muon) : -100); + m_PromptLeptonIso ->push_back( acc_Iso .isAvailable(*muon) ? acc_Iso(*muon) : -100); + m_PromptLeptonVeto ->push_back( acc_Veto .isAvailable(*muon) ? acc_Veto(*muon) : -100); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + std::vector junkSF(1,-1.0); + std::vector junkEff(1,-1.0); + + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accRecoSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigEFF; + for (auto& reco : m_infoSwitch.m_recoWPs) { + std::string recoEffSF = "MuRecoEff_SF_syst_Reco" + reco; + accRecoSF.insert( std::pair > > ( reco , SG::AuxElement::Accessor< std::vector< float > >( recoEffSF ) ) ); + safeSFVecFill( muon, accRecoSF.at( reco ), m_RecoEff_SF->at( reco ), junkSF ); + + for (auto& trig : m_infoSwitch.m_trigWPs) { + std::string trigEffSF = "MuTrigEff_SF_syst_" + trig + "_Reco" + reco; + accTrigSF.insert( std::pair > > ( trig+reco , SG::AuxElement::Accessor< std::vector< float > >( trigEffSF ) ) ); + safeSFVecFill( muon, accTrigSF.at( trig+reco ), m_TrigEff_SF->at( trig+reco ), junkSF ); + + std::string trigMCEff = "MuTrigMCEff_syst_" + trig + "_Reco" + reco; + accTrigEFF.insert( std::pair > > ( trig+reco , SG::AuxElement::Accessor< std::vector< float > >( trigMCEff ) ) ); + safeSFVecFill( muon, accTrigEFF.at( trig+reco ), m_TrigMCEff->at( trig+reco ), junkEff ); + } + } + + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accIsoSF; + for (auto& isol : m_infoSwitch.m_isolWPs) { + std::string isolEffSF = "MuIsoEff_SF_syst_Iso" + isol; + accIsoSF.insert( std::pair > > ( isol , SG::AuxElement::Accessor< std::vector< float > >( isolEffSF ) ) ); + safeSFVecFill( muon, accIsoSF.at( isol ), m_IsoEff_SF->at( isol ), junkSF ); + } + + static SG::AuxElement::Accessor< std::vector< float > > accTTVASF("MuTTVAEff_SF_syst_TTVA"); + safeSFVecFill( muon, accTTVASF, m_TTVAEff_SF, junkSF ); + + } + + if(m_infoSwitch.m_energyLoss ) { + static SG::AuxElement::Accessor< float > accMuon_EnergyLoss ("EnergyLoss"); + safeFill(muon, accMuon_EnergyLoss, m_EnergyLoss, -1); + + static SG::AuxElement::Accessor< float > accMuon_EnergyLossSigma ("EnergyLossSigma"); + safeFill(muon, accMuon_EnergyLossSigma, m_EnergyLossSigma, -1); + + static SG::AuxElement::Accessor< unsigned char > accMuon_energyLossType ("energyLossType"); + safeFill(muon, accMuon_energyLossType, m_energyLossType, -1); + + static SG::AuxElement::Accessor< float > accMuon_MeasEnergyLoss ("MeasEnergyLoss"); + safeFill(muon, accMuon_MeasEnergyLoss, m_MeasEnergyLoss, -1); + + static SG::AuxElement::Accessor< float > accMuon_MeasEnergyLossSigma ("MeasEnergyLossSigma"); + safeFill(muon, accMuon_MeasEnergyLossSigma, m_MeasEnergyLossSigma, -1); + + static SG::AuxElement::Accessor< float > accMuon_ParamEnergyLoss ("ParamEnergyLoss"); + safeFill(muon, accMuon_ParamEnergyLoss, m_ParamEnergyLoss, -1); + + static SG::AuxElement::Accessor< float > accMuon_ParamEnergyLossSigmaMinus ("ParamEnergyLossSigmaMinus"); + safeFill(muon, accMuon_ParamEnergyLossSigmaMinus, m_ParamEnergyLossSigmaMinus, -1); + + static SG::AuxElement::Accessor< float > accMuon_ParamEnergyLossSigmaPlus ("ParamEnergyLossSigmaPlus"); + safeFill(muon, accMuon_ParamEnergyLossSigmaPlus, m_ParamEnergyLossSigmaPlus, -1); + + } + + if ( m_infoSwitch.m_doLRT ){ + static SG::AuxElement::Accessor accMuon_isLRT( "isLRT" ); + safeFill(muon, accMuon_isLRT, m_isLRT, -1); + + static SG::AuxElement::Accessor accMuon_passIDcuts( "passIDcuts" ); + safeFill(muon, accMuon_passIDcuts, m_passIDcuts, -1); + } + + if ( m_infoSwitch.m_passSel ) { + static SG::AuxElement::Accessor accMuon_passSel( "passSel" ); + safeFill(muon, accMuon_passSel, m_passSel, -99); + } + if ( m_infoSwitch.m_passOR ) { + static SG::AuxElement::Accessor accMuon_passOR( "passOR" ); + safeFill(muon, accMuon_passOR, m_passOR, -99); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..75b6f04dfb --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,1005 @@ + +.. _program_listing_file_Root_MuonEfficiencyCorrector.cxx: + +Program Listing for File MuonEfficiencyCorrector.cxx +==================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonEfficiencyCorrector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + #include + + // EL include(s): + #include + #include + #include + + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODMuon/MuonAuxContainer.h" + #include "xAODMuon/Muon.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/MuonEfficiencyCorrector.h" + #include "MuonEfficiencyCorrections/MuonEfficiencyScaleFactors.h" + #include "MuonEfficiencyCorrections/MuonTriggerScaleFactors.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(MuonEfficiencyCorrector) + + + MuonEfficiencyCorrector :: MuonEfficiencyCorrector () : + Algorithm("MuonEfficiencyCorrector") + { + } + + + EL::StatusCode MuonEfficiencyCorrector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "MuonEfficiencyCorrector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonEfficiencyCorrector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonEfficiencyCorrector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonEfficiencyCorrector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonEfficiencyCorrector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing MuonEfficiencyCorrector Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + + + // ******************************************************* + + // Create a ToolHandle of the PRW tool which is passed to the MuonEfficiencyScaleFactors class later + // + if( isMC() ){ + if(!m_pileup_tool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_pileup_tool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_pileup_tool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle); + } + + + // 1. + // initialize the CP::MuonEfficiencyScaleFactors Tool for reco efficiency SF + // + m_recoEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_Reco_" + m_WorkingPointReco; + + ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for RECO efficiency SF..." ); + + ANA_CHECK(checkToolStore(m_recoEffSF_tool_name)); + const bool recoEffSFInstanceExists = asg::ToolStore::contains(m_recoEffSF_tool_name); + + + // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public") + m_muRecoSF_tool = asg::AnaToolHandle("CP::MuonEfficiencyScaleFactors/"+m_recoEffSF_tool_name); + // setProperty is ignored if tool is already configured (i.e. for recoEffSFInstanceExists == true) + ANA_CHECK( m_muRecoSF_tool.setProperty("WorkingPoint", m_WorkingPointReco )); + if ( !m_overrideCalibRelease.empty() ) { + ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease); + ANA_CHECK( m_muRecoSF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease )); + } + if (m_doLRT) { + ANA_CHECK( m_muRecoSF_tool.setProperty("UseLRT", true )); + } + ANA_CHECK(m_muRecoSF_tool.retrieve()); + assert(m_muRecoSF_tool.isInitialized()); + + // only process systematics once per efficiency SF/WP + if(not recoEffSFInstanceExists) { + // Add the chosen WP to the string labelling the vector decoration + // + m_outputSystNamesReco = m_outputSystNamesReco + "_Reco" + m_WorkingPointReco; + + CP::SystematicSet affectSystsReco = m_muRecoSF_tool->affectingSystematics(); + for ( const auto& syst_it : affectSystsReco ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by reco efficiency systematic: " << syst_it.name()); } + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsReco = m_muRecoSF_tool->recommendedSystematics(); + m_systListReco = HelperFunctions::getListofSystematics( recSystsReco, m_systNameReco, m_systValReco, msg() ); + + ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool reco efficiency systematic:"); + for ( const auto& syst_it : m_systListReco ) { + if ( m_systNameReco.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // 2. + // initialize the CP::MuonEfficiencyScaleFactors Tool for isolation efficiency SF + // + + m_isoEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_Iso_" + m_WorkingPointIso; + std::string iso_WP = m_WorkingPointIso + "Iso"; + + ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for ISO efficiency SF..." ); + + ANA_CHECK( checkToolStore(m_isoEffSF_tool_name)); + const bool isoEffSFInstanceExists = asg::ToolStore::contains(m_isoEffSF_tool_name); + + // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public") + m_muIsoSF_tool = asg::AnaToolHandle("CP::MuonEfficiencyScaleFactors/"+m_isoEffSF_tool_name); + // setProperty is ignored if tool is already configured (i.e. for isoEffSFInstanceExists == true) + ANA_CHECK( m_muIsoSF_tool.setProperty("WorkingPoint", iso_WP )); + if ( !m_overrideCalibRelease.empty() ) { + ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease); + ANA_CHECK( m_muIsoSF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease )); + } + ANA_CHECK(m_muIsoSF_tool.retrieve()); + assert(m_muIsoSF_tool.isInitialized()); + + // only process systematics once per efficiency SF/WP + if(not isoEffSFInstanceExists){ + + // Add the chosen WP to the string labelling the vector decoration + // + m_outputSystNamesIso = m_outputSystNamesIso + "_Iso" + m_WorkingPointIso; + + CP::SystematicSet affectSystsIso = m_muIsoSF_tool->affectingSystematics(); + for ( const auto& syst_it : affectSystsIso ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by iso efficiency systematic: " << syst_it.name()); } + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsIso = m_muIsoSF_tool->recommendedSystematics(); + m_systListIso = HelperFunctions::getListofSystematics( recSystsIso, m_systNameIso, m_systValIso, msg() ); + + ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool iso efficiency systematic:"); + for ( const auto& syst_it : m_systListIso ) { + if ( m_systNameIso.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // 3. + // Initialise the CP::MuonTriggerScaleFactors tool + // + + m_trigEffSF_tool_name = "MuonTriggerScaleFactors_effSF_Trig_Reco" + m_WorkingPointReco; + + ANA_MSG_INFO( " Initialising CP::MuonTriggerScaleFactors for TRIGGER efficiency SF..." ); + + ANA_CHECK( checkToolStore(m_trigEffSF_tool_name)); + const bool trigEffSFInstanceExists = asg::ToolStore::contains( m_trigEffSF_tool_name ); + + // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public") + m_muTrigSF_tool = asg::AnaToolHandle("CP::MuonTriggerScaleFactors/"+m_trigEffSF_tool_name ); + // setProperty is ignored if tool is already configured + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "m_AllowZeroSF is set to True. No errors will arise for runs missing required triggers!!!"); + ANA_CHECK( m_muTrigSF_tool.setProperty("AllowZeroSF", m_AllowZeroSF )); + } + ANA_CHECK(m_muTrigSF_tool.setProperty("MuonQuality", m_WorkingPointReco )); + ANA_CHECK(m_muTrigSF_tool.retrieve()); + assert(m_muTrigSF_tool.isInitialized()); + + std::string token; + std::istringstream ss(m_MuTrigLegs); + while ( std::getline(ss, token, ',') ) { + size_t pos = token.find(":"); + m_SingleMuTriggerMap[token.substr(0,pos)] = token.substr(pos+1); + } + + if(not trigEffSFInstanceExists){ + // Remember base output syst. names container + m_outputSystNamesTrigBase = m_outputSystNamesTrig; + // Add the chosen WP to the string labelling the output syst. names container + m_outputSystNamesTrig = m_outputSystNamesTrig + "_Reco" + m_WorkingPointReco; + + CP::SystematicSet affectSystsTrig = m_muTrigSF_tool->affectingSystematics(); + for ( const auto& syst_it : affectSystsTrig ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by trigger efficiency systematic: " << syst_it.name()); } + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsTrig = m_muTrigSF_tool->recommendedSystematics(); + m_systListTrig = HelperFunctions::getListofSystematics( recSystsTrig, m_systNameTrig, m_systValTrig, msg() ); + + ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool trigger efficiency systematic:"); + for ( const auto& syst_it : m_systListTrig ) { + if ( m_systNameTrig.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // 4. + // initialize the CP::MuonEfficiencyScaleFactors Tool for track-to-vertex association (TTVA) SF + // + + m_TTVAEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_" + m_WorkingPointTTVA; + + ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for TTVA efficiency SF..." ); + + ANA_CHECK( checkToolStore(m_TTVAEffSF_tool_name)); + const bool TTVASFInstanceExists = asg::ToolStore::contains(m_TTVAEffSF_tool_name); + + // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public") + m_muTTVASF_tool = asg::AnaToolHandle("CP::MuonEfficiencyScaleFactors/"+m_TTVAEffSF_tool_name); + // setProperty is ignored if tool is already configured (i.e. for TTVASFInstanceExists == true) + ANA_CHECK( m_muTTVASF_tool.setProperty("WorkingPoint", m_WorkingPointTTVA )); + if ( !m_overrideCalibRelease.empty() ) { + ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease); + ANA_CHECK( m_muTTVASF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease )); + } + ANA_CHECK(m_muTTVASF_tool.retrieve()); + assert(m_muTTVASF_tool.isInitialized()); + + // only process systematics once per efficiency SF/WP + if(not TTVASFInstanceExists) + { + // Add the chosen WP to the string labelling the vector decoration + // + m_outputSystNamesTTVA = m_outputSystNamesTTVA + "_" + m_WorkingPointTTVA; + + CP::SystematicSet affectSystsTTVA = m_muTTVASF_tool->affectingSystematics(); + for ( const auto& syst_it : affectSystsTTVA ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by TTVA efficiency systematic: " << syst_it.name()); } + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + const CP::SystematicSet recSystsTTVA = m_muTTVASF_tool->recommendedSystematics(); + m_systListTTVA = HelperFunctions::getListofSystematics( recSystsTTVA, m_systNameTTVA, m_systValTTVA, msg() ); + + ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool TTVA efficiency systematic:"); + for ( const auto& syst_it : m_systListTTVA ) { + if ( m_systNameTTVA.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + ANA_MSG_INFO("\t " << syst_it.name()); + } + } + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systListReco, m_outputSystNamesReco, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListIso, m_outputSystNamesIso, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListTrig, m_outputSystNamesTrig, fileMD); + HelperFunctions::writeSystematicsListHist(m_systListTTVA, m_outputSystNamesTTVA, fileMD); + } + + // ********************************************************************************* + + ANA_MSG_INFO( "MuonEfficiencyCorrector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode MuonEfficiencyCorrector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + m_numEvent++; + + if ( !isMC() ) { + if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Muon Efficiency correction... "); } + return EL::StatusCode::SUCCESS; + } + + ANA_MSG_DEBUG( "Applying Muon Efficiency corrections... "); + + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // if m_inputSystNamesMuons = "" --> input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + std::vector* systNames_ptr(nullptr); + if ( !m_inputSystNamesMuons.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesMuons, 0, m_store, msg()) ); + + std::vector systNames{""}; + if (systNames_ptr) systNames = *systNames_ptr; + + // Declare a write status set to true + // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!) + // + bool writeSystNames(true); + + // loop over systematic sets available + for ( auto systName : systNames ) { + const xAOD::MuonContainer* inputMuons(nullptr); + + // some systematics might have rejected the event + if ( m_store->contains( m_inContainerName+systName ) ) { + // retrieve input muons + ANA_CHECK( HelperFunctions::retrieve(inputMuons, m_inContainerName+systName, m_event, m_store, msg()) ); + + ANA_MSG_DEBUG( "Number of muons: " << static_cast(inputMuons->size()) ); + ANA_MSG_DEBUG( "Input syst: " << systName ); + unsigned int idx(0); + for ( auto mu : *(inputMuons) ) { + ANA_MSG_DEBUG( "Input muon " << idx << ", pt = " << mu->pt() * 1e-3 << " GeV" ); + ++idx; + } + + // decorate muons w/ SF - there will be a decoration w/ different name for each syst! + ANA_CHECK( this->executeSF( eventInfo, inputMuons, systName.empty(), writeSystNames ) ); + + writeSystNames = false; + + } // check existence of container + + } // close loop on systematic sets available from upstream algo + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + + } + + + EL::StatusCode MuonEfficiencyCorrector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonEfficiencyCorrector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode MuonEfficiencyCorrector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonEfficiencyCorrector :: executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::MuonContainer* inputMuons, bool nominal, bool writeSystNames ) + { + + // + // In the following, every muon gets decorated with 2 vector's (for reco/iso efficiency SFs), + // and the event w/ 1 vector (for trigger efficiency SFs) + // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF). + // + // Additionally, we create these vector with the SF syst names, so that we know which component corresponds to. + // ( there's a 1:1 correspondence with the vector defined above ) + // + // These vector are eventually stored in TStore + // + + // 1. + // Reco efficiency SFs - this is a per-MUON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + std::unique_ptr< std::vector< std::string > > sysVariationNamesReco = nullptr; + + // Do it only if a tool with *this* name hasn't already been used + // + if ( !isToolAlreadyUsed(m_recoEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesReco = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systListReco ) { + if ( !syst_it.name().empty() && !nominal ) continue; + + // Create the name of the SF weight to be recorded + std::string sfName = "MuRecoEff_SF_syst_Reco" + m_WorkingPointReco; + + ANA_MSG_DEBUG( "Muon reco efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() ); + if( writeSystNames ) sysVariationNamesReco->push_back(syst_it.name()); + + // apply syst + // + if ( m_muRecoSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name()); + + // and now apply reco efficiency SF! + // + unsigned int idx(0); + for ( auto mu_itr : *(inputMuons) ) { + + ANA_MSG_DEBUG( "Applying reco efficiency SF" ); + + // a) + // decorate directly the muon with reco efficiency (useful at all?), and the corresponding SF + // + //if ( m_muRecoSF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyMCEfficiency for Reco"); + //} + //if ( m_muRecoSF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for Reco"); + //} + + // b) + // obtain reco efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon) + // + + SG::AuxElement::Decorator< std::vector > sfVecReco( sfName ); + if ( !sfVecReco.isAvailable( *mu_itr ) ) { + sfVecReco( *mu_itr ) = std::vector(); + } + + float recoEffSF(-1.0); + if ( m_muRecoSF_tool->getEfficiencyScaleFactor( *mu_itr, recoEffSF ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in Reco getEfficiencyScaleFactor"); + recoEffSF = -1.0; + } else { + ANA_MSG_ERROR( "Could not get Reco efficiency scale factors"); + return EL::StatusCode::FAILURE; + } + } + // + // Add it to decoration vector + // + sfVecReco( *mu_itr ).push_back( recoEffSF ); + + // reco sys names are saved in a vector. Entries positions are preserved! + // + SG::AuxElement::Decorator< std::vector > sfVecReco_sysNames( m_outputSystNamesReco + "_sysNames" ); + if ( !sfVecReco_sysNames.isAvailable( *mu_itr ) ) { + sfVecReco_sysNames( *mu_itr ) = std::vector(); + } + sfVecReco_sysNames( *mu_itr ).push_back( syst_it.name().c_str() ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV" ); + ANA_MSG_DEBUG( "Reco eff. SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Reco eff. SF:"); + ANA_MSG_DEBUG( "\t " << recoEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close muon loop + + } // close loop on reco efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesReco ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesReco), m_outputSystNamesReco )); + } + + } + + // 2. + // Isolation efficiency SFs - this is a per-MUON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + std::unique_ptr< std::vector< std::string > > sysVariationNamesIso = nullptr; + + // Do it only if a tool with *this* name hasn't already been used + // + if ( !isToolAlreadyUsed(m_isoEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesIso = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systListIso ) { + if ( !syst_it.name().empty() && !nominal ) continue; + + // Create the name of the SF weight to be recorded + std::string sfName = "MuIsoEff_SF_syst_Iso" + m_WorkingPointIso; + + ANA_MSG_DEBUG( "Muon iso efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() ); + if ( writeSystNames ) sysVariationNamesIso->push_back(syst_it.name()); + + // apply syst + // + if ( m_muIsoSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name()); + + // and now apply Iso efficiency SF! + // + unsigned int idx(0); + for ( auto mu_itr : *(inputMuons) ) { + + ANA_MSG_DEBUG( "Applying iso efficiency SF" ); + + // a) + // decorate directly the muon with iso efficiency (useful at all?), and the corresponding SF + // + //if ( m_muIsoSF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyMCEfficiency for Iso"); + //} + //if ( m_muIsoSF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for Iso"); + //} + + // b) + // obtain iso efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon) + // + SG::AuxElement::Decorator< std::vector > sfVecIso( sfName ); + if ( !sfVecIso.isAvailable( *mu_itr ) ) { + sfVecIso( *mu_itr ) = std::vector(); + } + + float IsoEffSF(-1.0); + if ( m_muIsoSF_tool->getEfficiencyScaleFactor( *mu_itr, IsoEffSF ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in Iso getEfficiencyScaleFactor"); + IsoEffSF = -1.0; + } else { + ANA_MSG_ERROR( "Could not get Iso efficiency scale factors"); + return EL::StatusCode::FAILURE; + } + } + // + // Add it to decoration vector + // + sfVecIso( *mu_itr ).push_back(IsoEffSF); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " ); + ANA_MSG_DEBUG( "Isolation SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Isolation SF:"); + ANA_MSG_DEBUG( "\t " << IsoEffSF << " (from getEfficiencyScaleFactor())"); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close muon loop + + } // close loop on isolation efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesIso ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesIso), m_outputSystNamesIso )); + } + + } + + // 3. + // Trigger efficiency SF - this is in principle given by the MCP tool as a per-EVENT weight + // + // To allow more freedom to the user, we calculate it as a per-muon weight with a trick + // We store also the MC efficiency per-muon + + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + // NB: calculation of the event SF is up to the analyzer + + + // Do it only if a tool with *this* name hasn't already been used + // + if ( !isToolAlreadyUsed(m_trigEffSF_tool_name) ) { + + static const SG::AuxElement::ConstAccessor acc_rnd("RandomRunNumber"); + unsigned int run=0; + if (acc_rnd.isAvailable(*eventInfo)){ + run = acc_rnd(*eventInfo); + } + + for (auto const& trig : m_SingleMuTriggerMap) { + + auto trig_it = trig.second; + // run numbers from MuonTriggerScaleFactors::getYear() + // https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/MuonID/MuonIDAnalysis/MuonEfficiencyCorrections/Root/MuonTriggerScaleFactors.cxx + if (trig.first.find("2015")!=std::string::npos && run>284484) continue; + else if ((trig.first.find("2016")!=std::string::npos || trig.first.find("2017")!=std::string::npos || trig.first.find("2018")!=std::string::npos) && (run <= 284484 || run > 364292) ) continue; + else if (trig.first.find("2022")!=std::string::npos && (run <= 364292 || run > 440613) ) continue; + else if (trig.first.find("2023")!=std::string::npos && (run <= 440613 || run > 456749) ) continue; + else if (trig.first.find("2024")!=std::string::npos && run <= 456749 ) continue; + + std::unique_ptr< std::vector< std::string > > sysVariationNamesTrig = nullptr; + if ( writeSystNames ) sysVariationNamesTrig = std::make_unique< std::vector< std::string > >(); + // this is used to put the list of sys strings in the store. + // The original string needs to be updated with the name of + // the trigger for every item in the trigger loop. + // + //std::string m_fullname_outputSystNamesTrig; + + std::string sf_string = m_outputSystNamesTrig; + std::string insfstr = m_outputSystNamesTrigBase + "_"; + std::string outsfstr = m_outputSystNamesTrigBase + "_" + trig_it + "_"; + + for(std::string::size_type i = 0; (i = sf_string.find(insfstr, i)) != std::string::npos;) { + sf_string.replace(i, insfstr.length(), outsfstr); + i += outsfstr.length(); + } + + for ( const auto& syst_it : m_systListTrig ) { + if ( !syst_it.name().empty() && !nominal ) continue; + + // Create the name of the SF weight to be recorded + std::string sfName = "MuTrigEff_SF_syst_" + trig_it + "_Reco" + m_WorkingPointReco; + std::string effName = "MuTrigMCEff_syst_" + trig_it + "_Reco" + m_WorkingPointReco; + + ANA_MSG_DEBUG( "Trigger efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() ); + if ( writeSystNames ) sysVariationNamesTrig->push_back(syst_it.name()); + + // apply syst + // + if ( m_muTrigSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure MuonTriggerScaleFactors for trigger " << trig_it << " systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematic " << syst_it.name() << " for trigger " << trig_it); + + //------------------------------ + // Get trigger efficiency SF(s) + //------------------------------ + ANA_MSG_DEBUG( "Applying trigger efficiency SF and MC efficiency" ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Trigger efficiency SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Trigger MC efficiency decoration: " << effName ); + + // ugly ass hardcoding + // + std::string full_scan_chain = "HLT_mu8noL1"; + + unsigned int idx(0); + for ( auto mu_itr : *(inputMuons) ) { + + ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " ); + + // Pass a container with only the muon in question to the tool + // (use a view container to be light weight) + // + ConstDataVector mySingleMuonCont(SG::VIEW_ELEMENTS); + mySingleMuonCont.push_back( mu_itr ); + + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon) + // + SG::AuxElement::Decorator< std::vector > effMC( effName ); + if ( !effMC.isAvailable( *mu_itr ) ) { + effMC( *mu_itr ) = std::vector(); + } + + SG::AuxElement::Decorator< std::vector > sfVecTrig( sfName ); + if ( !sfVecTrig.isAvailable( *mu_itr ) ) { + sfVecTrig( *mu_itr ) = std::vector(); + } + + double triggerMCEff(-1.0); // tool wants a double + if ( m_muTrigSF_tool->getTriggerEfficiency( *mu_itr, triggerMCEff, trig_it, !isMC() ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in getTriggerEfficiency - trigger: " << trig_it); + triggerMCEff = -1.0; + } else { + ANA_MSG_ERROR( "Could not get trigger efficiency - trigger: " << trig_it); + return EL::StatusCode::FAILURE; + } + } + // Add it to decoration vector + // + effMC( *mu_itr ).push_back(triggerMCEff); + + ANA_MSG_DEBUG( "Trigger MC efficiency:"); + ANA_MSG_DEBUG( "\t " << triggerMCEff << " (from getTriggerEfficiency())" ); + + double triggerDataEff(-1.0); // tool wants a double + if ( trig_it == full_scan_chain ) { + if ( m_muTrigSF_tool->getTriggerEfficiency( *mu_itr, triggerDataEff, trig_it, isMC() ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in getTriggerEfficiency - trigger: " << trig_it); + triggerDataEff = -1.0; + } else { + ANA_MSG_ERROR( "Could not get trigger efficiency - trigger: " << trig_it); + return EL::StatusCode::FAILURE; + } + } + } + + // Get per-muon trigger efficiency SFs + if(m_usePerMuonTriggerSFs){ + double triggerEffSF(1.0); // tool wants a double + if ( trig_it != full_scan_chain ) { + if ( m_muTrigSF_tool->getTriggerScaleFactor( *mySingleMuonCont.asDataVector(), triggerEffSF, trig_it ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in getTriggerScaleFactor - trigger: " << trig_it); + triggerEffSF = -1.0; + } else { + ANA_MSG_ERROR( "Could not get trigger efficiency scale factor - trigger: " << trig_it); + return EL::StatusCode::FAILURE; + } + } + } else { + if ( triggerMCEff > 0.0 ) { + triggerEffSF = triggerDataEff / triggerMCEff; + } + } + + // Add it to decoration vector + // + sfVecTrig( *mu_itr ).push_back(triggerEffSF); + + ANA_MSG_DEBUG( "Trigger efficiency SF:"); + ANA_MSG_DEBUG( "\t " << triggerEffSF << " (from getTriggerScaleFactor())" ); + } + + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close muon loop + + // Get global trigger efficiency SF (using all muons) + if(!m_usePerMuonTriggerSFs){ + // Get SF + double triggerEffSF(1.0); // tool wants a double + if ( trig_it != full_scan_chain ) { + if ( m_muTrigSF_tool->getTriggerScaleFactor( *inputMuons, triggerEffSF, trig_it ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in getTriggerScaleFactor - trigger: " << trig_it); + triggerEffSF = -1.0; + } else { + ANA_MSG_ERROR( "Could not get trigger efficiency scale factor - trigger: " << trig_it); + return EL::StatusCode::FAILURE; + } + } + } else { // if needed can be implemented + ANA_MSG_ERROR( "Could not get event-level trigger efficiency scale factor - trigger: " << trig_it); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Trigger efficiency SF:"); + ANA_MSG_DEBUG( "\t " << triggerEffSF << " (from getTriggerScaleFactor())" ); + // Decorate muons, all with the same event-level SF + for ( auto mu_itr : *(inputMuons) ) {// Loop over muons + SG::AuxElement::Decorator< std::vector > sfVecTrig( sfName ); + if ( !sfVecTrig.isAvailable( *mu_itr ) ) { + sfVecTrig( *mu_itr ) = std::vector(); + } + // Add it to decoration vector + sfVecTrig( *mu_itr ).push_back(triggerEffSF); + } + } + + } // close loop on trigger efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( sf_string ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesTrig), sf_string )); + } + } // close trigger loop + + } + + // 4. + // TTVA efficiency SFs - this is a per-MUON weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + std::unique_ptr< std::vector< std::string > > sysVariationNamesTTVA = nullptr; + + // Do it only if a tool with *this* name hasn't already been used + // + if ( !isToolAlreadyUsed(m_TTVAEffSF_tool_name) ) { + + if ( writeSystNames ) sysVariationNamesTTVA = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systListTTVA ) { + if ( !syst_it.name().empty() && !nominal ) continue; + + // Create the name of the SF weight to be recorded + std::string sfName = "MuTTVAEff_SF_syst_" + m_WorkingPointTTVA; + + ANA_MSG_DEBUG( "Muon iso efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() ); + if ( writeSystNames ) sysVariationNamesTTVA->push_back(syst_it.name()); + + // apply syst + // + // + // TEMP! Commenting this out b/c stupid AnaToolHandle does not work as it should... + // + //if ( m_muTTVASF_tool_handle->applySystematicVariation(syst_it) != CP::SystematicCode::Ok ) { + if ( m_muTTVASF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name()); + + // and now apply TTVA efficiency SF! + // + unsigned int idx(0); + for ( auto mu_itr : *(inputMuons) ) { + + ANA_MSG_DEBUG( "Applying TTVA efficiency SF" ); + + // a) + // decorate directly the muon with TTVA efficiency (useful at all?), and the corresponding SF + // + //if ( m_muTTVASF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyMCEfficiency for TTVA"); + //} + //if ( m_muTTVASF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) { + // ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for TTVA"); + //} + + // b) + // obtain TTVA efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon) + // + SG::AuxElement::Decorator< std::vector > sfVecTTVA( sfName ); + if ( !sfVecTTVA.isAvailable( *mu_itr ) ) { + sfVecTTVA( *mu_itr ) = std::vector(); + } + + float TTVAEffSF(-1.0); + if ( m_muTTVASF_tool->getEfficiencyScaleFactor( *mu_itr, TTVAEffSF ) != CP::CorrectionCode::Ok ) { + if ( m_AllowZeroSF ) { + ANA_MSG_WARNING( "Problem in TTVA getEfficiencyScaleFactor"); + TTVAEffSF = -1.0; + } else { + ANA_MSG_ERROR( "Could not get TTVA efficiency scale factors"); + return EL::StatusCode::FAILURE; + } + } + // + // Add it to decoration vector + // + sfVecTTVA( *mu_itr ).push_back(TTVAEffSF); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " ); + ANA_MSG_DEBUG( "TTVA SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name()); + ANA_MSG_DEBUG( "TTVA SF:"); + ANA_MSG_DEBUG( "\t " << TTVAEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close muon loop + + } // close loop on TTVA efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNamesTTVA ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNamesTTVA), m_outputSystNamesTTVA )); + } + } + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MuonHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonHists.cxx.rst.txt new file mode 100644 index 0000000000..9f4b13e46a --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonHists.cxx.rst.txt @@ -0,0 +1,223 @@ + +.. _program_listing_file_Root_MuonHists.cxx: + +Program Listing for File MuonHists.cxx +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************** + * + * Muon Histogramming + * + * J. Alison (john.alison@cern.ch) + * + *******************************************************/ + + + #include + #include + + ANA_MSG_SOURCE(msgMuonHists, "MuonHists") + + using std::vector; + + MuonHists :: MuonHists (std::string name, std::string detailStr, const std::string& prefix, const std::string& titlePrefix) : + IParticleHists(name, detailStr, prefix, titlePrefix), + m_infoSwitch(new HelperClasses::MuonInfoSwitch(m_detailStr)) + { } + + MuonHists :: ~MuonHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + StatusCode MuonHists::initialize() { + using namespace msgMuonHists; + ANA_CHECK( IParticleHists::initialize()); + + // Isolation + if(m_infoSwitch->m_isolation){ + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (isol.empty()) continue; + + m_isIsolated[isol] = book(m_name, "isIsolated_" + isol, "isIsolated_" + isol, 3, -1.5, 1.5); + } + + m_ptcone20 = book(m_name, "ptcone20", "ptcone20", 101, -0.2, 20); + m_ptcone30 = book(m_name, "ptcone30", "ptcone30", 101, -0.2, 20); + m_ptcone40 = book(m_name, "ptcone40", "ptcone40", 101, -0.2, 20); + m_ptvarcone20 = book(m_name, "ptvarcone20", "ptvarcone20", 101, -0.2, 20); + m_ptvarcone30 = book(m_name, "ptvarcone30", "ptvarcone30", 101, -0.2, 20); + m_ptvarcone40 = book(m_name, "ptvarcone40", "ptvarcone40", 101, -0.2, 20); + m_topoetcone20 = book(m_name, "topoetcone20", "topoetcone20", 101, -0.2, 20); + m_topoetcone30 = book(m_name, "topoetcone30", "topoetcone30", 101, -0.2, 20); + m_topoetcone40 = book(m_name, "topoetcone40", "topoetcone40", 101, -0.2, 20); + + m_ptcone20_rel = book(m_name, "ptcone20_rel", "ptcone20_rel", 110, -0.2, 2); + m_ptcone30_rel = book(m_name, "ptcone30_rel", "ptcone30_rel", 110, -0.2, 2); + m_ptcone40_rel = book(m_name, "ptcone40_rel", "ptcone40_rel", 110, -0.2, 2); + m_ptvarcone20_rel = book(m_name, "ptvarcone20_rel", "ptvarcone20_rel", 110, -0.2, 2); + m_ptvarcone30_rel = book(m_name, "ptvarcone30_rel", "ptvarcone30_rel", 110, -0.2, 2); + m_ptvarcone40_rel = book(m_name, "ptvarcone40_rel", "ptvarcone40_rel", 110, -0.2, 2); + m_topoetcone20_rel = book(m_name, "topoetcone20_rel", "topoetcone20_rel", 110, -0.2, 2); + m_topoetcone30_rel = book(m_name, "topoetcone30_rel", "topoetcone30_rel", 110, -0.2, 2); + m_topoetcone40_rel = book(m_name, "topoetcone40_rel", "topoetcone40_rel", 110, -0.2, 2); + + + } + + // quality + if(m_infoSwitch->m_quality){ + for (auto& quality : m_infoSwitch->m_recoWPs) { + if (quality.empty()) continue; + + m_quality[quality] = book(m_name, "is" + quality, "is" + quality, 3, -1.5, 1.5); + } + } + + + return StatusCode::SUCCESS; + } + + StatusCode MuonHists::execute( const xAOD::Muon* muon, float eventWeight, const xAOD::EventInfo* eventInfo) { + return execute(static_cast(muon), eventWeight, eventInfo); + } + + StatusCode MuonHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgMuonHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo)); + + if(m_debug) std::cout << "MuonHists: in execute " <(particle); + if(muon==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Muon" ); + return StatusCode::FAILURE; + } + + if ( m_infoSwitch->m_isolation ) { + static std::map< std::string, SG::AuxElement::Accessor > accIsol; + + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (!isol.empty() && isol != "NONE") { + std::string isolWP = "isIsolated_" + isol; + accIsol.insert( std::pair > ( isol , SG::AuxElement::Accessor( isolWP ) ) ); + + if (accIsol.at(isol).isAvailable(*muon)) { + m_isIsolated[isol]->Fill(accIsol.at(isol)(*muon), eventWeight); + } else { + m_isIsolated[isol]->Fill(-1, eventWeight); + } + } + } + + m_ptcone20 ->Fill( muon->isolation( xAOD::Iso::ptcone20 ) , eventWeight ); + m_ptcone30 ->Fill( muon->isolation( xAOD::Iso::ptcone30 ) , eventWeight ); + m_ptcone40 ->Fill( muon->isolation( xAOD::Iso::ptcone40 ) , eventWeight ); + m_ptvarcone20 ->Fill( muon->isolation( xAOD::Iso::ptvarcone20 ) , eventWeight ); + m_ptvarcone30 ->Fill( muon->isolation( xAOD::Iso::ptvarcone30 ) , eventWeight ); + m_ptvarcone40 ->Fill( muon->isolation( xAOD::Iso::ptvarcone40 ) , eventWeight ); + m_topoetcone20 ->Fill( muon->isolation( xAOD::Iso::topoetcone20 ) , eventWeight ); + m_topoetcone30 ->Fill( muon->isolation( xAOD::Iso::topoetcone30 ) , eventWeight ); + m_topoetcone40 ->Fill( muon->isolation( xAOD::Iso::topoetcone40 ) , eventWeight ); + + float muonPt = muon->pt(); + m_ptcone20_rel ->Fill( muon->isolation( xAOD::Iso::ptcone20 ) / muonPt, eventWeight ); + m_ptcone30_rel ->Fill( muon->isolation( xAOD::Iso::ptcone30 ) / muonPt, eventWeight ); + m_ptcone40_rel ->Fill( muon->isolation( xAOD::Iso::ptcone40 ) / muonPt, eventWeight ); + m_ptvarcone20_rel ->Fill( muon->isolation( xAOD::Iso::ptvarcone20 ) / muonPt, eventWeight ); + m_ptvarcone30_rel ->Fill( muon->isolation( xAOD::Iso::ptvarcone30 ) / muonPt, eventWeight ); + m_ptvarcone40_rel ->Fill( muon->isolation( xAOD::Iso::ptvarcone40 ) / muonPt, eventWeight ); + m_topoetcone20_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone20 ) / muonPt, eventWeight ); + m_topoetcone30_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone30 ) / muonPt, eventWeight ); + m_topoetcone40_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone40 ) / muonPt, eventWeight ); + + + } + + + if ( m_infoSwitch->m_quality ) { + static std::map< std::string, SG::AuxElement::Accessor > accQuality; + + for (auto& quality : m_infoSwitch->m_recoWPs) { + if (!quality.empty()) { + accQuality.insert( std::pair > ( quality , SG::AuxElement::Accessor( quality ) ) ); + + if (accQuality.at(quality).isAvailable(*muon)) { + m_quality[quality]->Fill(accQuality.at(quality)(*muon), eventWeight); + } else { + m_quality[quality]->Fill(-1, eventWeight); + } + } + } + } + + + + return StatusCode::SUCCESS; + } + + StatusCode MuonHists::execute( const xAH::Muon* muon, float eventWeight, const xAH::EventInfo* eventInfo ) { + return execute(static_cast(muon), eventWeight, eventInfo); + } + + + StatusCode MuonHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/ ) { + using namespace msgMuonHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight)); + + if(m_debug) std::cout << "MuonHists: in execute " <(particle); + if(muon==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Muon" ); + return StatusCode::FAILURE; + } + + if ( m_infoSwitch->m_isolation ) { + for (auto& isol : m_infoSwitch->m_isolWPs) { + if (isol.empty()) continue; + + m_isIsolated[isol]->Fill(muon->isIsolated.at(isol), eventWeight); + } + + m_ptcone20 ->Fill( muon->ptcone20 , eventWeight ); + m_ptcone30 ->Fill( muon->ptcone30 , eventWeight ); + m_ptcone40 ->Fill( muon->ptcone40 , eventWeight ); + m_ptvarcone20 ->Fill( muon->ptvarcone20 , eventWeight ); + m_ptvarcone30 ->Fill( muon->ptvarcone30 , eventWeight ); + m_ptvarcone40 ->Fill( muon->ptvarcone40 , eventWeight ); + m_topoetcone20 ->Fill( muon->topoetcone20 , eventWeight ); + m_topoetcone30 ->Fill( muon->topoetcone30 , eventWeight ); + m_topoetcone40 ->Fill( muon->topoetcone40 , eventWeight ); + + float muonPt = muon->p4.Pt(); + m_ptcone20_rel ->Fill( muon->ptcone20/muonPt , eventWeight ); + m_ptcone30_rel ->Fill( muon->ptcone30/muonPt , eventWeight ); + m_ptcone40_rel ->Fill( muon->ptcone40/muonPt , eventWeight ); + m_ptvarcone20_rel ->Fill( muon->ptvarcone20 /muonPt , eventWeight ); + m_ptvarcone30_rel ->Fill( muon->ptvarcone30 /muonPt , eventWeight ); + m_ptvarcone40_rel ->Fill( muon->ptvarcone40 /muonPt , eventWeight ); + m_topoetcone20_rel ->Fill( muon->topoetcone20/muonPt , eventWeight ); + m_topoetcone30_rel ->Fill( muon->topoetcone30/muonPt , eventWeight ); + m_topoetcone40_rel ->Fill( muon->topoetcone40/muonPt , eventWeight ); + + } + + + if ( m_infoSwitch->m_quality ) { + for (auto& quality : m_infoSwitch->m_recoWPs) { + if (quality.empty()) continue; + + m_quality[quality]->Fill(muon->quality.at(quality), eventWeight); + } + } + + return StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_MuonHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..3b1574c287 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonHistsAlgo.cxx.rst.txt @@ -0,0 +1,44 @@ + +.. _program_listing_file_Root_MuonHistsAlgo.cxx: + +Program Listing for File MuonHistsAlgo.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + + #include + + #include + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(MuonHistsAlgo) + + MuonHistsAlgo :: MuonHistsAlgo () : + IParticleHistsAlgo("MuonHistsAlgo") + { } + + EL::StatusCode MuonHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("MuonHistsAlgo").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonHistsAlgo::AddHists( std::string name ) { + return IParticleHistsAlgo::AddHists(name); + } + + EL::StatusCode MuonHistsAlgo :: execute () { + return IParticleHistsAlgo::execute(); + } diff --git a/_sources/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.rst.txt new file mode 100644 index 0000000000..cc12373794 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.rst.txt @@ -0,0 +1,376 @@ + +.. _program_listing_file_Root_MuonInFatJetCorrector.cxx: + +Program Listing for File MuonInFatJetCorrector.cxx +================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonInFatJetCorrector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + + #include + #include + #include + + #include "xAODJet/JetContainer.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODTruth/TruthParticleContainer.h" + + #include "MuonSelectorTools/MuonSelectionTool.h" + + #include "xAODAnaHelpers/MuonInFatJetCorrector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + + // Needed to distribute the algorithm to the workers + ClassImp(MuonInFatJetCorrector) + + MuonInFatJetCorrector :: MuonInFatJetCorrector() : + Algorithm("MuonInFatJetCorrector") + { + } + + EL::StatusCode MuonInFatJetCorrector :: setupJob(EL::Job& job) + { + ANA_MSG_DEBUG("Calling setupJob"); + job.useXAOD(); + xAOD::Init("MuonInFatJetCorrector").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: histInitialize() + { + ANA_MSG_DEBUG("Calling histInitialize"); + ANA_CHECK(xAH::Algorithm::algInitialize()); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: fileExecute() + { + ANA_MSG_DEBUG("Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: changeInput(bool /*firstFile*/) + { + ANA_MSG_DEBUG("Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: initialize() + { + ANA_MSG_DEBUG("Calling initialize"); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // + // Automatically determine calibrated mass decorators, if asked + m_calibratedMassDecorator=(isMC())?m_calibratedMassDecoratorFullSim:m_calibratedMassDecoratorData; + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: execute() + { + // + // Do muon matching + ANA_CHECK(matchTrackJetsToMuons()); + + // + // Loop over large-R jets (all systematics) and calculate correction + std::vector* systNames(nullptr); + if ( !m_inputAlgo.empty() ) + { + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) ); + } + else + { + systNames=new std::vector({""}); + } + + // Decorator holding muon in fatjet corrected fatjets. + static SG::AuxElement::Decorator dec_correctedFatJets_tlv("correctedFatJets_tlv"); + for(const std::string& systName : *systNames) + { + // Retrieve calibrated fatjets. + const xAOD::JetContainer *fatJets(nullptr); + ANA_CHECK(HelperFunctions::retrieve(fatJets, m_fatJetContainerName+systName, m_event, m_store, msg())); + + // Loop over fatjets + for(const xAOD::Jet *fatJet : *fatJets) + { + // Get corrected fatjet. + TLorentzVector correctedVector = getHbbCorrectedVector(*fatJet); + + dec_correctedFatJets_tlv(*fatJet) = correctedVector; + } + } + + // Clean up systematics list if none exists + if(m_inputAlgo.empty()) + delete systNames; + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: postExecute () + { + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode MuonInFatJetCorrector :: finalize() + { + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonInFatJetCorrector :: histFinalize () + { + + ANA_MSG_DEBUG( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + + TLorentzVector MuonInFatJetCorrector::getHbbCorrectedVector(const xAOD::Jet& jet) + { + /* Steps: + 1. Get all track jets asssociated with the ungroomed jet + 2. Match muons to these b-tagged track-jets + - if more than 1 muon matches a track jet, only use the muon closest in DR + 3. Correct the fat-jet mass by putting the matched muon back + */ + + // + // Step 1 + std::vector associated_trackJets; + + // get the element links to the parent, ungroomed jet + static const SG::AuxElement::ConstAccessor> acc_Parent("Parent"); + if (!acc_Parent.isAvailable(jet)) + { + ANA_MSG_FATAL("Parent (ungroomed) jet collection does not exist."); + return TLorentzVector(); + } + ElementLink parentEL = acc_Parent(jet); + if (!parentEL.isValid()) + { + ANA_MSG_FATAL("Parent link is not valid."); + return TLorentzVector(); + } + + // access the track jets + const xAOD::Jet* parentJet = *parentEL; + if (!parentJet->getAssociatedObjects(m_trackJetLinkName, associated_trackJets)) + { + ANA_MSG_FATAL("No associated track jets found on parent jet."); + return TLorentzVector(); + } + + // get trackjets of interest + std::vector associated_trackJets_filtered; + for (const xAOD::Jet* trackJet : associated_trackJets) + { + if (trackJet->pt() < m_trackJetPtMin) continue; + if (fabs(trackJet->eta()) > m_trackJetEtaMax) continue; + if (trackJet->numConstituents() < m_trackJetNConst) continue; + + associated_trackJets_filtered.push_back(trackJet); + } + + std::sort(associated_trackJets_filtered.begin(), associated_trackJets_filtered.end(), [](const xAOD::Jet* lhs, const xAOD::Jet* rhs) -> bool { return (lhs->pt() > rhs->pt()); }); + + // + // Step 2 + std::vector matched_muons; + for (const xAOD::Jet* trackJet : associated_trackJets_filtered) + { + const xAOD::Muon* closest_muon=nullptr; + float maxDR=m_muonDrMax; + + // get muons from jet decoration + static const SG::AuxElement::Accessor>> acc_MuonsInTrackJet("MuonsInTrackJet"); + + if(!acc_MuonsInTrackJet.isAvailable(*trackJet)) + { + ANA_MSG_FATAL("No muons associated to track jet."); + return TLorentzVector(); + } + + std::vector> associated_muons=acc_MuonsInTrackJet(*trackJet); + for (const ElementLink& muonEL : associated_muons) + { + const xAOD::Muon* muon=(*muonEL); + + // muon quality selection + if (muon->pt() < m_muonPtMin) continue; + if (muon->quality() > xAOD::Muon::Medium) continue; + if (fabs(muon->eta()) > m_muonEtaMax) continue; + // find clostest muon + float DR = trackJet->p4().DeltaR(muon->p4()); + float cutDR=std::min(0.4,0.04 + 10000.0/muon->pt()); + if (DR > cutDR) continue; + if (DR > maxDR) continue; + maxDR = DR; + closest_muon = muon; + } + + // check if the closest muon was already selected + if(std::find(matched_muons.begin(),matched_muons.end(),closest_muon)!=matched_muons.end()) + { + closest_muon = nullptr; + ANA_MSG_DEBUG("Muon duplicate found! Skipping."); + break; + } + + if (closest_muon) + matched_muons.push_back(closest_muon); + } + + // + // Step 3 + xAOD::JetFourMom_t corrected_jet_p4 = getMuonCorrectedJetFourMom(jet, matched_muons, Scheme::Combined); + TLorentzVector corrected_jet(corrected_jet_p4.x(), corrected_jet_p4.y(), corrected_jet_p4.z(), corrected_jet_p4.t()); + + return corrected_jet; + } + + EL::StatusCode MuonInFatJetCorrector::matchTrackJetsToMuons() const + { + // retrieve muons from StoreGate + const xAOD::MuonContainer *muons(nullptr); + ANA_CHECK(HelperFunctions::retrieve(muons, m_muonContainerName, m_event, m_store, msg())); + + // retrieve track jets from StoreGate + const xAOD::JetContainer *trackJets(nullptr); + ANA_CHECK(HelperFunctions::retrieve(trackJets, m_trackJetContainerName, m_event, m_store, msg())); + + // decorate all track jets by default, no selection, no muon overlap removal (will be done later) + static SG::AuxElement::Decorator>> dec_MuonsInTrackJet("MuonsInTrackJet"); + for (const xAOD::Jet* trackJet : *trackJets) + { + std::vector> muons_in_jet; + uint32_t idx=0; + for (const xAOD::Muon* muon : *muons) + { + float DR=trackJet->p4().DeltaR(muon->p4()); + if (DR < m_muonDrMax) + { + ElementLink muonEL(*muons, idx); + muons_in_jet.push_back(muonEL); + } + ++idx; + } + + dec_MuonsInTrackJet(*trackJet) = muons_in_jet; + + ANA_MSG_DEBUG("Found " << muons_in_jet.size() << " muons within R < " << m_muonDrMax << " of associated track jet."); + } + + return StatusCode::SUCCESS; + } + + const xAOD::JetFourMom_t MuonInFatJetCorrector::getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector muons, Scheme scheme, bool useJMSScale) const + { + xAOD::JetFourMom_t JetCorr_tlv = jet.jetP4(); + if (muons.size() == 0) + return JetCorr_tlv; + + ANA_MSG_DEBUG("Derive muon-in-jet correction: nMuons = " << (int) muons.size() << "\tMuonCorrectionScheme = " << scheme << "\tuseJMSScale = " << useJMSScale); + switch(scheme) + { + case Scheme::Calorimeter: + { + // muon-in-jet correction for jets calibrated using calorimeter mass + xAOD::JetFourMom_t CaloJet_tlv = jet.jetP4(); + if (useJMSScale) CaloJet_tlv = jet.jetP4(m_calibratedMassDecorator+"Calo"); + for(const xAOD::Muon* muon : muons) + { + // get energy loss of muon in the calorimeter + float eLoss=0.0; + muon->parameter(eLoss, xAOD::Muon::EnergyLoss); + ANA_MSG_DEBUG("Energy loss in calorimter = " << eLoss); + // use muon tlv to get x/y/z compontent of energy loss + TLorentzVector muon_tlv = muon->p4(); + double eLossX = eLoss * sin(muon_tlv.Theta()) * cos(muon_tlv.Phi()); + double eLossY = eLoss * sin(muon_tlv.Theta()) * sin(muon_tlv.Phi()); + double eLossZ = eLoss * cos(muon_tlv.Theta()); + TLorentzVector mLoss(eLossX, eLossY, eLossZ, eLoss); + TLorentzVector muonCorr_tlv = muon_tlv - mLoss; + // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV + CaloJet_tlv += xAOD::JetFourMom_t(muonCorr_tlv.Pt(), muonCorr_tlv.Eta(), muonCorr_tlv.Phi(), muonCorr_tlv.M()); + } + JetCorr_tlv = CaloJet_tlv; + break; + } + case Scheme::TrackAssisted: + { + // muon-in-jet correction for jets calibrated using track-assisted mass + xAOD::JetFourMom_t TAJet_tlv = jet.jetP4(); + if (useJMSScale) TAJet_tlv = jet.jetP4(m_calibratedMassDecorator+"TA"); + xAOD::JetFourMom_t CaloJet_tlv = jet.jetP4(m_calibratedMassDecorator+"Calo"); + xAOD::JetFourMom_t CaloJetCorr_tlv = getMuonCorrectedJetFourMom(jet, muons, Scheme::Calorimeter, true); + float TAJetCorr_m = TAJet_tlv.M() / CaloJet_tlv.Pt() * CaloJetCorr_tlv.Pt() ; + float TAJetCorr_pt = sqrt((CaloJetCorr_tlv.E() * CaloJetCorr_tlv.E()) - (TAJetCorr_m * TAJetCorr_m)) / cosh(CaloJetCorr_tlv.Eta()); + // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV + JetCorr_tlv = xAOD::JetFourMom_t(TAJetCorr_pt, CaloJetCorr_tlv.Eta(), CaloJetCorr_tlv.Phi(), TAJetCorr_m); + break; + } + case Scheme::Combined: + { + // muon-in-jet correction for jets calibrated using combined mass + xAOD::JetFourMom_t TAJet_tlv = jet.jetP4(m_calibratedMassDecorator+"TA"); + xAOD::JetFourMom_t TAJetCorr_tlv = getMuonCorrectedJetFourMom(jet, muons, Scheme::TrackAssisted, true); + xAOD::JetFourMom_t CaloJet_tlv = jet.jetP4(m_calibratedMassDecorator+"Calo"); + xAOD::JetFourMom_t CaloJetCorr_tlv = getMuonCorrectedJetFourMom(jet, muons, Scheme::Calorimeter , true); + xAOD::JetFourMom_t CombJet_tlv = jet.jetP4(); + float CaloWeight = (CombJet_tlv.M() - TAJet_tlv.M()) / (CaloJet_tlv.M() - TAJet_tlv.M()); + float TAWeight = (CaloJet_tlv.M() - CombJet_tlv.M()) / (CaloJet_tlv.M() - TAJet_tlv.M()); + ANA_MSG_DEBUG("CaloWeight = " << CaloWeight << "\tTAWeight = " << TAWeight); + float CombJetCorr_m = CaloWeight * CaloJetCorr_tlv.M() + TAWeight * TAJetCorr_tlv.M(); + float CombJetCorr_pt = sqrt((CaloJetCorr_tlv.E() * CaloJetCorr_tlv.E()) - (CombJetCorr_m * CombJetCorr_m)) / cosh(CaloJetCorr_tlv.Eta()); + // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV + JetCorr_tlv = xAOD::JetFourMom_t(CombJetCorr_pt, CaloJetCorr_tlv.Eta(), CaloJetCorr_tlv.Phi(), CombJetCorr_m); + break; + } + case SimpleMuon: + { + // unknown mass calibration; just add muon 4-momentum + for(const xAOD::Muon* muon : muons) + { + JetCorr_tlv += xAOD::JetFourMom_t(muon->pt(), muon->eta(), muon->phi(), muon->m()); + } + break; + } + default: + { + ANA_MSG_FATAL("Unknown muon correction scheme."); + } + } + + ANA_MSG_DEBUG("Before muon-in-jet: pt = " << jet.pt() << "\t eta = " << jet.eta() + << "\tphi = " << jet.phi() << "\tm = " << jet.m()); + ANA_MSG_DEBUG("After muon-in-jet: pt = " << JetCorr_tlv.pt() << "\teta = " << JetCorr_tlv.eta() + << "\tphi = " << JetCorr_tlv.phi() << "\tm = " << JetCorr_tlv.M()); + for(const xAOD::Muon* muon : muons) + { + ANA_MSG_DEBUG("muons: pt = " << muon->pt() << "\teta = " << muon->eta() + << "\tphi = " << muon->phi() << "\tm = " << muon->m()); + } + + return JetCorr_tlv; + } diff --git a/_sources/api/program_listing_file_Root_MuonSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_MuonSelector.cxx.rst.txt new file mode 100644 index 0000000000..8467914383 --- /dev/null +++ b/_sources/api/program_listing_file_Root_MuonSelector.cxx.rst.txt @@ -0,0 +1,1002 @@ + +.. _program_listing_file_Root_MuonSelector.cxx: + +Program Listing for File MuonSelector.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/MuonSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODCore/ShallowCopy.h" + #include "AthContainers/ConstDataVector.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODTracking/VertexContainer.h" + #include "xAODTracking/TrackParticlexAODHelpers.h" + + // package include(s): + #include "xAODAnaHelpers/MuonSelector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + // #include "PATCore/TAccept.h" + #include "TrigConfxAOD/xAODConfigTool.h" + // tool includes + #include "IsolationSelection/IsolationSelectionTool.h" + #include "MuonSelectorTools/MuonSelectionTool.h" + #include "TriggerMatchingTool/MatchingTool.h" + #include "TriggerMatchingTool/MatchFromCompositeTool.h" + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(MuonSelector) + + MuonSelector :: MuonSelector () : + Algorithm("MuonSelector") + { + } + + MuonSelector::~MuonSelector() {} + + EL::StatusCode MuonSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "MuonSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + if ( this->numInstances() > 1 ) { + m_isUsedBefore = true; + ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_INFO( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing MuonSelector Interface... "); + + // Let's see if the algorithm has been already used before: + // if yes, will write object cutflow in a different histogram! + // + // This is the case when the selector algorithm is used for + // preselecting objects, and then again for the final selection + // + ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className ); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_mu_cutflowHist_1 = (TH1D*)file->Get("cutflow_muons_1"); + + m_mu_cutflow_all = m_mu_cutflowHist_1->GetXaxis()->FindBin("all"); + m_mu_cutflow_eta_and_quaility_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("eta_and_quality_cut"); + m_mu_cutflow_ptmax_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut"); + m_mu_cutflow_ptmin_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut"); + m_mu_cutflow_ptnan_check = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptNaN_check"); + m_mu_cutflow_type_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("type_cut"); + m_mu_cutflow_z0sintheta_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("z0sintheta_cut"); + m_mu_cutflow_d0_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("d0_cut"); + m_mu_cutflow_d0sig_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("d0sig_cut"); + m_mu_cutflow_iso_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("iso_cut"); + if( m_removeCosmicMuon ) + m_mu_cutflow_cosmic_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("cosmic_cut"); + + + if ( m_isUsedBefore ) { + m_mu_cutflowHist_2 = (TH1D*)file->Get("cutflow_muons_2"); + + m_mu_cutflow_all = m_mu_cutflowHist_2->GetXaxis()->FindBin("all"); + m_mu_cutflow_eta_and_quaility_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("eta_and_quality_cut"); + m_mu_cutflow_ptmax_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptmax_cut"); + m_mu_cutflow_ptmin_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptmin_cut"); + m_mu_cutflow_ptnan_check = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptNaN_check"); + m_mu_cutflow_type_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("type_cut"); + m_mu_cutflow_z0sintheta_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("z0sintheta_cut"); + m_mu_cutflow_d0_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("d0_cut"); + m_mu_cutflow_d0sig_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("d0sig_cut"); + m_mu_cutflow_iso_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("iso_cut"); + if( m_removeCosmicMuon ) + m_mu_cutflow_cosmic_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("cosmic_cut"); + } + + }// if m_useCutFlow + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + HelperClasses::EnumParser muQualityParser; + m_muonQuality = static_cast( muQualityParser.parseEnum(m_muonQualityStr) ); + if (m_muonQualityStr=="HighPt") m_muonQuality=4; + else if (m_muonQualityStr=="LowPt") m_muonQuality=5; + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + + std::set muonQualitySet; + muonQualitySet.insert(0); + muonQualitySet.insert(1); + muonQualitySet.insert(2); + muonQualitySet.insert(3); + muonQualitySet.insert(4); + muonQualitySet.insert(5); + if ( muonQualitySet.find(m_muonQuality) == muonQualitySet.end() ) { + ANA_MSG_ERROR( "Unknown muon quality requested: " << m_muonQuality); + return EL::StatusCode::FAILURE; + } + + // Parse input isolation WP list, split by comma, and put into a vector for later use + // Make sure it's not empty! + if(m_doIsolation){ + if ( m_IsoWPList.empty() ) { + ANA_MSG_ERROR("Empty isolation WP list"); + } + std::string token; + std::istringstream ss(m_IsoWPList); + while ( std::getline(ss, token, ',') ) { + m_IsoKeys.push_back(token); + } + } + + if ( m_inContainerName.empty() ){ + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + // ******************************** + // + // Initialise CP::MuonSelectionTool + // + // ******************************** + // + // Set eta and quality requirements in order to accept the muon - ID tracks required by default + // + + ANA_CHECK( m_muonSelectionTool_handle.setProperty( "MaxEta", static_cast(m_eta_max) )); + ANA_CHECK( m_muonSelectionTool_handle.setProperty( "MuQuality", m_muonQuality )); + ANA_CHECK( m_muonSelectionTool_handle.setProperty( "IsRun3Geo", m_isRun3Geo )); + ANA_CHECK( m_muonSelectionTool_handle.setProperty( "OutputLevel", msg().level() )); + if (m_doLRT) { + ANA_CHECK( m_muonSelectionTool_handle.setProperty( "UseLRT", true )); + } + ANA_CHECK( m_muonSelectionTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_muonSelectionTool_handle); + + if(m_doIsolation){ + // ************************************* + // + // Initialise CP::IsolationSelectionTool + // + // ************************************* + + // Do this only for the first WP in the list + ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" ); + ANA_CHECK( m_isolationSelectionTool_handle.setProperty("MuonWP", (m_IsoKeys.at(0)).c_str())); + ANA_CHECK( m_isolationSelectionTool_handle.setProperty("OutputLevel", msg().level() )); + if (m_isoDecSuffix!="") ANA_CHECK( m_isolationSelectionTool_handle.setProperty("IsoDecSuffix", m_isoDecSuffix) ); + ANA_CHECK( m_isolationSelectionTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_isolationSelectionTool_handle); + m_isolationSelectionTool = dynamic_cast(m_isolationSelectionTool_handle.get() ); // see header file for why + + // Add the remaining input WPs to the tool + // (start from 2nd element) + // + for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) { + + ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" ); + + if ( (*WP_itr).find("UserDefined") != std::string::npos ) { + + HelperClasses::EnumParser isoParser; + + std::vector< std::pair > myCuts; + myCuts.push_back(std::make_pair(isoParser.parseEnum(m_TrackBasedIsoType), m_TrackIsoEff.c_str() )); + myCuts.push_back(std::make_pair(isoParser.parseEnum(m_CaloBasedIsoType) , m_CaloIsoEff.c_str() )); + + CP::IsolationSelectionTool::IsoWPType iso_type(CP::IsolationSelectionTool::Efficiency); + if ( (*WP_itr).find("Cut") != std::string::npos ) { iso_type = CP::IsolationSelectionTool::Cut; } + + ANA_CHECK( m_isolationSelectionTool->addUserDefinedWP((*WP_itr).c_str(), xAOD::Type::Muon, myCuts, "", iso_type)); + + } else { + + ANA_CHECK( m_isolationSelectionTool->addMuonWP( (*WP_itr).c_str() )); + + } + } + } + + // ************************************** + // + // Initialise Trig::MatchingTool + // + // ************************************** + if( !( m_singleMuTrigChains.empty() && m_diMuTrigChains.empty() ) ) { + + // grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + // in AB we need to explicitly retrieve this tool, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/R22TriggerAnalysis + ANA_CHECK( m_scoreTool.retrieve()); + + // Run3 got a new trigger navigation + if (m_useRun3navigation) { + m_trigMuonMatchTool_handle = asg::AnaToolHandle("Trig::R3MatchingTool/TrigR3MatchingTool"); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigMuonMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle); + } + // otherwise we have to configure the Run2-style navigation + else { + if( !isPHYS() ) { + m_trigMuonMatchTool_handle = asg::AnaToolHandle("Trig::MatchingTool/MatchingTool"); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigMuonMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle); + } + else { // For DAOD_PHYS samples + m_trigMuonMatchTool_handle = asg::AnaToolHandle("Trig::MatchFromCompositeTool/MatchFromCompositeTool"); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "OutputLevel", msg().level() )); + if (!m_trigInputPrefix.empty()){ + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "InputPrefix", m_trigInputPrefix )); + ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "RemapBrokenLinks", true) ); + } + ANA_CHECK( m_trigMuonMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle); + } + } + } else { + + m_doTrigMatch = false; + + ANA_MSG_WARNING("***********************************************************"); + ANA_MSG_WARNING( "Will not perform any muon trigger matching at this stage b/c :"); + ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore"); + ANA_MSG_WARNING("\t AND/OR"); + ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty"); + ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!"); + ANA_MSG_WARNING("***********************************************************"); + } + + ANA_MSG_INFO( "MuonSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode MuonSelector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Muon Selection..." ); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + // + float mcEvtWeight(1.0); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + + m_numEvent++; + + // QUESTION: why this must be done in execute(), and does not work in initialize()? + // + if ( m_numEvent == 1 && m_trigMuonMatchTool_handle.isInitialized() ) { + + // parse input muon trigger chain list, split by comma and fill vector + // + std::string singlemu_trig; + std::istringstream ss_singlemu_trig(m_singleMuTrigChains); + + while ( std::getline(ss_singlemu_trig, singlemu_trig, ',') ) { + m_singleMuTrigChainsList.push_back(singlemu_trig); + } + + std::string dimu_trig; + std::istringstream ss_dimu_trig(m_diMuTrigChains); + + while ( std::getline(ss_dimu_trig, dimu_trig, ',') ) { + m_diMuTrigChainsList.push_back(dimu_trig); + } + + ANA_MSG_INFO( "Input single muon trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_singleMuTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + ANA_MSG_INFO( "Input di-muon trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_diMuTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + } + + // did any collection pass the cuts? + // + bool eventPass(false); + bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal + const xAOD::MuonContainer* inMuons(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_inputAlgoSystNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName, m_event, m_store, msg()) ); + + // create output container (if requested) + // + ConstDataVector* selectedMuons(nullptr); + if ( m_createSelectedContainer ) { selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected muons, and return if event passes object selection + // + eventPass = executeSelection( inMuons, mcEvtWeight, countPass, selectedMuons ); + + if ( m_createSelectedContainer ) { + if ( eventPass ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedMuons, m_outContainerName )); + } else { + // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it! + // + delete selectedMuons; selectedMuons = nullptr; + } + } + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) ); + + // prepare a vector of the names of CDV containers for usage by downstream algos + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + ANA_MSG_DEBUG( " input list of syst size: " << static_cast(systNames->size()) ); + + // loop over systematic sets + // + bool eventPassThisSyst(false); + for ( auto systName : *systNames ) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName + systName, m_event, m_store, msg()) ); + + // create output container (if requested) - one for each systematic + // + ConstDataVector* selectedMuons(nullptr); + if ( m_createSelectedContainer ) { selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected muons, and return if event passes object selection + // + eventPassThisSyst = executeSelection( inMuons, mcEvtWeight, countPass, selectedMuons ); + + if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal) + + if ( eventPassThisSyst ) { + // save the string of syst set under question if event is passing the selection + // + vecOutContainerNames->push_back( systName ); + } + + // if for at least one syst set the event passes selection, this will remain true! + // + eventPass = ( eventPass || eventPassThisSyst ); + + ANA_MSG_DEBUG( " syst name: " << systName << " output container name: " << m_outContainerName+systName ); + + if ( m_createSelectedContainer ) { + if ( eventPassThisSyst ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedMuons, m_outContainerName+systName )); + } else { + // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it! + delete selectedMuons; selectedMuons = nullptr; + } + } + + } // close loop over syst sets + + ANA_MSG_DEBUG(" output list of syst size: " << static_cast(vecOutContainerNames->size()) ); + + // record in TStore the list of systematics names that should be considered down stream + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + } + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if( !eventPass ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + + ANA_MSG_DEBUG( "Left Muon Selection..." ); + return EL::StatusCode::SUCCESS; + + } + + bool MuonSelector :: executeSelection ( const xAOD::MuonContainer* inMuons, float mcEvtWeight, bool countPass, + ConstDataVector* selectedMuons ) + { + + ANA_MSG_DEBUG( "In executeSelection..." ); + const xAOD::VertexContainer* vertices(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg()); + + int nPass(0); int nObj(0); + static SG::AuxElement::Decorator< char > passSelDecor( "passSel" ); + + for ( auto mu_itr : *inMuons ) { // duplicated of basic loop + + // if only looking at a subset of muons make sure all are decorated + // + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *mu_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + bool passSel = this->passCuts( mu_itr, pvx ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *mu_itr ) = passSel; + } + + // Remove events with isBadMuon (poor q/p) + if( m_removeEventBadMuon && passSel ){ + if( m_muonSelectionTool_handle->isBadMuon( *mu_itr ) ){ + ANA_MSG_DEBUG("Rejecting event with bad muon (pt = "<pt()<<")"); + return false; + } + } + + if ( passSel ) { + nPass++; + if ( m_createSelectedContainer ) { + selectedMuons->push_back( mu_itr ); + } + } + } + + // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal) + // + if ( countPass ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + ANA_MSG_DEBUG( "Initial muons: " << nObj << " - Selected muons: " << nPass ); + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + // + if ( m_pass_min > 0 && nPass < m_pass_min ) { + ANA_MSG_DEBUG( "Reject event: nSelectedMuons ("<= 0 && nPass > m_pass_max ) { + ANA_MSG_DEBUG( "Reject event: nSelectedMuons ("< nPassMax ("<size(); + + static SG::AuxElement::Decorator< std::map > isTrigMatchedMapMuDecor( "isTrigMatchedMapMu" ); + + if ( nSelectedMuons > 0 ) { + + ANA_MSG_DEBUG( "Doing single muon trigger matching..."); + + for ( auto const &chain : m_singleMuTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + for ( auto const muon : *selectedMuons ) { + + // For each muon, decorate w/ a map with the 'isMatched' info associated + // to each trigger chain in the input list. + // If decoration map doesn't exist for this muon yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !isTrigMatchedMapMuDecor.isAvailable( *muon ) ) { + isTrigMatchedMapMuDecor( *muon ) = std::map(); + } + char matched = false; + if (!m_merged_muons){ + matched = ( m_trigMuonMatchTool_handle->match( *muon, chain, m_minDeltaR ) ); + } else { + static const SG::AuxElement::ConstAccessor> originalMuonLink("originalMuonLink"); + auto originalMuon = const_cast(*originalMuonLink( *muon )); + matched = ( m_trigMuonMatchTool_handle->match(*originalMuon, chain, m_minDeltaR) ); + } + + ANA_MSG_DEBUG( "\t\t is muon trigger matched? " << matched); + + ( isTrigMatchedMapMuDecor( *muon ) )[chain] = matched; + } + } + + } + + // If checking dilepton trigger, form lepton pairs and test matching for each one. + // Save a: + // + // multimap< chain, pair< pair, ismatched > > + // + // as *event* decoration to store which + // pairs are matched (to a given chain) and which aren't. + // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events. + // + // By retrieving this map later on, user can decide what to do with the event + // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain) + + if ( nSelectedMuons > 1 && !m_diMuTrigChains.empty() ) { + + ANA_MSG_DEBUG( "Doing di-muon trigger matching..."); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + typedef std::pair< std::pair, char> dimuon_trigmatch_pair; + typedef std::multimap< std::string, dimuon_trigmatch_pair > dimuon_trigmatch_pair_map; + static SG::AuxElement::Decorator< dimuon_trigmatch_pair_map > diMuonTrigMatchPairMapDecor( "diMuonTrigMatchPairMap" ); + + for ( auto const &chain : m_diMuTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + // If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !diMuonTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) { + diMuonTrigMatchPairMapDecor( *eventInfo ) = dimuon_trigmatch_pair_map(); + } + + std::vector myMuons; + + for ( unsigned int imu = 0; imu < selectedMuons->size()-1; ++imu ) { + + for ( unsigned int jmu = imu+1; jmu < selectedMuons->size(); ++jmu ) { + + // test a new pair + // + myMuons.clear(); + myMuons.push_back( selectedMuons->at(imu) ); + myMuons.push_back( selectedMuons->at(jmu) ); + + // check whether the pair is matched + // + char matched = m_trigMuonMatchTool_handle->match( myMuons, chain, m_minDeltaR ); + + ANA_MSG_DEBUG( "\t\t is the muon pair ("< chain_idxs = std::make_pair(imu,jmu); + dimuon_trigmatch_pair chain_decision = std::make_pair(chain_idxs,matched); + diMuonTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dimuon_trigmatch_pair >(chain,chain_decision) ); + + } + } + } //for m_diMuTrigChainsList + } //if nSelectedMuons > 1 && !m_diMuTrigChains.empty() + } //if m_doTrigMatch && selectedMuons + + ANA_MSG_DEBUG( "Left executeSelection..." ); + return true; + } + + + EL::StatusCode MuonSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( m_useCutFlow ) { + ANA_MSG_INFO( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode MuonSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + int MuonSelector :: passCuts( const xAOD::Muon* muon, const xAOD::Vertex *primaryVertex ) { + + ANA_MSG_DEBUG( "In passCuts..." ); + // fill cutflow bin 'all' before any cut + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_all, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_all, 1 ); } + ANA_MSG_DEBUG( "In passCuts2..." ); + // ********************************************************************************************************************************************************************* + // + // MuonSelectorTool cut: quality & |eta| acceptance cut + // + + // quality decorators + static SG::AuxElement::Decorator< char > isVeryLooseQDecor("isVeryLooseQ"); + static SG::AuxElement::Decorator< char > isLooseQDecor("isLooseQ"); + static SG::AuxElement::Decorator< char > isMediumQDecor("isMediumQ"); + static SG::AuxElement::Decorator< char > isTightQDecor("isTightQ"); + + ANA_MSG_DEBUG( "Got the decors" ); + int this_quality = static_cast( m_muonSelectionTool_handle->getQuality( *muon ) ); + ANA_MSG_DEBUG( "Got quality" ); + + isVeryLooseQDecor( *muon ) = ( this_quality <= static_cast(xAOD::Muon::VeryLoose) ) ? 1 : 0; + isLooseQDecor( *muon ) = ( this_quality <= static_cast(xAOD::Muon::Loose) ) ? 1 : 0; + isMediumQDecor( *muon ) = ( this_quality <= static_cast(xAOD::Muon::Medium) ) ? 1 : 0; + isTightQDecor( *muon ) = ( this_quality <= static_cast(xAOD::Muon::Tight) ) ? 1 : 0; + + bool acceptMuon = (bool)m_muonSelectionTool_handle->accept( *muon ); + + if ( m_doLRT ) { + static SG::AuxElement::Decorator< char > passIDcuts("passIDcuts"); + } + + ANA_MSG_DEBUG( "Doing muon quality" ); + if ( !acceptMuon ) { + ANA_MSG_DEBUG( "Muon failed requirements of MuonSelectionTool."); + return 0; + } + + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_eta_and_quaility_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_eta_and_quaility_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // pT max cut + // + ANA_MSG_DEBUG( "Doing pt cuts" ); + if ( m_pT_max != 1e8 ) { + if ( muon->pt() > m_pT_max ) { + ANA_MSG_DEBUG( "Muon failed pT max cut."); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptmax_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptmax_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // pT min cut + // + if ( m_pT_min != 1e8 ) { + if ( muon->pt() < m_pT_min ) { + ANA_MSG_DEBUG( "Muon failed pT min cut."); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptmin_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptmin_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // pT NaN check + // + if ( m_pT_NaNcheck ) { + if ( muon->pt() != muon->pt() ) { + ANA_MSG_DEBUG( "Muon failed pT NaN check."); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptnan_check, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptnan_check, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // muon type cut + // + //HelperClasses::EnumParser muTypeParser; + //if ( !m_muonType.empty() ) { + // if ( muon->muonType() != static_cast(muTypeParser.parseEnum(m_muonType))) { + // ANA_MSG_DEBUG( "Muon type: %d - required: %s . Failed", muon->muonType(), m_muonType.c_str()); + // return 0; + // } + //} + //if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_type_cut, 1 ); + //if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_type_cut, 1 ); } + + // ********************************************************************************************************************************************************************* + // + // impact parameter cuts + // + + // Put tracking cuts here, after pt cuts, to be safe with derivations. + + // The following returns a pointer (which should not usually be NULL, but might be if the muon has been stripped of information) to the + // primary TrackParticle corresponding to the MuonType of this muon. + // This is determined in the following order: + // 1. CombinedTrackParticle + // 2. InnerDetectorTrackParticle + // 3. (Extrapolated)MuonSpectrometerTrackParticle + // + const xAOD::TrackParticle* tp = muon->primaryTrackParticle(); + + if ( !tp ) { + ANA_MSG_DEBUG("Muon has no TrackParticle. Won't be selected."); + return 0; + } + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + double d0_significance = xAOD::TrackingHelpers::d0significance( tp, eventInfo->beamPosSigmaX(), eventInfo->beamPosSigmaY(), eventInfo->beamPosSigmaXY() ); + + // Take distance between z0 and zPV ( after referring the PV z coordinate to the beamspot position, given by vz() ), multiplied by sin(theta) + // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/InDetTrackingDC14 for further reference + // + float z0sintheta = 1e8; + if (primaryVertex) z0sintheta = ( tp->z0() + tp->vz() - primaryVertex->z() ) * sin( tp->theta() ); + + // z0*sin(theta) cut + // + if ( !( fabs(z0sintheta) < m_z0sintheta_max ) ) { + ANA_MSG_DEBUG( "Muon failed z0*sin(theta) cut."); + return 0; + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_z0sintheta_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_z0sintheta_cut, 1 ); } + + // decorate muon w/ z0*sin(theta) info + static SG::AuxElement::Decorator< float > z0sinthetaDecor("z0sintheta"); + z0sinthetaDecor( *muon ) = z0sintheta; + + // d0 cut + // + if ( !( tp->d0() < m_d0_max ) ) { + ANA_MSG_DEBUG( "Muon failed d0 cut."); + return 0; + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_d0_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_d0_cut, 1 ); } + + // d0sig cut + // + if ( !( fabs(d0_significance) < m_d0sig_max ) ) { + ANA_MSG_DEBUG( "Muon failed d0 significance cut."); + return 0; + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_d0sig_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_d0sig_cut, 1 ); } + + // decorate muon w/ d0sig info + static SG::AuxElement::Decorator< float > d0SigDecor("d0sig"); + d0SigDecor( *muon ) = static_cast(d0_significance); + + if(m_doIsolation){ + // ********************************************************************************************************************************************************************* + // + // isolation cut + // + + // Get the "list" of input WPs with the accept() decision from the tool + // + auto accept_list = m_isolationSelectionTool_handle->accept( *muon ); + + // Decorate w/ decision for all input WPs + // + std::string base_decor("isIsolated"); + for ( auto WP_itr : m_IsoKeys ) { + + std::string decorWP = base_decor + "_" + WP_itr; + + ANA_MSG_DEBUG( "Decorate muon with " << decorWP << " - accept() ? " << accept_list.getCutResult( WP_itr.c_str()) ); + muon->auxdecor(decorWP) = static_cast( accept_list.getCutResult( WP_itr.c_str() ) ); + + } + + // Apply the cut if needed + // + if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) { + ANA_MSG_DEBUG( "Muon failed isolation cut " << m_MinIsoWPCut ); + return 0; + } + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_iso_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_iso_cut, 1 ); } + + if( m_removeCosmicMuon ){ + + double muon_d0 = tp->d0(); + double pv_z = primaryVertex ? primaryVertex->z() : 0; + double muon_z0_exPV = tp->z0() + tp->vz() - pv_z; + + if( fabs(muon_z0_exPV) >= 1.0 || fabs(muon_d0) >= 0.2 ){ + ANA_MSG_DEBUG("Muon failed cosmic cut" ); + return 0; + } + if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_cosmic_cut, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_cosmic_cut, 1 ); } + + } + + + ANA_MSG_DEBUG( "Leave passCuts... pass" ); + return 1; + } diff --git a/_sources/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.rst.txt b/_sources/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.rst.txt new file mode 100644 index 0000000000..0dab411a5e --- /dev/null +++ b/_sources/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.rst.txt @@ -0,0 +1,176 @@ + +.. _program_listing_file_Root_OnlineBeamSpotTool.cxx: + +Program Listing for File OnlineBeamSpotTool.cxx +=============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/OnlineBeamSpotTool.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include "PathResolver/PathResolver.h" + #include + + // ROOT include(s): + #include "TSystem.h" + #include "TFile.h" + #include "TTree.h" + + using namespace xAH; + + OnlineBeamSpotTool::OnlineBeamSpotTool() : + m_cachedRunNum(-1), + m_cachedLB(-1), + m_cachedRunInfo(nullptr), + m_cachedLBData(nullptr), + m_mcLBData(nullptr) + { + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.A.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.B.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.C.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.D.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.E.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.F.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.G.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.H.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.I.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.K.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.L.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.A.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.B.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.C.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.D.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.E.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.F.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.G.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.H.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.I.root"); + readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.K.root"); + + m_mcLBData = new LBData(0,999999,0,0,0); + } + + OnlineBeamSpotTool::~OnlineBeamSpotTool() + { + //std::cout << "In ~OnlineBeamSpotTool" << std::endl; + } + + + void OnlineBeamSpotTool::setRunInfo(int runNumber){ + RunToLBDataMapItr it = m_runList.find(runNumber); + + if(it != m_runList.end()){ + m_cachedRunInfo = &(it->second); + } else { + m_cachedRunInfo = nullptr; + } + m_cachedRunNum = runNumber; + return; + } + + const OnlineBeamSpotTool::LBData* OnlineBeamSpotTool::getLBData(int lumiBlock){ + if(!m_cachedRunInfo) return nullptr; + + for(const LBData& thisLBData : *m_cachedRunInfo){ + if((lumiBlock >= thisLBData.m_LBStart) && (lumiBlock <= thisLBData.m_LBEnd)){ + return &thisLBData; + } + } + + return nullptr; + } + + const OnlineBeamSpotTool::LBData* OnlineBeamSpotTool::getLBData(int runNumber, int lumiBlock, bool isMC){ + + // + // Check MC + // + if(isMC) + return m_mcLBData; + + // + // Check cached data + // + if((runNumber == m_cachedRunNum) && (lumiBlock == m_cachedLB)) + return m_cachedLBData; + + // + // GetRun info + // + if(runNumber != m_cachedRunNum) + setRunInfo(runNumber); + + return getLBData(lumiBlock); + } + + float OnlineBeamSpotTool::getOnlineBSInfo(const xAOD::EventInfo* eventInfo, OnlineBeamSpotTool::BSData datakey){ + return getOnlineBSInfo(eventInfo->runNumber(), eventInfo->lumiBlock(), eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ), datakey); + } + + float OnlineBeamSpotTool::getOnlineBSInfo(const xAH::EventInfo* eventInfo, OnlineBeamSpotTool::BSData datakey){ + return getOnlineBSInfo(eventInfo->m_runNumber, eventInfo->m_lumiBlock, eventInfo->m_mc, datakey); + } + + float OnlineBeamSpotTool::getOnlineBSInfo(int runNumber, int lumiBlock, bool isMC, OnlineBeamSpotTool::BSData datakey){ + //std::cout << "In OnlineBeamSpotTool (" << runNumber << " , " << lumiBlock<< ")" << std::endl; + + const LBData* thisLBInfo = getLBData(runNumber, lumiBlock, isMC); + + if(!thisLBInfo){ + std::cout << "OnlineBeamSpotTool::ERROR no LB data for run: " << runNumber << " LB: " << lumiBlock << std::endl; + return -999; + } + + if(datakey == OnlineBeamSpotTool::BSx) + return thisLBInfo->m_BSx; + + if(datakey == OnlineBeamSpotTool::BSy) + return thisLBInfo->m_BSy; + + return thisLBInfo->m_BSz; + } + + void OnlineBeamSpotTool::readFile(std::string rootFileName){ + + std::string fullRootFileName = PathResolverFindCalibFile( rootFileName ); + + TFile* thisFile = new TFile(fullRootFileName.c_str(),"READ"); + TTree* tree = (TTree*)thisFile->Get("LBInfo"); + + int RunNumber; + std::vector* LBStart = new std::vector(); + std::vector* LBEnd = new std::vector(); + + std::vector* BSx = new std::vector(); + std::vector* BSy = new std::vector(); + std::vector* BSz = new std::vector(); + + tree->SetBranchAddress("RunNumber",&RunNumber); + tree->SetBranchAddress("LBStart", &LBStart); + tree->SetBranchAddress("LBEnd", &LBEnd); + tree->SetBranchAddress("BSx", &BSx); + tree->SetBranchAddress("BSy", &BSy); + tree->SetBranchAddress("BSz", &BSz); + + Long64_t nentries = tree->GetEntries(); + for (Long64_t i=0;iGetEntry(i); + RunInfo thisRunInfo; + + for(unsigned int LBIt = 0; LBIt < LBStart->size(); ++LBIt){ + thisRunInfo.push_back(LBData(LBStart ->at(LBIt), + LBEnd ->at(LBIt), + BSx ->at(LBIt), + BSy ->at(LBIt), + BSz ->at(LBIt) + )); + } + + m_runList.insert( std::make_pair(RunNumber, thisRunInfo) ); + } + + thisFile->Close(); + } diff --git a/_sources/api/program_listing_file_Root_OverlapRemover.cxx.rst.txt b/_sources/api/program_listing_file_Root_OverlapRemover.cxx.rst.txt new file mode 100644 index 0000000000..3392a86f71 --- /dev/null +++ b/_sources/api/program_listing_file_Root_OverlapRemover.cxx.rst.txt @@ -0,0 +1,1160 @@ + +.. _program_listing_file_Root_OverlapRemover.cxx: + +Program Listing for File OverlapRemover.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/OverlapRemover.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /************************************************* + * + * Interface to ASG overlap removal tool + ( applying recommendations from Harmonisation TF ). + * + * M. Milesi (marco.milesi@cern.ch) + * J. Dandoy + * + ************************************************/ + + // c++ include(s): + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/Electron.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODEgamma/Photon.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODMuon/Muon.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/Jet.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODTau/TauJet.h" + #include "AthContainers/ConstDataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/OverlapRemover.h" + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(OverlapRemover) + + + OverlapRemover :: OverlapRemover () : + Algorithm("OverlapRemover") + { + } + + EL::StatusCode OverlapRemover :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "OverlapRemover" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode OverlapRemover :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode OverlapRemover :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode OverlapRemover :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode OverlapRemover :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing OverlapRemover Interface... "); + + if ( setCutFlowHist() == EL::StatusCode::FAILURE ) { + ANA_MSG_ERROR( "Failed to setup cutflow histograms. Exiting." ); + return EL::StatusCode::FAILURE; + } + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + + if ( m_inContainerName_Jets.empty() ) { + ANA_MSG_ERROR( "InputContainerJets is empty! Must have it to perform Overlap Removal! Exiting."); + return EL::StatusCode::FAILURE; + } + + if ( !m_inContainerName_Electrons.empty() ) { m_useElectrons = true; } + if ( !m_inContainerName_Muons.empty() ) { m_useMuons = true; } + if ( !m_inContainerName_Taus.empty() ) { m_useTaus = true; } + if ( !m_inContainerName_Photons.empty() ) { m_usePhotons = true; } + + m_outAuxContainerName_Electrons = m_outContainerName_Electrons + "Aux."; // the period is very important! + m_outAuxContainerName_Muons = m_outContainerName_Muons + "Aux."; // the period is very important! + m_outAuxContainerName_Jets = m_outContainerName_Jets + "Aux."; // the period is very important! + m_outAuxContainerName_Photons = m_outContainerName_Photons + "Aux."; // the period is very important! + m_outAuxContainerName_Taus = m_outContainerName_Taus + "Aux."; // the period is very important! + + + if ( setCounters() == EL::StatusCode::FAILURE ) { + ANA_MSG_ERROR( "Failed to properly set event/object counters. Exiting." ); + return EL::StatusCode::FAILURE; + } + + // initialize ASG overlap removal tool + const std::string selected_label = ( m_useSelected ) ? "passSel" : ""; // set with decoration flag you use for selected objects if want to consider only selected objects in OR, otherwise it will perform OR on all objects + + //Set Flags for recommended overlap procedures + ORUtils::ORFlags orFlags("OverlapRemovalTool", selected_label, m_decor); + + orFlags.outputPassValue = true; + orFlags.linkOverlapObjects = m_linkOverlapObjects; + orFlags.bJetLabel = m_bTagWP; + orFlags.boostedLeptons = m_useBoostedLeptons; + orFlags.doEleEleOR = m_doEleEleOR || m_lepFavWP; + + orFlags.doJets = true; + orFlags.doMuons = m_useMuons; + orFlags.doElectrons = m_useElectrons; + orFlags.doTaus = m_useTaus; + orFlags.doPhotons = m_usePhotons; + orFlags.doFatJets = false; + + ANA_CHECK( ORUtils::recommendedTools(orFlags, m_ORToolbox)); + if(m_applyRelPt) ANA_CHECK( m_ORToolbox.muJetORT.setProperty("ApplyRelPt", true) ); + if (m_lepFavWP) { + ANA_CHECK( m_ORToolbox.eleEleORT.setProperty("UseClusterMatch", true) ); + ANA_CHECK( m_ORToolbox.muJetORT.setProperty("OuterDR", 0.) ); + ANA_CHECK( m_ORToolbox.eleJetORT.setProperty("OuterDR", 0.) ); + } + ANA_CHECK( m_ORToolbox.initialize()); + ANA_MSG_INFO( "OverlapRemover Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode OverlapRemover :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG("Applying Overlap Removal... "); + + m_numEvent++; + + // get the collections from TEvent or TStore + const xAOD::ElectronContainer* inElectrons (nullptr); + const xAOD::MuonContainer* inMuons (nullptr); + const xAOD::JetContainer* inJets (nullptr); + const xAOD::PhotonContainer* inPhotons (nullptr); + const xAOD::TauJetContainer* inTaus (nullptr); + + // syst container name + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + // -------------------------------------------------------------------------------------------- + // + // always run the nominal case + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, NOMINAL, nullptr, vecOutContainerNames.get()); + + // look what do we have in TStore + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + // ----------------------------------------------------------------------------------------------- + // + // if at least one of the m_inputAlgo* is not empty, and there's at least one non-empty syst name, + // then perform OR for every non-empty systematic set + + // ****************** // + // Electrons // + // ****************** // + + if ( !m_inputAlgoElectrons.empty() ) { + + // ----------------------- + // + // get the systematic sets: + + // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!) + std::vector* systNames_el(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames_el, m_inputAlgoElectrons, 0, m_store, msg()) ); + + if ( HelperFunctions::found_non_dummy_sys(systNames_el) ) { + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, ELSYST, systNames_el, vecOutContainerNames.get()); + } + + } + + // **************** // + // Muons // + // **************** // + + if ( !m_inputAlgoMuons.empty() ) { + + // ----------------------- + // + // get the systematic sets: + + // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!) + std::vector* systNames_mu(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames_mu, m_inputAlgoMuons, 0, m_store, msg()) ); + + if ( HelperFunctions::found_non_dummy_sys(systNames_mu) ) { + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, MUSYST, systNames_mu, vecOutContainerNames.get()); + } + + } + + // **************** // + // Jets // + // **************** // + + if ( !m_inputAlgoJets.empty() ) { + + // ----------------------- + // + // get the systematic sets: + + // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!) + std::vector* systNames_jet; + ANA_CHECK( HelperFunctions::retrieve(systNames_jet, m_inputAlgoJets, 0, m_store, msg()) ); + + if ( HelperFunctions::found_non_dummy_sys(systNames_jet) ) { + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, JETSYST, systNames_jet, vecOutContainerNames.get()); + } + + } + + // **************** // + // Photons // + // **************** // + + if ( !m_inputAlgoPhotons.empty() ) { + + // ----------------------- + // + // get the systematic sets: + + // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!) + std::vector* systNames_photon; + ANA_CHECK( HelperFunctions::retrieve(systNames_photon, m_inputAlgoPhotons, 0, m_store, msg()) ); + + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, PHSYST, systNames_photon, vecOutContainerNames.get()); + + } + // **************** // + // Taus // + // **************** // + + if ( !m_inputAlgoTaus.empty() ) { + + // ----------------------- + // + // get the systematic sets: + + // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!) + std::vector* systNames_tau; + ANA_CHECK( HelperFunctions::retrieve(systNames_tau, m_inputAlgoTaus, 0, m_store, msg()) ); + + executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, TAUSYST, systNames_tau, vecOutContainerNames.get()); + + } + + // save list of systs that should be considered down stream + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + // look what do we have in TStore + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode OverlapRemover :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode OverlapRemover :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode OverlapRemover :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode OverlapRemover :: fillObjectCutflow (const xAOD::IParticleContainer* objCont, const std::string& overlapFlag, const std::string& selectFlag) + { + SG::AuxElement::ConstAccessor selectAcc(selectFlag); + SG::AuxElement::ConstAccessor overlapAcc(overlapFlag); + static SG::AuxElement::ConstAccessor< ElementLink > objLinkAcc("overlapObject"); + + for ( auto obj_itr : *(objCont) ) { + + std::string type; + + // Safety check + // + if ( !overlapAcc.isAvailable( *obj_itr ) ) { + ANA_MSG_ERROR( "Overlap decoration missing for this object"); + return EL::StatusCode::FAILURE; + } + switch(obj_itr->type()) { + case xAOD::Type::Electron: + type = "electron"; + if (!overlapAcc( *obj_itr )) + m_el_cutflowHist_1->Fill( m_el_cutflow_OR_cut, 1 ); + break; + case xAOD::Type::Muon: + if (!overlapAcc( *obj_itr )) + m_mu_cutflowHist_1->Fill( m_mu_cutflow_OR_cut, 1 ); + type = "muon"; + break; + case xAOD::Type::Jet: + if (!overlapAcc( *obj_itr )) + m_jet_cutflowHist_1->Fill( m_jet_cutflow_OR_cut, 1 ); + type = "jet"; + break; + case xAOD::Type::Photon: + if (!overlapAcc( *obj_itr )) + m_ph_cutflowHist_1->Fill( m_ph_cutflow_OR_cut, 1 ); + type = "photon"; + break; + case xAOD::Type::Tau: + if (!overlapAcc( *obj_itr )) + m_tau_cutflowHist_1->Fill( m_tau_cutflow_OR_cut, 1 ); + type = "tau"; + break; + default: + ANA_MSG_ERROR("Unsupported object"); + return EL::StatusCode::FAILURE; + break; + } + + int isBTagged = 0; + if ( !m_bTagWP.empty() ) { + SG::AuxElement::Decorator< char > isBTag( m_bTagWP ); + if( isBTag.isAvailable( *obj_itr ) && isBTag(*obj_itr)==true ) isBTagged = 1; + } + + if(selectAcc.isAvailable(*obj_itr)){ + ANA_MSG_DEBUG( type << " pt " << obj_itr->pt()/1e3 << " eta " << obj_itr->eta() << " phi " << obj_itr->phi() << " btagged " << isBTagged << " selected " << selectAcc(*obj_itr) << " passesOR " << overlapAcc( *obj_itr ) ); + } else { + ANA_MSG_DEBUG( type << " pt " << obj_itr->pt()/1e3 << " eta " << obj_itr->eta() << " phi " << obj_itr->phi() << " btagged " << isBTagged << " selected N/A" << " passesOR " << overlapAcc( *obj_itr ) ); + } + // Check for overlap object link + if ( objLinkAcc.isAvailable( *obj_itr ) && objLinkAcc( *obj_itr ).isValid() ) { + const xAOD::IParticle* overlapObj = *objLinkAcc( *obj_itr ); + std::stringstream ss_or; ss_or << overlapObj->type(); + ANA_MSG_DEBUG( " Overlap: type " << ss_or.str() << " pt " << overlapObj->pt()/1e3); + } + + } + + return EL::StatusCode::SUCCESS; + + } + + + EL::StatusCode OverlapRemover :: executeOR( const xAOD::ElectronContainer* inElectrons, const xAOD::MuonContainer* inMuons, const xAOD::JetContainer* inJets, + const xAOD::PhotonContainer* inPhotons, const xAOD::TauJetContainer* inTaus, + SystType syst_type, std::vector* sysVec, std::vector* sysVecOut) + { + + // instantiate output container(s) + // + ConstDataVector *selectedElectrons (nullptr); + ConstDataVector *selectedMuons (nullptr); + ConstDataVector *selectedJets (nullptr); + ConstDataVector *selectedPhotons (nullptr); + ConstDataVector *selectedTaus (nullptr); + + // make a switch for systematics types + // + switch ( static_cast(syst_type) ) + { + + case NOMINAL: // this is the nominal case + { + ANA_MSG_DEBUG("Doing nominal case"); + bool nomContainerNotFound(false); + + if( m_useElectrons ) { + if ( m_store->contains >(m_inContainerName_Electrons) || m_store->contains(m_inContainerName_Electrons) ) { + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if( m_useMuons ) { + if ( m_store->contains >(m_inContainerName_Muons) || m_store->contains(m_inContainerName_Muons) ) { + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_store->contains >(m_inContainerName_Jets) || m_store->contains(m_inContainerName_Jets) ) { + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + + if ( m_usePhotons ) { + if ( m_store->contains >(m_inContainerName_Photons) || m_store->contains(m_inContainerName_Photons) ) { + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_useTaus ) { + if ( m_store->contains >(m_inContainerName_Taus) || m_store->contains(m_inContainerName_Taus) ) { + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + if ( m_useElectrons ) { ANA_MSG_DEBUG( "inElectrons : " << inElectrons->size()); } + if ( m_useMuons ) { ANA_MSG_DEBUG( "inMuons : " << inMuons->size()); } + ANA_MSG_DEBUG( "inJets : " << inJets->size() ); + if ( m_usePhotons ) { ANA_MSG_DEBUG( "inPhotons : " << inPhotons->size()); } + if ( m_useTaus ) { ANA_MSG_DEBUG( "inTaus : " << inTaus->size()); } + + // do the actual OR + // + ANA_MSG_DEBUG( "Calling removeOverlaps()"); + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); // This line raises an exception + ANA_MSG_DEBUG( "Done Calling removeOverlaps()"); + + std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + ANA_MSG_DEBUG( "Filling Cut Flow Histograms"); + if ( m_useElectrons ) fillObjectCutflow(inElectrons); + if ( m_useMuons ) fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + if ( m_usePhotons ) fillObjectCutflow(inPhotons); + if ( m_useTaus ) fillObjectCutflow(inTaus); + } + + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + ANA_MSG_DEBUG( "Creating selected Containers"); + if( m_useElectrons ) selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + if( m_useMuons ) selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_usePhotons ) selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useTaus ) selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers basd on OR decision: + // + // if an object has been flagged as 'passOR', it will be stored in the 'selected' container + // + ANA_MSG_DEBUG( "Resizing"); + if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useMuons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_usePhotons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useTaus ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + + if ( m_useElectrons) { ANA_MSG_DEBUG( "selectedElectrons : " << selectedElectrons->size()); } + if ( m_useMuons ) { ANA_MSG_DEBUG( "selectedMuons : " << selectedMuons->size()); } + ANA_MSG_DEBUG( "selectedJets : " << selectedJets->size()); + if ( m_usePhotons ) { ANA_MSG_DEBUG( "selectedPhotons : " << selectedPhotons->size()); } + if ( m_useTaus ) { ANA_MSG_DEBUG( "selectedTaus : " << selectedTaus->size() ); } + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + ANA_MSG_DEBUG( "Recording"); + if ( m_useElectrons ){ ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons )); } + if ( m_useMuons ) { ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons )); } + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets )); + if ( m_usePhotons ) { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons )); } + if ( m_useTaus ) { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus )); } + } + + sysVecOut->push_back(""); + break; + } + case ELSYST : // electron syst + { + ANA_MSG_DEBUG( "Doing electron systematics"); + bool nomContainerNotFound(false); + + // just to check everything is fine + ANA_MSG_DEBUG("will consider the following ELECTRON systematics:" ); + for ( auto it : *sysVec ){ ANA_MSG_DEBUG("\t " << it); } + + // these input containers won't change in the electron syst loop ... + if( m_useMuons ) { + if ( m_store->contains >(m_inContainerName_Muons) || m_store->contains(m_inContainerName_Muons) ) { + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_store->contains >(m_inContainerName_Jets) || m_store->contains(m_inContainerName_Jets) ) { + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + + if ( m_usePhotons ) { + if ( m_store->contains >(m_inContainerName_Photons) || m_store->contains(m_inContainerName_Photons) ) { + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_useTaus ) { + if ( m_store->contains >(m_inContainerName_Taus) || m_store->contains(m_inContainerName_Taus) ) { + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + + for ( auto systName : *sysVec) { + + if ( systName.empty() ) continue; + + // ... instead, the electron input container will be different for each syst + // + std::string el_syst_cont_name = m_inContainerName_Electrons + systName; + ANA_CHECK( HelperFunctions::retrieve(inElectrons, el_syst_cont_name, 0, m_store, msg()) ); + + // do the actual OR + // + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); + + const std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + fillObjectCutflow(inElectrons); + if ( m_useMuons ) fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + if ( m_usePhotons ) fillObjectCutflow(inPhotons); + if ( m_useTaus ) fillObjectCutflow(inTaus); + } + + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useMuons ) selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_usePhotons ) selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useTaus ) selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers basd on OR decision + // + ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_useMuons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_usePhotons ){ ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useTaus ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + // a different syst varied container will be stored for each syst variation + ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); + if ( m_useMuons ) { ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons + systName )); } + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets + systName )); + if ( m_usePhotons ){ ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); } + if ( m_useTaus ) { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); } + } + + sysVecOut->push_back(systName); + } // close loop on systematic sets available from upstream algo (Electrons) + + break; + } + case MUSYST: // muon syst + { + ANA_MSG_DEBUG( "Doing muon systematics"); + bool nomContainerNotFound(false); + + // just to check everything is fine + ANA_MSG_DEBUG("will consider the following MUON systematics:" ); + for ( auto it : *sysVec ){ ANA_MSG_DEBUG("\t " << it); } + + // these input containers won't change in the muon syst loop ... + if( m_useElectrons ) { + if ( m_store->contains >(m_inContainerName_Electrons) || m_store->contains(m_inContainerName_Electrons) ) { + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_store->contains >(m_inContainerName_Jets) || m_store->contains(m_inContainerName_Jets) ) { + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + + if ( m_usePhotons ) { + if ( m_store->contains >(m_inContainerName_Photons) || m_store->contains(m_inContainerName_Photons) ) { + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_useTaus ) { + if ( m_store->contains >(m_inContainerName_Taus) || m_store->contains(m_inContainerName_Taus) ) { + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + + for ( auto systName : *sysVec) { + + if ( systName.empty() ) continue; + + // ... instead, the muon input container will be different for each syst + // + std::string mu_syst_cont_name = m_inContainerName_Muons + systName; + ANA_CHECK( HelperFunctions::retrieve(inMuons, mu_syst_cont_name, 0, m_store, msg()) ); + + // do the actual OR + // + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); + + const std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + if ( m_useElectrons ) fillObjectCutflow(inElectrons); + fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + if( m_usePhotons ) fillObjectCutflow(inPhotons); + if( m_useTaus ) fillObjectCutflow(inTaus); + } + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + if ( m_useElectrons ) selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_usePhotons ) selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useTaus ) selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers based on OR decision + // + if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_usePhotons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useTaus ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + // a different syst varied container will be stored for each syst variation + // + if ( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); } + ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons + systName )); + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets + systName )); + if ( m_usePhotons ) { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); } + if ( m_useTaus ) { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); } + } + + sysVecOut->push_back(systName); + } // close loop on systematic sets available from upstream algo (Muons) + + break; + } + case JETSYST: // jet systematics + { + ANA_MSG_DEBUG( "Doing jet systematics"); + bool nomContainerNotFound(false); + + // just to check everything is fine + ANA_MSG_DEBUG("will consider the following JET systematics:" ); + for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it); } + + // these input containers won't change in the jet syst loop ... + if( m_useElectrons ) { + if ( m_store->contains >(m_inContainerName_Electrons) || m_store->contains(m_inContainerName_Electrons) ) { + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if( m_useMuons ) { + if ( m_store->contains >(m_inContainerName_Muons) || m_store->contains(m_inContainerName_Muons) ) { + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_usePhotons ) { + if ( m_store->contains >(m_inContainerName_Photons) || m_store->contains(m_inContainerName_Photons) ) { + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_useTaus ) { + if ( m_store->contains >(m_inContainerName_Taus) || m_store->contains(m_inContainerName_Taus) ) { + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + for( auto systName : *sysVec ) { + + if ( systName.empty() ) continue; + + // ... instead, the jet input container will be different for each syst + // + std::string jet_syst_cont_name = m_inContainerName_Jets + systName; + ANA_CHECK( HelperFunctions::retrieve(inJets, jet_syst_cont_name, 0, m_store, msg()) ); + + // do the actual OR + // + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); + + const std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + if ( m_useElectrons ) fillObjectCutflow(inElectrons); + if ( m_useMuons ) fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + if( m_usePhotons ) fillObjectCutflow(inPhotons); + if( m_useTaus ) fillObjectCutflow(inTaus); + } + + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + if ( m_useElectrons ) selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useMuons ) selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_usePhotons ) selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useTaus ) selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers basd on OR decision + // + if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useMuons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_usePhotons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if ( m_useTaus ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + // a different syst varied container will be stored for each syst variation + // + if ( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); } + if ( m_useMuons ) { ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons + systName )); } + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets + systName )); + if ( m_usePhotons ) { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); } + if ( m_useTaus ) { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); } + } + + sysVecOut->push_back(systName); + } // close loop on systematic sets available from upstream algo (Jets) + + break; + } + case PHSYST : // photon systematics + { + ANA_MSG_DEBUG( "Doing photon systematics"); + bool nomContainerNotFound(false); + + // just to check everything is fine + ANA_MSG_DEBUG("will consider the following PHOTON systematics:" ); + for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it); } + + // these input containers won't change in the photon syst loop ... + if( m_useElectrons ) { + if ( m_store->contains >(m_inContainerName_Electrons) || m_store->contains(m_inContainerName_Electrons) ) { + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if( m_useMuons ) { + if ( m_store->contains >(m_inContainerName_Muons) || m_store->contains(m_inContainerName_Muons) ) { + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_store->contains >(m_inContainerName_Jets) || m_store->contains(m_inContainerName_Jets) ) { + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + + if ( m_useTaus ) { + if ( m_store->contains >(m_inContainerName_Taus) || m_store->contains(m_inContainerName_Taus) ) { + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + for( auto systName : *sysVec ) { + + if ( systName.empty() ) continue; + + // ... instead, the photon input container will be different for each syst + // + std::string photon_syst_cont_name = m_inContainerName_Photons + systName; + ANA_CHECK( HelperFunctions::retrieve(inPhotons, photon_syst_cont_name, 0, m_store, msg()) ); + + // do the actual OR + // + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); + + + const std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + if( m_useElectrons ) fillObjectCutflow(inElectrons); + if( m_useMuons ) fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + fillObjectCutflow(inPhotons); + if( m_useTaus ) fillObjectCutflow(inTaus); + } + + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + if( m_useElectrons ) selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + if( m_useMuons ) selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_useTaus ) selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers based on OR decision + // + if( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if( m_useMuons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_useTaus ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + // a different syst varied container will be stored for each syst variation + // + if( m_useElectrons ){ ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); } + if( m_useMuons ) { ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons + systName )); } + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets + systName )); + ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); + if ( m_useTaus ) { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); } + } + + sysVecOut->push_back(systName); + } // close loop on systematic sets available from upstream algo (Photons) + + break; + } + case TAUSYST : // tau systematics + { + ANA_MSG_DEBUG( "Doing tau systematics"); + bool nomContainerNotFound(false); + + // just to check everything is fine + ANA_MSG_DEBUG("output vector already contains the following TAU systematics:" ); + for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it); } + + // these input containers won't change in the tau syst loop ... + if( m_useElectrons ) { + if ( m_store->contains >(m_inContainerName_Electrons) || m_store->contains(m_inContainerName_Electrons) ) { + ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if( m_useMuons ) { + if ( m_store->contains >(m_inContainerName_Muons) || m_store->contains(m_inContainerName_Muons) ) { + ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( m_store->contains >(m_inContainerName_Jets) || m_store->contains(m_inContainerName_Jets) ) { + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + + if ( m_usePhotons ) { + if ( m_store->contains >(m_inContainerName_Photons) || m_store->contains(m_inContainerName_Photons) ) { + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) ); + } else { + nomContainerNotFound = true; + if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); } + } + } + + if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;} + + for( auto systName : *sysVec ) { + + if ( systName.empty() ) continue; + + // ... instead, the tau input container will be different for each syst + // + std::string tau_syst_cont_name = m_inContainerName_Taus + systName; + ANA_CHECK( HelperFunctions::retrieve(inTaus, tau_syst_cont_name, 0, m_store, msg()) ); + + // do the actual OR + // + ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); + + const std::string ORdecor(m_decor); + if(m_useCutFlow){ + // fill cutflow histograms + // + if( m_useElectrons ) fillObjectCutflow(inElectrons); + if( m_useMuons ) fillObjectCutflow(inMuons); + fillObjectCutflow(inJets); + if( m_usePhotons ) fillObjectCutflow(inPhotons); + fillObjectCutflow(inTaus); + } + + // make a copy of input container(s) with selected objects + // + if ( m_createSelectedContainers ) { + if( m_useElectrons ) selectedElectrons = new ConstDataVector(SG::VIEW_ELEMENTS); + if( m_useMuons ) selectedMuons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedJets = new ConstDataVector(SG::VIEW_ELEMENTS); + if ( m_usePhotons ) selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); + selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + // resize containers based on OR decision + // + if( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + if( m_useMuons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + if ( m_usePhotons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); } + ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); + + // add ConstDataVector to TStore + // + if ( m_createSelectedContainers ) { + // a different syst varied container will be stored for each syst variation + // + if( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); } + if( m_useMuons ) { ANA_CHECK( m_store->record( selectedMuons, m_outContainerName_Muons + systName )); } + ANA_CHECK( m_store->record( selectedJets, m_outContainerName_Jets + systName )); + if ( m_usePhotons ) { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); } + ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); + } + + sysVecOut->push_back(systName); + } // close loop on systematic sets available from upstream algo (Taus) + + break; + } + default : + { + ANA_MSG_ERROR("Unknown systematics type. Aborting"); + return EL::StatusCode::FAILURE; + } + } // end of switch + + + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode OverlapRemover :: setCutFlowHist( ) + { + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the object cutflow + // + m_el_cutflowHist_1 = (TH1D*)file->Get("cutflow_electrons_1"); + m_el_cutflow_OR_cut = m_el_cutflowHist_1->GetXaxis()->FindBin("OR_cut"); + m_mu_cutflowHist_1 = (TH1D*)file->Get("cutflow_muons_1"); + m_mu_cutflow_OR_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("OR_cut"); + m_jet_cutflowHist_1 = (TH1D*)file->Get("cutflow_jets_1"); + m_jet_cutflow_OR_cut = m_jet_cutflowHist_1->GetXaxis()->FindBin("OR_cut"); + m_ph_cutflowHist_1 = (TH1D*)file->Get("cutflow_photons_1"); + m_ph_cutflow_OR_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("OR_cut"); + m_tau_cutflowHist_1 = (TH1D*)file->Get("cutflow_taus_1"); + m_tau_cutflow_OR_cut = m_tau_cutflowHist_1->GetXaxis()->FindBin("OR_cut"); + } + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode OverlapRemover :: setCounters( ) + { + m_numEvent = 0; + m_numObject = 0; + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_ParticlePIDManager.cxx.rst.txt b/_sources/api/program_listing_file_Root_ParticlePIDManager.cxx.rst.txt new file mode 100644 index 0000000000..9b82d70453 --- /dev/null +++ b/_sources/api/program_listing_file_Root_ParticlePIDManager.cxx.rst.txt @@ -0,0 +1,248 @@ + +.. _program_listing_file_Root_ParticlePIDManager.cxx: + +Program Listing for File ParticlePIDManager.cxx +=============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/ParticlePIDManager.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/ParticlePIDManager.h" + + ANA_MSG_SOURCE(msgPIDManager, "PIDManager") + + ElectronLHPIDManager :: ElectronLHPIDManager ( std::string WP, bool debug ) : + m_asgElectronLikelihoodTool_VeryLoose(nullptr), + m_asgElectronLikelihoodTool_Loose(nullptr), + m_asgElectronLikelihoodTool_LooseBL(nullptr), + m_asgElectronLikelihoodTool_Medium(nullptr), + m_asgElectronLikelihoodTool_Tight(nullptr), + m_asgElectronLikelihoodTool_VeryLooseLLP(nullptr), + m_asgElectronLikelihoodTool_LooseLLP(nullptr), + m_asgElectronLikelihoodTool_MediumLLP(nullptr), + m_asgElectronLikelihoodTool_TightLLP(nullptr) + + { + m_selectedWP = WP; + m_debug = debug; + + /* fill the multimap with WPs and corresponding tools */ + std::pair < std::string, AsgElectronLikelihoodTool* > veryloose = std::make_pair( std::string("VeryLoose"), m_asgElectronLikelihoodTool_VeryLoose ); + std::pair < std::string, AsgElectronLikelihoodTool* > loose = std::make_pair( std::string("Loose"), m_asgElectronLikelihoodTool_Loose ); + std::pair < std::string, AsgElectronLikelihoodTool* > loosebl = std::make_pair( std::string("LooseBL"), m_asgElectronLikelihoodTool_LooseBL ); + std::pair < std::string, AsgElectronLikelihoodTool* > medium = std::make_pair( std::string("Medium"), m_asgElectronLikelihoodTool_Medium ); + std::pair < std::string, AsgElectronLikelihoodTool* > tight = std::make_pair( std::string("Tight"), m_asgElectronLikelihoodTool_Tight ); + + std::pair < std::string, AsgElectronLikelihoodTool* > verylooseLLP = std::make_pair( std::string("VeryLooseLLP"), m_asgElectronLikelihoodTool_VeryLooseLLP ); + std::pair < std::string, AsgElectronLikelihoodTool* > looseLLP = std::make_pair( std::string("LooseLLP"), m_asgElectronLikelihoodTool_LooseLLP ); + std::pair < std::string, AsgElectronLikelihoodTool* > mediumLLP = std::make_pair( std::string("MediumLLP"), m_asgElectronLikelihoodTool_MediumLLP ); + std::pair < std::string, AsgElectronLikelihoodTool* > tightLLP = std::make_pair( std::string("TightLLP"), m_asgElectronLikelihoodTool_TightLLP ); + + m_allWPTools.insert(veryloose); m_allWPAuxDecors.insert("VeryLoose"); + m_allWPTools.insert(loose); m_allWPAuxDecors.insert("Loose"); + m_allWPTools.insert(loosebl); m_allWPAuxDecors.insert("LooseBL"); + m_allWPTools.insert(medium); m_allWPAuxDecors.insert("Medium"); + m_allWPTools.insert(tight); m_allWPAuxDecors.insert("Tight"); + + m_allWPTools.insert(verylooseLLP); m_allWPAuxDecors.insert("VeryLooseNoPix"); + m_allWPTools.insert(looseLLP); m_allWPAuxDecors.insert("LooseNoPix"); + m_allWPTools.insert(mediumLLP); m_allWPAuxDecors.insert("MediumNoPix"); + m_allWPTools.insert(tightLLP); m_allWPAuxDecors.insert("TightNoPix"); + } + + ElectronLHPIDManager :: ~ElectronLHPIDManager() + { + if ( m_asgElectronLikelihoodTool_VeryLoose ) { delete m_asgElectronLikelihoodTool_VeryLoose; m_asgElectronLikelihoodTool_VeryLoose = nullptr; } + if ( m_asgElectronLikelihoodTool_Loose ) { delete m_asgElectronLikelihoodTool_Loose; m_asgElectronLikelihoodTool_Loose = nullptr; } + if ( m_asgElectronLikelihoodTool_LooseBL ) { delete m_asgElectronLikelihoodTool_LooseBL; m_asgElectronLikelihoodTool_LooseBL = nullptr; } + if ( m_asgElectronLikelihoodTool_Medium ) { delete m_asgElectronLikelihoodTool_Medium; m_asgElectronLikelihoodTool_Medium = nullptr; } + if ( m_asgElectronLikelihoodTool_Tight ) { delete m_asgElectronLikelihoodTool_Tight; m_asgElectronLikelihoodTool_Tight = nullptr; } + + if ( m_asgElectronLikelihoodTool_VeryLooseLLP ) { delete m_asgElectronLikelihoodTool_VeryLooseLLP; m_asgElectronLikelihoodTool_VeryLooseLLP = nullptr; } + if ( m_asgElectronLikelihoodTool_LooseLLP ) { delete m_asgElectronLikelihoodTool_LooseLLP; m_asgElectronLikelihoodTool_LooseLLP = nullptr; } + if ( m_asgElectronLikelihoodTool_MediumLLP ) { delete m_asgElectronLikelihoodTool_MediumLLP; m_asgElectronLikelihoodTool_MediumLLP = nullptr; } + if ( m_asgElectronLikelihoodTool_TightLLP ) { delete m_asgElectronLikelihoodTool_TightLLP; m_asgElectronLikelihoodTool_TightLLP = nullptr; } + + } + + + StatusCode ElectronLHPIDManager :: setupWPs( bool configTools, std::string selector_name) { + using namespace msgPIDManager; + std::string selectedWP = m_selectedWP; + if (m_selectedWP.find("NoPix") != std::string::npos) selectedWP = m_selectedWP.substr(0, m_selectedWP.size()-5) + "LLP"; + HelperClasses::EnumParser selectedWP_parser; + unsigned int selectedWP_enum = static_cast( selectedWP_parser.parseEnum(selectedWP) ); + + /* By converting the string to the corresponding LikeEnum, we can exploit the ordering of the enum itself + / ( see ElectronPhotonID/ElectronPhotonSelectorTools/trunk/ElectronPhotonSelectorTools/TElectronLikelihoodTool.h for definition) + / to initialise ONLY the tools with WP tighter (or equal) the selected one. + / The selected WP will be used to cut loose electrons in the selector, the tighter WPs to decorate! + Beware, this doesn't work if you are using LLP WPs since they are not ordered in the enum. + */ + if ( configTools ) { + for ( auto it : (m_allWPTools) ) { + + /* instantiate tools (do it for all) */ + + const std::string WP = it.first; + std::string tool_name = selector_name + "_" + WP; + + Info("setupWPs()", "Initializing AsgElectronLikelihoodTool w/ name: %s", tool_name.c_str() ); + + it.second = new AsgElectronLikelihoodTool( tool_name.c_str() ); + + HelperClasses::EnumParser WP_parser; + unsigned int WP_enum = static_cast( WP_parser.parseEnum(WP) ); + + /* if this WP is looser than user's WP, skip to next. Don't do this if using LLP WPs. */ + if ( WP_enum < selectedWP_enum && (selectedWP.find("LLP") == std::string::npos) ) { continue; } + + /* configure and initialise only tools with (WP >= selectedWP) */ + it.second->msg().setLevel( MSG::INFO); /* ERROR, VERBOSE, DEBUG, INFO */ + + std::string WPParseString = WP + "LHElectron"; + if (WP.find("LLP") != std::string::npos) WPParseString = WP.substr(0, WP.size()-3) + "LHElectron_LLP"; + + ANA_CHECK( it.second->setProperty("WorkingPoint", WPParseString ) ); + ANA_CHECK( it.second->initialize()); + + /* copy map element into container of valid WPs for later usage */ + m_validWPTools.insert( it ); + + } + } else { + for ( auto it : (m_allWPAuxDecors) ) { + + HelperClasses::EnumParser WP_parser; + std::string WPParseString = it; + if (it.find("NoPix") != std::string::npos) WPParseString = it.substr(0, it.size()-5) + "LLP"; + unsigned int WP_enum = static_cast( WP_parser.parseEnum(WPParseString) ); + + /* if this WP is looser than user's WP, skip to next. Don't do this if using LLP WPs. */ + if ( WP_enum < selectedWP_enum && (selectedWP.find("LLP") == std::string::npos) ) { continue; } + + /* copy map element into container of valid WPs for later usage */ + m_validWPs.insert( it ); + + } + + } + return StatusCode::SUCCESS; + + } + + /* set default values for decorations (do it for all WPs) */ + StatusCode ElectronLHPIDManager :: setDecorations( const xAOD::Electron* electron ) { + + for ( auto it : (m_allWPTools) ) { + const std::string defaultDecorWP = "LH" + it.first; + electron->auxdecor(defaultDecorWP) = -1; + } + + return StatusCode::SUCCESS; + } + + const std::string ElectronLHPIDManager :: getSelectedWP () { + + const std::string WP = m_selectedWP; + return WP; + + } + + ElectronCutBasedPIDManager :: ElectronCutBasedPIDManager ( std::string WP, bool debug ) : + m_asgElectronIsEMSelector_Loose(nullptr), + m_asgElectronIsEMSelector_Medium(nullptr), + m_asgElectronIsEMSelector_Tight(nullptr) + { + m_selectedWP = WP; + m_debug = debug; + + /* fill the multimap with WPs and corresponding tools. Use an ordered index to reflect the tightness order (0: loosest WP, ...) */ + std::pair < std::string, AsgElectronIsEMSelector* > loose = std::make_pair( std::string("Loose"), m_asgElectronIsEMSelector_Loose ); + m_allWPTools.insert( loose ); + m_allWPAuxDecors.insert("Loose"); + std::pair < std::string, AsgElectronIsEMSelector* > medium = std::make_pair( std::string("Medium"), m_asgElectronIsEMSelector_Medium ); + m_allWPTools.insert( medium ); + m_allWPAuxDecors.insert("Medium"); + std::pair < std::string, AsgElectronIsEMSelector* > tight = std::make_pair( std::string("Tight"), m_asgElectronIsEMSelector_Tight ); + m_allWPTools.insert( tight ); + m_allWPAuxDecors.insert("Tight"); + } + + ElectronCutBasedPIDManager :: ~ElectronCutBasedPIDManager() { + if ( m_asgElectronIsEMSelector_Loose ) { m_asgElectronIsEMSelector_Loose = nullptr; delete m_asgElectronIsEMSelector_Loose; } + if ( m_asgElectronIsEMSelector_Medium ) { m_asgElectronIsEMSelector_Medium = nullptr; delete m_asgElectronIsEMSelector_Medium; } + if ( m_asgElectronIsEMSelector_Tight ) { m_asgElectronIsEMSelector_Tight = nullptr; delete m_asgElectronIsEMSelector_Tight; } + } + + StatusCode ElectronCutBasedPIDManager :: setupWPs( bool configTools, std::string selector_name) { + using namespace msgPIDManager; + HelperClasses::EnumParser selectedWP_parser; + unsigned int selectedWP_enum = static_cast( selectedWP_parser.parseEnum(m_selectedWP) ); + + /* By converting the string to the corresponding egammaPID, we can exploit the ordering of the enum itself + / ( see ElectronPhotonID/ElectronPhotonSelectorTools/trunk/ElectronPhotonSelectorTools/TElectronIsEMSelector.h for definition) + / to initialise ONLY the tools with WP tighter (or equal) the selected one. + / The selected WP will be used to cut loose electrons in the selector, the tighter WPs to decorate! + / + / egammaPID enums :http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Reconstruction/egamma/egammaEvent/egammaEvent/egammaPIDdefs.h + */ + if ( configTools ) { + + for ( auto it : (m_allWPTools) ) { + + const std::string WP = it.first; + /* instantiate tools (do it for all) */ + std::string tool_name = WP + selector_name; + it.second = new AsgElectronIsEMSelector( tool_name.c_str() ); + + HelperClasses::EnumParser itWP_parser; + unsigned int itWP_enum = static_cast( itWP_parser.parseEnum(WP) ); + + /* if this WP is looser than user's WP, skip to next */ + if ( itWP_enum < selectedWP_enum ) { continue; } + + /* configure and initialise only tools with (WP >= selectedWP) */ + + it.second->msg().setLevel( MSG::INFO); /* ERROR, VERBOSE, DEBUG, INFO */ + + ANA_CHECK( it.second->setProperty("WorkingPoint", WP+"Electron" ) ); + ANA_CHECK( it.second->initialize()); + + /* copy map element into container of valid tools for later usage */ + m_validWPTools.insert( it ); + + } + + } else { + + for ( auto it : (m_allWPAuxDecors) ) { + + HelperClasses::EnumParser itWP_parser; + unsigned int itWP_enum = static_cast( itWP_parser.parseEnum(it) ); + + /* if this WP is looser than user's WP, skip to next */ + if ( itWP_enum < selectedWP_enum ) { continue; } + + /* copy map element into container of valid WPs for later usage */ + m_validWPs.insert( it ); + + } + + } + + return StatusCode::SUCCESS; + } + + /* set default values for decorations (do it for all WPs) */ + StatusCode ElectronCutBasedPIDManager :: setDecorations( const xAOD::Electron* electron ) { + for ( auto it : (m_allWPTools) ) { + std::string defaultDecorWP = "IsEM"+it.first; + electron->auxdecor(defaultDecorWP) = -1; + } + + return StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_PhotonCalibrator.cxx.rst.txt b/_sources/api/program_listing_file_Root_PhotonCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..19257f29dd --- /dev/null +++ b/_sources/api/program_listing_file_Root_PhotonCalibrator.cxx.rst.txt @@ -0,0 +1,613 @@ + +.. _program_listing_file_Root_PhotonCalibrator.cxx: + +Program Listing for File PhotonCalibrator.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonCalibrator.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************* + * + * Interface to CP Photon calibration tool(s). + * + * The tool applies: + * + * -) scale corrections for DATA + * -) smearing corrections for MC + * (data VS. MC check is done by the CP tool internally) + * + * M. Milesi (marco.milesi@cern.ch) + * + *******************************************************/ + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + // package include(s): + #include + #include + #include + + #include "ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h" + #include "ElectronPhotonSelectorTools/AsgPhotonIsEMSelector.h" + #include "EGammaVariableCorrection/ElectronPhotonVariableCorrectionTool.h" + + #include + + // apparently needed for egammaPIDs but was included in HelperClasses too? + #include "ElectronPhotonSelectorTools/egammaPIDdefs.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(PhotonCalibrator) + + + PhotonCalibrator :: PhotonCalibrator () : + Algorithm("PhotonCalibrator") + { + } + + + EL::StatusCode PhotonCalibrator :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "PhotonCalibrator" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing PhotonCalibrator Interface... "); + + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + // shallow copies are made with this output container name + m_outSCContainerName = m_outContainerName + "ShallowCopy"; + m_outSCAuxContainerName = m_outSCContainerName + "Aux."; // the period is very important! + + // initialize the CP::EgammaCalibrationAndSmearingTool + // + const std::string CalibToolName = m_name + "_EgammaCalibrationAndSmearingTool_Photons"; + if ( asg::ToolStore::contains(CalibToolName.c_str()) ) { + m_EgammaCalibrationAndSmearingTool = asg::ToolStore::get(CalibToolName.c_str()); + } else { + m_EgammaCalibrationAndSmearingTool = new CP::EgammaCalibrationAndSmearingTool(CalibToolName.c_str()); + } + + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("ESModel", m_esModel)); + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("decorrelationModel", m_decorrelationModel)); + if(m_randomRunNumber>0) ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("randomRunNumber", m_randomRunNumber)); + + //Backwards compatibility + if (m_useAFII || m_useAF3) + m_forceFastSim = true; + if ( isFastSim() ){ + ANA_MSG_INFO( "Setting simulation flavour to Fast Sim"); + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 1)); + } + else { + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 0)); + } + ANA_CHECK( m_EgammaCalibrationAndSmearingTool->initialize()); + m_EgammaCalibrationAndSmearingTool->msg().setLevel( msg().level() ); + + // Get a list of recommended systematics for this tool + // + //const CP::SystematicRegistry& systReg = CP::SystematicRegistry::getInstance(); + const CP::SystematicSet& recSyst = m_EgammaCalibrationAndSmearingTool->recommendedSystematics();; + ANA_MSG_INFO(" Initializing Photon Calibrator Systematics :"); + + m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + + ANA_MSG_INFO("Will be using EgammaCalibrationAndSmearingTool systematic:"); + + auto SystPhotonsNames = std::make_unique< std::vector< std::string > >(); + for ( const auto& syst_it : m_systList ) { + SystPhotonsNames->push_back(syst_it.name()); + ANA_MSG_INFO("\t " << syst_it.name()); + } + ANA_CHECK(m_store->record(std::move(SystPhotonsNames), "photons_Syst"+m_name )); + + //isEM selector tools + //------------------ + //create the selectors + // Tight + const std::string TightSelectorName = m_name + "_PhotonTightIsEMSelector"; + if ( asg::ToolStore::contains(TightSelectorName.c_str()) ) { + m_photonTightIsEMSelector = asg::ToolStore::get(TightSelectorName.c_str()); + } else { + m_photonTightIsEMSelector = new AsgPhotonIsEMSelector ( TightSelectorName.c_str() ); + } + m_photonTightIsEMSelector->msg().setLevel( msg().level() ); + + // Medium + const std::string MediumSelectorName = m_name + "_PhotonMediumIsEMSelector"; + if ( asg::ToolStore::contains(MediumSelectorName.c_str()) ) { + m_photonMediumIsEMSelector = asg::ToolStore::get(MediumSelectorName.c_str()); + } else { + m_photonMediumIsEMSelector = new AsgPhotonIsEMSelector ( MediumSelectorName.c_str() ); + } + m_photonMediumIsEMSelector->msg().setLevel( msg().level() ); + + // Loose + const std::string LooseSelectorName = m_name + "_PhotonLooseIsEMSelector"; + if ( asg::ToolStore::contains(LooseSelectorName.c_str()) ) { + m_photonLooseIsEMSelector = asg::ToolStore::get(LooseSelectorName.c_str()); + } else { + m_photonLooseIsEMSelector = new AsgPhotonIsEMSelector ( LooseSelectorName.c_str() ); + } + m_photonLooseIsEMSelector->msg().setLevel( msg().level() ); + + //set the type of selection + ANA_CHECK( m_photonTightIsEMSelector->setProperty("isEMMask", egammaPID::PhotonTight)); + ANA_CHECK( m_photonMediumIsEMSelector->setProperty("isEMMask", egammaPID::PhotonMedium)); + ANA_CHECK( m_photonLooseIsEMSelector->setProperty("isEMMask", egammaPID::PhotonLoose)); + + //set the configuration file + // todo : monitor the config files! + ANA_CHECK( m_photonTightIsEMSelector->setProperty("ConfigFile", m_tightIDConfigPath)); + ANA_CHECK( m_photonMediumIsEMSelector->setProperty("ConfigFile",m_mediumIDConfigPath)); + ANA_CHECK( m_photonLooseIsEMSelector->setProperty("ConfigFile", m_looseIDConfigPath)); + + + ANA_CHECK( m_photonTightIsEMSelector->initialize()); + ANA_CHECK( m_photonMediumIsEMSelector->initialize()); + ANA_CHECK( m_photonLooseIsEMSelector->initialize()); + + // *********************************************************** + + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + + // fudge MC tool + //-------------- + const std::string VarCorrectionToolName = m_name + "VarCorrectionTool"; + if ( asg::ToolStore::contains(VarCorrectionToolName.c_str()) ) { + m_photonVarCorrectionTool = asg::ToolStore::get(VarCorrectionToolName.c_str()); + } else { + m_photonVarCorrectionTool = new ElectronPhotonVariableCorrectionTool(VarCorrectionToolName.c_str()); + } + m_photonVarCorrectionTool->msg().setLevel( msg().level() ); + + std::string configFilePath = "EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf"; + m_photonVarCorrectionTool->setProperty("ConfigFile", configFilePath); + ANA_CHECK( m_photonVarCorrectionTool->initialize()); + + if (isMC()) { + + int dataType = PATCore::ParticleDataType::Data; + if ( isFastSim() ) { + dataType = PATCore::ParticleDataType::Fast; + } else { + dataType = PATCore::ParticleDataType::Full; + } + ANA_MSG_DEBUG("isSimulation=" << ( isMC() ? "Y" : "N") << " Simulation type: " << ( isFastSim() ? ( isAF3() ? "AF3" : "AFII") : "FullSim" ) << " selected dataType=" << dataType ); + + + // photon efficiency correction tool + //---------------------------------- + //create the tools + + if( !m_overridePhotonCalibMap.empty() ){ + ANA_MSG_WARNING("Overriding photon calibration map to " << m_overridePhotonCalibMap); + ANA_CHECK( m_photonTightEffTool_handle .setProperty("MapFilePath", m_overridePhotonCalibMap) ); + ANA_CHECK( m_photonMediumEffTool_handle.setProperty("MapFilePath", m_overridePhotonCalibMap) ); + ANA_CHECK( m_photonLooseEffTool_handle .setProperty("MapFilePath", m_overridePhotonCalibMap) ); + } + + // set data type + ANA_CHECK( m_photonTightEffTool_handle. setProperty("ForceDataType", dataType)); + ANA_CHECK( m_photonMediumEffTool_handle.setProperty("ForceDataType", dataType)); + ANA_CHECK( m_photonLooseEffTool_handle. setProperty("ForceDataType", dataType)); + + // set debug levels + ANA_CHECK( m_photonTightEffTool_handle. setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_photonMediumEffTool_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK( m_photonLooseEffTool_handle. setProperty("OutputLevel", msg().level())); + + //initialize + ANA_CHECK( m_photonTightEffTool_handle.retrieve()); + ANA_CHECK( m_photonMediumEffTool_handle.retrieve()); + ANA_CHECK( m_photonLooseEffTool_handle.retrieve()); + } + + //IsolationCorrectionTool + ANA_CHECK(m_isolationCorrectionTool_handle.setProperty("OutputLevel", msg().level())); + ANA_CHECK(m_isolationCorrectionTool_handle.retrieve()); + + ANA_MSG_INFO( "PhotonCalibrator Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode PhotonCalibrator :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG("Applying Photon Calibration ... "); + + // get the collection from TEvent or TStore + // + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + const xAOD::PhotonContainer* inPhotons(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName, m_event, m_store, msg()) ); + + ANA_MSG_DEBUG("Retrieve has been completed with container name = " << m_inContainerName); + + // loop over available systematics - remember syst == EMPTY_STRING --> baseline + // prepare a vector of the names of CDV containers + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + ANA_MSG_DEBUG("Systematic Loop for m_systList=" << syst_it.name() ); + // discard photon systematics + // + //if ( (syst_it.name()).find("PH_", 0) != std::string::npos ) { continue; } + + std::string outSCContainerName(m_outSCContainerName); + std::string outSCAuxContainerName(m_outSCAuxContainerName); + std::string outContainerName(m_outContainerName); + + // always append the name of the variation, including nominal which is an empty string + // + outSCContainerName += syst_it.name(); + outSCAuxContainerName += syst_it.name(); + outContainerName += syst_it.name(); + vecOutContainerNames->push_back( syst_it.name() ); + + // apply syst + // + ANA_MSG_DEBUG("syst_it.name()=" << syst_it.name()); + + if ( m_EgammaCalibrationAndSmearingTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure EgammaCalibrationAndSmearingTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + + ANA_MSG_DEBUG("Systematics applied"); + // create shallow copy for calibration - one per syst + // + std::pair< xAOD::PhotonContainer*, xAOD::ShallowAuxContainer* > calibPhotonsSC = xAOD::shallowCopyContainer( *inPhotons ); + + // create ConstDataVector to be eventually stored in TStore + // + ConstDataVector* calibPhotonsCDV = new ConstDataVector(SG::VIEW_ELEMENTS); + calibPhotonsCDV->reserve( calibPhotonsSC.first->size() ); + + // now calibrate! + // four momentum calibration + unsigned int idx(0); + for ( auto phSC_itr : *(calibPhotonsSC.first) ) { + + // set smearing seeding if needed - no need for this after Base,2.1.26 + // m_EgammaCalibrationAndSmearingTool->setRandomSeed(eventInfo->eventNumber() + 100 * idx); + // + ANA_MSG_DEBUG("Checking photon " << idx << " raw pt = " << phSC_itr->pt()*1e-3 << " GeV " ); + + if ( phSC_itr->pt() > 7e3 && !(phSC_itr->caloCluster()) ){ + ANA_MSG_WARNING( "photon "<author() & xAOD::EgammaParameters::AuthorPhoton) || (phSC_itr->author() & xAOD::EgammaParameters::AuthorAmbiguous) ) { + if ( m_EgammaCalibrationAndSmearingTool->applyCorrection( *phSC_itr ) != CP::CorrectionCode::Ok ) { + ANA_MSG_WARNING( "Problem in CP::EgammaCalibrationAndSmearingTool::applyCorrection()"); + } + + if ( m_isolationCorrectionTool_handle->applyCorrection( *phSC_itr ) != CP::CorrectionCode::Ok ) { + ANA_MSG_WARNING( "Problem in CP::IsolationCorrection::applyCorrection()"); + } + } + + ANA_MSG_DEBUG("Calibrated pt with systematic: " << syst_it.name() << " , pt = " << phSC_itr->pt() * 1e-3 << " GeV"); + + ANA_CHECK( decorate(phSC_itr)); + + ++idx; + + } // close calibration loop + + if ( !xAOD::setOriginalObjectLink(*inPhotons, *(calibPhotonsSC.first)) ) { + ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed."); + } + + // save pointers in ConstDataVector with same order + // + ANA_CHECK( HelperFunctions::makeSubsetCont(calibPhotonsSC.first, calibPhotonsCDV, msg())); + + // Sort after copying to CDV. + if ( m_sort ) { + std::sort( calibPhotonsCDV->begin(), calibPhotonsCDV->end(), HelperFunctions::sort_pt ); + } + + // add SC container to TStore + // + ANA_CHECK( m_store->record( calibPhotonsSC.first, outSCContainerName )); + ANA_CHECK( m_store->record( calibPhotonsSC.second, outSCAuxContainerName )); + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( calibPhotonsCDV, outContainerName)); + + } // close loop on systematics + + // add vector to TStore + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonCalibrator :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( m_EgammaCalibrationAndSmearingTool ) { + delete m_EgammaCalibrationAndSmearingTool; + m_EgammaCalibrationAndSmearingTool = nullptr; + } + if ( m_photonVarCorrectionTool ) { + delete m_photonVarCorrectionTool; + m_photonVarCorrectionTool = nullptr; + } + + if ( m_photonTightIsEMSelector ) { + delete m_photonTightIsEMSelector; + m_photonTightIsEMSelector = nullptr; + } + + if (m_photonMediumIsEMSelector) { + delete m_photonMediumIsEMSelector; + m_photonMediumIsEMSelector = nullptr; + } + + if (m_photonLooseIsEMSelector) { + delete m_photonLooseIsEMSelector; + m_photonLooseIsEMSelector = nullptr; + } + + ANA_MSG_INFO( "Finalization done."); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonCalibrator :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonCalibrator :: decorate(xAOD::Photon* photon) + { + // (1) apply fudge factors and (2) evaluate the ID quality + bool isTight(false); + bool isMedium(false); + bool isLoose(false); + if (m_readIDFlagsFromDerivation){ + static SG::AuxElement::ConstAccessor< char > LHDecisionTight( "DFCommonPhotonsIsEMTight" ); + static SG::AuxElement::ConstAccessor< char > LHDecisionMedium( "DFCommonPhotonsIsEMMedium" ); + static SG::AuxElement::ConstAccessor< char > LHDecisionLoose( "DFCommonPhotonsIsEMLoose" ); + if (LHDecisionTight.isAvailable( *photon )) + isTight = LHDecisionTight( *photon ); + if (LHDecisionMedium.isAvailable( *photon )) + isMedium = LHDecisionMedium( *photon ); + if (LHDecisionLoose.isAvailable( *photon )) + isLoose = LHDecisionLoose( *photon ); + } else { + if( isMC() && !isFastSim() ){ + if(m_photonVarCorrectionTool->applyCorrection(*photon) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR( "photonVarCorrectionTool->applyCorrection(*photon) returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + } + isTight = bool(m_photonTightIsEMSelector->accept(photon)); + isMedium = bool(m_photonMediumIsEMSelector->accept(photon)); + isLoose = bool(m_photonLooseIsEMSelector->accept(photon)); + } + photon->auxdecor< bool >( "PhotonID_Tight" ) = isTight; + photon->auxdecor< bool >( "PhotonID_Medium" ) = isMedium; + photon->auxdecor< bool >( "PhotonID_Loose" ) = isLoose; + ANA_MSG_DEBUG("isTight="<<(isTight?"Y":"N")<<" isMedium="<<(isMedium?"Y":"N")<<" isLoose="<<(isLoose?"Y":"N") ); + + // (3) set efficiency correction + if (isMC()) { + const xAOD::CaloCluster* cluster = photon->caloCluster(); + float cluster_eta = 10; + float cluster_et = 0; + if (cluster) { + cluster_eta = cluster->etaBE(2); + if (cluster_eta != 0.0) { + cluster_et = cluster->e() / cosh(cluster_eta); + } + } + + bool inCrack = abs(cluster_eta)>1.37 && abs(cluster_eta)<1.52; + + // photon SF + double photonTightEffSF(1.), photonMediumEffSF(1.), photonLooseEffSF(1.); + double photonTightEffSFError(0.), photonMediumEffSFError(0.), photonLooseEffSFError(0.); + + // configuration files not yet available for 13 TeV :( + //sf only available after basic kinematic selection + if(cluster_et > 10000. && fabs(cluster_eta) < 2.37 && !inCrack){ + // SF + if(m_photonTightEffTool_handle->getEfficiencyScaleFactor(*photon, photonTightEffSF) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + if(m_photonMediumEffTool_handle->getEfficiencyScaleFactor(*photon, photonMediumEffSF) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + if(m_photonLooseEffTool_handle->getEfficiencyScaleFactor(*photon, photonLooseEffSF) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + // SF error + if(m_photonTightEffTool_handle->getEfficiencyScaleFactorError(*photon, photonTightEffSFError) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + if(m_photonMediumEffTool_handle->getEfficiencyScaleFactorError(*photon, photonMediumEffSFError) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + if(m_photonLooseEffTool_handle->getEfficiencyScaleFactorError(*photon, photonLooseEffSFError) == CP::CorrectionCode::Error){ + ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error"); + return EL::StatusCode::FAILURE; + } + } + + photon->auxdecor< float >( "PhotonID_Tight_EffSF" ) = photonTightEffSF; + photon->auxdecor< float >( "PhotonID_Medium_EffSF" ) = photonMediumEffSF; + photon->auxdecor< float >( "PhotonID_Loose_EffSF" ) = photonLooseEffSF; + + photon->auxdecor< float >( "PhotonID_Tight_EffSF_Error" ) = photonTightEffSFError; + photon->auxdecor< float >( "PhotonID_Medium_EffSF_Error" ) = photonMediumEffSFError; + photon->auxdecor< float >( "PhotonID_Loose_EffSF_Error" ) = photonLooseEffSFError; + + ANA_MSG_DEBUG("Tight=" << photonTightEffSF << "(" << photonTightEffSFError << ")" + "Medium=" << photonMediumEffSF << "(" << photonMediumEffSFError << ")" + "Loose=" << photonLooseEffSF << "(" << photonLooseEffSFError << ")"); + } + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_PhotonContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_PhotonContainer.cxx.rst.txt new file mode 100644 index 0000000000..65817a46fa --- /dev/null +++ b/_sources/api/program_listing_file_Root_PhotonContainer.cxx.rst.txt @@ -0,0 +1,521 @@ + +.. _program_listing_file_Root_PhotonContainer.cxx: + +Program Listing for File PhotonContainer.cxx +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/PhotonContainer.h" + + #include + + using namespace xAH; + using std::vector; + using std::string; + + PhotonContainer::PhotonContainer(const std::string& name, const std::string& detailStr, float units, bool mc) + : ParticleContainer(name, detailStr, units, mc, true) + { + + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + m_ptcone20 = new std::vector (); + m_ptvarcone20 = new std::vector (); + m_topoetcone20 = new std::vector (); + m_isIsolated_Cone20 = new std::vector (); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + m_ptcone30 = new std::vector (); + m_ptvarcone30 = new std::vector (); + m_topoetcone30 = new std::vector (); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + m_ptcone40 = new std::vector (); + m_ptvarcone40 = new std::vector (); + m_topoetcone40 = new std::vector (); + m_isIsolated_Cone40CaloOnly = new std::vector (); + m_isIsolated_Cone40 = new std::vector (); + } + + // PID + if(m_infoSwitch.m_PID){ + m_n_IsLoose = 0; + m_n_IsMedium = 0; + m_n_IsTight = 0; + + m_IsLoose = new std::vector (); + m_IsMedium = new std::vector (); + m_IsTight = new std::vector (); + } + + if(m_infoSwitch.m_purity){ + //Purity + m_radhad1 = new std::vector (); + m_radhad = new std::vector (); + m_e277 = new std::vector (); + m_reta = new std::vector (); + m_rphi = new std::vector (); + m_weta2 = new std::vector (); + m_f1 = new std::vector (); + m_wtot = new std::vector (); + m_deltae = new std::vector (); + m_eratio = new std::vector (); + //std::vector m_w1 + } + + if(m_infoSwitch.m_effSF && m_mc){ + m_LooseEffSF =new std::vector(); + m_MediumEffSF=new std::vector(); + m_TightEffSF =new std::vector(); + + m_LooseEffSF_Error =new std::vector(); + m_MediumEffSF_Error=new std::vector(); + m_TightEffSF_Error =new std::vector(); + } + + if(m_infoSwitch.m_trigger){ + m_trigMatched=new std::vector >(); + } + } + + PhotonContainer::~PhotonContainer() + { + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + delete m_ptcone20; + delete m_ptvarcone20; + delete m_topoetcone20; + delete m_isIsolated_Cone20; + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + delete m_ptcone30; + delete m_ptvarcone30; + delete m_topoetcone30; + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + delete m_ptcone40; + delete m_ptvarcone40; + delete m_topoetcone40; + delete m_isIsolated_Cone40; + delete m_isIsolated_Cone40CaloOnly; + } + + // PID + if(m_infoSwitch.m_PID){ + delete m_IsLoose; + delete m_IsMedium; + delete m_IsTight; + } + + if(m_infoSwitch.m_purity){ + delete m_radhad1; + delete m_radhad ; + delete m_e277 ; + delete m_reta ; + delete m_rphi ; + delete m_weta2 ; + delete m_f1 ; + delete m_wtot ; + delete m_deltae; + delete m_eratio; + //std::vector m_w1 + } + + if(m_infoSwitch.m_effSF && m_mc){ + delete m_LooseEffSF; + delete m_MediumEffSF; + delete m_TightEffSF; + + delete m_LooseEffSF_Error; + delete m_MediumEffSF_Error; + delete m_TightEffSF_Error; + } + + if(m_infoSwitch.m_trigger){ + delete m_trigMatched; + } + } + + void PhotonContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + tree->SetBranchStatus ("nph" , 1); + tree->SetBranchAddress ("nph" , &m_n); + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + connectBranch(tree, "ptcone20", &m_ptcone20 ); + connectBranch(tree, "ptvarcone20", &m_ptvarcone20 ); + connectBranch(tree, "topoetcone20", &m_topoetcone20 ); + connectBranch (tree, "isIsolated_Cone20", &m_isIsolated_Cone20 ); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + connectBranch(tree, "ptcone30", &m_ptcone30 ); + connectBranch(tree, "ptvarcone30", &m_ptvarcone30 ); + connectBranch(tree, "topoetcone30", &m_topoetcone30 ); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + connectBranch(tree, "ptcone40", &m_ptcone40 ); + connectBranch(tree, "ptvarcone40", &m_ptvarcone40 ); + connectBranch(tree, "topoetcone40", &m_topoetcone40 ); + connectBranch (tree, "isIsolated_Cone40CaloOnly", &m_isIsolated_Cone40CaloOnly ); + connectBranch (tree, "isIsolated_Cone40", &m_isIsolated_Cone40 ); + } + + // PID + if(m_infoSwitch.m_PID){ + tree->SetBranchStatus (("n"+m_name+"_IsLoose").c_str(), 1); + tree->SetBranchAddress(("n"+m_name+"_IsLoose").c_str(), &m_n_IsLoose); + connectBranch(tree, "IsLoose" , &m_IsLoose ); + + tree->SetBranchStatus (("n"+m_name+"_IsMedium").c_str(), 1); + tree->SetBranchAddress(("n"+m_name+"_IsMedium").c_str(), &m_n_IsMedium); + connectBranch(tree, "IsMedium" , &m_IsMedium); + + tree->SetBranchStatus (("n"+m_name+"_IsTight").c_str(), 1); + tree->SetBranchAddress(("n"+m_name+"_IsTight").c_str(), &m_n_IsTight); + connectBranch(tree, "IsTight" , &m_IsTight ); + } + + + if(m_infoSwitch.m_purity){ + connectBranch(tree,"radhad1", &m_radhad1); + connectBranch(tree,"radhad" , &m_radhad ); + connectBranch(tree,"e277" , &m_e277 ); + connectBranch(tree,"reta" , &m_reta ); + connectBranch(tree,"rphi" , &m_rphi ); + connectBranch(tree,"weta2" , &m_weta2 ); + connectBranch(tree,"f1" , &m_f1 ); + connectBranch(tree,"wtot" , &m_wtot ); + connectBranch(tree,"deltae" , &m_deltae ); + connectBranch(tree,"eratio" , &m_eratio ); + } + + if(m_infoSwitch.m_effSF && m_mc) + { + connectBranch(tree, "LooseEffSF", &m_LooseEffSF); + connectBranch(tree, "MediumEffSF",&m_MediumEffSF); + connectBranch(tree, "TightEffSF", &m_TightEffSF); + + connectBranch(tree, "LooseEffSF_Error", &m_LooseEffSF_Error); + connectBranch(tree, "MediumEffSF_Error",&m_MediumEffSF_Error); + connectBranch(tree, "TightEffSF_Error", &m_TightEffSF_Error); + } + + if(m_infoSwitch.m_trigger) + { + connectBranch >(tree, "trigMatched", &m_trigMatched); + } + + } + + void PhotonContainer::updateParticle(uint idx, Photon& photon) + { + ParticleContainer::updateParticle(idx,photon); + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + photon.ptcone20 = m_ptcone20 ->at(idx); + photon.topoetcone20 = m_topoetcone20 ->at(idx); + photon.ptvarcone20 = m_ptvarcone20 ->at(idx); + photon.isIsolated_Cone20 = m_isIsolated_Cone20 ->at(idx); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + photon.ptcone30 = m_ptcone30 ->at(idx); + photon.topoetcone30 = m_topoetcone30 ->at(idx); + photon.ptvarcone30 = m_ptvarcone30 ->at(idx); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + photon.ptcone40 = m_ptcone40 ->at(idx); + photon.ptvarcone40 = m_ptvarcone40 ->at(idx); + photon.topoetcone40 = m_topoetcone40 ->at(idx); + photon.isIsolated_Cone40CaloOnly = m_isIsolated_Cone40CaloOnly ->at(idx); + photon.isIsolated_Cone40 = m_isIsolated_Cone40 ->at(idx); + } + + // PID + if(m_infoSwitch.m_PID){ + photon.IsLoose = m_IsLoose ->at(idx); + photon.IsMedium = m_IsMedium->at(idx); + photon.IsTight = m_IsTight ->at(idx); + } + + + if(m_infoSwitch.m_purity){ + photon.radhad1 = m_radhad1->at(idx); + photon.radhad = m_radhad ->at(idx); + photon.e277 = m_e277 ->at(idx); + photon.reta = m_reta ->at(idx); + photon.rphi = m_rphi ->at(idx); + photon.weta2 = m_weta2 ->at(idx); + photon.f1 = m_f1 ->at(idx); + photon.wtot = m_wtot ->at(idx); + photon.deltae = m_deltae ->at(idx); + photon.eratio = m_eratio ->at(idx); + } + + if(m_infoSwitch.m_effSF && m_mc){ + photon.LooseEffSF =m_LooseEffSF ->at(idx); + photon.MediumEffSF=m_MediumEffSF->at(idx); + photon.TightEffSF =m_TightEffSF ->at(idx); + + photon.LooseEffSF_Error =m_LooseEffSF_Error ->at(idx); + photon.MediumEffSF_Error=m_MediumEffSF_Error->at(idx); + photon.TightEffSF_Error =m_TightEffSF_Error ->at(idx); + } + + if(m_infoSwitch.m_trigger){ + photon.trigMatched =m_trigMatched->at(idx); + } + + } + + + void PhotonContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + setBranch(tree, "ptcone20", m_ptcone20 ); + setBranch(tree, "ptvarcone20", m_ptvarcone20 ); + setBranch(tree, "topoetcone20", m_topoetcone20 ); + setBranch (tree, "isIsolated_Cone20", m_isIsolated_Cone20 ); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + setBranch(tree, "ptcone30", m_ptcone30 ); + setBranch(tree, "ptvarcone30", m_ptvarcone30 ); + setBranch(tree, "topoetcone30", m_topoetcone30 ); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + setBranch(tree, "ptcone40", m_ptcone40 ); + setBranch(tree, "ptvarcone40", m_ptvarcone40 ); + setBranch(tree, "topoetcone40", m_topoetcone40 ); + setBranch (tree, "isIsolated_Cone40CaloOnly", m_isIsolated_Cone40CaloOnly ); + setBranch (tree, "isIsolated_Cone40", m_isIsolated_Cone40 ); + } + + // PID + if(m_infoSwitch.m_PID){ + tree->Branch(("n"+m_name+"_IsLoose").c_str(), &m_n_IsLoose); + setBranch(tree, "IsLoose" , m_IsLoose ); + + tree->Branch(("n"+m_name+"_IsMedium").c_str(), &m_n_IsMedium); + setBranch(tree, "IsMedium" , m_IsMedium); + + tree->Branch(("n"+m_name+"_IsTight").c_str(), &m_n_IsTight); + setBranch(tree, "IsTight" , m_IsTight ); + } + + // purity + if(m_infoSwitch.m_purity){ + setBranch(tree,"radhad1", m_radhad1); + setBranch(tree,"radhad" , m_radhad ); + setBranch(tree,"e277" , m_e277 ); + setBranch(tree,"reta" , m_reta ); + setBranch(tree,"rphi" , m_rphi ); + setBranch(tree,"weta2" , m_weta2 ); + setBranch(tree,"f1" , m_f1 ); + setBranch(tree,"wtot" , m_wtot ); + setBranch(tree,"deltae" , m_deltae ); + setBranch(tree,"eratio" , m_eratio ); + } + + // effSF + if(m_infoSwitch.m_effSF && m_mc){ + setBranch(tree, "LooseEffSF" , m_LooseEffSF); + setBranch(tree, "MediumEffSF", m_MediumEffSF); + setBranch(tree, "TightEffSF" , m_TightEffSF); + + setBranch(tree, "LooseEffSF_Error" , m_LooseEffSF_Error); + setBranch(tree, "MediumEffSF_Error", m_MediumEffSF_Error); + setBranch(tree, "TightEffSF_Error" , m_TightEffSF_Error); + } + + // trigger + if(m_infoSwitch.m_trigger){ + setBranch >(tree, "trigMatched", m_trigMatched); + } + + return; + } + + + + void PhotonContainer::clear() + { + + ParticleContainer::clear(); + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + m_ptcone20 -> clear() ; + m_ptvarcone20 -> clear() ; + m_topoetcone20 -> clear() ; + m_isIsolated_Cone20 -> clear() ; + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + m_ptcone30 -> clear() ; + m_ptvarcone30 -> clear() ; + m_topoetcone30 -> clear() ; + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + m_ptcone40 -> clear() ; + m_ptvarcone40 -> clear() ; + m_topoetcone40 -> clear(); + m_isIsolated_Cone40CaloOnly-> clear(); + m_isIsolated_Cone40 -> clear() ; + } + + // PID + if(m_infoSwitch.m_PID){ + m_n_IsLoose = 0; + m_IsLoose -> clear(); + + m_n_IsMedium = 0; + m_IsMedium-> clear(); + + m_n_IsTight = 0; + m_IsTight -> clear(); + } + + // purity + if(m_infoSwitch.m_purity){ + m_radhad1-> clear(); + m_radhad -> clear(); + m_e277 -> clear() ; + m_reta -> clear() ; + m_rphi -> clear() ; + m_weta2 -> clear() ; + m_f1 -> clear() ; + m_wtot -> clear() ; + m_deltae -> clear(); + m_eratio -> clear(); + //std::vector m_w1 + } + + // effSF + if(m_infoSwitch.m_effSF && m_mc){ + m_LooseEffSF ->clear(); + m_MediumEffSF->clear(); + m_TightEffSF ->clear(); + + m_LooseEffSF_Error ->clear(); + m_MediumEffSF_Error->clear(); + m_TightEffSF_Error ->clear(); + } + + // trigger + if(m_infoSwitch.m_trigger){ + m_trigMatched->clear(); + } + + } + + + void PhotonContainer::FillPhoton( const xAOD::Photon* photon ){ + return FillPhoton(static_cast(photon)); + } + + void PhotonContainer::FillPhoton( const xAOD::IParticle* particle ) + { + + ParticleContainer::FillParticle(particle); + + const xAOD::Photon* photon=dynamic_cast(particle); + + + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ + m_ptcone20 -> push_back( photon->isolation( xAOD::Iso::ptcone20 ) / m_units ); + m_ptvarcone20 -> push_back( photon->isolation( xAOD::Iso::ptvarcone20 ) / m_units ); + m_topoetcone20 -> push_back( photon->isolation( xAOD::Iso::topoetcone20) / m_units ); + static SG::AuxElement::Accessor isIsoCone20Acc ("isIsolated_FixedCutLoose"); + safeFill(photon, isIsoCone20Acc, m_isIsolated_Cone20, -1); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ + m_ptcone30 -> push_back( photon->isolation( xAOD::Iso::ptcone30 ) / m_units ); + m_ptvarcone30 -> push_back( photon->isolation( xAOD::Iso::ptvarcone30 ) / m_units ); + m_topoetcone30 -> push_back( photon->isolation( xAOD::Iso::topoetcone30) / m_units ); + } + if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ + m_ptcone40 -> push_back( photon->isolation( xAOD::Iso::ptcone40 ) / m_units ); + m_ptvarcone40 -> push_back( photon->isolation( xAOD::Iso::ptvarcone40 ) / m_units ); + m_topoetcone40 -> push_back( photon->isolation( xAOD::Iso::topoetcone40) / m_units ); + + static SG::AuxElement::Accessor isIsoCone40CaloOnlyAcc ("isIsolated_FixedCutTightCaloOnly"); + safeFill(photon, isIsoCone40CaloOnlyAcc, m_isIsolated_Cone40CaloOnly, -1); + + static SG::AuxElement::Accessor isIsoCone40Acc ("isIsolated_FixedCutTight"); + safeFill(photon, isIsoCone40Acc, m_isIsolated_Cone40, -1); + } + + if ( m_infoSwitch.m_PID ) { + + static SG::AuxElement::Accessor phLooseAcc ("PhotonID_Loose"); + safeFill(photon, phLooseAcc, m_IsLoose, -1); + + static SG::AuxElement::Accessor phMediumAcc ("PhotonID_Medium"); + safeFill(photon, phMediumAcc, m_IsMedium, -1); + + static SG::AuxElement::Accessor phTightAcc ("PhotonID_Tight"); + safeFill(photon, phTightAcc, m_IsTight, -1); + + } + + if (m_infoSwitch.m_purity) { + static SG::AuxElement::Accessor radhad1 ("Rhad1" ); + static SG::AuxElement::Accessor radhad ("Rhad" ); + static SG::AuxElement::Accessor e277 ("e277" ); + static SG::AuxElement::Accessor reta ("Reta" ); + static SG::AuxElement::Accessor rphi ("Rphi" ); + static SG::AuxElement::Accessor weta2 ("weta2" ); + static SG::AuxElement::Accessor f1 ("f1" ); + static SG::AuxElement::Accessor wtot ("wtots1" ); + //static SG::AuxElement::Accessor w1 ("w1" ); + static SG::AuxElement::Accessor deltae ("DeltaE" ); + static SG::AuxElement::Accessor eratio ("Eratio" ); + + m_radhad1 -> push_back( radhad1(*photon) ); + m_radhad -> push_back( radhad (*photon) ); + m_e277 -> push_back( e277 (*photon) ); + m_reta -> push_back( reta (*photon) ); + m_rphi -> push_back( rphi (*photon) ); + m_weta2 -> push_back( weta2 (*photon) ); + m_f1 -> push_back( f1 (*photon) ); + m_wtot -> push_back( wtot (*photon) ); + m_deltae -> push_back( deltae (*photon) ); + m_eratio -> push_back( eratio (*photon) ); + } + + if (m_infoSwitch.m_effSF && m_mc) { + static SG::AuxElement::Accessor PhotonID_Tight_EffSF ("PhotonID_Tight_EffSF" ); + static SG::AuxElement::Accessor PhotonID_Medium_EffSF ("PhotonID_Medium_EffSF" ); + static SG::AuxElement::Accessor PhotonID_Loose_EffSF ("PhotonID_Loose_EffSF" ); + + static SG::AuxElement::Accessor PhotonID_Tight_EffSF_Error ("PhotonID_Tight_EffSF_Error" ); + static SG::AuxElement::Accessor PhotonID_Medium_EffSF_Error ("PhotonID_Medium_EffSF_Error" ); + static SG::AuxElement::Accessor PhotonID_Loose_EffSF_Error ("PhotonID_Loose_EffSF_Error" ); + + + m_TightEffSF ->push_back( PhotonID_Tight_EffSF (*photon) ); + m_MediumEffSF ->push_back( PhotonID_Medium_EffSF(*photon) ); + m_LooseEffSF ->push_back( PhotonID_Loose_EffSF (*photon) ); + + m_TightEffSF_Error ->push_back( PhotonID_Tight_EffSF_Error (*photon) ); + m_MediumEffSF_Error ->push_back( PhotonID_Medium_EffSF_Error(*photon) ); + m_LooseEffSF_Error ->push_back( PhotonID_Loose_EffSF_Error (*photon) ); + } + + if (m_infoSwitch.m_trigger) { + static SG::AuxElement::Accessor< std::vector< std::string> > trigMatched("trigMatched"); + + m_trigMatched ->push_back( trigMatched(*photon) ); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_PhotonHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_PhotonHists.cxx.rst.txt new file mode 100644 index 0000000000..e2a72351ea --- /dev/null +++ b/_sources/api/program_listing_file_Root_PhotonHists.cxx.rst.txt @@ -0,0 +1,81 @@ + +.. _program_listing_file_Root_PhotonHists.cxx: + +Program Listing for File PhotonHists.cxx +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + + #include "xAODAnaHelpers/HelperFunctions.h" + ANA_MSG_SOURCE(msgPhotonHists, "PhotonHists") + + PhotonHists :: PhotonHists (std::string name, std::string detailStr) : + IParticleHists(name, detailStr, "photon", "photon"), + m_infoSwitch(new HelperClasses::PhotonInfoSwitch(m_detailStr)) + { } + + PhotonHists :: ~PhotonHists () { + if(m_infoSwitch) delete m_infoSwitch; + } + + StatusCode PhotonHists::initialize() { + using namespace msgPhotonHists; + ANA_CHECK( IParticleHists::initialize()); + + // isolation + if( m_infoSwitch->m_isolation ) { + if(m_debug) Info("PhotonHists::initialize()", "adding isolation plots"); + m_ptcone20 = book(m_name, "ptcone20" , "ptcone20", 120, -10, 100); + m_ptcone30 = book(m_name, "ptcone30" , "ptcone30", 120, -10, 100); + m_ptcone40 = book(m_name, "ptcone40" , "ptcone40", 120, -10, 100); + m_ptvarcone20 = book(m_name, "ptvarcone20" , "ptvarcone20", 120, -10, 100); + m_ptvarcone30 = book(m_name, "ptvarcone30" , "ptvarcone30", 120, -10, 100); + m_ptvarcone40 = book(m_name, "ptvarcone40" , "ptvarcone40", 120, -10, 100); + m_topoetcone20= book(m_name, "topoetcone20" , "topoetcone20", 120, -10, 100); + m_topoetcone30= book(m_name, "topoetcone30" , "topoetcone30", 120, -10, 100); + m_topoetcone40= book(m_name, "topoetcone40" , "topoetcone40", 120, -10, 100); + } + + return StatusCode::SUCCESS; + } + + StatusCode PhotonHists::execute( const xAOD::Photon* photon, float eventWeight, const xAOD::EventInfo* eventInfo ) { + return execute(static_cast(photon), eventWeight, eventInfo); + } + + StatusCode PhotonHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgPhotonHists; + ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo)); + + if(m_debug) std::cout << "PhotonHists: in execute " <(particle); + if(photon==0) + { + ANA_MSG_ERROR( "Cannot convert IParticle to Photon" ); + return StatusCode::FAILURE; + } + + // isolation + if ( m_infoSwitch->m_isolation ) { + m_ptcone20 ->Fill( photon->isolation( xAOD::Iso::ptcone20 ) / 1e3, eventWeight ); + m_ptcone30 ->Fill( photon->isolation( xAOD::Iso::ptcone30 ) / 1e3, eventWeight ); + m_ptcone40 ->Fill( photon->isolation( xAOD::Iso::ptcone40 ) / 1e3, eventWeight ); + m_ptvarcone20 ->Fill( photon->isolation( xAOD::Iso::ptvarcone20 ) / 1e3, eventWeight ); + m_ptvarcone30 ->Fill( photon->isolation( xAOD::Iso::ptvarcone30 ) / 1e3, eventWeight ); + m_ptvarcone40 ->Fill( photon->isolation( xAOD::Iso::ptvarcone40 ) / 1e3, eventWeight ); + m_topoetcone20->Fill( photon->isolation( xAOD::Iso::topoetcone20) / 1e3, eventWeight ); + m_topoetcone30->Fill( photon->isolation( xAOD::Iso::topoetcone30) / 1e3, eventWeight ); + m_topoetcone40->Fill( photon->isolation( xAOD::Iso::topoetcone40) / 1e3, eventWeight ); + } + + return StatusCode::SUCCESS; + } + diff --git a/_sources/api/program_listing_file_Root_PhotonHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_PhotonHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..e401689e7c --- /dev/null +++ b/_sources/api/program_listing_file_Root_PhotonHistsAlgo.cxx.rst.txt @@ -0,0 +1,44 @@ + +.. _program_listing_file_Root_PhotonHistsAlgo.cxx: + +Program Listing for File PhotonHistsAlgo.cxx +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + + #include + + #include + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(PhotonHistsAlgo) + + PhotonHistsAlgo :: PhotonHistsAlgo () : + IParticleHistsAlgo("PhotonHistsAlgo") + { } + + EL::StatusCode PhotonHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("PhotonHistsAlgo").ignore(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonHistsAlgo::AddHists( std::string name ) { + return IParticleHistsAlgo::AddHists(name); + } + + EL::StatusCode PhotonHistsAlgo :: execute () { + return IParticleHistsAlgo::execute(); + } diff --git a/_sources/api/program_listing_file_Root_PhotonSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_PhotonSelector.cxx.rst.txt new file mode 100644 index 0000000000..3beb51e948 --- /dev/null +++ b/_sources/api/program_listing_file_Root_PhotonSelector.cxx.rst.txt @@ -0,0 +1,626 @@ + +.. _program_listing_file_Root_PhotonSelector.cxx: + +Program Listing for File PhotonSelector.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************** + * + * Interface to CP Photon selection tool(s). + * + *******************************************/ + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include + #include + + #include + #include + #include + + + #include + + // ROOT include(s): + #include + #include + #include + + + // this is needed to distribute the algorithm to the workers + ClassImp(PhotonSelector) + + PhotonSelector :: PhotonSelector () : + Algorithm("PhotonSelector") + { + } + + PhotonSelector::~PhotonSelector() {} + + EL::StatusCode PhotonSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "PhotonSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_INFO( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode PhotonSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing PhotonSelector Interface... "); + + // Let's see if the algorithm has been already used before: + // if yes, will write object cutflow in a different histogram! + // + // This is the case when the selector algorithm is used for + // preselecting objects, and then again for the final selection + // + ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className ); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_ph_cutflowHist_1 = (TH1D*)file->Get("cutflow_photons_1"); + + m_ph_cutflow_all = m_ph_cutflowHist_1->GetXaxis()->FindBin("all"); + m_ph_cutflow_author_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("author_cut"); + m_ph_cutflow_OQ_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("OQ_cut"); + m_ph_cutflow_PID_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("PID_cut"); + m_ph_cutflow_ptmax_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut"); + m_ph_cutflow_ptmin_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut"); + m_ph_cutflow_eta_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied + m_ph_cutflow_iso_cut = m_ph_cutflowHist_1->GetXaxis()->FindBin("iso_cut"); + + + } + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + + // Parse input isolation WP list, split by comma, and put into a vector for later use + // Make sure it's not empty! + // + std::string token; + std::istringstream ss(m_IsoWPList); + while ( std::getline(ss, token, ',') ) { + m_IsoKeys.push_back(token); + } + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + // ************************************* + // + // Initialise CP::IsolationSelectionTool + // + // ************************************* + const std::string isoToolName = m_name+"_PhotonIso"; + if ( asg::ToolStore::contains(isoToolName.c_str()) ) { + m_IsolationSelectionTool = asg::ToolStore::get(isoToolName.c_str()); + } else { + m_IsolationSelectionTool = new CP::IsolationSelectionTool(isoToolName.c_str()); + } + ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" ); + ANA_CHECK( m_IsolationSelectionTool->setProperty("PhotonWP", (m_IsoKeys.at(0)).c_str())); + ANA_CHECK( m_IsolationSelectionTool->initialize()); + + for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) { + ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" ); + ANA_CHECK( m_IsolationSelectionTool->addPhotonWP( (*WP_itr).c_str() )); + } + + // ********************************************************************************************** + + ANA_MSG_INFO( "PhotonSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode PhotonSelector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Photon Selection... "); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + // + float mcEvtWeight(1.0); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + + m_numEvent++; + + bool eventPass(false); + bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal + const xAOD::PhotonContainer* inPhotons(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_inputAlgoSystNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName, m_event, m_store, msg()) ); + + // create output container (if requested) + ConstDataVector* selectedPhotons(nullptr); + if ( m_createSelectedContainer ) { selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected photons, and return if event passes object selection + // + eventPass = executeSelection(inPhotons, mcEvtWeight, countPass, selectedPhotons ); + + if ( m_createSelectedContainer) { + if ( eventPass ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName )); + } else { + // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it! + delete selectedPhotons; selectedPhotons = nullptr; + } + } + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) ); + + // prepare a vector of the names of CDV containers for usage by downstream algos + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + ANA_MSG_DEBUG( " input list of syst size: " << static_cast(systNames->size()) ); + + // loop over systematic sets + // + bool eventPassThisSyst(false); + for ( auto systName : *systNames) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName + systName, m_event, m_store, msg())); + + // create output container (if requested) - one for each systematic + // + ConstDataVector* selectedPhotons(nullptr); + if ( m_createSelectedContainer ) { selectedPhotons = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected photons, and return if event passes object selection + // + eventPassThisSyst = executeSelection( inPhotons, mcEvtWeight, countPass, selectedPhotons ); + + if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal) + + if ( eventPassThisSyst ) { + // save the string of syst set under question if event is passing the selection + // + vecOutContainerNames->push_back( systName ); + } + + // if for at least one syst set the event passes selection, this will remain true! + // + eventPass = ( eventPass || eventPassThisSyst ); + + ANA_MSG_DEBUG( " syst name: " << systName << " output container name: " << m_outContainerName+systName ); + + if ( m_createSelectedContainer ) { + if ( eventPassThisSyst ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName+systName )); + } else { + // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it! + // + delete selectedPhotons; selectedPhotons = nullptr; + } + } + } + + ANA_MSG_DEBUG(" output list of syst size: " << static_cast(vecOutContainerNames->size()) ); + + // record in TStore the list of systematics names that should be considered down stream + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + } + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if( !eventPass ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + + return EL::StatusCode::SUCCESS; + } + + bool PhotonSelector :: executeSelection ( const xAOD::PhotonContainer* inPhotons, + float mcEvtWeight, bool countPass, + ConstDataVector* selectedPhotons ) + { + int nPass(0); int nObj(0); + static SG::AuxElement::Decorator< char > passSelDecor( "passSel" ); + + for ( auto ph_itr : *inPhotons ) { // duplicated of basic loop + + // if only looking at a subset of photons make sure all are decorated + // + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *ph_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + + bool passSel = this->passCuts( ph_itr ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *ph_itr ) = passSel; + } + + if ( passSel ) { + nPass++; + if ( m_createSelectedContainer ) { + selectedPhotons->push_back( ph_itr ); + } + } + } + + // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal) + // + if ( countPass ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + // + if ( m_pass_min > 0 && nPass < m_pass_min ) { + return false; + } + if ( m_pass_max >= 0 && nPass > m_pass_max ) { + return false; + } + + // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal) + // + if ( countPass ){ + m_numEventPass++; + m_weightNumEventPass += mcEvtWeight; + } + + return true; + } + + bool PhotonSelector :: passCuts( const xAOD::Photon* photon ) + { + float et = photon->pt(); + + // all the eta cuts are done using the measurement of the cluster position with the 2nd layer cluster, + // as for Egamma CP recommendation + // + float eta = ( photon->caloCluster() ) ? photon->caloCluster()->etaBE(2) : -999.0; + + // photon ID key name set + std::string photonIDKeyName = "PhotonID_"+m_photonIdCut; + if ( (!(photon->isAvailable< bool >( photonIDKeyName ) )) and (m_photonIdCut != "None") ) { + ANA_MSG_ERROR("Please call PhotonCalibrator before calling PhotonSelector, or check the quality requirement (should be either of Tight/Medium/Loose) [" << m_name << " " << photonIDKeyName << "]"); + } + + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_all, 1 ); + + // ********************************************************************************************************************************************************************* + // + // author cut + // + if( m_doAuthorCut ) { + if( ! ( (photon->author() & xAOD::EgammaParameters::AuthorPhoton) || (photon->author() & xAOD::EgammaParameters::AuthorAmbiguous) ) ) { + ANA_MSG_DEBUG( "Photon failed author kinematic cut." ); + return false; + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_author_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // Object Quality cut + // + if ( m_doOQCut ) { + if (m_readOQFromDerivation){ + if (!(*photon).isGoodOQ(xAOD::EgammaParameters::BADCLUSPHOTON)) + return 0; + }else{ + uint32_t oq= photon->auxdata("OQ"); + float reta = photon->showerShapeValue(xAOD::EgammaParameters::Reta); + float f1 = photon->showerShapeValue(xAOD::EgammaParameters::f1); + if ( (oq & 1073741824)!=0 || + ( (oq&134217728)!=0 && (reta >0.98 || f1 > 0.4 || (oq & 67108864) != 0) ) ) { + ANA_MSG_DEBUG( "Electron failed Object Quality cut." ); + return 0; + } + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_OQ_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // ID cut + // + if ( m_photonIdCut != "None" ) { + // it crashes in case the "PhotonID_X" is not stored on purpose + if ( ! photon->auxdecor< bool >( photonIDKeyName ) ) { + ANA_MSG_DEBUG( "Photon failed ID cut." ); + return false; + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_PID_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // pT max cut + // + if ( m_pT_max != 1e8 ) { + if ( et > m_pT_max ) { + ANA_MSG_DEBUG( "Photon failed pT max cut." ); + return false; + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_ptmax_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // pT min cut + // + if ( m_pT_min != 1e8 ) { + if ( et < m_pT_min ) { + ANA_MSG_DEBUG( "Photon failed pT min cut." ); + return false; + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_ptmin_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // eta cuts + // + + // |eta| max cut + // + if ( m_eta_max != 1e8 ) { + if ( fabs(eta) > m_eta_max ) { + ANA_MSG_DEBUG( "Photon failed |eta| max cut." ); + return false; + } + } + // |eta| crack veto + // + if ( m_vetoCrack ) { + if ( fabs( eta ) > 1.37 && fabs( eta ) < 1.52 ) { + ANA_MSG_DEBUG( "Photon failed |eta| crack veto cut." ); + return false; + } + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_eta_cut, 1 ); + + // ********************************************************************************************************************************************************************* + // + // isolation cut + // + + // Get the "list" of input WPs with the accept() decision from the tool + // + auto accept_list = m_IsolationSelectionTool->accept( *photon ); + + + // Decorate w/ decision for all input WPs + // + const std::string base_decor("isIsolated"); + for ( auto WP_itr : m_IsoKeys ) { + + std::string decorWP = base_decor + "_" + WP_itr; + + ANA_MSG_DEBUG( "Decorate photon with " << decorWP << " - accept() ? " << accept_list.getCutResult( WP_itr.c_str()) ); + photon->auxdecor(decorWP) = static_cast( accept_list.getCutResult( WP_itr.c_str() ) ); + + } + + // Apply the cut if needed + // + if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) { + ANA_MSG_DEBUG( "Photon failed isolation cut " << m_MinIsoWPCut ); + return false; + } + if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_iso_cut, 1 ); + + return true; + } + + + EL::StatusCode PhotonSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + if ( m_useCutFlow ) { + ANA_MSG_INFO( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + ANA_MSG_DEBUG("Cutflow filled"); + + if (m_IsolationSelectionTool) { + delete m_IsolationSelectionTool; + m_IsolationSelectionTool = nullptr; + } + + ANA_MSG_DEBUG("Isolation Tool deleted"); + + /* + if (m_match_Tool) { + delete m_match_Tool; + m_match_Tool = nullptr; + } + */ + + ANA_MSG_DEBUG("Matching Tool deleted"); + + ANA_MSG_INFO( "Finalization done."); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode PhotonSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_TauCalibrator.cxx.rst.txt b/_sources/api/program_listing_file_Root_TauCalibrator.cxx.rst.txt new file mode 100644 index 0000000000..0f03a9e387 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TauCalibrator.cxx.rst.txt @@ -0,0 +1,357 @@ + +.. _program_listing_file_Root_TauCalibrator.cxx: + +Program Listing for File TauCalibrator.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TauCalibrator.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************** + * + * Interface to CP Tau calibration tool. + * + * F. Scutti (federico.scutti@cern.ch) + ********************************************/ + + + // c++ include(s): + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODTau/TauJet.h" + #include "xAODTau/TauxAODHelpers.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + #include "xAODCore/ShallowCopy.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/TauCalibrator.h" + #include "PATInterfaces/CorrectionCode.h" // to check the return correction code status of tools + + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(TauCalibrator) + + TauCalibrator :: TauCalibrator () : + Algorithm("TauCalibrator") + { + } + + EL::StatusCode TauCalibrator :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TauCalibrator" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing TauCalibrator Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + // shallow copies are made with this output container name + m_outSCContainerName = m_outContainerName + "ShallowCopy"; + m_outSCAuxContainerName = m_outSCContainerName + "Aux."; // the period is very important! + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + + // ************************************************ + // + // initialize the TauAnalysisTools::TauSmearingTool + // + // ************************************************ + + // Options summarised here: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TauRecommendationsR22 + if (!m_RecommendationTag.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("RecommendationTag",m_RecommendationTag)); + if (!m_generator.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("Generator",m_generator)); + if (!m_campaign.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("Campaign",m_campaign)); + ANA_CHECK(m_tauSmearingTool_handle.setProperty("MVATESQualityCheck",m_applyMVATESQualityCheck)); + ANA_CHECK(m_tauSmearingTool_handle.setProperty("SkipTruthMatchCheck",m_skipTruthMatchCheck)); + if ( isFastSim() ){ + ANA_MSG_INFO( "Setting simulation flavour to Fast Sim"); + ANA_CHECK(m_tauSmearingTool_handle.setProperty("useFastSim", 1)); + } else { + ANA_CHECK(m_tauSmearingTool_handle.setProperty("useFastSim", 0)); + } + ANA_CHECK(m_tauSmearingTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_tauSmearingTool_handle); + + // Get a list of recommended systematics for this tool + // + const CP::SystematicSet& recSyst = m_tauSmearingTool_handle->recommendedSystematics(); + + ANA_MSG_INFO(" Initializing Tau Calibrator Systematics :"); + // + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! + // + m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() ); + + ANA_MSG_INFO("Will be using TauSmearingTool systematic:"); + auto SystTausNames = std::make_unique< std::vector< std::string > >(); + for ( const auto& syst_it : m_systList ) { + if ( m_systName.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + SystTausNames->push_back(syst_it.name()); + ANA_MSG_INFO("\t " << syst_it.name()); + } + + ANA_CHECK(m_store->record(std::move(SystTausNames), "taus_Syst"+m_name )); + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD); + } + + ANA_MSG_INFO( "TauCalibrator Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Tau Calibration And Smearing ... "); + + m_numEvent++; + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + + // get the collections from TEvent or TStore + // + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + const xAOD::TauJetContainer* inTaus(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) ); + + // loop over available systematics - remember syst == EMPTY_STRING --> baseline + // prepare a vector of the names of CDV containers + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + + std::string outSCContainerName(m_outSCContainerName); + std::string outSCAuxContainerName(m_outSCAuxContainerName); + std::string outContainerName(m_outContainerName); + + // always append the name of the variation, including nominal which is an empty string + // + outSCContainerName += syst_it.name(); + outSCAuxContainerName += syst_it.name(); + outContainerName += syst_it.name(); + vecOutContainerNames->push_back( syst_it.name() ); + + // apply syst + // + if ( m_tauSmearingTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR( "Failed to configure TauSmearingTool for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + + // create shallow copy for calibration - one per syst + // + std::pair< xAOD::TauJetContainer*, xAOD::ShallowAuxContainer* > calibTausSC = xAOD::shallowCopyContainer( *inTaus ); + // create ConstDataVector to be eventually stored in TStore + // + ConstDataVector* calibTausCDV = new ConstDataVector(SG::VIEW_ELEMENTS); + calibTausCDV->reserve( calibTausSC.first->size() ); + + // now calibrate! + // + unsigned int idx(0); + if ( isMC() ) { + + for ( auto tauSC_itr : *(calibTausSC.first) ) { + + ANA_MSG_DEBUG( " uncailbrated tau " << idx << ", pt = " << tauSC_itr->pt()*1e-3 << " GeV"); + if(xAOD::TauHelpers::getTruthParticle(tauSC_itr)){ + if ( m_tauSmearingTool_handle->applyCorrection(*tauSC_itr) == CP::CorrectionCode::Error ) { // Can have CorrectionCode values of Ok, OutOfValidityRange, or Error. Here only checking for Error. + ANA_MSG_WARNING( "TauSmearingTool returned Error CorrectionCode"); // If OutOfValidityRange is returned no modification is made and the original tau values are taken. + } + } + + ANA_MSG_DEBUG( " corrected tau pt = " << tauSC_itr->pt()*1e-3 << " GeV"); + + ++idx; + + } // close calibration loop + } + + ANA_MSG_DEBUG( "setOriginalObjectLink"); + if ( !xAOD::setOriginalObjectLink(*inTaus, *(calibTausSC.first)) ) { + ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed."); + } + + // save pointers in ConstDataVector with same order + // + ANA_MSG_DEBUG( "makeSubsetCont"); + ANA_CHECK( HelperFunctions::makeSubsetCont(calibTausSC.first, calibTausCDV, msg())); + ANA_MSG_DEBUG( "done makeSubsetCont"); + + // sort after coping to CDV + if ( m_sort ) { + ANA_MSG_DEBUG( "sorting"); + std::sort( calibTausCDV->begin(), calibTausCDV->end(), HelperFunctions::sort_pt ); + } + + // add SC container to TStore + // + ANA_MSG_DEBUG( "recording calibTausSC"); + ANA_CHECK( m_store->record( calibTausSC.first, outSCContainerName )); + ANA_CHECK( m_store->record( calibTausSC.second, outSCAuxContainerName )); + + // + // add ConstDataVector to TStore + // + ANA_MSG_DEBUG( "record calibTausCDV"); + ANA_CHECK( m_store->record( calibTausCDV, outContainerName)); + + } // close loop on systematics + + // add vector to TStore + // + ANA_MSG_DEBUG( "record m_outputAlgoSystNames"); + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + ANA_MSG_DEBUG( "Left "); + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode TauCalibrator :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauCalibrator :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TauCalibrator :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_TauContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_TauContainer.cxx.rst.txt new file mode 100644 index 0000000000..4675ce7c99 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TauContainer.cxx.rst.txt @@ -0,0 +1,620 @@ + +.. _program_listing_file_Root_TauContainer.cxx: + +Program Listing for File TauContainer.cxx +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TauContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/TauContainer.h" + + #include + + using namespace xAH; + using std::vector; + using std::string; + + TauContainer::TauContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs) + : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs) + { + + // trigger + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched = new vector (); + m_isTrigMatchedToChain = new vector > (); + m_listTrigChains = new vector (); + } + + if( m_infoSwitch.m_kinematic) { + m_ntrk = new std::vector (); + m_charge = new std::vector (); + } + + // might need to delete these + if( m_infoSwitch.m_JetID) { + m_isJetRNNSigVeryLoose = new std::vector (); + m_isJetRNNSigLoose = new std::vector (); + m_isJetRNNSigMedium = new std::vector (); + m_isJetRNNSigTight = new std::vector (); + + m_JetRNNScore = new std::vector (); + m_JetRNNScoreSigTrans = new std::vector (); + } + + if( m_infoSwitch.m_EleVeto) { + m_isEleRNNLoose = new std::vector (); + m_isEleRNNMedium = new std::vector (); + m_isEleRNNTight = new std::vector (); + + m_EleRNNScore = new std::vector (); + m_passEleOLR = new std::vector (); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + m_tau_matchedJetWidth = new std::vector (); + m_tau_matchedJetJvt = new std::vector (); + } + + if( m_infoSwitch.m_trackAll) { + m_tau_tracks_pt = new std::vector< std::vector > (); + m_tau_tracks_eta = new std::vector< std::vector > (); + m_tau_tracks_phi = new std::vector< std::vector > (); + + m_tau_tracks_isCore = new std::vector< std::vector > (); + m_tau_tracks_isWide = new std::vector< std::vector > (); + m_tau_tracks_failTrackFilter = new std::vector< std::vector > (); + m_tau_tracks_passTrkSel = new std::vector< std::vector > (); + m_tau_tracks_isClCharged = new std::vector< std::vector > (); + m_tau_tracks_isClIso = new std::vector< std::vector > (); + m_tau_tracks_isClConv = new std::vector< std::vector > (); + m_tau_tracks_isClFake = new std::vector< std::vector > (); + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + m_TauEff_SF = new std::map< std::string, std::vector< std::vector< float > > >(); + m_TauTrigEff_SF = new std::map< std::string, std::vector< std::vector< float > > >(); + + } + + } + + TauContainer::~TauContainer() + { + + // trigger + if ( m_infoSwitch.m_trigger ) { + delete m_isTrigMatched ; + delete m_isTrigMatchedToChain ; + delete m_listTrigChains ; + } + + if (m_infoSwitch.m_kinematic){ + delete m_ntrk; + delete m_charge; + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + delete m_TauEff_SF; + delete m_TauTrigEff_SF; + + } + + // might need to delete these + if( m_infoSwitch.m_JetID) { + delete m_isJetRNNSigVeryLoose; + delete m_isJetRNNSigLoose; + delete m_isJetRNNSigMedium; + delete m_isJetRNNSigTight; + + delete m_JetRNNScore; + delete m_JetRNNScoreSigTrans; + } + + if( m_infoSwitch.m_EleVeto) { + delete m_isEleRNNLoose; + delete m_isEleRNNMedium; + delete m_isEleRNNTight; + + delete m_EleRNNScore; + + delete m_passEleOLR; + } + + if( m_infoSwitch.m_xahTauJetMatching) { + delete m_tau_matchedJetWidth; + delete m_tau_matchedJetJvt; + } + + if( m_infoSwitch.m_trackAll) { + delete m_tau_tracks_pt; + delete m_tau_tracks_eta; + delete m_tau_tracks_phi; + + delete m_tau_tracks_isCore; + delete m_tau_tracks_isWide; + delete m_tau_tracks_failTrackFilter; + delete m_tau_tracks_passTrkSel; + delete m_tau_tracks_isClCharged; + delete m_tau_tracks_isClIso; + delete m_tau_tracks_isClConv; + delete m_tau_tracks_isClFake; + } + + } + + void TauContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + if ( m_infoSwitch.m_trigger ){ + connectBranch (tree, "isTrigMatched", &m_isTrigMatched); + connectBranch >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain ); + connectBranch (tree, "listTrigChains", &m_listTrigChains ); + } + + if ( m_infoSwitch.m_kinematic ){ + connectBranch (tree, "ntrk", &m_ntrk); + connectBranch (tree, "charge", &m_charge ); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& taueff : m_infoSwitch.m_tauEffWPs) { + tree->SetBranchStatus ( (m_name + "_TauEff_SF_" + taueff).c_str() , 1); + tree->SetBranchAddress( (m_name + "_TauEff_SF_" + taueff).c_str() , & (*m_TauEff_SF)[ taueff ] ); + + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->SetBranchStatus ( (m_name + "_TauTrigEff_SF_" + trig).c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_TauTrigEff_SF_" + trig).c_str() , & (*m_TauTrigEff_SF)[ trig ] ); + + } + } + + // might need to delete these + if ( m_infoSwitch.m_JetID ){ + connectBranch (tree, "isJetRNNSigVeryLoose", &m_isJetRNNSigVeryLoose); + connectBranch (tree, "isJetRNNSigLoose", &m_isJetRNNSigLoose); + connectBranch (tree, "isJetRNNSigMedium", &m_isJetRNNSigMedium); + connectBranch (tree, "isJetRNNSigTight", &m_isJetRNNSigTight); + + connectBranch (tree, "JetRNNScore", &m_JetRNNScore); + connectBranch (tree, "JetRNNScoreSigTrans", &m_JetRNNScoreSigTrans); + } + + if ( m_infoSwitch.m_EleVeto ){ + connectBranch (tree, "isEleRNNLoose", &m_isEleRNNLoose); + connectBranch (tree, "isEleRNNMedium", &m_isEleRNNMedium); + connectBranch (tree, "isEleRNNTight", &m_isEleRNNTight); + + connectBranch (tree, "EleRNNScore", &m_EleRNNScore); + connectBranch (tree, "passEleOLR", &m_passEleOLR); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + connectBranch (tree, "matchedJetWidth", &m_tau_matchedJetWidth); + connectBranch (tree, "matchedJetJvt", &m_tau_matchedJetJvt); + } + + if( m_infoSwitch.m_trackAll) { + tree->SetBranchStatus ( (m_name + "_tracks_pt").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_pt").c_str() , &m_tau_tracks_pt ); + + tree->SetBranchStatus ( (m_name + "_tracks_eta").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_eta").c_str() , &m_tau_tracks_eta ); + + tree->SetBranchStatus ( (m_name + "_tracks_phi").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_phi").c_str() , &m_tau_tracks_phi ); + + tree->SetBranchStatus ( (m_name + "_tracks_isCore").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isCore").c_str() , &m_tau_tracks_isCore ); + + tree->SetBranchStatus ( (m_name + "_tracks_isWide").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isWide").c_str() , &m_tau_tracks_isWide ); + + tree->SetBranchStatus ( (m_name + "_tracks_failTrackFilter").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_failTrackFilter").c_str() , &m_tau_tracks_failTrackFilter ); + + tree->SetBranchStatus ( (m_name + "_tracks_passTrkSel").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_passTrkSel").c_str() , &m_tau_tracks_passTrkSel ); + + tree->SetBranchStatus ( (m_name + "_tracks_isClCharged").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isClCharged").c_str() , &m_tau_tracks_isClCharged ); + + tree->SetBranchStatus ( (m_name + "_tracks_isClIso").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isClIso").c_str() , &m_tau_tracks_isClIso ); + + tree->SetBranchStatus ( (m_name + "_tracks_isClConv").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isClConv").c_str() , &m_tau_tracks_isClConv ); + + tree->SetBranchStatus ( (m_name + "_tracks_isClFake").c_str() , 1 ); + tree->SetBranchAddress( (m_name + "_tracks_isClFake").c_str() , &m_tau_tracks_isClFake ); + } + + } + + void TauContainer::updateParticle(uint idx, Tau& tau) + { + ParticleContainer::updateParticle(idx,tau); + + // trigger + if ( m_infoSwitch.m_trigger ) { + tau.isTrigMatched = m_isTrigMatched ->at(idx); + tau.isTrigMatchedToChain = m_isTrigMatchedToChain ->at(idx); + tau.listTrigChains = m_listTrigChains ->at(idx); + } + + if ( m_infoSwitch.m_kinematic ) { + tau.ntrk = m_ntrk ->at(idx); + tau.charge = m_charge ->at(idx); + } + + // scale factors w/ sys + // per object + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& taueff : m_infoSwitch.m_tauEffWPs) { + tau.TauEff_SF[ taueff ] = (*m_TauEff_SF)[ taueff ].at(idx); + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + tau.TauTrigEff_SF[ trig ] = (*m_TauTrigEff_SF)[ trig ].at(idx); + } + } + + // might need to delete these + if ( m_infoSwitch.m_JetID ) { + tau.isJetRNNSigVeryLoose = m_isJetRNNSigVeryLoose ->at(idx); + tau.isJetRNNSigLoose = m_isJetRNNSigLoose ->at(idx); + tau.isJetRNNSigMedium = m_isJetRNNSigMedium ->at(idx); + tau.isJetRNNSigTight = m_isJetRNNSigTight ->at(idx); + + tau.JetRNNScore = m_JetRNNScore ->at(idx); + tau.JetRNNScoreSigTrans = m_JetRNNScoreSigTrans ->at(idx); + } + + if ( m_infoSwitch.m_EleVeto ) { + tau.isEleRNNLoose = m_isEleRNNLoose ->at(idx); + tau.isEleRNNMedium = m_isEleRNNMedium ->at(idx); + tau.isEleRNNTight = m_isEleRNNTight ->at(idx); + + tau.EleRNNScore = m_EleRNNScore ->at(idx); + + tau.passEleOLR = m_passEleOLR ->at(idx); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + tau.matchedJetWidth = m_tau_matchedJetWidth ->at(idx); + tau.matchedJetJvt = m_tau_matchedJetJvt ->at(idx); + } + + if( m_infoSwitch.m_trackAll) { + tau.tracks_pt = m_tau_tracks_pt ->at(idx); + tau.tracks_eta = m_tau_tracks_eta ->at(idx); + tau.tracks_phi = m_tau_tracks_phi ->at(idx); + + tau.tracks_isCore = m_tau_tracks_isCore ->at(idx); + tau.tracks_isWide = m_tau_tracks_isWide ->at(idx); + tau.tracks_failTrackFilter = m_tau_tracks_failTrackFilter ->at(idx); + tau.tracks_passTrkSel = m_tau_tracks_passTrkSel ->at(idx); + tau.tracks_isClCharged = m_tau_tracks_isClCharged ->at(idx); + tau.tracks_isClIso = m_tau_tracks_isClIso ->at(idx); + tau.tracks_isClConv = m_tau_tracks_isClConv ->at(idx); + tau.tracks_isClFake = m_tau_tracks_isClFake ->at(idx); + } + + } + + + void TauContainer::setBranches(TTree *tree) + { + + ParticleContainer::setBranches(tree); + + if ( m_infoSwitch.m_trigger ){ + // this is true if there's a match for at least one trigger chain + setBranch(tree,"isTrigMatched", m_isTrigMatched); + // a vector of trigger match decision for each tau trigger chain + setBranch >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain ); + // a vector of strings for each tau trigger chain - 1:1 correspondence w/ vector above + setBranch(tree, "listTrigChains", m_listTrigChains ); + } + + if ( m_infoSwitch.m_kinematic ){ + setBranch (tree,"ntrk", m_ntrk); + setBranch(tree,"charge", m_charge ); + + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& taueff : m_infoSwitch.m_tauEffWPs) { + tree->Branch( (m_name + "_TauEff_SF_" + taueff).c_str() , & (*m_TauEff_SF)[ taueff ] ); + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + tree->Branch( (m_name + "_TauTrigEff_SF_" + trig).c_str() , & (*m_TauTrigEff_SF)[ trig ] ); + } + } + + // might need to delete these + if ( m_infoSwitch.m_JetID ){ + setBranch (tree,"isJetRNNSigVeryLoose", m_isJetRNNSigVeryLoose); + setBranch (tree,"isJetRNNSigLoose", m_isJetRNNSigLoose); + setBranch (tree,"isJetRNNSigMedium", m_isJetRNNSigMedium); + setBranch (tree,"isJetRNNSigTight", m_isJetRNNSigTight); + + setBranch (tree,"JetRNNScore", m_JetRNNScore); + setBranch (tree,"JetRNNScoreSigTrans", m_JetRNNScoreSigTrans); + + } + + if ( m_infoSwitch.m_EleVeto ){ + setBranch (tree,"isEleRNNLoose", m_isEleRNNLoose); + setBranch (tree,"isEleRNNMedium", m_isEleRNNMedium); + setBranch (tree,"isEleRNNTight", m_isEleRNNTight); + + setBranch (tree,"EleRNNScore", m_EleRNNScore); + + setBranch (tree,"passEleOLR", m_passEleOLR); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + setBranch (tree, "matchedJetWidth", m_tau_matchedJetWidth); + setBranch (tree, "matchedJetJvt", m_tau_matchedJetJvt); + } + + if( m_infoSwitch.m_trackAll) { + tree->Branch( (m_name + "_tracks_pt").c_str() , &m_tau_tracks_pt ); + tree->Branch( (m_name + "_tracks_eta").c_str() , &m_tau_tracks_eta ); + tree->Branch( (m_name + "_tracks_phi").c_str() , &m_tau_tracks_phi ); + + tree->Branch( (m_name + "_tracks_isCore").c_str() , &m_tau_tracks_isCore ); + tree->Branch( (m_name + "_tracks_isWide").c_str() , &m_tau_tracks_isWide ); + tree->Branch( (m_name + "_tracks_failTrackFilter").c_str() , &m_tau_tracks_failTrackFilter ); + tree->Branch( (m_name + "_tracks_passTrkSel").c_str() , &m_tau_tracks_passTrkSel ); + tree->Branch( (m_name + "_tracks_isClCharged").c_str() , &m_tau_tracks_isClCharged ); + tree->Branch( (m_name + "_tracks_isClIso").c_str() , &m_tau_tracks_isClIso ); + tree->Branch( (m_name + "_tracks_isClConv").c_str() , &m_tau_tracks_isClConv ); + tree->Branch( (m_name + "_tracks_isClFake").c_str() , &m_tau_tracks_isClFake ); + } + + return; + } + + + + void TauContainer::clear() + { + + ParticleContainer::clear(); + + if ( m_infoSwitch.m_trigger ) { + m_isTrigMatched->clear(); + m_isTrigMatchedToChain->clear(); + m_listTrigChains->clear(); + } + + if ( m_infoSwitch.m_kinematic ) { + m_ntrk->clear(); + m_charge->clear(); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + for (auto& taueff : m_infoSwitch.m_tauEffWPs) { + (*m_TauEff_SF)[ taueff ].clear(); + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + (*m_TauTrigEff_SF)[ trig ].clear(); + } + } + + // might need to delete these + if ( m_infoSwitch.m_JetID ) { + m_isJetRNNSigVeryLoose->clear(); + m_isJetRNNSigLoose->clear(); + m_isJetRNNSigMedium->clear(); + m_isJetRNNSigTight->clear(); + + m_JetRNNScore->clear(); + m_JetRNNScoreSigTrans->clear(); + } + + if ( m_infoSwitch.m_EleVeto ) { + m_isEleRNNLoose->clear(); + m_isEleRNNMedium->clear(); + m_isEleRNNTight->clear(); + + m_EleRNNScore->clear(); + m_passEleOLR->clear(); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + m_tau_matchedJetWidth->clear(); + m_tau_matchedJetJvt->clear(); + } + + if( m_infoSwitch.m_trackAll) { + m_tau_tracks_pt->clear(); + m_tau_tracks_eta->clear(); + m_tau_tracks_phi->clear(); + + m_tau_tracks_isCore->clear(); + m_tau_tracks_isWide->clear(); + m_tau_tracks_failTrackFilter->clear(); + m_tau_tracks_passTrkSel->clear(); + m_tau_tracks_isClCharged->clear(); + m_tau_tracks_isClIso->clear(); + m_tau_tracks_isClConv->clear(); + m_tau_tracks_isClFake->clear(); + } + + } + + + void TauContainer::FillTau( const xAOD::TauJet* tau ){ + return FillTau(static_cast(tau)); + } + + void TauContainer::FillTau( const xAOD::IParticle* particle ) + { + + ParticleContainer::FillParticle(particle); + + const xAOD::TauJet* tau=dynamic_cast(particle); + + if ( m_infoSwitch.m_trigger ) { + + // retrieve map w/ + // + static SG::AuxElement::Accessor< std::map > isTrigMatchedMapTauAcc("isTrigMatchedMapTau"); + + std::vector matches; + + if ( isTrigMatchedMapTauAcc.isAvailable( *tau ) ) { + // loop over map and fill branches + // + for ( auto const &it : (isTrigMatchedMapTauAcc( *tau )) ) { + matches.push_back( static_cast(it.second) ); + m_listTrigChains->push_back( it.first ); + } + } else { + matches.push_back( -1 ); + m_listTrigChains->push_back("NONE"); + } + + m_isTrigMatchedToChain->push_back(matches); + + // if at least one match among the chains is found, say this tau is trigger matched + if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); } + else { m_isTrigMatched->push_back(0); } + + } + + if ( m_infoSwitch.m_kinematic ) { + + m_charge->push_back( tau->charge() ); + m_ntrk ->push_back( tau->nTracks() ); + } + + if ( m_infoSwitch.m_effSF && m_mc ) { + + std::vector junkSF(1,-1.0); + + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTauEffSF; + static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTauTrigSF; + + for (auto& taueff : m_infoSwitch.m_tauEffWPs) { + std::string tauEffSF = "TauEff_SF_syst_" + taueff; + accTauEffSF.insert( std::pair > > ( taueff , SG::AuxElement::Accessor< std::vector< float > >( tauEffSF ) ) ); + safeSFVecFill( tau, accTauEffSF.at( taueff ), &m_TauEff_SF->at( taueff ), junkSF ); + } + + for (auto& trig : m_infoSwitch.m_trigWPs) { + std::string trigEffSF = "TauEff_SF_syst_" + trig; + accTauTrigSF.insert( std::pair > > ( trig , SG::AuxElement::Accessor< std::vector< float > >( trigEffSF ) ) ); + safeSFVecFill( tau, accTauTrigSF.at( trig ), &m_TauTrigEff_SF->at( trig ), junkSF ); + } + + } + + // might need to delete these + if ( m_infoSwitch.m_JetID ) { + + static SG::AuxElement::Accessor isJetRNNSigVeryLooseAcc ("isJetRNNSigVeryLoose"); + safeFill(tau, isJetRNNSigVeryLooseAcc, m_isJetRNNSigVeryLoose, -1); + + static SG::AuxElement::Accessor isJetRNNSigLooseAcc ("isJetRNNSigLoose"); + safeFill(tau, isJetRNNSigLooseAcc, m_isJetRNNSigLoose, -1); + + static SG::AuxElement::Accessor isJetRNNSigMediumAcc ("isJetRNNSigMedium"); + safeFill(tau, isJetRNNSigMediumAcc, m_isJetRNNSigMedium, -1); + + static SG::AuxElement::Accessor isJetRNNSigTightAcc ("isJetRNNSigTight"); + safeFill(tau, isJetRNNSigTightAcc, m_isJetRNNSigTight, -1); + + static SG::AuxElement::Accessor JetRNNScoreAcc ("JetRNNScore"); + safeFill(tau, JetRNNScoreAcc, m_JetRNNScore, -999.); + + static SG::AuxElement::Accessor JetRNNScoreSigTransAcc ("JetRNNScoreSigTrans"); + safeFill(tau, JetRNNScoreSigTransAcc, m_JetRNNScoreSigTrans, -999.); + } + + if ( m_infoSwitch.m_EleVeto ) { + + static SG::AuxElement::Accessor isEleRNNLooseAcc ("isEleRNNLoose"); + safeFill(tau, isEleRNNLooseAcc, m_isEleRNNLoose, -1); + + static SG::AuxElement::Accessor isEleRNNMediumAcc ("isEleRNNMedium"); + safeFill(tau, isEleRNNMediumAcc, m_isEleRNNMedium, -1); + + static SG::AuxElement::Accessor isEleRNNTightAcc ("isEleRNNTight"); + safeFill(tau, isEleRNNTightAcc, m_isEleRNNTight, -1); + + static SG::AuxElement::Accessor EleRNNScoreAcc ("EleRNNScore"); + safeFill(tau, EleRNNScoreAcc, m_EleRNNScore, -999.); + + static SG::AuxElement::Accessor passEleOLRAcc ("passEleOLR"); + safeFill(tau, passEleOLRAcc, m_passEleOLR, -1); + } + + if( m_infoSwitch.m_xahTauJetMatching) { + static SG::AuxElement::Accessor< float > jetWidthAcc("JetWidth"); + safeFill(tau, jetWidthAcc, m_tau_matchedJetWidth, -1.); + static SG::AuxElement::Accessor< float > jetJvtAcc("JetJvt"); + safeFill(tau, jetJvtAcc, m_tau_matchedJetJvt, -1.); + } + + if( m_infoSwitch.m_trackAll) { + static SG::AuxElement::ConstAccessor< std::vector > tauTrackPtAcc("trackPt"); + safeVecFill(tau, tauTrackPtAcc, m_tau_tracks_pt); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackEtaAcc("trackEta"); + safeVecFill(tau, tauTrackEtaAcc, m_tau_tracks_eta); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackPhiAcc("trackPhi"); + safeVecFill(tau, tauTrackPhiAcc, m_tau_tracks_phi); + + // track classification + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsCoreAcc("trackIsCore"); + safeVecFill(tau, tauTrackIsCoreAcc, m_tau_tracks_isCore); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsWideAcc("trackIsWide"); + safeVecFill(tau, tauTrackIsWideAcc, m_tau_tracks_isWide); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackFailTrackFilterAcc("trackFailTrackFilter"); + safeVecFill(tau, tauTrackFailTrackFilterAcc, m_tau_tracks_failTrackFilter); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackPassTrkSelAcc("trackPassTrkSel"); + safeVecFill(tau, tauTrackPassTrkSelAcc, m_tau_tracks_passTrkSel); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsClChargedAcc("trackIsClCharged"); + safeVecFill(tau, tauTrackIsClChargedAcc, m_tau_tracks_isClCharged); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsClIsoAcc("trackIsClIso"); + safeVecFill(tau, tauTrackIsClIsoAcc, m_tau_tracks_isClIso); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsClConvAcc("trackIsClConv"); + safeVecFill(tau, tauTrackIsClConvAcc, m_tau_tracks_isClConv); + + static SG::AuxElement::ConstAccessor< std::vector > tauTrackIsClFakeAcc("trackIsClFake"); + safeVecFill(tau, tauTrackIsClFakeAcc, m_tau_tracks_isClFake); + } + + return; + } diff --git a/_sources/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.rst.txt b/_sources/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.rst.txt new file mode 100644 index 0000000000..37fd1bf80e --- /dev/null +++ b/_sources/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.rst.txt @@ -0,0 +1,459 @@ + +.. _program_listing_file_Root_TauEfficiencyCorrector.cxx: + +Program Listing for File TauEfficiencyCorrector.cxx +=================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TauEfficiencyCorrector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + #include + + // EL include(s): + #include + #include + #include + + + // EDM include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODTau/TauJetAuxContainer.h" + #include "xAODTau/TauJet.h" + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODBase/IParticle.h" + #include "AthContainers/ConstDataVector.h" + #include "AthContainers/DataVector.h" + + // package include(s): + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/TauEfficiencyCorrector.h" + + using HelperClasses::ToolName; + + // this is needed to distribute the algorithm to the workers + ClassImp(TauEfficiencyCorrector) + + + TauEfficiencyCorrector :: TauEfficiencyCorrector () : + Algorithm("TauEfficiencyCorrector") + { + } + + + EL::StatusCode TauEfficiencyCorrector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TauEfficiencyCorrector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauEfficiencyCorrector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauEfficiencyCorrector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauEfficiencyCorrector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauEfficiencyCorrector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing TauEfficiencyCorrector Interface... "); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + + + // ******************************************************* + + // Create a ToolHandle of the PRW tool which is passed to the TauEfficiencyScaleFactors class later + // + if( isMC() ){ + if(!m_pileup_tool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_pileup_tool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_pileup_tool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle); + } + + if (!m_RecommendationTag.empty()) { + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("RecommendationTag",m_RecommendationTag)) + }; + + // just the tool default settings + // https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/TauID/TauAnalysisTools/trunk/doc/README-TauEfficiencyCorrectionsTool.rst + + // initialise reco SF no matter what + std::vector configVec; + configVec.push_back({TauAnalysisTools::SFRecoHadTau}); + + if ( !m_WorkingPointTauJetID.empty() ) { + configVec.push_back({TauAnalysisTools::SFJetIDHadTau}); + + if ( m_WorkingPointTauJetID == "Loose") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNLOOSE)); } + else if ( m_WorkingPointTauJetID == "Medium") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNMEDIUM)); } + else if ( m_WorkingPointTauJetID == "Tight") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNTIGHT)); } + else { + ANA_MSG_ERROR("Failed to configure WorkingPointTauJetID with unknown " << m_WorkingPointTauJetID); + return EL::StatusCode::FAILURE; + } + } else if ( m_WorkingPointTauJetID.empty() ) { + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDNONE)); + // still consider this a working point + m_WorkingPointTauJetID = "None"; + } + + if (!m_WorkingPointTauEleID.empty()) { + configVec.push_back({TauAnalysisTools::SFEleIDElectron}); + + if (m_WorkingPointTauEleID == "Loose") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNLOOSE)); } + else if (m_WorkingPointTauEleID == "Medium") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNMEDIUM)); } + else if (m_WorkingPointTauEleID == "Tight") { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNTIGHT)); } + else { + ANA_MSG_ERROR("Failed to configure WorkingPointTauEleID with unknown " << m_WorkingPointTauEleID); + return EL::StatusCode::FAILURE; + } + } else if ( m_WorkingPointTauEleID.empty() ) { + // still consider this a working point + m_WorkingPointTauEleID = "None"; + } + + if (!m_TriggerName.empty()) { + // We always want trigger to be individual + configVec = {TauAnalysisTools::SFTriggerHadTau}; + + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("TriggerName", m_TriggerName)); + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("PileupReweightingTool",m_pileup_tool_handle)); + + } + + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EfficiencyCorrectionTypes",configVec)); + if ( isFastSim() ){ + ANA_MSG_INFO( "Setting simulation flavour to Fast Sim"); + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("useFastSim", 1)); + } else { + ANA_CHECK(m_tauEffCorrTool_handle.setProperty("useFastSim", 0)); + } + ANA_CHECK(m_tauEffCorrTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool for Tau Efficiency corrections: " << m_tauEffCorrTool_handle); + + // Make a list of systematics to be used, based on configuration input + // Use HelperFunctions::getListofSystematics() for this! First fill a + // list of identically inclusive lists and then remove unwanted elements + + const CP::SystematicSet recSysts = m_tauEffCorrTool_handle->recommendedSystematics(); + m_systList = HelperFunctions::getListofSystematics( recSysts, m_systName, m_systVal, msg() ); + + ANA_MSG_INFO("Will be using TauEfficiencyScaleFactors tool efficiency systematic:"); + for ( const auto& syst_it : m_systList ) { + if ( m_systName.empty() ) { + ANA_MSG_INFO("\t Running w/ nominal configuration only!"); + break; + } + // IMPORTANT: for the trigger iteration remove the sys if it does not + // contain the word TRIGGER (?) + //else if (syst_it.name().find("RECO") == std::string::npos) { + // m_systListReco.erase(std::remove(m_systListReco.begin(), m_systListReco.end(), syst_it), m_systListReco.end()); + //} + ANA_MSG_INFO("\t " << syst_it.name()); + } + + + // Write output sys names + if ( m_writeSystToMetadata ) { + TFile *fileMD = wk()->getOutputFile ("metadata"); + HelperFunctions::writeSystematicsListHist(m_systList, m_outputSystNames, fileMD); + } + + // ********************************************************************************* + + ANA_MSG_INFO( "TauEfficiencyCorrector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauEfficiencyCorrector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + m_numEvent++; + + if ( !isMC() ) { + if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Tau Efficiency correction... "); } + return EL::StatusCode::SUCCESS; + } + + ANA_MSG_DEBUG( "Applying Tau Efficiency corrections... "); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // if m_inputSystNamesTaus = "" --> input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + std::vector* systNames_ptr(nullptr); + if ( !m_inputSystNamesTaus.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesTaus, 0, m_store, msg()) ); + + std::vector systNames{""}; + if (systNames_ptr) systNames = *systNames_ptr; + + // Declare a write status set to true + // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!) + // + bool writeSystNames(true); + + // loop over systematic sets available + for ( auto systName : systNames ) { + const xAOD::TauJetContainer* inputTaus(nullptr); + + // some systematics might have rejected the event + if ( m_store->contains( m_inContainerName+systName ) ) { + // retrieve input taus + ANA_CHECK( HelperFunctions::retrieve(inputTaus, m_inContainerName+systName, m_event, m_store, msg()) ); + + ANA_MSG_DEBUG( "Number of taus: " << static_cast(inputTaus->size()) ); + ANA_MSG_DEBUG( "Input syst: " << systName ); + unsigned int idx(0); + for ( auto tau : *(inputTaus) ) { + ANA_MSG_DEBUG( "Input tau " << idx << ", pt = " << tau->pt() * 1e-3 << " GeV" ); + ++idx; + } + + // decorate taus w/ SF - there will be a decoration w/ different name for each syst! + this->executeSF( eventInfo, inputTaus, systName.empty(), writeSystNames ); + + writeSystNames = false; + + } // check existence of container + + } // close loop on systematic sets available from upstream algo + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + + } + + + EL::StatusCode TauEfficiencyCorrector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauEfficiencyCorrector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_INFO( "Deleting tool instances..."); + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TauEfficiencyCorrector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TauEfficiencyCorrector :: executeSF ( const xAOD::EventInfo* /*eventInfo*/, const xAOD::TauJetContainer* inputTaus, bool nominal, bool writeSystNames ) + { + //**************************** + + // + // In the following, every tau gets decorated with 2 vector's (for reco/iso efficiency SFs), + // and the event w/ 1 vector (for trigger efficiency SFs) + // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF). + // + // Additionally, we create these vector with the SF syst names, so that we know which component corresponds to. + // ( there's a 1:1 correspondence with the vector defined above ) + // + // These vector are eventually stored in TStore + // + + // 1. + // Tau efficiency SFs - this is a per-TAU weight + // + // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal + // Every systematic will correspond to a different SF! + // + + std::unique_ptr< std::vector< std::string > > sysVariationNames = nullptr; + + if ( writeSystNames ) sysVariationNames = std::make_unique< std::vector< std::string > >(); + + for ( const auto& syst_it : m_systList ) { + if ( !syst_it.name().empty() && !nominal ) continue; + + // Create the name of the SF weight to be recorded + std::string sfName = "TauEff_SF_syst" ; + if ( !m_WorkingPointTauEleID.empty() ) { sfName += "_EleIDElectron" + m_WorkingPointTauEleID; } + if ( !m_WorkingPointTauJetID.empty() ) { sfName += "_TauID" + m_WorkingPointTauJetID; } + if ( !m_TriggerName.empty() ) { sfName += "_Trig" + m_TriggerName; } + + ANA_MSG_DEBUG( "Tau efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() ); + if( writeSystNames ) sysVariationNames->push_back(syst_it.name()); + + // apply syst + // + if ( m_tauEffCorrTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) { + ANA_MSG_ERROR("Failed to configure TauEfficiencyScaleFactors for systematic " << syst_it.name()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name()); + + // and now apply tau efficiency SF! + // + unsigned int idx(0); + for ( auto tau_itr : *(inputTaus) ) { + + ANA_MSG_DEBUG( "Applying tau efficiency SF" ); + + // obtain tau efficiency SF as a float (to be stored away separately) + // + // If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* tau) + // + + SG::AuxElement::Decorator< std::vector > sfVec( sfName ); + if ( !sfVec.isAvailable( *tau_itr ) ) { + sfVec( *tau_itr ) = std::vector(); + } + + double tauEffSF(-1.0); + if ( m_tauEffCorrTool_handle->getEfficiencyScaleFactor( *tau_itr, tauEffSF ) != CP::CorrectionCode::Ok ) { + ANA_MSG_WARNING( "Problem in getEfficiencyScaleFactor"); + tauEffSF = -1.0; + } + // + // Add it to decoration vector + // + sfVec( *tau_itr ).push_back( tauEffSF ); + + // tauEff sys names are saved in a vector. Entries positions are preserved! + // + SG::AuxElement::Decorator< std::vector > sfVec_sysNames( m_outputSystNames + "_sysNames" ); + if ( !sfVec_sysNames.isAvailable( *tau_itr ) ) { + sfVec_sysNames( *tau_itr ) = std::vector(); + } + sfVec_sysNames( *tau_itr ).push_back( syst_it.name().c_str() ); + + ANA_MSG_DEBUG( "===>>>"); + ANA_MSG_DEBUG( "Tau " << idx << ", pt = " << tau_itr->pt()*1e-3 << " GeV" ); + ANA_MSG_DEBUG( "Tau eff. SF decoration: " << sfName ); + ANA_MSG_DEBUG( "Systematic: " << syst_it.name() ); + ANA_MSG_DEBUG( "Tau eff. SF:"); + ANA_MSG_DEBUG( "\t " << tauEffSF << " (from getEfficiencyScaleFactor())" ); + ANA_MSG_DEBUG( "--------------------------------------"); + + ++idx; + + } // close tau loop + + } // close loop on reco efficiency SF systematics + + // Add list of systematics names to TStore + // We only do this once per event if the list does not exist yet + if ( writeSystNames && !m_store->contains>( m_outputSystNames ) ) { + ANA_CHECK( m_store->record( std::move(sysVariationNames), m_outputSystNames )); + } + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_TauJetMatching.cxx.rst.txt b/_sources/api/program_listing_file_Root_TauJetMatching.cxx.rst.txt new file mode 100644 index 0000000000..e971860f56 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TauJetMatching.cxx.rst.txt @@ -0,0 +1,392 @@ + +.. _program_listing_file_Root_TauJetMatching.cxx: + +Program Listing for File TauJetMatching.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TauJetMatching.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + //#include "xAODCore/ShallowCopy.h" + //#include "AthContainers/ConstDataVector.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODJet/JetContainer.h" + + // package include(s): + #include "xAODAnaHelpers/TauJetMatching.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + // ROOT include(s): + #include "TLorentzVector.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(TauJetMatching) + + + TauJetMatching :: TauJetMatching () : + Algorithm("TauJetMatching") + { + } + + TauJetMatching::~TauJetMatching() {} + + EL::StatusCode TauJetMatching :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TauJetMatching" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + //if ( this->numInstances() > 1 ) { + // m_isUsedBefore = true; + // ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" ); + //} + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_INFO( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing TauJetMatching Interface... "); + + // Let's see if the algorithm has been already used before: + // if yes, will write object cutflow in a different histogram! + // + // This is the case when the selector algorithm is used for + // preselecting objects, and then again for the final selection + // + ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className ); + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + if ( m_inContainerName.empty() ){ + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + if ( m_inJetContainerName.empty() ){ + ANA_MSG_ERROR( "InputJetContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + // ******************************** + // + // Initialise TauJetMatchingTool + // + // ******************************** + + // IMPORTANT: if no working point is specified the one in this configuration will be used + + ANA_MSG_INFO( "TauJetMatching Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TauJetMatching :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Tau Selection..." ); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + const xAOD::TauJetContainer* inTaus(nullptr); + + const xAOD::JetContainer* inJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) ); + + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_inputAlgoSystNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) ); + + // fill truth-matching map + // + std::unordered_map > match_map; + + match_map = findBestMatchDR( inJets, inTaus, m_DeltaR ); + + executeDecoration(match_map, inTaus); + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) ); + + ANA_MSG_DEBUG( " input list of syst size: " << static_cast(systNames->size()) ); + + // loop over systematic sets + // + for ( auto systName : *systNames ) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName + systName, m_event, m_store, msg()) ); + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) ); + + std::unordered_map > match_map_sys; + + match_map_sys = findBestMatchDR( inJets, inTaus, m_DeltaR ); + + executeDecoration(match_map_sys, inTaus); + } + } + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + return EL::StatusCode::SUCCESS; + + } + + bool TauJetMatching :: executeDecoration ( std::unordered_map > match_map, const xAOD::TauJetContainer* inTaus) + { + static SG::AuxElement::Decorator< float > JetWidthDecor("JetWidth"); + static SG::AuxElement::ConstAccessor jetWidthAcc("Width"); + + static SG::AuxElement::Decorator< float > JetJvtDecor("JetJvt"); + static SG::AuxElement::ConstAccessor jetJvtAcc("Jvt"); + + ANA_MSG_DEBUG( "Initial Taus: " << static_cast(inTaus->size()) ); + + int iTau = -1; + + for ( auto tau_itr : *inTaus ) { // duplicated of basic loop + iTau++; + + std::unordered_map >::const_iterator it_map = match_map.find (iTau); + + if (it_map != match_map.end()) { + + // jet width + if (jetWidthAcc.isAvailable(*match_map[iTau].second)) { + JetWidthDecor(*tau_itr) = static_cast( jetWidthAcc(*match_map[iTau].second) ); + } else { + JetWidthDecor(*tau_itr) = -1.; + } + + // jet jvt + if (jetJvtAcc.isAvailable(*match_map[iTau].second)) { + JetJvtDecor(*tau_itr) = static_cast( jetJvtAcc(*match_map[iTau].second) ); + } else { + JetJvtDecor(*tau_itr) = -1.; + } + + + } else { + JetWidthDecor(*tau_itr) = -1.; + JetJvtDecor(*tau_itr) = -1.; + } + } + + ANA_MSG_DEBUG( "Left executeDecoration..." ); + + return true; + } + + EL::StatusCode TauJetMatching :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauJetMatching :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + float TauJetMatching::getDR(float eta1, float eta2, float phi1, float phi2) + { + float deta = std::abs(eta1-eta2); + float dphi = std::abs(phi1-phi2); + dphi = ( dphi <= TMath::Pi() ) ? dphi : ( 2 * TMath::Pi() - dphi ); + return sqrt(deta*deta + dphi*dphi); + } + + std::unordered_map > TauJetMatching::findBestMatchDR(const xAOD::JetContainer* jetCont, + const xAOD::TauJetContainer* tauCont, + float best_DR=1.0) + { + // Find tau that best matches a jet using DR. + // If matching is successful, returns a map where the key + // is the container index of the matched tau and the value + // is the pair of the matched tau and the corresponding jet + + float default_best_DR = best_DR; + int ijet = -1; + int best_ijet = -1; + const xAOD::Jet* best_jet = nullptr; + + std::unordered_map> match_map; + + for (const auto jet : *jetCont) { + ++ijet; + + int itau = -1; + int best_itau = -1; + const xAOD::TauJet* best_tau = nullptr; + float DR = 0; + + for (const auto tau : *tauCont) { + ++itau; + + DR = this->getDR(tau->eta(),jet->eta(),tau->phi(),jet->phi()); + + if (DR < best_DR) { + best_DR = DR; + best_tau = tau; + best_jet = jet; + best_itau = itau; + best_ijet = ijet; + } + } + + std::unordered_map >::const_iterator got = match_map.find (best_itau); + + // if a new match is found for a previous + // tau keep the new match if it is better + + if (got == match_map.end() and best_itau != -1 and best_ijet != -1) { + match_map[best_itau] = std::pair(best_tau, best_jet); + } + else if (got != match_map.end() and best_itau != -1 and best_ijet != -1) { + float old_DR = this->getDR(match_map[best_itau].first->eta(), match_map[best_itau].second->eta(),match_map[best_itau].first->phi(), match_map[best_itau].second->phi()); + if (old_DR > best_DR) { + match_map[best_itau] = std::pair(best_tau, best_jet); + } + } + + // reset the best_DR to the default value + best_DR = default_best_DR; + } + + return match_map; + + } diff --git a/_sources/api/program_listing_file_Root_TauSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_TauSelector.cxx.rst.txt new file mode 100644 index 0000000000..e16cc41f7a --- /dev/null +++ b/_sources/api/program_listing_file_Root_TauSelector.cxx.rst.txt @@ -0,0 +1,812 @@ + +.. _program_listing_file_Root_TauSelector.cxx: + +Program Listing for File TauSelector.cxx +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TauSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /************************************************* + * + * Interface to TauAnalysisTools::TauSelectionTool + * + * F. Scutti (federico.scutti@cern.ch) + * M. Milesi (marco.milesi@cern.ch) + * + ************************************************/ + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODCore/ShallowCopy.h" + #include "AthContainers/ConstDataVector.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODTau/TauJetContainer.h" + + // package include(s): + #include "xAODAnaHelpers/TauSelector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + // #include "PATCore/TAccept.h" + // tool includes + #include "TauAnalysisTools/TauSelectionTool.h" + #include "TriggerMatchingTool/MatchingTool.h" + #include "TriggerMatchingTool/MatchFromCompositeTool.h" + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(TauSelector) + + + TauSelector :: TauSelector () : + Algorithm("TauSelector") + { + } + + TauSelector::~TauSelector() {} + + EL::StatusCode TauSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TauSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + + if ( this->numInstances() > 1 ) { + m_isUsedBefore = true; + ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_INFO( "Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_INFO( "Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + ANA_MSG_INFO( "Initializing TauSelector Interface... "); + + // Let's see if the algorithm has been already used before: + // if yes, will write object cutflow in a different histogram! + // + // This is the case when the selector algorithm is used for + // preselecting objects, and then again for the final selection + // + ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className ); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_tau_cutflowHist_1 = (TH1D*)file->Get("cutflow_taus_1"); + + m_tau_cutflow_all = m_tau_cutflowHist_1->GetXaxis()->FindBin("all"); + m_tau_cutflow_selected = m_tau_cutflowHist_1->GetXaxis()->FindBin("selected"); + + if ( m_isUsedBefore ) { + m_tau_cutflowHist_2 = (TH1D*)file->Get("cutflow_taus_2"); + + m_tau_cutflow_all = m_tau_cutflowHist_2->GetXaxis()->FindBin("all"); + m_tau_cutflow_selected = m_tau_cutflowHist_2->GetXaxis()->FindBin("selected"); + } + + } + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + + m_outAuxContainerName = m_outContainerName + "Aux."; // the period is very important! + + if ( m_inContainerName.empty() ){ + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + // ******************************** + // + // Initialise TauSelectionTool + // + // ******************************** + + // IMPORTANT: if no working point is specified the one in this configuration will be used + ANA_CHECK( m_tauSelTool_handle.setProperty("ConfigPath",PathResolverFindDataFile(m_ConfigPath).c_str())); + if (!m_JetIDWP.empty()) { + + std::map jetid_wp_map; + + jetid_wp_map["JETIDNONE"] = int(TauAnalysisTools::JETIDNONE); + jetid_wp_map["JETIDRNNLOOSE"] = int(TauAnalysisTools::JETIDRNNLOOSE); + jetid_wp_map["JETIDRNNMEDIUM"] = int(TauAnalysisTools::JETIDRNNMEDIUM); + jetid_wp_map["JETIDRNNTIGHT"] = int(TauAnalysisTools::JETIDRNNTIGHT); + + if (jetid_wp_map.count(m_JetIDWP) != 0 ) { + ANA_CHECK( m_tauSelTool_handle.setProperty("JetIDWP", jetid_wp_map[m_JetIDWP])); + } else { + ANA_MSG_ERROR( "Unknown requested tau JetIDWP " << m_JetIDWP); + return EL::StatusCode::FAILURE; + } + } + + if (!m_EleRNNWP.empty()) { + + std::map elernn_wp_map; + + elernn_wp_map["ELEIDNONE"] = int(TauAnalysisTools::ELEIDNONE); + elernn_wp_map["ELEIDRNNLOOSE"] = int(TauAnalysisTools::ELEIDRNNLOOSE); + elernn_wp_map["ELEIDRNNMEDIUM"] = int(TauAnalysisTools::ELEIDRNNMEDIUM); + elernn_wp_map["ELEIDRNNTIGHT"] = int(TauAnalysisTools::ELEIDRNNTIGHT); + + if (elernn_wp_map.count(m_EleRNNWP) != 0 ) { + ANA_CHECK( m_tauSelTool_handle.setProperty("EleRNNWP", elernn_wp_map[m_EleRNNWP])); + } else { + ANA_MSG_ERROR( "Unknown requested tau EleRNNWP " << m_EleRNNWP); + return EL::StatusCode::FAILURE; + } + } + + ANA_CHECK( m_tauSelTool_handle.setProperty("EleIDWP", m_EleID)); + + ANA_CHECK(m_tauSelTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_tauSelTool_handle); + + // ************************************** + // + // Initialise Trig::MatchingTool + // + // ************************************** + if( !( m_singleTauTrigChains.empty() && m_diTauTrigChains.empty() ) ) { + + if( !isPHYS() ) { + // Grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + + ANA_CHECK( m_scoreTool.retrieve()); + + // everything went fine, let's initialise the tool! + m_trigTauMatchTool_handle = asg::AnaToolHandle("Trig::MatchingTool/MatchingTool"); + ANA_CHECK( m_trigTauMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigTauMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + ANA_CHECK( m_trigTauMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigTauMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigTauMatchTool_handle); + } else { + m_trigTauMatchTool_handle = asg::AnaToolHandle("Trig::MatchFromCompositeTool/MatchFromCompositeTool"); + ANA_CHECK( m_trigTauMatchTool_handle.setProperty("OutputLevel", msg().level() )); + ANA_CHECK( m_trigTauMatchTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigTauMatchTool_handle); + } + + } else { + + m_doTrigMatch = false; + + ANA_MSG_WARNING("***********************************************************"); + ANA_MSG_WARNING( "Will not perform any tau trigger matching at this stage b/c :"); + ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore"); + ANA_MSG_WARNING("\t AND/OR"); + ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty"); + ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!"); + ANA_MSG_WARNING("***********************************************************"); + } + + ANA_MSG_INFO( "TauSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TauSelector :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying Tau Selection..." ); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + // + float mcEvtWeight(1.0); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + + m_numEvent++; + + // QUESTION: why this must be done in execute(), and does not work in initialize()? + // + if ( m_numEvent == 1 && m_trigTauMatchTool_handle.isInitialized() ) { + + // parse input tau trigger chain list, split by comma and fill vector + // + std::string singletau_trig; + std::istringstream ss_singletau_trig(m_singleTauTrigChains); + + while ( std::getline(ss_singletau_trig, singletau_trig, ',') ) { + m_singleTauTrigChainsList.push_back(singletau_trig); + } + + std::string ditau_trig; + std::istringstream ss_ditau_trig(m_diTauTrigChains); + + while ( std::getline(ss_ditau_trig, ditau_trig, ',') ) { + m_diTauTrigChainsList.push_back(ditau_trig); + } + + ANA_MSG_INFO( "Input single tau trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_singleTauTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + ANA_MSG_INFO( "Input di-tau trigger chains that will be considered for matching:\n"); + for ( auto const &chain : m_diTauTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); } + ANA_MSG_INFO( "\n"); + + } + + // did any collection pass the cuts? + // + bool eventPass(false); + bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal + const xAOD::TauJetContainer* inTaus(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_inputAlgoSystNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) ); + + // create output container (if requested) + // + ConstDataVector* selectedTaus(nullptr); + if ( m_createSelectedContainer ) { selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected taus, and return if event passes object selection + // + eventPass = executeSelection( inTaus, mcEvtWeight, countPass, selectedTaus ); + + if ( m_createSelectedContainer ) { + if ( eventPass ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedTaus, m_outContainerName )); + } else { + // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it! + // + delete selectedTaus; selectedTaus = nullptr; + } + } + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) ); + + // prepare a vector of the names of CDV containers for usage by downstream algos + // must be a pointer to be recorded in TStore + // + auto vecOutContainerNames = std::make_unique< std::vector< std::string > >(); + ANA_MSG_DEBUG( " input list of syst size: " << static_cast(systNames->size()) ); + + // loop over systematic sets + // + bool eventPassThisSyst(false); + for ( auto systName : *systNames ) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName + systName, m_event, m_store, msg()) ); + + // create output container (if requested) - one for each systematic + // + ConstDataVector* selectedTaus(nullptr); + if ( m_createSelectedContainer ) { selectedTaus = new ConstDataVector(SG::VIEW_ELEMENTS); } + + // find the selected Taus, and return if event passes object selection + // + eventPassThisSyst = executeSelection( inTaus, mcEvtWeight, countPass, selectedTaus ); + + if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal) + + if ( eventPassThisSyst ) { + // save the string of syst set under question if event is passing the selection + // + vecOutContainerNames->push_back( systName ); + } + + // if for at least one syst set the event passes selection, this will remain true! + // + eventPass = ( eventPass || eventPassThisSyst ); + + ANA_MSG_DEBUG( " syst name: " << systName << " output container name: " << m_outContainerName+systName ); + + if ( m_createSelectedContainer ) { + if ( eventPassThisSyst ) { + // add ConstDataVector to TStore + // + ANA_CHECK( m_store->record( selectedTaus, m_outContainerName+systName )); + } else { + // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it! + delete selectedTaus; selectedTaus = nullptr; + } + } + + } // close loop over syst sets + + ANA_MSG_DEBUG(" output list of syst size: " << static_cast(vecOutContainerNames->size()) ); + + // record in TStore the list of systematics names that should be considered down stream + // + ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames)); + + } + + // look what we have in TStore + // + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if( !eventPass ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + + return EL::StatusCode::SUCCESS; + + } + + bool TauSelector :: executeSelection ( const xAOD::TauJetContainer* inTaus, float mcEvtWeight, bool countPass, + ConstDataVector* selectedTaus ) + { + + int nPass(0); int nObj(0); + const SG::AuxElement::Decorator< char > passSelDecor( m_decorationName.c_str() ); + + ANA_MSG_DEBUG( "Initial Taus: " << static_cast(inTaus->size()) ); + + for ( auto tau_itr : *inTaus ) { // duplicated of basic loop + + // if only looking at a subset of Taus make sure all are decorated + // + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *tau_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + bool passSel = this->passCuts( tau_itr ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *tau_itr ) = passSel; + } + + if ( passSel ) { + nPass++; + if ( m_createSelectedContainer ) { + selectedTaus->push_back( tau_itr ); + } + } + } + + // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal) + // + if ( countPass ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + ANA_MSG_DEBUG( "Initial Taus (count obj): " << nObj << " - Selected Taus: " << nPass ); + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + // + if ( m_pass_min > 0 && nPass < m_pass_min ) { + ANA_MSG_DEBUG( "Reject event: nSelectedTaus ("<= 0 && nPass > m_pass_max ) { + ANA_MSG_DEBUG( "Reject event: nSelectedTaus ("< nPassMax ("<size(); + + static SG::AuxElement::Decorator< std::map > isTrigMatchedMapTauDecor( "isTrigMatchedMapTau" ); + + if ( nSelectedTaus > 0 ) { + + ANA_MSG_DEBUG( "Doing single tau trigger matching..."); + + for ( auto const &chain : m_singleTauTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + for ( auto const tau : *selectedTaus ) { + + // For each tau, decorate w/ a map with the 'isMatched' info associated + // to each trigger chain in the input list. + // If decoration map doesn't exist for this tau yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !isTrigMatchedMapTauDecor.isAvailable( *tau ) ) { + isTrigMatchedMapTauDecor( *tau ) = std::map(); + } + + // check whether the tau is matched (NOTE: no DR is required for taus) + // + char matched = ( m_trigTauMatchTool_handle->match( *tau, chain ) ); + + ANA_MSG_DEBUG( "\t\t is tau trigger matched? " << matched); + + ( isTrigMatchedMapTauDecor( *tau ) )[chain] = matched; + } + } + + } + + // If checking dilepton trigger, form lepton pairs and test matching for each one. + // Save a: + // + // multimap< chain, pair< pair, ismatched > > + // + // as *event* decoration to store which + // pairs are matched (to a given chain) and which aren't. + // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events. + // + // By retrieving this map later on, user can decide what to do with the event + // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain) + + if ( nSelectedTaus > 1 && !m_diTauTrigChains.empty() ) { + + ANA_MSG_DEBUG( "Doing di-tau trigger matching..."); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + typedef std::pair< std::pair, char> ditau_trigmatch_pair; + typedef std::multimap< std::string, ditau_trigmatch_pair > ditau_trigmatch_pair_map; + static SG::AuxElement::Decorator< ditau_trigmatch_pair_map > diTauTrigMatchPairMapDecor( "diTauTrigMatchPairMap" ); + + for ( auto const &chain : m_diTauTrigChainsList ) { + + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + // If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names) + // + if ( !diTauTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) { + diTauTrigMatchPairMapDecor( *eventInfo ) = ditau_trigmatch_pair_map(); + } + + std::vector myTaus; + + for ( unsigned int itau = 0; itau < selectedTaus->size()-1; ++itau ) { + + for ( unsigned int jtau = itau+1; jtau < selectedTaus->size(); ++jtau ) { + + // test a new pair + // + myTaus.clear(); + myTaus.push_back( selectedTaus->at(itau) ); + myTaus.push_back( selectedTaus->at(jtau) ); + + // check whether the pair is matched (NOTE: no DR is required for taus) + // + char matched = m_trigTauMatchTool_handle->match( myTaus, chain ); + + ANA_MSG_DEBUG( "\t\t is the tau pair ("< chain_idxs = std::make_pair(itau,jtau); + ditau_trigmatch_pair chain_decision = std::make_pair(chain_idxs,matched); + diTauTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, ditau_trigmatch_pair >(chain,chain_decision) ); + + } + } + } //for m_diTauTrigChainsList + } //if nSelectedTaus > 1 && !m_diTauTrigChains.empty() + } //if m_doTrigMatch && selectedTaus + + ANA_MSG_DEBUG( "Left executeSelection..." ); + + return true; + } + + + EL::StatusCode TauSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG( "Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + if ( m_useCutFlow ) { + ANA_MSG_INFO( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TauSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + int TauSelector :: passCuts( const xAOD::TauJet* tau ) { + + // fill cutflow bin 'all' before any cut + if(!m_isUsedBefore && m_useCutFlow) m_tau_cutflowHist_1->Fill( m_tau_cutflow_all, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_tau_cutflowHist_2->Fill( m_tau_cutflow_all, 1 ); } + + // ********************************************************************************************************** + // + // TauSelectorTool cut + // + + // JetRNNSigID decoration + // ---------------------- + static SG::AuxElement::Decorator< int > isJetRNNSigVeryLoose("isJetRNNSigVeryLoose"); + static SG::AuxElement::Decorator< int > isJetRNNSigLoose("isJetRNNSigLoose"); + static SG::AuxElement::Decorator< int > isJetRNNSigMedium("isJetRNNSigMedium"); + static SG::AuxElement::Decorator< int > isJetRNNSigTight("isJetRNNSigTight"); + + static SG::AuxElement::Decorator< float > JetRNNScore("JetRNNScore"); + static SG::AuxElement::Decorator< float > JetRNNScoreSigTrans("JetRNNScoreSigTrans"); + + isJetRNNSigVeryLoose( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::JetRNNSigVeryLoose)); + isJetRNNSigLoose( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::JetRNNSigLoose)); + isJetRNNSigMedium( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::JetRNNSigMedium)); + isJetRNNSigTight( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::JetRNNSigTight)); + + JetRNNScore( *tau ) = static_cast(tau->discriminant(xAOD::TauJetParameters::RNNJetScore)); + JetRNNScoreSigTrans( *tau ) = static_cast(tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans)); + + // EleRNN decoration + // ----------------- + static SG::AuxElement::Decorator< int > isEleRNNLoose("isEleRNNLoose"); + static SG::AuxElement::Decorator< int > isEleRNNMedium("isEleRNNMedium"); + static SG::AuxElement::Decorator< int > isEleRNNTight("isEleRNNTight"); + + static SG::AuxElement::Decorator< float > EleRNNScore("EleRNNScore"); + + + isEleRNNLoose( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::EleRNNLoose)); + isEleRNNMedium( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::EleRNNMedium)); + isEleRNNTight( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::EleRNNTight)); + + EleRNNScore( *tau ) = static_cast(tau->discriminant(xAOD::TauJetParameters::RNNEleScore)); + + + // EleID decoration + // ----------------- + static SG::AuxElement::Decorator< int > passEleOLR("passEleOLR"); + + passEleOLR( *tau ) = static_cast(tau->isTau(xAOD::TauJetParameters::PassEleOLR)); + + if (m_decorateWithTracks) { + + // TauTracks decoration + // -------------------- + SG::AuxElement::Decorator< std::vector > tauTrackPt( "trackPt" ); + SG::AuxElement::Decorator< std::vector > tauTrackEta( "trackEta" ); + SG::AuxElement::Decorator< std::vector > tauTrackPhi( "trackPhi" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsCore( "trackIsCore" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsWide( "trackIsWide" ); + SG::AuxElement::Decorator< std::vector > tauTrackFailTrackFilter( "trackFailTrackFilter" ); + SG::AuxElement::Decorator< std::vector > tauTrackPassTrkSel( "trackPassTrkSel" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsClCharged( "trackIsClCharged" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsClIso( "trackIsClIso" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsClConv( "trackIsClConv" ); + SG::AuxElement::Decorator< std::vector > tauTrackIsClFake( "trackIsClFake" ); + + + for (const xAOD::TauTrack* trk : tau->allTracks()){ + + tauTrackPt( *tau ).push_back(trk->pt()); + tauTrackEta( *tau ).push_back(trk->eta()); + tauTrackPhi( *tau ).push_back(trk->phi()); + + + if (!trk->flag(xAOD::TauJetParameters::coreTrack)) tauTrackIsCore(*tau).push_back(1); + else tauTrackIsCore(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::wideTrack)) tauTrackIsWide(*tau).push_back(1); + else tauTrackIsWide(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::failTrackFilter)) tauTrackFailTrackFilter(*tau).push_back(1); + else tauTrackFailTrackFilter(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::passTrkSelector)) tauTrackPassTrkSel(*tau).push_back(1); + else tauTrackPassTrkSel(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::classifiedCharged)) tauTrackIsClCharged(*tau).push_back(1); + else tauTrackIsClCharged(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::classifiedIsolation)) tauTrackIsClIso(*tau).push_back(1); + else tauTrackIsClIso(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::classifiedConversion)) tauTrackIsClConv(*tau).push_back(1); + else tauTrackIsClConv(*tau).push_back(0); + + if (!trk->flag(xAOD::TauJetParameters::classifiedFake)) tauTrackIsClFake(*tau).push_back(1); + else tauTrackIsClFake(*tau).push_back(0); + + } + + } // if decorate with tracks + + ANA_MSG_DEBUG( "Got decoration values" ); + + + if ( tau->pt() <= m_minPtDAOD ) { + ANA_MSG_DEBUG( "Tau failed minimal pT requirement for usage with derivations"); + return 0; + } + + if ( ! m_tauSelTool_handle->accept( *tau ) ) { + ANA_MSG_DEBUG( "Tau failed requirements of TauSelectionTool"); + return 0; + } + + if( !m_isUsedBefore && m_useCutFlow) m_tau_cutflowHist_1->Fill( m_tau_cutflow_selected, 1 ); + if ( m_isUsedBefore && m_useCutFlow ) { m_tau_cutflowHist_2->Fill( m_tau_cutflow_selected, 1 ); } + + return 1; + } diff --git a/_sources/api/program_listing_file_Root_TrackContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_TrackContainer.cxx.rst.txt new file mode 100644 index 0000000000..dfe6462a8d --- /dev/null +++ b/_sources/api/program_listing_file_Root_TrackContainer.cxx.rst.txt @@ -0,0 +1,404 @@ + +.. _program_listing_file_Root_TrackContainer.cxx: + +Program Listing for File TrackContainer.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TrackContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/TrackContainer.h" + #include + #include + #include + + using namespace xAH; + + TrackContainer::TrackContainer(const std::string& name, const std::string& detailStr, float units) : ParticleContainer(name,detailStr,units,true) + + { + if(m_infoSwitch.m_fitpars){ + m_chiSquared = new std::vector; + m_d0 = new std::vector; + m_definingParametersCovMatrix = new std::vector >; + m_expectInnermostPixelLayerHit = new std::vector< char >; + m_expectNextToInnermostPixelLayerHit = new std::vector< char >; + m_numberDoF = new std::vector; + } + + if(m_infoSwitch.m_numbers){ + m_numberOfInnermostPixelLayerHits = new std::vector< char >; + m_numberOfNextToInnermostPixelLayerHits = new std::vector< char >; + m_numberOfPhiHoleLayers = new std::vector< char >; + m_numberOfPhiLayers = new std::vector< char >; + m_numberOfPixelDeadSensors = new std::vector< char >; + m_numberOfPixelHits = new std::vector< char >; + m_numberOfPixelHoles = new std::vector< char >; + m_numberOfPixelSharedHits = new std::vector< char >; + m_numberOfPrecisionHoleLayers = new std::vector< char >; + m_numberOfPrecisionLayers = new std::vector< char >; + m_numberOfSCTDeadSensors = new std::vector< char >; + m_numberOfSCTHits = new std::vector< char >; + m_numberOfSCTHoles = new std::vector< char >; + m_numberOfSCTSharedHits = new std::vector< char >; + m_numberOfTRTHits = new std::vector< char >; + m_numberOfTRTOutliers = new std::vector< char >; + } + + m_phi = new std::vector; + m_qOverP = new std::vector; + m_theta = new std::vector; + + if(m_infoSwitch.m_vertex){ + /* + m_vertexLink = new std::vector; + m_vertexLink_persIndex = new std::vector; + m_vertexLink_persKey = new std::vector; + */ + m_vz = new std::vector; + m_z0 = new std::vector; + } + } + + TrackContainer::~TrackContainer() + { + if(m_debug) std::cout << " Deleting TrackContainer "<< std::endl; + + if(m_infoSwitch.m_fitpars){ + delete m_chiSquared; + delete m_d0; + delete m_definingParametersCovMatrix; + delete m_expectInnermostPixelLayerHit; + delete m_expectNextToInnermostPixelLayerHit; + delete m_numberDoF; + } + + if(m_infoSwitch.m_numbers){ + delete m_numberOfInnermostPixelLayerHits; + delete m_numberOfNextToInnermostPixelLayerHits; + delete m_numberOfPhiHoleLayers; + delete m_numberOfPhiLayers; + delete m_numberOfPixelDeadSensors; + delete m_numberOfPixelHits; + delete m_numberOfPixelHoles; + delete m_numberOfPixelSharedHits; + delete m_numberOfPrecisionHoleLayers; + delete m_numberOfPrecisionLayers; + delete m_numberOfSCTDeadSensors; + delete m_numberOfSCTHits; + delete m_numberOfSCTHoles; + delete m_numberOfSCTSharedHits; + delete m_numberOfTRTHits; + delete m_numberOfTRTOutliers; + } + + delete m_phi; + delete m_qOverP; + delete m_theta; + + if(m_infoSwitch.m_vertex){ + /* + delete m_vertexLink; + delete m_vertexLink_persIndex; + delete m_vertexLink_persKey; + */ + delete m_vz; + delete m_z0; + } + } + + void TrackContainer::setTree(TTree *tree) + { + ParticleContainer::setTree(tree); + + if(m_infoSwitch.m_fitpars){ + connectBranch(tree, "chiSquared", &m_chiSquared); + connectBranch(tree, "d0", &m_d0); + connectBranch >(tree, "definingParametersCovMatrix", &m_definingParametersCovMatrix); + connectBranch(tree, "expectInnermostPixelLayerHit", &m_expectInnermostPixelLayerHit); + connectBranch(tree, "expectNextToInnermostPixelLayerHit", &m_expectNextToInnermostPixelLayerHit); + connectBranch(tree, "numberDoF", &m_numberDoF); + } + + if(m_infoSwitch.m_numbers){ + connectBranch(tree, "numberOfInnermostPixelLayerHits", &m_numberOfInnermostPixelLayerHits); + connectBranch(tree, "numberOfNextToInnermostPixelLayerHits", &m_numberOfNextToInnermostPixelLayerHits); + connectBranch(tree, "numberOfPhiHoleLayers", &m_numberOfPhiHoleLayers); + connectBranch(tree, "numberOfPhiLayers", &m_numberOfPhiLayers); + connectBranch(tree, "numberOfPixelDeadSensors", &m_numberOfPixelDeadSensors); + connectBranch(tree, "numberOfPixelHits", &m_numberOfPixelHits); + connectBranch(tree, "numberOfPixelHoles", &m_numberOfPixelHoles); + connectBranch(tree, "numberOfPixelSharedHits", &m_numberOfPixelSharedHits); + connectBranch(tree, "numberOfPrecisionHoleLayers", &m_numberOfPrecisionHoleLayers); + connectBranch(tree, "numberOfPrecisionLayers", &m_numberOfPrecisionLayers); + connectBranch(tree, "numberOfSCTDeadSensors", &m_numberOfSCTDeadSensors); + connectBranch(tree, "numberOfSCTHits", &m_numberOfSCTHits); + connectBranch(tree, "numberOfSCTHoles", &m_numberOfSCTHoles); + connectBranch(tree, "numberOfSCTSharedHits", &m_numberOfSCTSharedHits); + connectBranch(tree, "numberOfTRTHits", &m_numberOfTRTHits); + connectBranch(tree, "numberOfTRTOutliers", &m_numberOfTRTOutliers); + } + + connectBranch(tree, "phi", &m_phi); + connectBranch(tree, "qOverP", &m_qOverP); + connectBranch(tree, "theta", &m_theta); + + if(m_infoSwitch.m_vertex){ + /* + connectBranch(tree, "vertexLink", &m_vertexLink); + connectBranch(tree, "vertexLink_persIndex", &m_vertexLink_persIndex); + connectBranch(tree, "vertexLink_persKey", &m_vertexLink_persKey); + */ + connectBranch(tree, "vz", &m_vz); + connectBranch(tree, "z0", &m_z0); + } + } + + void TrackContainer::updateParticle(uint idx, TrackPart& track) + { + if(m_debug) std::cout << "in TrackContainer::updateParticle" << std::endl; + ParticleContainer::updateParticle(idx, track); + + if(m_infoSwitch.m_fitpars){ + track.chiSquared = m_chiSquared->at(idx); + track.d0 = m_d0->at(idx); + track.definingParametersCovMatrix = m_definingParametersCovMatrix->at(idx); + track.expectInnermostPixelLayerHit = m_expectInnermostPixelLayerHit->at(idx); + track.expectNextToInnermostPixelLayerHit = m_expectNextToInnermostPixelLayerHit->at(idx); + } + + if(m_infoSwitch.m_numbers){ + track.numberDoF = m_numberDoF->at(idx); + track.numberOfInnermostPixelLayerHits = m_numberOfInnermostPixelLayerHits->at(idx); + track.numberOfNextToInnermostPixelLayerHits = m_numberOfNextToInnermostPixelLayerHits->at(idx); + track.numberOfPhiHoleLayers = m_numberOfPhiHoleLayers->at(idx); + track.numberOfPhiLayers = m_numberOfPhiLayers->at(idx); + track.numberOfPixelDeadSensors = m_numberOfPixelDeadSensors->at(idx); + track.numberOfPixelHits = m_numberOfPixelHits->at(idx); + track.numberOfPixelHoles = m_numberOfPixelHoles->at(idx); + track.numberOfPixelSharedHits = m_numberOfPixelSharedHits->at(idx); + track.numberOfPrecisionHoleLayers = m_numberOfPrecisionHoleLayers->at(idx); + track.numberOfPrecisionLayers = m_numberOfPrecisionLayers->at(idx); + track.numberOfSCTDeadSensors = m_numberOfSCTDeadSensors->at(idx); + track.numberOfSCTHits = m_numberOfSCTHits->at(idx); + track.numberOfSCTHoles = m_numberOfSCTHoles->at(idx); + track.numberOfSCTSharedHits = m_numberOfSCTSharedHits->at(idx); + track.numberOfTRTHits = m_numberOfTRTHits->at(idx); + track.numberOfTRTOutliers = m_numberOfTRTOutliers->at(idx); + } + + track.phi = m_phi->at(idx); + track.qOverP = m_qOverP->at(idx); + track.theta = m_theta->at(idx); + + if(m_infoSwitch.m_vertex){ + /* + track.vertexLink = m_vertexLink->at(idx); + track.vertexLink_persIndex = m_vertexLink_persIndex->at(idx); + track.vertexLink_persKey = m_vertexLink_persKey->at(idx); + */ + track.vz = m_vz->at(idx); + track.z0 = m_z0->at(idx); + } + + if(m_debug) std::cout << "leaving TrackContainer::updateParticle" << std::endl; + return; + } + + void TrackContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + if(m_infoSwitch.m_fitpars){ + setBranch(tree, "chiSquared", m_chiSquared); + setBranch(tree, "d0", m_d0); + setBranch>(tree, "definingParametersCovMatrix", m_definingParametersCovMatrix); + setBranch(tree, "expectInnermostPixelLayerHit", m_expectInnermostPixelLayerHit); + setBranch(tree, "expectNextToInnermostPixelLayerHit", m_expectNextToInnermostPixelLayerHit); + setBranch(tree, "numberDoF", m_numberDoF); + } + + if(m_infoSwitch.m_numbers){ + setBranch(tree, "numberOfInnermostPixelLayerHits", m_numberOfInnermostPixelLayerHits); + setBranch(tree, "numberOfNextToInnermostPixelLayerHits", m_numberOfNextToInnermostPixelLayerHits); + setBranch(tree, "numberOfPhiHoleLayers", m_numberOfPhiHoleLayers); + setBranch(tree, "numberOfPhiLayers", m_numberOfPhiLayers); + setBranch(tree, "numberOfPixelDeadSensors", m_numberOfPixelDeadSensors); + setBranch(tree, "numberOfPixelHits", m_numberOfPixelHits); + setBranch(tree, "numberOfPixelHoles", m_numberOfPixelHoles); + setBranch(tree, "numberOfPixelSharedHits", m_numberOfPixelSharedHits); + setBranch(tree, "numberOfPrecisionHoleLayers", m_numberOfPrecisionHoleLayers); + setBranch(tree, "numberOfPrecisionLayers", m_numberOfPrecisionLayers); + setBranch(tree, "numberOfSCTDeadSensors", m_numberOfSCTDeadSensors); + setBranch(tree, "numberOfSCTHits", m_numberOfSCTHits); + setBranch(tree, "numberOfSCTHoles", m_numberOfSCTHoles); + setBranch(tree, "numberOfSCTSharedHits", m_numberOfSCTSharedHits); + setBranch(tree, "numberOfTRTHits", m_numberOfTRTHits); + setBranch(tree, "numberOfTRTOutliers", m_numberOfTRTOutliers); + } + + setBranch(tree, "phi", m_phi); + setBranch(tree, "qOverP", m_qOverP); + setBranch(tree, "theta", m_theta); + + if(m_infoSwitch.m_vertex){ + /* + setBranch(tree, "vertexLink", m_vertexLink); + setBranch(tree, "vertexLink_persIndex", m_vertexLink_persIndex); + setBranch(tree, "vertexLink_persKey", m_vertexLink_persKey); + */ + setBranch(tree, "vz", m_vz); + setBranch(tree, "z0", m_z0); + } + } + + void TrackContainer::clear() + { + ParticleContainer::clear(); + + if(m_infoSwitch.m_fitpars){ + m_chiSquared->clear(); + m_d0->clear(); + m_definingParametersCovMatrix->clear(); + m_expectInnermostPixelLayerHit->clear(); + m_expectNextToInnermostPixelLayerHit->clear(); + m_numberDoF->clear(); + } + + if(m_infoSwitch.m_numbers){ + m_numberOfInnermostPixelLayerHits->clear(); + m_numberOfNextToInnermostPixelLayerHits->clear(); + m_numberOfPhiHoleLayers->clear(); + m_numberOfPhiLayers->clear(); + m_numberOfPixelDeadSensors->clear(); + m_numberOfPixelHits->clear(); + m_numberOfPixelHoles->clear(); + m_numberOfPixelSharedHits->clear(); + m_numberOfPrecisionHoleLayers->clear(); + m_numberOfPrecisionLayers->clear(); + m_numberOfSCTDeadSensors->clear(); + m_numberOfSCTHits->clear(); + m_numberOfSCTHoles->clear(); + m_numberOfSCTSharedHits->clear(); + m_numberOfTRTHits->clear(); + m_numberOfTRTOutliers->clear(); + } + + m_phi->clear(); + m_qOverP->clear(); + m_theta->clear(); + + if(m_infoSwitch.m_vertex){ + /* + m_vertexLink->clear(); + m_vertexLink_persIndex->clear(); + m_vertexLink_persKey->clear(); + */ + m_vz->clear(); + m_z0->clear(); + } + } + + void TrackContainer::FillTrack( const xAOD::TrackParticle* track ){ + return FillTrack(static_cast(track)); + } + + void TrackContainer::FillTrack( const xAOD::IParticle* particle ){ + if(m_debug) std::cout << "In Fill Track" << std::endl; + ParticleContainer::FillParticle(particle); + + const xAOD::TrackParticle* track=dynamic_cast(particle); + if(m_debug) std::cout << "Got TrackParticle" << std::endl; + + if(m_infoSwitch.m_fitpars){ + if(m_debug) std::cout << "Filling fitpars" << std::endl; + + m_chiSquared->push_back( track->chiSquared() ); + m_d0->push_back( track->d0() ); + m_numberDoF->push_back( track->numberDoF() ); + //m_definingParametersCovMatrix ->push_back(track->definingParametersCovMatrix() ); // fix this too + + static SG::AuxElement::ConstAccessor expectInnermostPixelLayerHit("expectInnermostPixelLayerHit"); + safeFill(track, expectInnermostPixelLayerHit, m_expectInnermostPixelLayerHit, -1); + + static SG::AuxElement::ConstAccessor expectNextToInnermostPixelLayerHit("expectNextToInnermostPixelLayerHit"); + safeFill(track, expectNextToInnermostPixelLayerHit, m_expectNextToInnermostPixelLayerHit, -1); + } + + if(m_infoSwitch.m_numbers){ + if(m_debug) std::cout << "Filling numbers" << std::endl; + + static SG::AuxElement::ConstAccessor numberOfInnermostPixelLayerHits("numberOfInnermostPixelLayerHits"); + safeFill(track, numberOfInnermostPixelLayerHits, m_numberOfInnermostPixelLayerHits, -1); + + static SG::AuxElement::ConstAccessor numberOfNextToInnermostPixelLayerHits("numberOfNextToInnermostPixelLayerHits"); + safeFill(track, numberOfNextToInnermostPixelLayerHits, m_numberOfNextToInnermostPixelLayerHits, -1); + + static SG::AuxElement::ConstAccessor numberOfPhiHoleLayers("numberOfPhiHoleLayers"); + safeFill(track, numberOfPhiHoleLayers, m_numberOfPhiHoleLayers, -1); + + static SG::AuxElement::ConstAccessor numberOfPhiLayers("numberOfPhiLayers"); + safeFill(track, numberOfPhiLayers, m_numberOfPhiLayers, -1); + + static SG::AuxElement::ConstAccessor numberOfPixelDeadSensors("numberOfPixelDeadSensors"); + safeFill(track, numberOfPixelDeadSensors, m_numberOfPixelDeadSensors, -1); + + static SG::AuxElement::ConstAccessor numberOfPixelHits("numberOfPixelHits"); + safeFill(track, numberOfPixelHits, m_numberOfPixelHits, -1); + + static SG::AuxElement::ConstAccessor numberOfPixelHoles("numberOfPixelHoles"); + safeFill(track, numberOfPixelHoles, m_numberOfPixelHoles, -1); + + static SG::AuxElement::ConstAccessor numberOfPixelSharedHits("numberOfPixelSharedHits"); + safeFill(track, numberOfPixelSharedHits, m_numberOfPixelSharedHits, -1); + + static SG::AuxElement::ConstAccessor numberOfPrecisionHoleLayers("numberOfPrecisionHoleLayers"); + safeFill(track, numberOfPrecisionHoleLayers, m_numberOfPrecisionHoleLayers, -1); + + static SG::AuxElement::ConstAccessor numberOfPrecisionLayers("numberOfPrecisionLayers"); + safeFill(track, numberOfPrecisionLayers, m_numberOfPrecisionLayers, -1); + + static SG::AuxElement::ConstAccessor numberOfSCTDeadSensors("numberOfSCTDeadSensors"); + safeFill(track, numberOfSCTDeadSensors, m_numberOfSCTDeadSensors, -1); + + static SG::AuxElement::ConstAccessor numberOfSCTHits("numberOfSCTHits"); + safeFill(track, numberOfSCTHits, m_numberOfSCTHits, -1); + + static SG::AuxElement::ConstAccessor numberOfSCTHoles("numberOfSCTHoles"); + safeFill(track, numberOfSCTHoles, m_numberOfSCTHoles, -1); + + static SG::AuxElement::ConstAccessor numberOfSCTSharedHits("numberOfSCTSharedHits"); + safeFill(track, numberOfSCTSharedHits, m_numberOfSCTSharedHits, -1); + + static SG::AuxElement::ConstAccessor numberOfTRTHits("numberOfTRTHits"); + safeFill(track, numberOfTRTHits, m_numberOfTRTHits, -1); + + static SG::AuxElement::ConstAccessor numberOfTRTOutliers("numberOfTRTOutliers"); + safeFill(track, numberOfTRTOutliers, m_numberOfTRTOutliers, -1); + } + + m_phi->push_back(track->phi() ); + m_qOverP->push_back(track->qOverP() ); + m_theta->push_back(track->theta() ); + + if(m_infoSwitch.m_vertex){ + if(m_debug) std::cout << "Filling vertex" << std::endl; + + //static SG::AuxElement::ConstAccessor vertexLink("vertexLink"); + /* + m_vertexLink->push_back(vertexLink(*track) ); + //m_vertexLink_persIndex->push_back(track->vertexLink.m_persIndex() ); + //m_vertexLink_persKey->push_back(track->vertexLink.m_persKey() ); + m_vertexLink_persIndex->push_back( -999 ); + m_vertexLink_persKey->push_back( -999 ); + */ + m_vz->push_back(track->vz() ); + m_z0->push_back(track->z0() ); + } + + if(m_debug) std::cout << "Leave Fill Track" << std::endl; + return; + } diff --git a/_sources/api/program_listing_file_Root_TrackHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_TrackHists.cxx.rst.txt new file mode 100644 index 0000000000..d14c96b46d --- /dev/null +++ b/_sources/api/program_listing_file_Root_TrackHists.cxx.rst.txt @@ -0,0 +1,380 @@ + +.. _program_listing_file_Root_TrackHists.cxx: + +Program Listing for File TrackHists.cxx +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TrackHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/TrackHists.h" + + #include + + #include "xAODAnaHelpers/HelperFunctions.h" + + ANA_MSG_SOURCE(msgTrackHists, "TrackHists") + + TrackHists :: TrackHists (std::string name, std::string detailStr) : + HistogramManager(name, detailStr) + { + } + + TrackHists :: ~TrackHists () {} + + StatusCode TrackHists::initialize() { + + // These plots are always made + m_trk_n = book(m_name, "trk_n", "trk multiplicity", 10, -0.5, 9.5 ); + m_trk_n_l = book(m_name, "trk_n_l", "trk multiplicity", 100, -0.5, 99.5 ); + + m_trk_Pt = book(m_name, "pt", "trk p_{T} [GeV]", 100, 0, 10 ); + m_trk_Pt_l = book(m_name, "pt_l", "trk p_{T} [GeV]", 100, 0, 100 ); + m_trk_P = book(m_name, "p", "trk |p| [GeV]", 100, 0, 10 ); + m_trk_P_l = book(m_name, "p_l", "trk |p| [GeV]", 100, 0, 100 ); + m_trk_Eta = book(m_name, "eta", "trk #eta", 80, -4, 4); + m_trk_Phi = book(m_name, "phi", "trk #phi",120, -TMath::Pi(), TMath::Pi() ); + m_trk_d0 = book(m_name, "d0", "d0[mm]", 100,-5.0, 5.0 ); + m_trk_d0_s = book(m_name, "d0_s" , "d0[mm]", 100, -1.0, 1.0 ); + + m_trk_z0 = book(m_name, "z0", "z0[mm]", 100,-5.0, 5.0 ); + m_trk_z0_s = book(m_name, "z0_s", "z0[mm]", 100,-1.0, 1.0 ); + m_trk_z0sinT = book(m_name, "z0sinT", "z0xsin(#theta)[mm]", 100, -5.0, 5.0 ); + + m_trk_chi2Prob = book(m_name, "chi2Prob", "chi2Prob", 100, -0.01, 1.0); + m_trk_charge = book(m_name, "charge" , "charge", 3, -1.5, 1.5 ); + + // + // 2D plots + // + m_fill2D = false; + if(m_detailStr.find("2D") != std::string::npos ){ + m_fill2D = true; + + m_trk_Eta_vs_trk_P = book(m_name, "trk_Eta_vs_trk_P", "trk |p| [GeV]", 100, 0, 10, "trk #eta", 80, -4, 4); + m_trk_Eta_vs_trk_P_l = book(m_name, "trk_Eta_vs_trk_P_l", "trk |p| [GeV]", 100, 0, 100, "trk #eta", 80, -4, 4); + m_trk_Phi_vs_trk_P = book(m_name, "trk_Phi_vs_trk_P", "trk |p| [GeV]", 100, 0, 10, "trk #phi",120, -TMath::Pi(), TMath::Pi()); + m_trk_Phi_vs_trk_P_l = book(m_name, "trk_Phi_vs_trk_P_l", "trk |p| [GeV]", 100, 0, 100, "trk #phi",120, -TMath::Pi(), TMath::Pi()); + m_trk_Eta_vs_trk_Phi = book(m_name, "trk_Eta_vs_trk_Phi", "trk #phi", 120, -TMath::Pi(), TMath::Pi(), "trk #eta", 80, -4, 4); + + m_trk_d0_vs_trk_P = book(m_name, "trk_d0_vs_trk_P", "trk |p| [GeV]", 100, 0, 10, "d0[mm]", 100,-5.0, 5.0); + m_trk_d0_vs_trk_P_l = book(m_name, "trk_d0_vs_trk_P_l", "trk |p| [GeV]", 100, 0, 100, "d0[mm]", 100,-5.0, 5.0); + m_trk_z0_vs_trk_P = book(m_name, "trk_z0_vs_trk_P", "trk |p| [GeV]", 100, 0, 10, "z0[mm]", 100,-5.0, 5.0); + m_trk_z0_vs_trk_P_l = book(m_name, "trk_z0_vs_trk_P_l", "trk |p| [GeV]", 100, 0, 100, "z0[mm]", 100,-5.0, 5.0); + m_trk_z0sinT_vs_trk_P = book(m_name, "trk_z0sinT_vs_trk_P", "trk |p| [GeV]", 100, 0, 10, "z0xsin(#theta)[mm]", 100,-5.0, 5.0); + m_trk_z0sinT_vs_trk_P_l = book(m_name, "trk_z0sinT_vs_trk_P_l", "trk |p| [GeV]", 100, 0, 100, "z0xsin(#theta)[mm]", 100,-5.0, 5.0); + } + + // + // IP Details + // + m_fillIPDetails = false; + if(m_detailStr.find("IPDetails") != std::string::npos ){ + m_fillIPDetails = true; + + m_trk_d0Err = book(m_name, "d0Err", "d0Err[mm]", 100, 0, 0.4 ); + m_trk_d0_l = book(m_name, "d0_l" , "d0[mm]", 100, -10.0, 10.0 ); + m_trk_d0_ss = book(m_name, "d0_ss" , "d0[mm]", 100, -0.2, 0.2 ); + + m_trk_d0Sig = book(m_name, "d0Sig", "d0Sig", 240, -20.0, 40.0 ); + + m_trk_z0_l = book(m_name, "z0_l" , "z0[mm]", 100, -600.0, 600.0 ); + m_trk_z0sinT_l = book(m_name, "z0sinT_l", "z0xsin(#theta)[mm]", 100, -20.0, 20.0 ); + m_trk_z0Err = book(m_name, "z0Err", "z0Err[mm]", 100, 0, 0.4 ); + m_trk_z0Sig = book(m_name, "z0Sig", "z0Sig", 100, -25.0, 25.0 ); + m_trk_z0SigsinT = book(m_name, "z0SigsinT", "z0 significance x sin(#theta)", 100, -25.0, 25.0 ); + + //m_trk_mc_prob = book(m_name, "mc_prob", "mc_prob", 100, -0.1, 1.1 ); + //m_trk_mc_barcode = book(m_name, "mc_barcode", "mc_barcode", 100, -0.1, 0.5e6 ); + //m_trk_mc_barcode_s = book(m_name, "mc_barcode_s", "mc_barcode", 100, -0.1, 25e3 ); + } + + // + // Fill Hit Counts Details + // + m_fillHitCounts = false; + if(m_detailStr.find("HitCounts") != std::string::npos ){ + m_fillHitCounts = true; + m_trk_nSi = book(m_name, "nSi", "nSi", 30, -0.5, 29.5 ); + m_trk_nSiAndDead = book(m_name, "nSiAndDead", "nSi(+Dead)", 30, -0.5, 29.5 ); + m_trk_nSiDead = book(m_name, "nSiDead", "nSiDead", 10, -0.5, 9.5 ); + m_trk_nSCT = book(m_name, "nSCT", "nSCTHits", 20, -0.5, 19.5 ); + m_trk_nPix = book(m_name, "nPix", "nPix", 10, -0.5, 9.5 ); + m_trk_nPixHoles = book(m_name, "nPixHoles", "nPixHoles", 10, -0.5, 9.5 ); + m_trk_nBL = book(m_name, "nBL", "nBL", 3, -0.5, 2.5 ); + m_trk_nTRT = book(m_name, "nTRT", "nTRT", 50, -0.5, 49.5 ); + // m_trk_nTRTHoles = book(m_name, "nTRTHoles", "nTRTHoles", 50, -0.5, 49.5 ); + // m_trk_nTRTDead = book(m_name, "nTRTDead", "nTRTDead", 50, -0.5, 49.5 ); + } + + // + // TP Errors Details + // + m_fillTPErrors = false; + if(m_detailStr.find("TPErrors") != std::string::npos ){ + m_fillTPErrors = true; + + //m_chi2ndof TProfile(m_name, "chi2ndofvseta", "chi2ndofvseta; eta; chi2", 20, -0.1, 2.7, 0, 4, "s" ); + //new TProfile(m_name, "chi2ndofvseta", "chi2ndofvseta; eta; chi2", 20, -0.1, 2.7, 0, 4, "s" ); + //new TProfile(m_name, "nhitsvseta", "nhitsvseta; eta; nhits", 20, -0.1, 2.7, 0, 15 , "s" ); + //new TProfile(m_name, "chi2ndofvspt", "chi2ndofvseta; pt; chi2", 50, -0.1, 20, 0 , 4, "s" ); + + // new TProfile(m_name, "d0Errvseta", "d0Errvseta; eta; d0Err", 20, -0.1, 2.7, 0, 0.4, "s" ); + // new TProfile(m_name, "d0ErrvsIpt", "d0ErrvsIpt; Ipt; d0Err", 20, -6e-4, 6e4, 0, 0.4, "s" ); + // new TProfile(m_name, "d0Errvsphi", "d0Errvsphi; phi; d0Err", 1000, -3.2, 3.2, 0, 0.4); + // + + // new TH2F(m_name, "z0d0" , "z0d0; z0[mm]; d0[mm];", 50, -300.0, 300.0, 50, -4.0, 4.0 ); + // new TH2F(m_name, "z0sinTd0", "z0sinTd0; z0xsin0[mm](signed); d0[mm](signed);", 50,-2.0, 2.0, 50, -2.0, 2.0 ); + + // new TH2F(m_name, "d0vsPt" , "d0vsPt; d0[mm] (signed); Pt[GeV];", 100, -2,2.0, 50, 0, 10 ); + // new TH2F(m_name, "d0SigvsPt" , "d0SigvsPt; d0Sig(signed); Pt[GeV];", 240, -20, 40.0, 50, 0, 10 ); + m_trk_phiErr = book(m_name, "phiErr" , "phi Err[rad]", 100, 0, 0.01 ); + m_trk_thetaErr = book(m_name, "thetaErr", "theta Err", 100, 0, 0.01 ); + m_trk_qOpErr = book(m_name, "qOpErr" , "q/p Err", 100, 0, 1.0e-04); + } + + // + // Chi2 Details + // + m_fillChi2Details = false; + if(m_detailStr.find("Chi2Details") != std::string::npos ){ + m_fillChi2Details = true; + m_trk_chi2Prob_l = book(m_name, "chi2Prob_l", "chi2Prob", 100, -0.1, 1.1); + m_trk_chi2Prob_s = book(m_name, "chi2Prob_s", "chi2Prob", 100, -0.01, 0.1); + m_trk_chi2Prob_ss = book(m_name, "chi2Prob_ss", "chi2Prob", 100, -0.001, 0.01); + m_trk_chi2ndof = book(m_name, "chi2ndof", "chi2ndof", 100, 0.0, 8.0 ); + m_trk_chi2ndof_l = book(m_name, "chi2ndof_l", "chi2ndof", 100, 0.0, 80.0 ); + } + + // + // TrkDebugging + // + m_fillDebugging = false; + if(m_detailStr.find("Debugging") != std::string::npos ){ + m_fillDebugging = true; + m_trk_eta_vl = book(m_name, "eta_vl", "eta", 100, -6, 6 ); + m_trk_z0_vl = book(m_name, "z0_vl", "z0[mm]", 100, -10000.0, 10000.0 ); + m_trk_z0_raw_m = book(m_name, "z0_raw_m", "z0[mm]", 100, -100.0, 100.0 ); + m_trk_z0_atlas_m = book(m_name, "z0_atlas_m", "z0[mm]", 100, -100.0, 100.0 ); + m_trk_vz = book(m_name, "vz", "z0[mm]", 100, -100.0, 100.0 ); + m_trk_z0_m = book(m_name, "z0_m", "z0[mm]", 100, -100.0, 100.0 ); + m_trk_d0_vl = book(m_name, "d0_vl", "d0[mm]", 100, -10000.0, 10000.0 ); + m_trk_pt_ss = book(m_name, "pt_ss", "Pt[GeV", 100, 0, 2.0 ); + m_trk_phiManyBins = book(m_name, "phiManyBins" , "phi", 1000, -3.2, 3.2 ); + + } + + // + // vs Lumi Block + // + m_fillVsLumi = false; + if(m_detailStr.find("vsLumiBlock") != std::string::npos ){ + m_fillVsLumi = true; + + m_lBlock = book(m_name, "lBlock", "LumiBlock", 100, 0, 1000); + m_trk_z0_vs_lBlock = book(m_name, "z0_vs_lBlock", "LumiBlock", 100, 0, 1000, "z0", -100, 100); + m_trk_z0_raw_vs_lBlock = book(m_name, "z0_raw_vs_lBlock", "LumiBlock", 100, 0, 1000, "z0 raw", -100, 100); + m_trk_z0_atlas_vs_lBlock = book(m_name, "z0_atlas_vs_lBlock", "LumiBlock", 100, 0, 1000, "z0 atlas", -100, 100); + + m_trk_vz_vs_lBlock = book(m_name, "vz_vs_lBlock", "LumiBlock", 100, 0, 1000, "vz", -100, 100); + m_pvz_vs_lBlock = book(m_name, "pvz_vs_lBlock", "LumiBlock", 100, 0, 1000, "pvz", -100, 100); + m_pv_valid_vs_lBlock = book(m_name, "pv_valid_vs_lBlock", "LumiBlock", 100, 0, 1000, "valid", -0.1, 1.1); + + + m_bsX = book(m_name, "bsX", "beamPos X", 100, -10, 10); + m_bsY = book(m_name, "bsY", "beamPos Y", 100, -10, 10); + m_bsZ = book(m_name, "bsZ", "beamPos Z", 100, -10, 10); + m_bsX_vs_lBlock = book(m_name, "bsX_vs_lBlock", "LumiBlock", 100, 0, 1000, "bxX", -1, 1); + m_bsY_vs_lBlock = book(m_name, "bsY_vs_lBlock", "LumiBlock", 100, 0, 1000, "bsY", -1, 1); + m_bsZ_vs_lBlock = book(m_name, "bsZ_vs_lBlock", "LumiBlock", 100, 0, 1000, "bsZ", -10, 10); + + //m_trk_eta_vl = book(m_name, "eta_vl", "eta", 100, -6, 6 ); + //m_trk_z0_vl = book(m_name, "z0_vl", "z0[mm]", 100, -10000.0, 10000.0 ); + //m_trk_z0_m_raw = book(m_name, "z0_m_raw", "z0[mm]", 100, -100.0, 100.0 ); + //m_trk_z0_m = book(m_name, "z0_m", "z0[mm]", 100, -100.0, 100.0 ); + //m_trk_d0_vl = book(m_name, "d0_vl", "d0[mm]", 100, -10000.0, 10000.0 ); + //m_trk_pt_ss = book(m_name, "pt_ss", "Pt[GeV", 100, 0, 2.0 ); + //m_trk_phiManyBins = book(m_name, "phiManyBins" , "phi", 1000, -3.2, 3.2 ); + + } + + + // if worker is passed to the class add histograms to the output + return StatusCode::SUCCESS; + } + + StatusCode TrackHists::execute( const xAOD::TrackParticleContainer* trks, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgTrackHists; + xAOD::TrackParticleContainer::const_iterator trk_itr = trks->begin(); + xAOD::TrackParticleContainer::const_iterator trk_end = trks->end(); + for( ; trk_itr != trk_end; ++trk_itr ) { + ANA_CHECK( this->execute( (*trk_itr), pvx, eventWeight, eventInfo )); + } + + m_trk_n -> Fill( trks->size(), eventWeight ); + m_trk_n_l -> Fill( trks->size(), eventWeight ); + + return StatusCode::SUCCESS; + } + + StatusCode TrackHists::execute( const xAOD::TrackParticle* trk, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo ) { + + //basic + float trkPt = trk->pt()/1e3; + float trkP = -1; + if (fabs(trk->qOverP())>0.) trkP = (1./fabs(trk->qOverP()))/1e3; + float trkEta = trk->eta(); + float trkPhi = trk->phi(); + float chi2 = trk->chiSquared(); + float ndof = trk->numberDoF(); + float chi2Prob = TMath::Prob(chi2,ndof); + float d0 = trk->d0(); + float pvz = HelperFunctions::getPrimaryVertexZ(pvx); + float z0 = trk->z0() + trk->vz() - pvz; + + float sinT = sin(trk->theta()); + + m_trk_Pt -> Fill( trkPt, eventWeight ); + m_trk_Pt_l -> Fill( trkPt, eventWeight ); + m_trk_P -> Fill( trkP, eventWeight ); + m_trk_P_l -> Fill( trkP, eventWeight ); + m_trk_Eta -> Fill( trkEta, eventWeight ); + m_trk_Phi -> Fill( trkPhi, eventWeight ); + m_trk_d0 -> Fill( d0, eventWeight ); + m_trk_d0_s -> Fill( d0, eventWeight ); + m_trk_z0 -> Fill( z0, eventWeight ); + m_trk_z0_s -> Fill( z0, eventWeight ); + m_trk_z0sinT -> Fill(z0*sinT, eventWeight ); + + m_trk_chi2Prob -> Fill( chi2Prob , eventWeight ); + m_trk_charge -> Fill( trk->charge() , eventWeight ); + + if(m_fill2D){ + + m_trk_Eta_vs_trk_P -> Fill( trkP, trkEta, eventWeight ); + m_trk_Eta_vs_trk_P_l -> Fill( trkP, trkEta, eventWeight ); + m_trk_Phi_vs_trk_P -> Fill( trkP, trkPhi, eventWeight ); + m_trk_Phi_vs_trk_P_l -> Fill( trkP, trkPhi, eventWeight ); + m_trk_Eta_vs_trk_Phi -> Fill( trkPhi, trkEta, eventWeight ); + m_trk_d0_vs_trk_P -> Fill( trkP, d0, eventWeight ); + m_trk_d0_vs_trk_P_l -> Fill( trkP, d0, eventWeight ); + m_trk_z0_vs_trk_P -> Fill( trkP, z0, eventWeight ); + m_trk_z0_vs_trk_P_l -> Fill( trkP, z0, eventWeight ); + m_trk_z0sinT_vs_trk_P -> Fill( trkP, z0*sinT, eventWeight ); + m_trk_z0sinT_vs_trk_P_l -> Fill( trkP, z0*sinT, eventWeight ); + + } + + if(m_fillIPDetails){ + float d0Err = sqrt((trk->definingParametersCovMatrixVec().at(0))); + float d0Sig = (d0Err > 0) ? d0/d0Err : -1 ; + m_trk_d0_l -> Fill(d0 , eventWeight ); + m_trk_d0_ss -> Fill(d0 , eventWeight ); + m_trk_d0Err -> Fill(d0Err , eventWeight ); + m_trk_d0Sig -> Fill(d0Sig , eventWeight ); + + float z0Err = sqrt((trk->definingParametersCovMatrixVec().at(2))); + float z0Sig = (z0Err > 0) ? z0/z0Err : -1 ; + + m_trk_z0_l -> Fill(z0 , eventWeight ); + m_trk_z0sinT_l -> Fill(z0*sinT, eventWeight ); + m_trk_z0Err -> Fill(z0Err , eventWeight ); + m_trk_z0Sig -> Fill(z0Sig , eventWeight ); + m_trk_z0SigsinT -> Fill(z0Sig*sinT , eventWeight ); + + } + + if(m_fillHitCounts){ + + uint8_t nBL = -1; + uint8_t nPix = -1; + uint8_t nPixDead = -1; + uint8_t nPixHoles = -1; + uint8_t nSCT = -1; + uint8_t nSCTDead = -1; + uint8_t nTRT = -1; + //uint8_t nTRTHoles = -1; + //uint8_t nTRTDead = -1; + + if(!trk->summaryValue(nBL, xAOD::numberOfBLayerHits)) ANA_MSG_ERROR("BLayer hits not filled"); + if(!trk->summaryValue(nPix, xAOD::numberOfPixelHits)) ANA_MSG_ERROR("Pix hits not filled"); + if(!trk->summaryValue(nPixDead, xAOD::numberOfPixelDeadSensors)) ANA_MSG_ERROR("Pix Dead not filled"); + if(!trk->summaryValue(nPixHoles, xAOD::numberOfPixelHoles)) ANA_MSG_ERROR("Pix holes not filled"); + if(!trk->summaryValue(nSCT, xAOD::numberOfSCTHits)) ANA_MSG_ERROR("SCT hits not filled"); + if(!trk->summaryValue(nSCTDead, xAOD::numberOfSCTDeadSensors)) ANA_MSG_ERROR("SCT Dead not filled"); + if(!trk->summaryValue(nTRT, xAOD::numberOfTRTHits)) ANA_MSG_ERROR("TRT hits not filled"); + // if(!trk->summaryValue(nTRTHoles, xAOD::numberOfTRTHoles)) ANA_MSG_ERROR("TRT holes not filled"); + // if(!trk->summaryValue(nTRTDead, xAOD::numberOfTRTDeadStraws)) ANA_MSG_ERROR("TRT Dead not filled"); + + uint8_t nSi = nPix + nSCT; + uint8_t nSiDead = nPixDead + nSCTDead; + m_trk_nBL -> Fill( nBL , eventWeight ); + m_trk_nSi -> Fill( nSi , eventWeight ); + m_trk_nSiAndDead -> Fill( nSi+nSiDead , eventWeight ); + m_trk_nSiDead -> Fill( nSiDead , eventWeight ); + m_trk_nSCT -> Fill( nSCT , eventWeight ); + m_trk_nPix -> Fill( nPix , eventWeight ); + m_trk_nPixHoles -> Fill( nPixHoles , eventWeight ); + m_trk_nTRT -> Fill( nTRT , eventWeight ); + // m_trk_nTRTHoles -> Fill( nTRTHoles , eventWeight ); + // m_trk_nTRTDead -> Fill( nTRTDead , eventWeight ); + + } + + if(m_fillTPErrors){ + //m_trk_phiErr -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(6))) , eventWeight ); + //m_trk_thetaErr -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(10))) , eventWeight ); + //m_trk_qOpErr -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(15))) , eventWeight ); + } + + if(m_fillChi2Details){ + float chi2NDoF = (ndof > 0) ? chi2/ndof : -1; + m_trk_chi2Prob_l -> Fill(chi2Prob , eventWeight ); + m_trk_chi2Prob_s -> Fill(chi2Prob , eventWeight ); + m_trk_chi2Prob_ss -> Fill(chi2Prob , eventWeight ); + m_trk_chi2ndof -> Fill(chi2NDoF , eventWeight ); + m_trk_chi2ndof_l -> Fill(chi2NDoF , eventWeight ); + } + + if(m_fillDebugging){ + m_trk_eta_vl -> Fill( trkEta, eventWeight ); + m_trk_z0_vl -> Fill( z0, eventWeight ); + m_trk_z0_m -> Fill( z0, eventWeight ); + m_trk_z0_raw_m -> Fill( trk->z0(), eventWeight ); + m_trk_z0_atlas_m -> Fill( trk->z0() + trk->vz(), eventWeight ); + m_trk_vz -> Fill( trk->vz(), eventWeight ); + m_trk_d0_vl -> Fill( d0, eventWeight ); + m_trk_pt_ss -> Fill( trkPt, eventWeight ); + m_trk_phiManyBins -> Fill( trkPhi, eventWeight ); + } + + if(m_fillVsLumi && eventInfo){ + uint32_t lumiBlock = eventInfo->lumiBlock(); + + m_lBlock ->Fill(lumiBlock, eventWeight); + m_trk_z0_vs_lBlock ->Fill(lumiBlock, z0, eventWeight); + m_trk_z0_raw_vs_lBlock ->Fill(lumiBlock, trk->z0(), eventWeight); + m_trk_z0_atlas_vs_lBlock->Fill(lumiBlock, trk->z0() + trk->vz(), eventWeight); + m_trk_vz_vs_lBlock ->Fill(lumiBlock, trk->vz(), eventWeight); + m_pvz_vs_lBlock ->Fill(lumiBlock, pvz, eventWeight); + + m_pv_valid_vs_lBlock ->Fill(lumiBlock, bool(pvx), eventWeight); + + m_bsX ->Fill(eventInfo->beamPosX(), eventWeight); + m_bsY ->Fill(eventInfo->beamPosY(), eventWeight); + m_bsZ ->Fill(eventInfo->beamPosZ(), eventWeight); + + m_bsX_vs_lBlock ->Fill(lumiBlock, eventInfo->beamPosX(), eventWeight); + m_bsY_vs_lBlock ->Fill(lumiBlock, eventInfo->beamPosY(), eventWeight); + m_bsZ_vs_lBlock ->Fill(lumiBlock, eventInfo->beamPosZ(), eventWeight); + + } + + return StatusCode::SUCCESS; + + } + diff --git a/_sources/api/program_listing_file_Root_TrackHistsAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_TrackHistsAlgo.cxx.rst.txt new file mode 100644 index 0000000000..7af0ad8330 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TrackHistsAlgo.cxx.rst.txt @@ -0,0 +1,104 @@ + +.. _program_listing_file_Root_TrackHistsAlgo.cxx: + +Program Listing for File TrackHistsAlgo.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TrackHistsAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + #include "AthContainers/ConstDataVector.h" + #include "xAODTracking/VertexContainer.h" + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(TrackHistsAlgo) + + TrackHistsAlgo :: TrackHistsAlgo () : + Algorithm("TrackHistsAlgo") + { + } + + EL::StatusCode TrackHistsAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + + // let's initialize the algorithm to use the xAODRootAccess package + xAOD::Init("TrackHistsAlgo").ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrackHistsAlgo :: histInitialize () + { + + ANA_MSG_INFO( m_name ); + ANA_CHECK( xAH::Algorithm::algInitialize()); + // needed here and not in initalize since this is called first + if( m_inContainerName.empty() || m_detailStr.empty() ){ + ANA_MSG_ERROR( "One or more required configuration values are empty"); + return EL::StatusCode::FAILURE; + } + + + // declare class and add histograms to output + m_plots = new TrackHists(m_name, m_detailStr); + ANA_CHECK( m_plots -> initialize()); + m_plots -> record( wk() ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrackHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode TrackHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + + EL::StatusCode TrackHistsAlgo :: initialize () + { + ANA_MSG_INFO( "TrackHistsAlgo"); + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrackHistsAlgo :: execute () + { + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + + float eventWeight(1); + if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) { + eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" ); + } + + const xAOD::TrackParticleContainer* tracks(nullptr); + ANA_CHECK( HelperFunctions::retrieve(tracks, m_inContainerName, m_event, m_store, msg()) ); + + // get primary vertex + const xAOD::VertexContainer *vertices(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg()); + + ANA_CHECK( m_plots->execute( tracks, pvx, eventWeight, eventInfo )); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrackHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode TrackHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; } + EL::StatusCode TrackHistsAlgo :: histFinalize () + { + // clean up memory + if(m_plots) delete m_plots; + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_TrackSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_TrackSelector.cxx.rst.txt new file mode 100644 index 0000000000..5c9dd53347 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TrackSelector.cxx.rst.txt @@ -0,0 +1,473 @@ + +.. _program_listing_file_Root_TrackSelector.cxx: + +Program Listing for File TrackSelector.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TrackSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + + #include "AthContainers/ConstDataVector.h" + #include "xAODAnaHelpers/HelperFunctions.h" + #include "xAODAnaHelpers/TrackSelector.h" + #include "InDetTrackSelectionTool/InDetTrackSelectionTool.h" + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // c++ include(s): + #include + #include + #include + + using std::vector; + + // this is needed to distribute the algorithm to the workers + ClassImp(TrackSelector) + + + TrackSelector :: TrackSelector () : + Algorithm("TrackSelector") + { + } + + EL::StatusCode TrackSelector :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_DEBUG("Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TrackSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + + ANA_MSG_DEBUG("Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + + ANA_MSG_DEBUG("Calling fileExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + + ANA_MSG_DEBUG("Calling changeInput"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + + if(m_useCutFlow) { + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + } + + // parse and split by comma + std::string token; + std::istringstream ss(m_passAuxDecorKeys); + while(std::getline(ss, token, ',')){ + m_passKeys.push_back(token); + } + ss.clear(); + ss.str(m_failAuxDecorKeys); + while(std::getline(ss, token, ',')){ + m_failKeys.push_back(token); + } + + + if( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_DEBUG("Number of events in file: " << m_event->getEntries() ); + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_numObjectPass = 0; + + ANA_MSG_DEBUG( "Initializing InDetTrackSelectionTool..." ); + if(m_pT_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minPt", m_pT_min)); + if(m_p_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minP", m_p_min)); + if(m_eta_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxAbsEta", m_eta_max)); + if(m_d0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxD0", m_d0_max)); + if(m_sigmad0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaD0", m_sigmad0_max)); + if(m_d0oversigmad0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxD0overSigmaD0", m_d0oversigmad0_max)); + if(m_z0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0", m_z0_max)); + if(m_z0sinT_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0SinTheta", m_z0sinT_max)); + if(m_sigmaz0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaZ0", m_sigmaz0_max)); + if(m_sigmaz0sintheta_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaZ0SinTheta", m_sigmaz0sintheta_max)); + if(m_z0oversigmaz0_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0overSigmaZ0", m_z0oversigmaz0_max)); + if(m_z0sinthetaoversigmaz0sintheta_max!= 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0SinThetaoverSigmaZ0SinTheta",m_z0sinthetaoversigmaz0sintheta_max)); + if(m_nInnermostPixel_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNInnermostLayerHits", m_nInnermostPixel_min)); + if(m_nNextToInnermostPixel_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNNextToInnermostLayerHits", m_nNextToInnermostPixel_min)); + if(m_nBothInnermostLayersHits_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNBothInnermostLayersHits", m_nBothInnermostLayersHits_min)); + if(m_nSi_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSiHits", m_nSi_min)); + if(m_nSiPhysical_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSiHitsPhysical", m_nSiPhysical_min)); + if(m_nSiSharedHits_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiSharedHits", m_nSiSharedHits_max)); + if(m_nSiHoles_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiHoles", m_nSiHoles_max)); + if(m_nPixelHits_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNPixelHits", m_nPixelHits_min)); + if(m_nPixelHitsPhysical_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNPixelHitsPhysical", m_nPixelHitsPhysical_min)); + if(m_nPixelSharedHits_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNPixelSharedHits", m_nPixelSharedHits_max)); + if(m_nPixHoles_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNPixelHoles", m_nPixHoles_max)); + if(m_nSctHits_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSctHits", m_nSctHits_min)); + if(m_nSctHitsPhysical_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSctHitsPhysical", m_nSctHitsPhysical_min)); + if(m_nSctSharedHits_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSctSharedHits", m_nSctSharedHits_max)); + if(m_nSctHoles_max != 2e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSctHoles", m_nSctHoles_max)); + if(m_nSiSharedModules_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiSharedModules", m_nSiSharedModules_max)); + if(m_chi2Prob_min != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minProb", m_chi2Prob_min)); + if(m_chi2NdofCut_max != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxChiSqperNdf", m_chi2NdofCut_max)); + if(m_cutLevelString != "" )ANA_CHECK(m_trkSelTool_handle.setProperty("CutLevel", m_cutLevelString)); + + ANA_CHECK( m_trkSelTool_handle.retrieve() ); + + ANA_MSG_DEBUG( "TrackSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: execute () + { + + ANA_MSG_DEBUG("Applying Track Selection... " << m_name); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + // + float mcEvtWeight(1); + if ( eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION) ) + mcEvtWeight = eventInfo->mcEventWeight(); + + if(m_doTracksInJets){ + return executeTracksInJets(); + } else{ + return executeTrackCollection(mcEvtWeight); + } + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrackSelector :: executeTrackCollection (float mcEvtWeight) + { + m_numEvent++; + + // get the collection from TEvent or TStore + const xAOD::TrackParticleContainer* inTracks(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTracks, m_inContainerName, m_event, m_store, msg()) ); + + // get primary vertex + const xAOD::VertexContainer *vertices(nullptr); + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg()); + + + // create output container (if requested) - deep copy + + ConstDataVector* selectedTracks = 0; + if(m_createSelectedContainer) { + selectedTracks = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + xAOD::TrackParticleContainer::const_iterator trk_itr = inTracks->begin(); + xAOD::TrackParticleContainer::const_iterator trk_end = inTracks->end(); + int nPass(0); int nObj(0); + for( ; trk_itr != trk_end; ++trk_itr ){ + + // if only looking at a subset of tracks make sure all are decorrated + if( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if(m_decorateSelectedObjects) { + (*trk_itr)->auxdecor< char >( "passSel" ) = -1; + } else { + break; + } + continue; + } + + nObj++; + int passSel = this->PassCuts( (*trk_itr), pvx ); + if(m_decorateSelectedObjects) { + (*trk_itr)->auxdecor< char >( "passSel" ) = passSel; + } + + if(passSel) { + nPass++; + if(m_createSelectedContainer) { + selectedTracks->push_back( *trk_itr ); + } + } + } + + m_numObject += nObj; + m_numObjectPass += nPass; + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + if( m_pass_min > 0 && nPass < m_pass_min ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + if( m_pass_max >= 0 && nPass > m_pass_max ) { + wk()->skipEvent(); + return EL::StatusCode::SUCCESS; + } + + // add output container to TStore + if( m_createSelectedContainer ) { + ANA_CHECK( m_store->record( selectedTracks, m_outContainerName )); + } + + m_numEventPass++; + if(m_useCutFlow) { + m_cutflowHist ->Fill( m_cutflow_bin, 1 ); + m_cutflowHistW->Fill( m_cutflow_bin, mcEvtWeight); + } + + return EL::StatusCode::SUCCESS; + } + + + EL::StatusCode TrackSelector :: executeTracksInJets () + { + ANA_MSG_DEBUG("Applying TracksInJet Selection... " << m_inJetContainerName); + m_numEvent++; + + // get input jet collection + const xAOD::JetContainer* inJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) ); + + //const xAOD::VertexContainer *vertices(nullptr); + //ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) ); + //const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg()); + + int nPass(0); int nObj(0); + + // + // Accessor for adding the output jets + // + xAOD::Jet::Decorator > m_track_decoration(m_outContainerName.c_str()); + xAOD::Jet::Decorator m_vtx_decoration ((m_outContainerName+"_vtx").c_str()); + + // + // loop on Jets + // + for ( auto jet_itr : *inJets ) { + + // + // output container with in the jet + // + vector outputTracks; + + // + // loop on tracks with in jet + // + const vector inputTracks = jet_itr->auxdata< vector >(m_inContainerName); + const xAOD::Vertex* pvx = jet_itr->auxdata< const xAOD::Vertex* >(m_inContainerName+"_vtx"); + for(const xAOD::TrackParticle* trkInJet: inputTracks){ + + nObj++; + + // + // Get cut desicion + // + int passSel = this->PassCuts( trkInJet, pvx ); + + // + // if + // + if(passSel) { + nPass++; + outputTracks.push_back(trkInJet); + } + }// tracks + + m_numObject += nObj; + m_numObjectPass += nPass; + + m_track_decoration(*jet_itr) = outputTracks; + m_vtx_decoration(*jet_itr) = jet_itr->auxdata(m_inContainerName+"_vtx"); + + }//jets + + m_numEventPass++; + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + + ANA_MSG_DEBUG("Calling postExecute"); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + ANA_MSG_DEBUG("Deleting tool instances..."); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TrackSelector :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + int TrackSelector :: PassCuts( const xAOD::TrackParticle* trk, const xAOD::Vertex *pvx ) { + + // InDetTrackSelectionTool + if ( !m_trkSelTool_handle->accept(*trk, pvx) ) { return 0; } + + // Cuts not available with the InDetTrackSelectionTool + // + // pT_max + // + if( m_pT_max != 1e8 ) { + if ( trk->pt() > m_pT_max ) { return 0; } + } + + // + // eta + // + if( m_eta_min != 1e8 ) { + if( fabs(trk->eta()) < m_eta_min ) { return 0; } + } + if( m_etaSigned_max != 1e8 ) { + if( trk->eta() > m_etaSigned_max ) { return 0; } + } + if( m_etaSigned_min != 1e8 ) { + if( trk->eta() < m_etaSigned_min ) { return 0; } + } + + + + // + // nBLayer + // + uint8_t nBL = -1; + if( m_nBL_min != 1e8 ){ + // xAOD::numberOfBLayerHits is deprecated, keeping it for compatibility + if(!trk->summaryValue(nBL, xAOD::numberOfBLayerHits)) ANA_MSG_ERROR( "BLayer hits not filled"); + if( nBL < m_nBL_min ) {return 0; } + } + + // + // chi2Prob_max + // + float chi2 = trk->chiSquared(); + float ndof = trk->numberDoF(); + if( m_chi2Prob_max != 1e8 ){ + float chi2Prob = TMath::Prob(chi2,ndof); + if( chi2Prob > m_chi2Prob_max) { return 0; } + } + + // + // Pass Keys + // + for(auto& passKey : m_passKeys){ + if(!(trk->auxdata< char >(passKey) == '1')) { return 0; } + } + + // + // Fail Keys + // + for(auto& failKey : m_failKeys){ + if(!(trk->auxdata< char >(failKey) == '0')) { return 0; } + } + + + return 1; + } + + diff --git a/_sources/api/program_listing_file_Root_TracksInJetHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_TracksInJetHists.cxx.rst.txt new file mode 100644 index 0000000000..9125f700d6 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TracksInJetHists.cxx.rst.txt @@ -0,0 +1,151 @@ + +.. _program_listing_file_Root_TracksInJetHists.cxx: + +Program Listing for File TracksInJetHists.cxx +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TracksInJetHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/TracksInJetHists.h" + #include + #include + #include "xAODAnaHelpers/HelperFunctions.h" + + ANA_MSG_SOURCE(msgTracksInJetHists, "TracksInJetHists") + + TracksInJetHists :: TracksInJetHists (std::string name, std::string detailStr) : + HistogramManager(name, detailStr) + { + } + + TracksInJetHists :: ~TracksInJetHists () {} + + StatusCode TracksInJetHists::initialize() { + + // + // TrackHists + // + m_trkPlots = new TrackHists(m_name, "IPDetails HitCounts TPErrors Chi2Details Debugging vsLumiBlock"); + m_trkPlots -> initialize(); + + // + // d0 + // + m_trk_d0 = book(m_name, "d0_signed", "d0[mm] (signed)", 100, -2.0, 2.0 ); + m_trk_d0Sig = book(m_name, "d0Sig_signed", "d0Sig (signed)", 240, -20.0, 40.0 ); + m_trk_d0SigPDF = book(m_name, "d0Sig_signed_pdf", "d0Sig (signed)", 42, -21.0, 21.0 ); + m_trk_z0sinTd0 = book(m_name, "z0sinTsigned_vs_d0signed", + "z0xsin0[mm](signed)", 50, -2.0, 2.0, + "d0[mm](signed);", 50, -2.0, 2.0 ); + + + // + // z0 + // + m_trk_z0_signed = book(m_name, "z0_signed" , "z0[mm] (signed)", 100, -5.0, 5.0 ); + m_trk_z0sinT_signed = book(m_name, "z0sinT_signed", "z0xsin(#theta)[mm] (signed)", 100, -2.0, 2.0 ); + m_trk_z0Sig_signed = book(m_name, "z0Sig_signed", "z0 significance (signed)", 100, -25.0, 25.0 ); + m_trk_z0Sig_signed_pdf = book(m_name, "z0Sig_signed_pdf", "z0 significance (signed)", 42, -21.0, 20.0 ); + m_trk_z0SigsinT_signed = book(m_name, "z0SigsinT_signed", "z0 significance x sin(#theta)", 100, -25.0, 25.0 ); + + // + // wrt Jet + // + m_trk_jetdPhi = book(m_name, "jetdPhi", "jetdPhi", 100, -0.5, 0.5 ); + m_trk_jetdEta = book(m_name, "jetdEta", "jetdEta", 100, -0.5, 0.5 ); + m_trk_jetdR = book(m_name, "jetdR" , "jetdR", 300, -0.1, 0.5 ); + m_trk_jetdR_l = book(m_name, "jetdR_l", "jetdR", 300, -0.1, 1.5 ); + + // if worker is passed to the class add histograms to the output + return StatusCode::SUCCESS; + } + + + void TracksInJetHists::record(EL::IWorker* wk) { + HistogramManager::record(wk); + m_trkPlots -> record( wk ); + } + + + + StatusCode TracksInJetHists::execute( const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo ) { + using namespace msgTracksInJetHists; + // + // Fill track hists + // + ANA_CHECK( m_trkPlots ->execute(trk, pvx, eventWeight, eventInfo)); + + // d0 + float sign = getD0Sign(trk, jet); + float d0_wrtPV = trk->d0(); + float signedD0 = fabs(d0_wrtPV)*sign; + float d0Err_wrtPV = sqrt((trk->definingParametersCovMatrixVec().at(0))); + float d0Sig_wrtPV = d0Err_wrtPV ? d0_wrtPV/d0Err_wrtPV : -1; + float d0SigSigned = sign*fabs(d0Sig_wrtPV); + m_trk_d0 ->Fill(signedD0, eventWeight); + m_trk_d0Sig ->Fill(d0SigSigned, eventWeight); + m_trk_d0SigPDF ->Fill(d0SigSigned, eventWeight); + + // + // Signed Z0 + // + float signZ0 = getZ0Sign(trk, jet, pvx); + + float z0 = trk->z0() + trk->vz() - HelperFunctions::getPrimaryVertexZ(pvx); + + float z0_wrtPV_signed = fabs(z0)*signZ0; + float z0Err = sqrt((trk->definingParametersCovMatrixVec().at(2))); + float sinT = sin(trk->theta()); + + m_trk_z0_signed ->Fill(z0_wrtPV_signed, eventWeight); + m_trk_z0sinT_signed ->Fill(z0_wrtPV_signed*sinT, eventWeight); + if(z0Err){ + m_trk_z0Sig_signed ->Fill(z0_wrtPV_signed/z0Err, eventWeight); + m_trk_z0Sig_signed_pdf ->Fill(z0_wrtPV_signed/z0Err, eventWeight); + m_trk_z0SigsinT_signed ->Fill(z0_wrtPV_signed/z0Err*sinT, eventWeight); + } + + m_trk_z0sinTd0->Fill(z0_wrtPV_signed*sinT, signedD0, eventWeight); + + float dEta = trk->eta() - jet->p4().Eta(); + float dPhi = HelperFunctions::dPhi(trk->phi(), jet->p4().Phi()); + float dR = sqrt(dPhi*dPhi + dEta*dEta); + //float dR = trk->p4().DeltaR(jet->p4()); + + m_trk_jetdPhi ->Fill(HelperFunctions::dPhi(trk->phi(),jet->p4().Phi()), eventWeight); + m_trk_jetdEta ->Fill(trk->eta() - jet->eta(), eventWeight); + m_trk_jetdR ->Fill(dR, eventWeight); + m_trk_jetdR_l ->Fill(dR, eventWeight); + + return StatusCode::SUCCESS; + } + + + + + float TracksInJetHists::getD0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet){ + float trk_phi = trk->phi(); + float jet_phi = jet->phi(); + float prod = cos(trk_phi)*sin(jet_phi) - sin(trk_phi)*cos(jet_phi); + float sign_prod = prod > 0 ? 1 : -1; + float d0_wrtPV = trk->d0(); + float sign_d0 = d0_wrtPV > 0 ? 1 : -1; + float sign = sign_d0 * sign_prod; + return sign; + } + + + float TracksInJetHists::getZ0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx){ + float trk_eta = trk->eta(); + float jetEta = jet->eta(); + float dEta = jetEta - trk_eta; + + float trk_z0_wrtPV = trk->z0() + trk->vz() - HelperFunctions::getPrimaryVertexZ(pvx); + + float signZ0 = (trk_z0_wrtPV*dEta) > 0 ? 1.0 : -1.0; + return signZ0; + } diff --git a/_sources/api/program_listing_file_Root_TreeAlgo.cxx.rst.txt b/_sources/api/program_listing_file_Root_TreeAlgo.cxx.rst.txt new file mode 100644 index 0000000000..528b48bf18 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TreeAlgo.cxx.rst.txt @@ -0,0 +1,732 @@ + +.. _program_listing_file_Root_TreeAlgo.cxx: + +Program Listing for File TreeAlgo.cxx +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TreeAlgo.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + #include + + #include + #include + #include + #include + #include + #include + + #include + + #include + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(TreeAlgo) + + TreeAlgo :: TreeAlgo () : + Algorithm("TreeAlgo") + { + } + + EL::StatusCode TreeAlgo :: setupJob (EL::Job& job) + { + job.useXAOD(); + xAOD::Init("TreeAlgo").ignore(); + + EL::OutputStream outForTree(m_treeStreamName); + if(!job.outputHas(m_treeStreamName)) job.outputAdd (outForTree); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TreeAlgo :: initialize () + { + ANA_MSG_INFO( m_name ); + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // get the file we created already + TFile* treeFile = wk()->getOutputFile (m_treeStreamName); + treeFile->mkdir(m_name.c_str()); + treeFile->cd(m_name.c_str()); + + // to handle more than one jet collections (reco, trig and truth) + std::string token; + std::istringstream ss_reco_containers(m_jetContainerName); + while ( std::getline(ss_reco_containers, token, ' ') ){ + m_jetContainers.push_back(token); + } + std::istringstream ss_reco_names(m_jetBranchName); + while ( std::getline(ss_reco_names, token, ' ') ){ + m_jetBranches.push_back(token); + } + if( !m_jetContainerName.empty() && m_jetContainers.size()!=m_jetBranches.size()){ + ANA_MSG_ERROR( "The number of jet containers must be equal to the number of jet name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + std::istringstream ss_trig_containers(m_trigJetContainerName); + while ( std::getline(ss_trig_containers, token, ' ') ){ + m_trigJetContainers.push_back(token); + } + std::istringstream ss_trig_names(m_trigJetBranchName); + while ( std::getline(ss_trig_names, token, ' ') ){ + m_trigJetBranches.push_back(token); + } + if( !m_trigJetContainerName.empty() && m_trigJetContainers.size()!=m_trigJetBranches.size()){ + ANA_MSG_ERROR( "The number of trig jet containers must be equal to the number of trig jet name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + std::istringstream ss_truth_containers(m_truthJetContainerName); + while ( std::getline(ss_truth_containers, token, ' ') ){ + m_truthJetContainers.push_back(token); + } + std::istringstream ss_truth_names(m_truthJetBranchName); + while ( std::getline(ss_truth_names, token, ' ') ){ + m_truthJetBranches.push_back(token); + } + if( !m_truthJetContainerName.empty() && m_truthJetContainers.size()!=m_truthJetBranches.size()){ + ANA_MSG_ERROR( "The number of truth jet containers must be equal to the number of truth jet name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_fat_containers(m_fatJetContainerName); + while ( std::getline(ss_fat_containers, token, ' ') ){ + m_fatJetContainers.push_back(token); + } + std::istringstream ss_fat_names(m_fatJetBranchName); + while ( std::getline(ss_fat_names, token, ' ') ){ + m_fatJetBranches.push_back(token); + } + if( m_fatJetBranches.size() == 0 ) { + for(auto fatJetContainer : m_fatJetContainers) { + m_fatJetBranches.push_back(fatJetContainer); + } + } + if( !m_fatJetContainerName.empty() && m_fatJetContainers.size()!=m_fatJetBranches.size()){ + ANA_MSG_ERROR( "The number of fat jet containers must be equal to the number of fat jet name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_l1_containers(m_l1JetContainerName); + while ( std::getline(ss_l1_containers, token, ' ') ){ + m_l1JetContainers.push_back(token); + } + std::istringstream ss_l1_names(m_l1JetBranchName); + while ( std::getline(ss_l1_names, token, ' ') ){ + m_l1JetBranches.push_back(token); + } + if( !m_l1JetContainerName.empty() && m_l1JetContainers.size()!=m_l1JetBranches.size()){ + ANA_MSG_ERROR( "The number of L1 jet containers must be equal to the number of L1 jet name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_vertex_containers(m_vertexContainerName); + while ( std::getline(ss_vertex_containers, token, ' ') ){ + m_vertexContainers.push_back(token); + } + std::istringstream ss_vertex_names(m_vertexBranchName); + while ( std::getline(ss_vertex_names, token, ' ') ){ + m_vertexBranches.push_back(token); + } + if( m_vertexContainers.size()!=m_vertexBranches.size()){ + ANA_MSG_ERROR( "The number of vertex containers must be equal to the number of vertex name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_cluster_containers(m_clusterContainerName); + while ( std::getline(ss_cluster_containers, token, ' ') ){ + m_clusterContainers.push_back(token); + } + std::istringstream ss_cluster_names(m_clusterBranchName); + while ( std::getline(ss_cluster_names, token, ' ') ){ + m_clusterBranches.push_back(token); + } + if( !m_clusterContainerName.empty() && m_clusterContainers.size()!=m_clusterBranches.size()){ + ANA_MSG_ERROR( "The number of cluster containers must be equal to the number of cluster name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + // allow to store different variables for each jet collection (reco, trig, fat only, default: store the same) + std::istringstream ss(m_jetDetailStr); + while ( std::getline(ss, token, '|') ){ + m_jetDetails.push_back(token); + } + if( m_jetDetails.size()!=1 && m_jetContainers.size()!=m_jetDetails.size()){ + ANA_MSG_ERROR( "The size of m_jetContainers should be equal to the size of m_jetDetailStr. Exiting"); + return EL::StatusCode::FAILURE; + } + std::istringstream ss_trig_details(m_trigJetDetailStr); + while ( std::getline(ss_trig_details, token, '|') ){ + m_trigJetDetails.push_back(token); + } + if( m_trigJetDetails.size()!=1 && m_trigJetContainers.size()!=m_trigJetDetails.size()){ + ANA_MSG_ERROR( "The size of m_trigJetContainers should be equal to the size of m_trigJetDetailStr. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_vertex_details(m_vertexDetailStr); + while ( std::getline(ss_vertex_details, token, '|') ){ + m_vertexDetails.push_back(token); + } + if( m_vertexDetails.size()>1 && m_vertexContainers.size()!=m_vertexDetails.size()){ + ANA_MSG_ERROR( "The size of m_vertexContainers should be equal to the size of m_vertexDetailStr. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_fat_details(m_fatJetDetailStr); + while ( std::getline(ss_fat_details, token, '|') ){ + m_fatJetDetails.push_back(token); + } + if( m_fatJetDetails.size()!=1 && m_fatJetContainers.size()!=m_fatJetDetails.size()){ + ANA_MSG_ERROR( "The size of m_fatJetContainers should be equal to the size of m_fatJetDetailStr. Exiting"); + return EL::StatusCode::FAILURE; + } + + std::istringstream ss_cluster_details(m_clusterDetailStr); + while ( std::getline(ss_cluster_details, token, '|') ){ + m_clusterDetails.push_back(token); + } + if( m_clusterDetails.size()!=1 && m_clusterContainers.size()!=m_clusterDetails.size()){ + ANA_MSG_ERROR( "The size of m_clusterContainers should be equal to the size of m_clusterDetailStr. Exiting"); + return EL::StatusCode::FAILURE; + } + + // to handle more than one truth particles collections + std::istringstream ss_truthParticlesContainers(m_truthParticlesContainerName); + while ( std::getline(ss_truthParticlesContainers, token, ' ') ){ + m_truthParticlesContainers.push_back(token); + } + std::istringstream ss_truthParticlesNames(m_truthParticlesBranchName); + while ( std::getline(ss_truthParticlesNames, token, ' ') ){ + m_truthParticlesBranches.push_back(token); + } + if( !m_truthParticlesContainerName.empty() && m_truthParticlesContainers.size()!=m_truthParticlesBranches.size()){ + ANA_MSG_ERROR( "The number of truth particles containers must be equal to the number of truth particles name branches. Exiting"); + return EL::StatusCode::FAILURE; + } + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TreeAlgo :: histInitialize () + { + ANA_MSG_INFO( m_name ); + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TreeAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; } + EL::StatusCode TreeAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; } + + + EL::StatusCode TreeAlgo :: execute () + { + + // what systematics do we need to process for this event? + // handle the nominal case (merge all) on every event, always + std::vector event_systNames({""}); + std::vector muSystNames; + std::vector elSystNames; + std::vector tauSystNames; + std::vector jetSystNames; + std::vector photonSystNames; + std::vector fatJetSystNames; + std::vector metSystNames; + + // this is a temporary pointer that gets switched around to check each of the systematics + std::vector* systNames(nullptr); + + // note that the way we set this up, none of the below ##SystNames vectors contain the nominal case + // TODO: do we really need to check for duplicates? Maybe, maybe not. + if(!m_muSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_muSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + muSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + + if(!m_elSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_elSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + elSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + + if(!m_tauSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_tauSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + tauSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + + if(!m_jetSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_jetSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + jetSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + if(!m_fatJetSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_fatJetSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + fatJetSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + if(!m_photonSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_photonSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + photonSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + if(!m_metSystsVec.empty()){ + ANA_CHECK( HelperFunctions::retrieve(systNames, m_metSystsVec, 0, m_store, msg()) ); + for(const auto& systName: *systNames){ + metSystNames.push_back(systName); + if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue; + event_systNames.push_back(systName); + } + } + + TFile* treeFile = wk()->getOutputFile (m_treeStreamName); + + // let's make the tdirectory and ttrees + for(const auto& systName: event_systNames){ + // check if we have already created the tree + if(m_trees.find(systName) != m_trees.end()) continue; + std::string treeName = systName; + if(systName.empty()) treeName = "nominal"; + + ANA_MSG_INFO( "Making tree " << m_name << "/" << treeName ); + TTree * outTree = new TTree(treeName.c_str(),treeName.c_str()); + if ( !outTree ) { + ANA_MSG_ERROR("Failed to instantiate output tree!"); + return EL::StatusCode::FAILURE; + } + + m_trees[systName] = createTree( m_event, outTree, treeFile, m_units, msgLvl(MSG::DEBUG), m_store ); + const auto& helpTree = m_trees[systName]; + helpTree->m_vertexContainerName = m_vertexContainers.at(0); + + // tell the tree to go into the file + outTree->SetDirectory( treeFile->GetDirectory(m_name.c_str()) ); + if(m_autoFlush != 0) outTree->SetAutoFlush(m_autoFlush); + // choose if want to add tree to same directory as ouput histograms + if ( m_outHistDir ) { + if(m_trees.size() > 1) ANA_MSG_WARNING( "You're running systematics! You may find issues in writing all of the output TTrees to the output histogram file... Set `m_outHistDir = false` if you run into issues!"); + wk()->addOutput( outTree ); + } + + // initialize all branch addresses since we just added this tree + helpTree->AddEvent( m_evtDetailStr ); + if (!m_trigDetailStr.empty() ) { helpTree->AddTrigger(m_trigDetailStr); } + if (!m_muContainerName.empty() ) { helpTree->AddMuons(m_muDetailStr); } + if (!m_elContainerName.empty() ) { helpTree->AddElectrons(m_elDetailStr); } + if (!m_jetContainerName.empty() ) { + for(unsigned int ll=0; llAddJets (m_jetDetailStr, m_jetBranches.at(ll).c_str()); + else{ helpTree->AddJets (m_jetDetails.at(ll), m_jetBranches.at(ll).c_str()); } + } + } + if (!m_l1JetContainerName.empty() ) { + for(unsigned int ll=0; llAddL1Jets(m_l1JetBranches.at(ll).c_str()); + } + } + if (!m_trigJetContainerName.empty() ) { + for(unsigned int ll=0; llAddJets (m_trigJetDetailStr, m_trigJetBranches.at(ll).c_str()); + else{ helpTree->AddJets (m_trigJetDetails.at(ll), m_trigJetBranches.at(ll).c_str()); } + } + } + if (!m_truthJetContainerName.empty() ) { + for(unsigned int ll=0; llAddJets (m_truthJetDetailStr, m_truthJetBranches.at(ll).c_str()); + } + } + if ( !m_fatJetContainerName.empty() ) { + for(unsigned int ll=0; llAddFatJets (m_fatJetDetailStr, m_fatJetBranches.at(ll).c_str()); + else{ helpTree->AddFatJets (m_fatJetDetails.at(ll), m_fatJetBranches.at(ll).c_str()); } + } + } + if ( !m_vertexContainerName.empty() && !m_vertexDetailStr.empty() ) { + for(unsigned int ll=0; llAddVertices(m_vertexDetailStr, m_vertexBranches.at(ll).c_str()); + else{ helpTree->AddVertices(m_vertexDetails.at(ll), m_vertexBranches.at(ll).c_str()); } + } + } + + if (!m_truthFatJetContainerName.empty() ) { helpTree->AddTruthFatJets(m_truthFatJetDetailStr, m_truthFatJetBranchName); } + if (!m_tauContainerName.empty() ) { helpTree->AddTaus(m_tauDetailStr); } + if (!m_METContainerName.empty() ) { helpTree->AddMET(m_METDetailStr); } + if (!m_METReferenceContainerName.empty() ) { helpTree->AddMET(m_METReferenceDetailStr, "referenceMet"); } + if (!m_photonContainerName.empty() ) { helpTree->AddPhotons(m_photonDetailStr); } + if (!m_truthParticlesContainerName.empty()) { + for(unsigned int ll=0; llAddTruthParts(m_truthParticlesDetailStr, m_truthParticlesBranches.at(ll).c_str()); + } + } + if (!m_trackParticlesContainerName.empty()) { helpTree->AddTrackParts(m_trackParticlesDetailStr, m_trackParticlesContainerName); } + if (!m_clusterContainerName.empty() ) { + for(unsigned int ll=0; llAddClusters (m_clusterDetailStr, m_clusterBranches.at(ll).c_str()); + else + helpTree->AddClusters (m_clusterDetails.at(ll), m_clusterBranches.at(ll).c_str()); + } + } + + } + + /* THIS IS WHERE WE START PROCESSING THE EVENT AND PLOTTING THINGS */ + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + const xAOD::VertexContainer* vertices(nullptr); + if (m_retrievePV) { + ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainers.at(0), m_event, m_store, msg()) ); + } + const xAOD::Vertex* primaryVertex = m_retrievePV ? HelperFunctions::getPrimaryVertex( vertices , msg() ) : nullptr; + + for(const auto& systName: event_systNames){ + auto& helpTree = m_trees[systName]; + + // assume the nominal container by default + std::string muSuffix(""); + std::string elSuffix(""); + std::string tauSuffix(""); + std::string jetSuffix(""); + std::string photonSuffix(""); + std::string clusterSuffix(""); + std::string fatJetSuffix(""); + std::string metSuffix(""); + /* + if we find the systematic in the corresponding vector, we will use that container's systematic version instead of nominal version + NB: since none of these contain the "" (nominal) case because of how I filter it, we handle the merging.. why? + - in each loop to make the ##systNames vectors, we check to see if the systName exists in event_systNames which is initialized + - to {""} - the nominal case. If the systName exists, we do not add it to the corresponding ##systNames vector, otherwise, we do. + - This precludes the nominal case in all of the ##systNames vectors, which means the default will always be to run nominal. + */ + if (std::find(muSystNames.begin(), muSystNames.end(), systName) != muSystNames.end()) muSuffix = systName; + if (std::find(elSystNames.begin(), elSystNames.end(), systName) != elSystNames.end()) elSuffix = systName; + if (std::find(tauSystNames.begin(), tauSystNames.end(), systName) != tauSystNames.end()) tauSuffix = systName; + if (std::find(jetSystNames.begin(), jetSystNames.end(), systName) != jetSystNames.end()) jetSuffix = systName; + if (std::find(photonSystNames.begin(), photonSystNames.end(), systName) != photonSystNames.end()) photonSuffix = systName; + if (std::find(fatJetSystNames.begin(), fatJetSystNames.end(), systName) != fatJetSystNames.end()) fatJetSuffix = systName; + if (std::find(metSystNames.begin(), metSystNames.end(), systName) != metSystNames.end()) metSuffix = systName; + + helpTree->FillEvent( eventInfo, m_event, vertices ); + + // Fill trigger information + if ( !m_trigDetailStr.empty() ) { + helpTree->FillTrigger( eventInfo ); + } + + // Fill jet trigger information - this can be used if with layer/cleaning info we need to turn off some variables? + /*if ( !m_trigJetDetailStr.empty() ) { + helpTree->FillJetTrigger(); + }*/ + + // for the containers the were supplied, fill the appropriate vectors + if ( !m_muContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_muContainerName + muSuffix, m_event, m_store, msg()) ) continue; + + const xAOD::MuonContainer* inMuon(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inMuon, m_muContainerName+muSuffix, m_event, m_store, msg()) ); + helpTree->FillMuons( inMuon, primaryVertex ); + } + + if ( !m_elContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_elContainerName + elSuffix, m_event, m_store, msg()) ) continue; + + const xAOD::ElectronContainer* inElec(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inElec, m_elContainerName+elSuffix, m_event, m_store, msg()) ); + helpTree->FillElectrons( inElec, primaryVertex ); + } + + if ( !m_jetContainerName.empty() ) { + bool reject = false; + for ( unsigned int ll = 0; ll < m_jetContainers.size(); ++ll ) { // Systs for all jet containers + const xAOD::JetContainer* inJets(nullptr); + if ( !HelperFunctions::isAvailable(m_jetContainers.at(ll)+jetSuffix, m_event, m_store, msg()) ) { + ANA_MSG_DEBUG( "The jet container " + m_jetContainers.at(ll)+jetSuffix + " is not available. Skipping all remaining jet collections"); + reject = true; + break; + } + ANA_CHECK( HelperFunctions::retrieve(inJets, m_jetContainers.at(ll)+jetSuffix, m_event, m_store, msg()) ); + + helpTree->FillJets( inJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_jetBranches.at(ll) ); + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a jet container problem - not writing the event"); + continue; + } + } + + if ( !m_l1JetContainerName.empty() ){ + bool reject = false; + for ( unsigned int ll = 0; ll < m_l1JetContainers.size(); ++ll ) { + if(m_l1JetContainers.at(ll).find("Fex")== std::string::npos){ // Legacy L1 jets + const xAOD::JetRoIContainer* inL1Jets(nullptr); + if ( !HelperFunctions::isAvailable(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){ + ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections"); + reject = true; + } + ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillLegacyL1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets ); + }else{ // Phase 1 L1 jets + if(m_l1JetContainers.at(ll).find("jFexSR")!= std::string::npos){ // jFEX small-R + const xAOD::jFexSRJetRoIContainer* inL1Jets(nullptr); + if ( !HelperFunctions::isAvailable(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){ + ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections"); + reject = true; + } + ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets ); + }else if(m_l1JetContainers.at(ll).find("jFexLR")!= std::string::npos){ // jFEX large-R + const xAOD::jFexLRJetRoIContainer* inL1Jets(nullptr); + if ( !HelperFunctions::isAvailable(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){ + ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections"); + reject = true; + } + ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets ); + }else if(m_l1JetContainers.at(ll).find("gFex")!= std::string::npos){ // gFEX small-R/large-R jets + const xAOD::gFexJetRoIContainer* inL1Jets(nullptr); + if ( !HelperFunctions::isAvailable(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){ + ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections"); + reject = true; + } + ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets ); + }else{ + ANA_MSG_DEBUG( "Phase 1 L1 jet container " + m_l1JetContainers.at(ll) + " is not known." ); + } + } + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a L1 jet container problem - not writing the event"); + continue; + } + } + + if ( !m_trigJetContainerName.empty() ) { + bool reject = false; + for(unsigned int ll=0;ll(m_trigJetContainers.at(ll), m_event, m_store, msg()) ) { + ANA_MSG_DEBUG( "The trigger jet container " + m_trigJetContainers.at(ll) + " is not available. Skipping all remaining trigger jet collections"); + reject = true; + break; + } + + const xAOD::JetContainer* inTrigJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTrigJets, m_trigJetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillJets( inTrigJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_trigJetBranches.at(ll) ); + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a trigger jet container problem - not writing the event"); + continue; + } + } + + if ( !m_truthJetContainerName.empty() ) { + bool reject = false; + for ( unsigned int ll = 0; ll < m_truthJetContainers.size(); ++ll) { + if ( !HelperFunctions::isAvailable(m_truthJetContainers.at(ll), m_event, m_store, msg()) ) { + ANA_MSG_DEBUG( "The truth jet container " + m_truthJetContainers.at(ll) + " is not available. Skipping all remaining truth jet collections"); + reject = true; + break; + } + + const xAOD::JetContainer* inTruthJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTruthJets, m_truthJetContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillJets( inTruthJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_truthJetBranches.at(ll) ); + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a truth jet container problem - not writing the event"); + continue; + } + } + + if ( !m_fatJetContainerName.empty() ) { + // bool reject = false; + // std::string token; + // std::istringstream ss(m_fatJetContainerName); + // while ( std::getline(ss, token, ' ') ){ + // if ( !HelperFunctions::isAvailable(token+fatJetSuffix, m_event, m_store, msg()) ) { + // reject = true; + // break; + // } + + // const xAOD::JetContainer* inFatJets(nullptr); + // ANA_CHECK( HelperFunctions::retrieve(inFatJets, token+fatJetSuffix, m_event, m_store, msg()) ); + // helpTree->FillFatJets( inFatJets, token ); + // } + + // if ( reject ) continue; + + bool reject = false; + for(unsigned int ll=0;ll(m_fatJetContainers.at(ll)+fatJetSuffix, m_event, m_store, msg()) ) { + ANA_MSG_DEBUG( "The fatjet container " + m_fatJetContainers.at(ll)+fatJetSuffix + " was not retrieved. Skipping all remaining fat jet collections"); + reject = true; + break; + } + + const xAOD::JetContainer* inFatJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inFatJets, m_fatJetContainers.at(ll)+fatJetSuffix, m_event, m_store, msg()) ); + helpTree->FillFatJets( inFatJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_fatJetBranches.at(ll) ); + + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a fat jet container problem - not writing the event"); + continue; + } + } + + if ( !m_truthFatJetContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_truthFatJetContainerName, m_event, m_store, msg()) ) continue; + + const xAOD::JetContainer* inTruthFatJets(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTruthFatJets, m_truthFatJetContainerName, m_event, m_store, msg()) ); + helpTree->FillTruthFatJets( inTruthFatJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_truthFatJetBranchName ); + } + + if ( !m_tauContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_tauContainerName, m_event, m_store, msg()) ) continue; + + const xAOD::TauJetContainer* inTaus(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTaus, m_tauContainerName, m_event, m_store, msg()) ); + helpTree->FillTaus( inTaus ); + } + + if ( !m_METContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_METContainerName + metSuffix, m_event, m_store, msg()) ) continue; + + const xAOD::MissingETContainer* inMETCont(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inMETCont, m_METContainerName + metSuffix, m_event, m_store, msg()) ); + helpTree->FillMET( inMETCont ); + } + + if ( !m_METReferenceContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_METReferenceContainerName, m_event, m_store, msg()) ) continue; + + const xAOD::MissingETContainer* inMETCont(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inMETCont, m_METReferenceContainerName, m_event, m_store, msg()) ); + helpTree->FillMET( inMETCont, "referenceMet" ); + } + + if ( !m_photonContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_photonContainerName + photonSuffix, m_event, m_store, msg()) ) continue; + + const xAOD::PhotonContainer* inPhotons(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_photonContainerName+photonSuffix, m_event, m_store, msg()) ); + helpTree->FillPhotons( inPhotons ); + } + + if ( !m_truthParticlesContainerName.empty() ) { + for ( unsigned int ll = 0; ll < m_truthParticlesContainers.size(); ++ll) { + if ( !HelperFunctions::isAvailable(m_truthParticlesContainers.at(ll), m_event, m_store, msg()) ) continue; + + const xAOD::TruthParticleContainer* inTruthParticles(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTruthParticles, m_truthParticlesContainers.at(ll), m_event, m_store, msg())); + helpTree->FillTruth(inTruthParticles, m_truthParticlesBranches.at(ll)); + } + } + + if ( !m_trackParticlesContainerName.empty() ) { + if ( !HelperFunctions::isAvailable(m_trackParticlesContainerName, m_event, m_store, msg()) ) continue; + + const xAOD::TrackParticleContainer* inTrackParticles(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inTrackParticles, m_trackParticlesContainerName, m_event, m_store, msg())); + helpTree->FillTracks(inTrackParticles,m_trackParticlesContainerName); + } + + if ( !m_vertexContainerName.empty() && !m_vertexDetailStr.empty() ){ + bool reject = false; + for ( unsigned int ll = 0; ll < m_vertexContainers.size(); ++ll ) { + const xAOD::VertexContainer* inVertices(nullptr); + if ( !HelperFunctions::isAvailable(m_vertexContainers.at(ll), m_event, m_store, msg()) ){ + ANA_MSG_DEBUG( "The vertex container " + m_vertexContainers.at(ll) + " is not available. Skipping all remaining vertex collections"); + reject = true; + } + ANA_CHECK( HelperFunctions::retrieve(inVertices, m_vertexContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillVertices( inVertices, m_vertexBranches.at(ll)); + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a vertex container problem - not writing the event"); + continue; + } + } + + if ( !m_clusterContainerName.empty() ) { + bool reject = false; + for(unsigned int ll=0;ll(m_clusterContainers.at(ll), m_event, m_store, msg()) ) { + ANA_MSG_DEBUG( "The cluster container " + m_clusterContainers.at(ll) + " is not available. Skipping all remaining cluster collections"); + reject = true; + break; + } + + const xAOD::CaloClusterContainer* inClusters(nullptr); + ANA_CHECK( HelperFunctions::retrieve(inClusters, m_clusterContainers.at(ll), m_event, m_store, msg()) ); + helpTree->FillClusters( inClusters, m_clusterBranches.at(ll) ); + } + + if ( reject ) { + ANA_MSG_DEBUG( "There was a cluster container problem - not writing the event"); + continue; + } + } + + // fill the tree + helpTree->Fill(); + } + + return EL::StatusCode::SUCCESS; + + } + + EL::StatusCode TreeAlgo :: postExecute () { return EL::StatusCode::SUCCESS; } + + EL::StatusCode TreeAlgo :: finalize () { + + ANA_MSG_INFO( "Deleting tree instances..."); + + for(auto& item: m_trees){ + if(item.second) {delete item.second; item.second = nullptr; } + } + m_trees.clear(); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TreeAlgo :: histFinalize () { return EL::StatusCode::SUCCESS; } + + HelpTreeBase* TreeAlgo :: createTree(xAOD::TEvent *event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store) { + return new HelpTreeBase( event, tree, file, units, debug, store ); + } diff --git a/_sources/api/program_listing_file_Root_TrigMatcher.cxx.rst.txt b/_sources/api/program_listing_file_Root_TrigMatcher.cxx.rst.txt new file mode 100644 index 0000000000..7b45bd88f8 --- /dev/null +++ b/_sources/api/program_listing_file_Root_TrigMatcher.cxx.rst.txt @@ -0,0 +1,194 @@ + +.. _program_listing_file_Root_TrigMatcher.cxx: + +Program Listing for File TrigMatcher.cxx +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TrigMatcher.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************** + * + * Interface to CP trigger matching tool(s). + * + *******************************************/ + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include + #include + + #include + + #include "TriggerMatchingTool/MatchFromCompositeTool.h" + + // ROOT include(s): + #include + #include + #include + + + // this is needed to distribute the algorithm to the workers + ClassImp(TrigMatcher) + + TrigMatcher :: TrigMatcher () + : Algorithm("TrigMatcher") + { + } + + TrigMatcher::~TrigMatcher() {} + + EL::StatusCode TrigMatcher :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TrigMatcher" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrigMatcher :: initialize () + { + ANA_MSG_INFO( "Initializing TrigMatcher Interface... "); + + ANA_CHECK( xAH::Algorithm::algInitialize()); + + // Standard containers + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + // Configuration + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + if( !isPHYS() ) { + // Grab the TrigDecTool from the ToolStore + if(!m_trigDecTool_handle.isUserConfigured()){ + ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" ); + return EL::StatusCode::FAILURE; + } + ANA_CHECK( m_trigDecTool_handle.retrieve()); + ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle); + } + + // *************************************** + // + // Initialise Trig::TrigMatchingTool + // + // *************************************** + if( !m_trigChains.empty() ) { + std::string trig; + std::istringstream ss(m_trigChains); + while ( std::getline(ss, trig, ',') ) { + m_trigChainsList.push_back(trig); + } + } + + ANA_CHECK( m_scoreTool.retrieve()); + + // everything went fine, let's initialise the tool! + // + if( !isPHYS() ) { + m_trigMatchTool_handle = asg::AnaToolHandle("Trig::MatchingTool/MatchingTool"); + ANA_CHECK( m_trigMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle )); + ANA_CHECK( m_trigMatchTool_handle.setProperty( "ScoringTool", m_scoreTool )); + } else { // For DAOD_PHYS samples + m_trigMatchTool_handle = asg::AnaToolHandle("Trig::MatchFromCompositeTool/MatchFromCompositeTool"); + } + ANA_CHECK( m_trigMatchTool_handle.retrieve() ); + + // ********************************************************************************************** + + ANA_MSG_INFO( "TrigMatcher Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrigMatcher :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + + ANA_MSG_DEBUG( "Applying trigger matching... "); + + const xAOD::IParticleContainer* inParticles(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + // + if ( m_systNames.empty() ) { + + // this will be the collection processed - no matter what!! + // + ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName, m_event, m_store, msg()) ); + ANA_CHECK( executeMatching( inParticles ) ); + + } else { // get the list of systematics to run over + + // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!) + // + std::vector< std::string >* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_systNames, 0, m_store, msg()) ); + + // loop over systematic sets + // + for ( auto systName : *systNames) { + + ANA_MSG_DEBUG( " syst name: " << systName << " input container name: " << m_inContainerName+systName ); + + ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName + systName, m_event, m_store, msg())); + ANA_CHECK( executeMatching( inParticles ) ); + } + + } + + return EL::StatusCode::SUCCESS; + } + + EL::StatusCode TrigMatcher :: executeMatching ( const xAOD::IParticleContainer* inParticles ) + { + static const SG::AuxElement::Decorator< std::vector< std::string > > isTrigMatchedDecor( "trigMatched" ); + + for( auto particle : *inParticles ) + { + ANA_MSG_DEBUG( "Trigger matching an object"); + + if ( !isTrigMatchedDecor.isAvailable( *particle ) ) + isTrigMatchedDecor( *particle ) = std::vector(); + + for ( auto const &chain : m_trigChainsList ) { + ANA_MSG_DEBUG( "\t checking trigger chain " << chain); + + bool matched = m_trigMatchTool_handle->match( *particle, chain, 0.07 ); + ANA_MSG_DEBUG( "\t\t result = " << matched ); + if(matched) isTrigMatchedDecor( *particle ).push_back( chain ); + } + } + + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_Root_TruthContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_TruthContainer.cxx.rst.txt new file mode 100644 index 0000000000..bc2dd9fdcb --- /dev/null +++ b/_sources/api/program_listing_file_Root_TruthContainer.cxx.rst.txt @@ -0,0 +1,481 @@ + +.. _program_listing_file_Root_TruthContainer.cxx: + +Program Listing for File TruthContainer.cxx +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TruthContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/TruthContainer.h" + #include + #include + #include + #include + //#include "xAODTruth/TruthEventContainer.h" + + using namespace xAH; + + TruthContainer::TruthContainer(const std::string& name, const std::string& detailStr, float units) + : ParticleContainer(name,detailStr,units,true) + + { + m_pdgId = new std::vector(); + if(!m_infoSwitch.m_pdgIdOnly){ + m_status = new std::vector(); + m_barcode = new std::vector(); + } + + if(m_infoSwitch.m_type){ + m_is_higgs = new std::vector(); + m_is_bhad = new std::vector(); + } + + if(m_infoSwitch.m_bVtx){ + m_Bdecay_x = new std::vector(); + m_Bdecay_y = new std::vector(); + m_Bdecay_z = new std::vector(); + } + + if(m_infoSwitch.m_parents){ + m_nParents = new std::vector(); + m_parent_pdgId = new std::vector< std::vector >(); + m_parent_barcode = new std::vector< std::vector >(); + m_parent_status = new std::vector< std::vector >(); + } + + if(m_infoSwitch.m_children){ + m_nChildren = new std::vector(); + m_child_pdgId = new std::vector< std::vector >(); + m_child_barcode = new std::vector< std::vector >(); + m_child_status = new std::vector< std::vector >(); + } + + if(m_infoSwitch.m_dressed){ + m_pt_dressed = new std::vector(); + m_eta_dressed = new std::vector(); + m_phi_dressed = new std::vector(); + m_e_dressed = new std::vector(); + } + + if(m_infoSwitch.m_origin){ + m_origin = new std::vector(); + } + + if(m_infoSwitch.m_particleType){ + m_particleType = new std::vector(); + } + + } + + TruthContainer::~TruthContainer() + { + if(m_debug) std::cout << " Deleting TruthContainer " << std::endl; + + delete m_pdgId; + if(!m_infoSwitch.m_pdgIdOnly){ + delete m_status; + delete m_barcode; + } + + + if(m_infoSwitch.m_type){ + delete m_is_higgs; + delete m_is_bhad ; + } + + if(m_infoSwitch.m_bVtx){ + delete m_Bdecay_x; + delete m_Bdecay_y; + delete m_Bdecay_z; + } + + if(m_infoSwitch.m_parents){ + delete m_nParents; + delete m_parent_pdgId; + delete m_parent_barcode; + delete m_parent_status; + } + + if(m_infoSwitch.m_children){ + delete m_nChildren; + delete m_child_pdgId; + delete m_child_barcode; + delete m_child_status; + } + + if(m_infoSwitch.m_dressed){ + delete m_pt_dressed; + delete m_eta_dressed; + delete m_phi_dressed; + delete m_e_dressed; + } + + if(m_infoSwitch.m_origin){ + delete m_origin; + } + + if(m_infoSwitch.m_particleType){ + delete m_particleType; + } + + } + + void TruthContainer::setTree(TTree *tree) + { + // + // Connect branches + ParticleContainer::setTree(tree); + + connectBranch(tree,"pdgId", &m_pdgId); + if(!m_infoSwitch.m_pdgIdOnly){ + connectBranch(tree,"status", &m_status); + connectBranch(tree,"barcode", &m_barcode); + } + + if(m_infoSwitch.m_type){ + connectBranch(tree,"is_higgs", &m_is_higgs); + connectBranch(tree,"is_bhad", &m_is_bhad); + } + + if(m_infoSwitch.m_bVtx){ + connectBranch(tree,"Bdecay_x", &m_Bdecay_x); + connectBranch(tree,"Bdecay_y", &m_Bdecay_y); + connectBranch(tree,"Bdecay_z", &m_Bdecay_z); + } + + if(m_infoSwitch.m_parents){ + connectBranch(tree,"nParents", &m_nParents); + connectBranch >(tree,"parent_pdgId", &m_parent_pdgId); + connectBranch >(tree,"parent_barcode", &m_parent_barcode); + connectBranch >(tree,"parent_status", &m_parent_status); + } + + if(m_infoSwitch.m_children){ + connectBranch (tree,"nChildren", &m_nChildren); + connectBranch >(tree,"child_pdgId", &m_child_pdgId); + connectBranch >(tree,"child_barcode", &m_child_barcode); + connectBranch >(tree,"child_status", &m_child_status); + } + + if(m_infoSwitch.m_dressed){ + connectBranch (tree,"pt_dressed", &m_pt_dressed); + connectBranch (tree,"eta_dressed", &m_eta_dressed); + connectBranch (tree,"phi_dressed", &m_phi_dressed); + connectBranch (tree,"e_dressed", &m_e_dressed); + } + + if(m_infoSwitch.m_origin){ + connectBranch (tree,"origin", &m_origin); + } + + if(m_infoSwitch.m_particleType){ + connectBranch (tree,"type", &m_particleType); + } + + } + + void TruthContainer::updateParticle(uint idx, TruthPart& truth) + { + if(m_debug) std::cout << "in TruthContainer::updateParticle " << std::endl; + ParticleContainer::updateParticle(idx,truth); + + truth.pdgId = m_pdgId->at(idx); + if(!m_infoSwitch.m_pdgIdOnly){ + truth.status = m_status->at(idx); + truth.barcode = m_barcode->at(idx); + } + + + if(m_infoSwitch.m_type){ + truth.is_higgs = (bool)m_is_higgs->at(idx); + truth.is_bhad = (bool)m_is_bhad ->at(idx); + } + + + if(m_infoSwitch.m_bVtx){ + truth.Bdecay_x = m_Bdecay_x->at(idx); + truth.Bdecay_y = m_Bdecay_y->at(idx); + truth.Bdecay_z = m_Bdecay_z->at(idx); + } + + if(m_infoSwitch.m_parents){ + truth.nParents = m_nParents->at(idx); + truth.parent_pdgId = m_parent_pdgId->at(idx); + truth.parent_barcode = m_parent_barcode->at(idx); + truth.parent_status = m_parent_status ->at(idx); + } + + if(m_infoSwitch.m_children){ + truth.nChildren = m_nChildren->at(idx); + truth.child_pdgId = m_child_pdgId->at(idx); + truth.child_barcode = m_child_barcode->at(idx); + truth.child_status = m_child_status ->at(idx); + } + + if(m_infoSwitch.m_dressed){ + truth.pt_dressed = m_pt_dressed->at(idx); + truth.eta_dressed = m_eta_dressed->at(idx); + truth.phi_dressed = m_phi_dressed->at(idx); + truth.e_dressed = m_e_dressed->at(idx); + } + + if(m_infoSwitch.m_origin){ + truth.origin = m_origin->at(idx); + } + + if(m_infoSwitch.m_particleType){ + truth.type = m_particleType->at(idx); + } + + if(m_debug) std::cout << "leave TruthContainer::updateParticle " << std::endl; + return; + } + + + + void TruthContainer::setBranches(TTree *tree) + { + ParticleContainer::setBranches(tree); + + setBranch(tree,"pdgId", m_pdgId ); + if(!m_infoSwitch.m_pdgIdOnly){ + setBranch(tree,"status", m_status ); + setBranch(tree,"barcode", m_barcode ); + } + + if(m_infoSwitch.m_type){ + setBranch(tree,"is_higgs", m_is_higgs ); + setBranch(tree,"is_bhad", m_is_bhad ); + } + + + if(m_infoSwitch.m_bVtx){ + setBranch(tree,"Bdecay_x", m_Bdecay_x ); + setBranch(tree,"Bdecay_y", m_Bdecay_y ); + setBranch(tree,"Bdecay_z", m_Bdecay_z ); + } + + if(m_infoSwitch.m_parents){ + setBranch (tree,"nParents", m_nParents ); + setBranch >(tree,"parent_pdgId", m_parent_pdgId ); + setBranch >(tree,"parent_barcode", m_parent_barcode ); + setBranch >(tree,"parent_status", m_parent_status ); + } + + if(m_infoSwitch.m_children){ + setBranch (tree,"nChildren", m_nChildren ); + setBranch >(tree,"child_pdgId", m_child_pdgId ); + setBranch >(tree,"child_barcode", m_child_barcode ); + setBranch >(tree,"child_status", m_child_status ); + } + + if(m_infoSwitch.m_dressed){ + setBranch (tree,"pt_dressed", m_pt_dressed ); + setBranch (tree,"eta_dressed", m_eta_dressed ); + setBranch (tree,"phi_dressed", m_phi_dressed ); + setBranch (tree,"e_dressed", m_e_dressed ); + } + + if(m_infoSwitch.m_origin){ + setBranch (tree,"origin",m_origin); + } + + if(m_infoSwitch.m_particleType){ + setBranch (tree,"type",m_particleType); + } + + return; + } + + + void TruthContainer::clear() + { + + ParticleContainer::clear(); + + m_pdgId ->clear(); + if(!m_infoSwitch.m_pdgIdOnly){ + m_status->clear(); + m_barcode->clear(); + } + + if(m_infoSwitch.m_type){ + m_is_higgs ->clear(); + m_is_bhad ->clear(); + } + + if(m_infoSwitch.m_bVtx){ + m_Bdecay_x->clear(); + m_Bdecay_y->clear(); + m_Bdecay_z->clear(); + } + + if(m_infoSwitch.m_parents){ + m_nParents->clear(); + m_parent_pdgId->clear(); + m_parent_barcode->clear(); + m_parent_status->clear(); + } + + if(m_infoSwitch.m_children){ + m_nChildren->clear(); + m_child_pdgId->clear(); + m_child_barcode->clear(); + m_child_status->clear(); + } + + if(m_infoSwitch.m_dressed){ + m_pt_dressed->clear(); + m_eta_dressed->clear(); + m_phi_dressed->clear(); + m_e_dressed->clear(); + } + + if(m_infoSwitch.m_origin){ + m_origin->clear(); + } + + if(m_infoSwitch.m_particleType){ + m_particleType->clear(); + } + + return; + } + + void TruthContainer::FillTruth( const xAOD::TruthParticle* truth ){ + return FillTruth(static_cast(truth)); + } + + void TruthContainer::FillTruth( const xAOD::IParticle* particle ){ + if(m_debug) std::cout << "In Fill Truth " << std::endl; + ParticleContainer::FillParticle(particle); + + const xAOD::TruthParticle* truth=dynamic_cast(particle); + if(m_debug) std::cout << "Got TP " << std::endl; + + m_pdgId ->push_back( truth->pdgId() ); + if(!m_infoSwitch.m_pdgIdOnly){ + m_status ->push_back( truth->status() ); + m_barcode->push_back( truth->barcode() ); + } + if(m_debug) std::cout << "Filled status " << std::endl; + + if(m_infoSwitch.m_type){ + if(m_debug) std::cout << "Filling type " << std::endl; + m_is_higgs->push_back( (int)truth->isHiggs() ); + m_is_bhad ->push_back( (int)truth->isBottomHadron() ); + } + + + + if(m_infoSwitch.m_bVtx){ + if(m_debug) std::cout << "Filling bVtx " << std::endl; + if(truth->isBottomHadron() && truth->hasDecayVtx()){ + const xAOD::TruthVertex* vtx = truth->decayVtx(); + m_Bdecay_x->push_back(vtx->x()); + m_Bdecay_y->push_back(vtx->y()); + m_Bdecay_z->push_back(vtx->z()); + } + else{ + m_Bdecay_x->push_back(-999999.); + m_Bdecay_y->push_back(-999999.); + m_Bdecay_z->push_back(-999999.); + } + } + + if(m_infoSwitch.m_parents){ + int nParents = truth->nParents(); + m_nParents->push_back(nParents); + + m_parent_pdgId ->push_back(std::vector()); + m_parent_barcode->push_back(std::vector()); + m_parent_status ->push_back(std::vector()); + for(int iparent = 0; iparent < nParents; ++iparent){ + const xAOD::TruthParticle* parent = truth->parent(iparent); + if(parent){ + m_parent_pdgId ->back().push_back(parent->pdgId()); + m_parent_barcode->back().push_back(parent->barcode()); + m_parent_status ->back().push_back(parent->status()); + }else{ + m_parent_pdgId ->back().push_back(-99); + m_parent_barcode->back().push_back(-99); + m_parent_status ->back().push_back(-99); + } + } + } + + + if(m_infoSwitch.m_children){ + int nChildren = truth->nChildren(); + m_nChildren->push_back(nChildren); + + m_child_pdgId ->push_back(std::vector()); + m_child_barcode->push_back(std::vector()); + m_child_status ->push_back(std::vector()); + for(int ichild = 0; ichild < nChildren; ++ichild){ + const xAOD::TruthParticle* child = truth->child(ichild); + if(child){ + m_child_pdgId ->back().push_back(child->pdgId()); + m_child_barcode->back().push_back(child->barcode()); + m_child_status ->back().push_back(child->status()); + }else{ + m_child_pdgId ->back().push_back(-99); + m_child_barcode->back().push_back(-99); + m_child_status ->back().push_back(-99); + } + } + } + + if(m_infoSwitch.m_dressed){ + if( truth->isAvailable("pt_dressed") ){ + float pt_dressed = truth->auxdata("pt_dressed"); + m_pt_dressed->push_back(pt_dressed / m_units); + } else { + m_pt_dressed->push_back(-999); + } + if( truth->isAvailable("eta_dressed") ){ + float eta_dressed = truth->auxdata("eta_dressed"); + m_eta_dressed->push_back(eta_dressed); + } else { + m_eta_dressed->push_back(-999); + } + if( truth->isAvailable("phi_dressed") ){ + float phi_dressed = truth->auxdata("phi_dressed"); + m_phi_dressed->push_back(phi_dressed); + } else { + m_phi_dressed->push_back(-999); + } + if( truth->isAvailable("e_dressed") ){ + float e_dressed = truth->auxdata("e_dressed"); + m_e_dressed->push_back(e_dressed / m_units); + } else { + m_e_dressed->push_back(-999); + } + } + + if(m_infoSwitch.m_origin){ + if( truth->isAvailable("classifierParticleOrigin") ){ + unsigned int origin = truth->auxdata("classifierParticleOrigin"); + m_origin->push_back(origin); + } else { + m_origin->push_back(0); // Non-defined + } + } + + if(m_infoSwitch.m_particleType){ + if( truth->isAvailable("classifierParticleType") ){ + unsigned int type = truth->auxdata("classifierParticleType"); + m_particleType->push_back(type); + } else { + m_particleType->push_back(0); // Unknown + } + } + + if(m_debug) std::cout << "Leave Fill Truth " << std::endl; + return; + } + diff --git a/_sources/api/program_listing_file_Root_TruthSelector.cxx.rst.txt b/_sources/api/program_listing_file_Root_TruthSelector.cxx.rst.txt new file mode 100644 index 0000000000..faf07b09dc --- /dev/null +++ b/_sources/api/program_listing_file_Root_TruthSelector.cxx.rst.txt @@ -0,0 +1,431 @@ + +.. _program_listing_file_Root_TruthSelector.cxx: + +Program Listing for File TruthSelector.cxx +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/TruthSelector.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /************************************ + * + * Truth selector tool + * + * J.Alison (john.alison@cern.ch) + * + ************************************/ + + // c++ include(s): + #include + #include + #include + + // EL include(s): + #include + #include + #include + + // EDM include(s): + #include "xAODTruth/TruthParticleContainer.h" + #include "xAODCore/ShallowCopy.h" + #include "AthContainers/ConstDataVector.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/SystematicRegistry.h" + + // package include(s): + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/TruthSelector.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + // external tools include(s): + + // ROOT include(s): + #include "TFile.h" + #include "TObjArray.h" + #include "TObjString.h" + + // this is needed to distribute the algorithm to the workers + ClassImp(TruthSelector) + + TruthSelector :: TruthSelector () : + Algorithm("TruthSelector") + { + } + + EL::StatusCode TruthSelector :: setupJob (EL::Job& job) + { + ANA_MSG_INFO( "Calling setupJob"); + + job.useXAOD (); + xAOD::Init( "TruthSelector" ).ignore(); // call before opening first file + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: histInitialize () + { + ANA_MSG_INFO( "Calling histInitialize"); + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: fileExecute () + { + ANA_MSG_INFO( "Calling fileExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: changeInput (bool /*firstFile*/) + { + ANA_MSG_INFO( "Calling changeInput"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: initialize () + { + ANA_MSG_INFO( "Calling initialize"); + + if ( m_useCutFlow ) { + + // retrieve the file in which the cutflow hists are stored + // + TFile *file = wk()->getOutputFile (m_cutFlowStreamName); + + // retrieve the event cutflows + // + m_cutflowHist = (TH1D*)file->Get("cutflow"); + m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted"); + m_cutflow_bin = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str()); + m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str()); + + // retrieve the object cutflow + // + m_truth_cutflowHist_1 = (TH1D*)file->Get("cutflow_truths_1"); + + m_truth_cutflow_all = m_truth_cutflowHist_1->GetXaxis()->FindBin("all"); + m_truth_cutflow_ptmax_cut = m_truth_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut"); + m_truth_cutflow_ptmin_cut = m_truth_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut"); + m_truth_cutflow_eta_cut = m_truth_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); + + } + + if ( m_inContainerName.empty() ) { + ANA_MSG_ERROR( "InputContainer is empty!"); + return EL::StatusCode::FAILURE; + } + + m_decor = "passSel"; + + if ( m_decorateSelectedObjects ) { + ANA_MSG_INFO(" Decorate Jets with " << m_decor); + } + + + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + + ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() ); + + m_numEvent = 0; + m_numObject = 0; + m_numEventPass = 0; + m_weightNumEventPass = 0; + m_numObjectPass = 0; + + ANA_MSG_INFO( "TruthSelector Interface succesfully initialized!" ); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: execute () + { + ANA_MSG_DEBUG( "Applying Jet Selection... "); + + // retrieve event + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + // MC event weight + float mcEvtWeight(1.0); + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" ); + return EL::StatusCode::FAILURE; + } + mcEvtWeight = mcEvtWeightAcc( *eventInfo ); + + m_numEvent++; + + // did any collection pass the cuts? + bool pass(false); + bool count(true); // count for the 1st collection in the container - could be better as + // shoudl only count for the nominal + const xAOD::TruthParticleContainer* inTruthParts(nullptr); + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + + // this will be the collection processed - no matter what!! + ANA_CHECK( HelperFunctions::retrieve(inTruthParts, m_inContainerName, m_event, m_store, msg()) ); + + pass = executeSelection( inTruthParts, mcEvtWeight, count, m_outContainerName); + + // look what we have in TStore + if(msgLvl(MSG::VERBOSE)) m_store->print(); + + if ( !pass ) { + wk()->skipEvent(); + } + + return EL::StatusCode::SUCCESS; + + } + + bool TruthSelector :: executeSelection ( const xAOD::TruthParticleContainer* inTruthParts, + float mcEvtWeight, + bool count, + std::string outContainerName + ) + { + + // create output container (if requested) + ConstDataVector* selectedTruthParts(nullptr); + if ( m_createSelectedContainer ) { + selectedTruthParts = new ConstDataVector(SG::VIEW_ELEMENTS); + } + + int nPass(0); int nObj(0); + + static SG::AuxElement::Decorator< char > passSelDecor( m_decor ); + + for ( auto truth_itr : *inTruthParts ) { // duplicated of basic loop + + // if only looking at a subset of jets make sure all are decorated + if ( m_nToProcess > 0 && nObj >= m_nToProcess ) { + if ( m_decorateSelectedObjects ) { + passSelDecor( *truth_itr ) = -1; + } else { + break; + } + continue; + } + + nObj++; + int passSel = this->PassCuts( truth_itr ); + if ( m_decorateSelectedObjects ) { + passSelDecor( *truth_itr ) = passSel; + } + + if ( passSel ) { + nPass++; + if ( m_createSelectedContainer ) { + selectedTruthParts->push_back( truth_itr ); + } + } + } + + if ( count ) { + m_numObject += nObj; + m_numObjectPass += nPass; + } + + // add ConstDataVector to TStore + if ( m_createSelectedContainer ) { + ANA_CHECK( m_store->record( selectedTruthParts, outContainerName )); + } + + // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts + if ( m_pass_min > 0 && nPass < m_pass_min ) { + return false; + } + if ( m_pass_max >= 0 && nPass > m_pass_max ) { + return false; + } + + if ( count ) { + m_numEventPass++; + m_weightNumEventPass += mcEvtWeight; + } + + return true; + } + + + EL::StatusCode TruthSelector :: postExecute () + { + ANA_MSG_DEBUG( "Calling postExecute"); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: finalize () + { + ANA_MSG_INFO( m_name ); + + if ( m_useCutFlow ) { + ANA_MSG_INFO( "Filling cutflow"); + m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass ); + m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass ); + } + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode TruthSelector :: histFinalize () + { + ANA_MSG_INFO( "Calling histFinalize"); + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } + + int TruthSelector :: PassCuts( const xAOD::TruthParticle* truthPart ) { + + // fill cutflow bin 'all' before any cut + if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_all, 1 ); + + // pT + if ( m_pT_max != 1e8 ) { + if ( truthPart->pt() > m_pT_max ) { return 0; } + } + if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_ptmax_cut, 1 ); + + if ( m_pT_min != 1e8 ) { + if ( truthPart->pt() < m_pT_min ) { return 0; } + } + if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_ptmin_cut, 1 ); + + // eta + if ( m_eta_max != 1e8 ) { + if ( fabs(truthPart->eta()) > m_eta_max ) { return 0; } + } + if ( m_eta_min != 1e8 ) { + if ( fabs(truthPart->eta()) < m_eta_min ) { return 0; } + } + if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_eta_cut, 1 ); + + // mass + if ( m_mass_max != 1e8 ) { + if ( truthPart->m() > m_mass_max ) { return 0; } + } + if ( m_mass_min != 1e8 ) { + if ( truthPart->m() < m_mass_min ) { return 0; } + } + + // rapidity + if ( m_rapidity_max != 1e8 ) { + if ( truthPart->rapidity() > m_rapidity_max ) { return 0; } + } + + if ( m_rapidity_min != 1e8 ) { + if ( truthPart->rapidity() < m_rapidity_min ) { return 0; } + } + + // selections for particles from MCTruthClassifier + + // type + if ( !m_typeOptions.empty() ) { // check w.r.t. multiple possible type values + if ( m_type != 1000 ) { ANA_MSG_WARNING( "single and multiple type conditions were selected, only the former will be used" ); + } else { + std::string token; + std::vector typeVec; + std::istringstream ss(m_typeOptions); + while ( std::getline(ss, token, '|') ) typeVec.push_back(std::stoi(token)); + bool found = false; + if( truthPart->isAvailable("classifierParticleType") ){ + unsigned int type = truthPart->auxdata("classifierParticleType"); + for (unsigned int i=0;iisAvailable("classifierParticleType") ){ + unsigned int type = truthPart->auxdata("classifierParticleType"); + if ( type != m_type ) { return 0; } + } else { + ANA_MSG_WARNING( "classifierParticleType is not available" ); + } + } + + // origin + if ( !m_originOptions.empty() ) { // check w.r.t. multiple possible origin values + if ( m_origin != 1000 ) { ANA_MSG_WARNING( "single and multiple origin conditions were selected, only the former will be used" ); + } else { + std::string token; + std::vector originVec; + std::istringstream ss(m_originOptions); + while ( std::getline(ss, token, '|') ) originVec.push_back(std::stoi(token)); + bool found = false; + if( truthPart->isAvailable("classifierParticleOrigin") ){ + unsigned int origin = truthPart->auxdata("classifierParticleOrigin"); + for (unsigned int i=0;iisAvailable("classifierParticleOrigin") ){ + unsigned int origin = truthPart->auxdata("classifierParticleOrigin"); + if ( origin != m_origin ) { return 0; } + } else { + ANA_MSG_WARNING( "classifierParticleOrigin is not available" ); + } + } + + // pt_dressed + if ( m_pT_dressed_min != 1e8 ) { + if( truthPart->isAvailable("pt_dressed") ){ + float pT_dressed = truthPart->auxdata("pt_dressed"); + if ( pT_dressed < m_pT_dressed_min ) { return 0; } + } else { + ANA_MSG_WARNING( "pt_dressed is not available" ); + } + } + + // eta_dressed + if ( m_eta_dressed_min != 1e8 ) { + if( truthPart->isAvailable("eta_dressed") ){ + float eta_dressed = truthPart->auxdata("eta_dressed"); + if ( eta_dressed < m_eta_dressed_min ) { return 0; } + } else { + ANA_MSG_WARNING( "eta_dressed is not available" ); + } + } + if ( m_eta_dressed_max != 1e8 ) { + if( truthPart->isAvailable("eta_dressed") ){ + float eta_dressed = truthPart->auxdata("eta_dressed"); + if ( eta_dressed > m_eta_dressed_max ) { return 0; } + } else { + ANA_MSG_WARNING( "eta_dressed is not available" ); + } + } + + return 1; + } + + diff --git a/_sources/api/program_listing_file_Root_VertexContainer.cxx.rst.txt b/_sources/api/program_listing_file_Root_VertexContainer.cxx.rst.txt new file mode 100644 index 0000000000..e340a7462c --- /dev/null +++ b/_sources/api/program_listing_file_Root_VertexContainer.cxx.rst.txt @@ -0,0 +1,108 @@ + +.. _program_listing_file_Root_VertexContainer.cxx: + +Program Listing for File VertexContainer.cxx +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/VertexContainer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/VertexContainer.h" + #include + + using namespace xAH; + + VertexContainer::VertexContainer(const std::string& detailStr, const std::string& name) + { + m_name = name; + m_detailStr = detailStr; + if(m_detailStr!=""){ + m_vertex_x = new std::vector(); + m_vertex_y = new std::vector(); + m_vertex_z = new std::vector(); + } + } + + VertexContainer::~VertexContainer() + { + if(m_detailStr!=""){ + delete m_vertex_x; + delete m_vertex_y; + delete m_vertex_z; + } + } + + void VertexContainer::setTree(TTree *tree) + { + if(m_detailStr!=""){ + connectBranch(tree,"x",&m_vertex_x); + connectBranch(tree,"y",&m_vertex_y); + connectBranch(tree,"z",&m_vertex_z); + } + } + + void VertexContainer::setBranches(TTree *tree) + { + if(m_detailStr!=""){ + setBranch(tree,"x",m_vertex_x); + setBranch(tree,"y",m_vertex_y); + setBranch(tree,"z",m_vertex_z); + } + return; + } + + void VertexContainer::clear() + { + if(m_detailStr!=""){ + m_vertex_x->clear(); + m_vertex_y->clear(); + m_vertex_z->clear(); + } + return; + } + + void VertexContainer::FillVertices( const xAOD::VertexContainer* vertices){ + if(m_detailStr == "primary"){ // hard-scatter vertex only + int pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices ); + if (pvLocation >= 0) { + m_vertex_x->push_back(vertices->at(pvLocation)->x()); + m_vertex_y->push_back(vertices->at(pvLocation)->y()); + m_vertex_z->push_back(vertices->at(pvLocation)->z()); + } else { + m_vertex_x->push_back( -999.0 ); + m_vertex_y->push_back( -999.0 ); + m_vertex_z->push_back( -999.0 ); + } + } else if (m_detailStr == "all"){ + for( auto vertex : *vertices) { + m_vertex_x->push_back( vertex->x() ); + m_vertex_y->push_back( vertex->y() ); + m_vertex_z->push_back( vertex->z() ); + } + } + } + + void VertexContainer::FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices){ + if(m_detailStr == "primary"){ // hard-scatter vertex only + int hsBarcode = -999; + const xAOD::TruthVertex* hsTruthVertex(nullptr); + for ( auto *truthVertex : *truthVertices ) { + if ( truthVertex->barcode()<0 && truthVertex->barcode()>hsBarcode ) { + hsBarcode = truthVertex->barcode(); + hsTruthVertex = truthVertex; + } + } + m_vertex_x->push_back( hsTruthVertex->x() ); + m_vertex_y->push_back( hsTruthVertex->y() ); + m_vertex_z->push_back( hsTruthVertex->z() ); + } else if (m_detailStr == "all"){ + for( auto truthVertex : *truthVertices) { + m_vertex_x->push_back( truthVertex->x() ); + m_vertex_y->push_back( truthVertex->y() ); + m_vertex_z->push_back( truthVertex->z() ); + } + } + } diff --git a/_sources/api/program_listing_file_Root_VtxHists.cxx.rst.txt b/_sources/api/program_listing_file_Root_VtxHists.cxx.rst.txt new file mode 100644 index 0000000000..3c672d2d84 --- /dev/null +++ b/_sources/api/program_listing_file_Root_VtxHists.cxx.rst.txt @@ -0,0 +1,349 @@ + +.. _program_listing_file_Root_VtxHists.cxx: + +Program Listing for File VtxHists.cxx +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/VtxHists.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include "xAODAnaHelpers/VtxHists.h" + #include + + #include + + ANA_MSG_SOURCE(msgVtxHists, "VtxHists") + + VtxHists :: VtxHists (std::string name, std::string detailStr) : + HistogramManager(name, detailStr) + { + } + + VtxHists :: ~VtxHists () {} + + StatusCode VtxHists::initialize() { + + // These plots are always made + h_type = book(m_name, "type", "vtx type", 10, -0.5, 9.5); + h_nTrks = book(m_name, "nTrks", "nTrks", 100, -0.5, 99.5); + h_nTrks_l = book(m_name, "nTrks_l", "nTrks", 100, -0.5, 499.5); + + + // + // Trk details + // + m_fillTrkDetails = false; + if(m_detailStr.find("TrkDetails") != std::string::npos ){ + m_fillTrkDetails = true; + h_trk_Pt = book(m_name, "trkPt", "trkPt", 100, -0.5, 9.5); + h_trk_Pt_l = book(m_name, "trkPt_l", "trkPt", 100, -0.5, 99.5); + + h_pt_miss_x = book(m_name, "Pt_miss_x", "Pt_miss_x", 100, -5.5, 4.5); + h_pt_miss_x_l = book(m_name, "Pt_miss_x_l", "Pt_miss_x_l", 100, -50.5, 49.5); + + h_pt_miss_y = book(m_name, "Pt_miss_y", "Pt_miss_y", 100, -5.5, 4.5); + h_pt_miss_y_l = book(m_name, "Pt_miss_y_l", "Pt_miss_y_l", 100, -50.5, 49.5); + + h_pt_miss = book(m_name, "Pt_miss", "Pt_miss", 100, -0.5, 9.5); + h_pt_miss_l = book(m_name, "Pt_miss_l", "Pt_miss_l", 100, -0.5, 99.5); + } + + // + // Iso Trk details + // + m_fillIsoTrkDetails = false; + if(m_detailStr.find("IsoTrkDetails") != std::string::npos ){ + m_fillIsoTrkDetails = true; + + h_trkIsoAll = book(m_name, "ptCone20All", "ptCone20All", 100, -0.5, 9.5); + h_trkIso = book(m_name, "ptCone20", "ptCone20", 100, -0.5, 9.5); + + h_dZ0Before = book(m_name, "dZ0Before", "dZ0Before", 100, -0.1, 100); + + h_nIsoTrks = book(m_name, "nIsoTrks", "nIsoTrks", 100, -0.5, 99.5); + h_nIsoTrks_l = book(m_name, "nIsoTrks_l", "nIsoTrks", 100, -0.5, 499.5); + + h_IsoTrk_Pt = book(m_name, "isoTrkPt", "IsoTrkPt", 100, -0.5, 9.5); + h_IsoTrk_Pt_l = book(m_name, "isoTrkPt_l", "IsoTrkPt", 100, -0.5, 99.5); + + h_pt_miss_iso_x = book(m_name, "Pt_miss_iso_x", "Pt_miss_x", 100, -5.5, 4.5); + h_pt_miss_iso_x_l = book(m_name, "Pt_miss_iso_x_l", "Pt_miss_x_l", 100, -50.5, 49.5); + + h_pt_miss_iso_y = book(m_name, "Pt_miss_iso_y", "Pt_miss_y", 100, -5.5, 4.5); + h_pt_miss_iso_y_l = book(m_name, "Pt_miss_iso_y_l", "Pt_miss_y_l", 100, -50.5, 49.5); + + h_pt_miss_iso = book(m_name, "Pt_miss_iso", "Pt_miss", 100, -0.5, 9.5); + h_pt_miss_iso_l = book(m_name, "Pt_miss_iso_l", "Pt_miss_l", 100, -0.5, 99.5); + + + h_nIsoTrks1GeV = book(m_name, "nIsoTracks1GeV", "nIsoTracks1GeV", 100, -0.5, 99.5 ); + h_nIsoTrks2GeV = book(m_name, "nIsoTracks2GeV", "nIsoTracks2GeV", 100, -0.5, 99.5 ); + h_nIsoTrks5GeV = book(m_name, "nIsoTracks5GeV", "nIsoTracks5GeV", 100, -0.5, 99.5 ); + h_nIsoTrks10GeV = book(m_name, "nIsoTracks10GeV", "nIsoTracks10GeV", 100, -0.5, 99.5 ); + h_nIsoTrks15GeV = book(m_name, "nIsoTracks15GeV", "nIsoTracks15GeV", 100, -0.5, 99.5 ); + h_nIsoTrks20GeV = book(m_name, "nIsoTracks20GeV", "nIsoTracks20GeV", 100, -0.5, 99.5 ); + h_nIsoTrks25GeV = book(m_name, "nIsoTracks25GeV", "nIsoTracks25GeV", 100, -0.5, 99.5 ); + h_nIsoTrks30GeV = book(m_name, "nIsoTracks30GeV", "nIsoTracks30GeV", 100, -0.5, 99.5 ); + + m_nLeadIsoTrackPts = 10; + for(uint iLeadTrks = 0; iLeadTrks < m_nLeadIsoTrackPts; ++iLeadTrks){ + std::stringstream ss; + ss << iLeadTrks; + h_IsoTrk_max_Pt.push_back( book(m_name, "IsoTrkPt_"+ss.str(), "IsoTrkPt("+ss.str()+")", 100, -0.5, 9.5) ); + h_IsoTrk_max_Pt_l.push_back( book(m_name, "IsoTrkPt_"+ss.str()+"_l", "IsoTrkPt("+ss.str()+")", 100, -0.5, 99.5) ); + } + + } + + + // + // Trk Pt details + // + m_fillTrkPtDetails = false; + if(m_detailStr.find("TrkPtDetails") != std::string::npos ){ + m_fillTrkPtDetails = true; + h_nTrks1GeV = book(m_name, "nTracks1GeV", "nTracks1GeV", 100, -0.5, 99.5 ); + h_nTrks2GeV = book(m_name, "nTracks2GeV", "nTracks2GeV", 100, -0.5, 99.5 ); + h_nTrks5GeV = book(m_name, "nTracks5GeV", "nTracks5GeV", 100, -0.5, 99.5 ); + h_nTrks10GeV = book(m_name, "nTracks10GeV", "nTracks10GeV", 100, -0.5, 99.5 ); + h_nTrks15GeV = book(m_name, "nTracks15GeV", "nTracks15GeV", 100, -0.5, 99.5 ); + h_nTrks20GeV = book(m_name, "nTracks20GeV", "nTracks20GeV", 100, -0.5, 99.5 ); + h_nTrks25GeV = book(m_name, "nTracks25GeV", "nTracks25GeV", 100, -0.5, 99.5 ); + h_nTrks30GeV = book(m_name, "nTracks30GeV", "nTracks30GeV", 100, -0.5, 99.5 ); + + m_nLeadTrackPts = 10; + for(uint iLeadTrks = 0; iLeadTrks < m_nLeadTrackPts; ++iLeadTrks){ + std::stringstream ss; + ss << iLeadTrks; + h_trk_max_Pt.push_back( book(m_name, "trkPt_"+ss.str(), "trkPt("+ss.str()+")", 100, -0.5, 9.5) ); + h_trk_max_Pt_l.push_back( book(m_name, "trkPt_"+ss.str()+"_l", "trkPt("+ss.str()+")", 100, -0.5, 99.5) ); + } + + } + + + + // if worker is passed to the class add histograms to the output + return StatusCode::SUCCESS; + } + + StatusCode VtxHists::execute( const xAOD::VertexContainer* vtxs, float eventWeight ) { + using namespace msgVtxHists; + for(auto vtx_itr : *vtxs ) { + ANA_CHECK( this->execute( vtx_itr, eventWeight )); + } + + return StatusCode::SUCCESS; + } + + StatusCode VtxHists::execute( const xAOD::VertexContainer* vtxs, const xAOD::TrackParticleContainer* trks, float eventWeight ) { + using namespace msgVtxHists; + for(auto vtx_itr : *vtxs ) { + ANA_CHECK( this->execute( vtx_itr, trks, eventWeight )); + } + + return StatusCode::SUCCESS; + } + + StatusCode VtxHists::execute( const xAOD::Vertex* vtx, const xAOD::TrackParticleContainer* trks, float eventWeight ) { + using namespace msgVtxHists; + ANA_CHECK( this->execute( vtx, eventWeight)); + + if(m_fillIsoTrkDetails){ + + unsigned int nTrksAll = vtx->nTrackParticles(); + + uint nIsoTracks1GeV = 0; + uint nIsoTracks2GeV = 0; + uint nIsoTracks5GeV = 0; + uint nIsoTracks10GeV = 0; + uint nIsoTracks15GeV = 0; + uint nIsoTracks20GeV = 0; + uint nIsoTracks25GeV = 0; + uint nIsoTracks30GeV = 0; + + std::vector pt_iso_vec; + + float pt_miss_iso_x = 0; + float pt_miss_iso_y = 0; + + for(uint iTrkItr = 0; iTrkItr< nTrksAll; ++iTrkItr){ + const xAOD::TrackParticle* thisTrk = vtx->trackParticle(iTrkItr); + float trkPt = thisTrk->pt()/1e3; + + + if(trkPt < 1) continue; + + float trk_pt_cone20 = getIso(thisTrk, trks); + + pt_miss_iso_x += thisTrk->p4().Px()/1e3; + pt_miss_iso_y += thisTrk->p4().Py()/1e3; + + h_trkIsoAll -> Fill( trk_pt_cone20, eventWeight ); + + if(trk_pt_cone20/trkPt > 0.1) continue; + + h_trkIso -> Fill( trk_pt_cone20, eventWeight ); + + h_IsoTrk_Pt -> Fill( trkPt, eventWeight ); + h_IsoTrk_Pt_l -> Fill( trkPt, eventWeight ); + + pt_iso_vec.push_back(trkPt); + + if(trkPt > 1) ++nIsoTracks1GeV; + if(trkPt > 2) ++nIsoTracks2GeV; + if(trkPt > 5) ++nIsoTracks5GeV; + if(trkPt > 10) ++nIsoTracks10GeV; + if(trkPt > 15) ++nIsoTracks15GeV; + if(trkPt > 20) ++nIsoTracks20GeV; + if(trkPt > 25) ++nIsoTracks25GeV; + if(trkPt > 30) ++nIsoTracks30GeV; + + } + + + // Sort track pts + //std::sort(numbers.begin(), numbers.end(), std::greater()); + std::sort(pt_iso_vec.begin(), pt_iso_vec.end(), std::greater()); + + // Leading track Pts + for(uint iLeadTrks = 0; iLeadTrks < m_nLeadIsoTrackPts; ++iLeadTrks){ + float this_pt = (pt_iso_vec.size() > iLeadTrks) ? pt_iso_vec.at(iLeadTrks) : 0; + h_IsoTrk_max_Pt.at(iLeadTrks) -> Fill( this_pt, eventWeight ); + h_IsoTrk_max_Pt_l.at(iLeadTrks) -> Fill( this_pt, eventWeight ); + } + + h_nIsoTrks1GeV -> Fill( nIsoTracks1GeV, eventWeight ); + h_nIsoTrks2GeV -> Fill( nIsoTracks2GeV, eventWeight ); + h_nIsoTrks5GeV -> Fill( nIsoTracks5GeV, eventWeight ); + h_nIsoTrks10GeV -> Fill( nIsoTracks10GeV, eventWeight ); + h_nIsoTrks15GeV -> Fill( nIsoTracks15GeV, eventWeight ); + h_nIsoTrks20GeV -> Fill( nIsoTracks20GeV, eventWeight ); + h_nIsoTrks25GeV -> Fill( nIsoTracks25GeV, eventWeight ); + h_nIsoTrks30GeV -> Fill( nIsoTracks30GeV, eventWeight ); + + h_pt_miss_iso_x -> Fill(pt_miss_iso_x , eventWeight ); + h_pt_miss_iso_x_l -> Fill(pt_miss_iso_x , eventWeight ); + + h_pt_miss_iso_y -> Fill(pt_miss_iso_y , eventWeight ); + h_pt_miss_iso_y_l -> Fill(pt_miss_iso_y , eventWeight ); + + float pt_miss_iso = sqrt(pt_miss_iso_x*pt_miss_iso_x + pt_miss_iso_y*pt_miss_iso_y); + h_pt_miss_iso -> Fill(pt_miss_iso , eventWeight ); + h_pt_miss_iso_l -> Fill(pt_miss_iso , eventWeight ); + + } + + return StatusCode::SUCCESS; + } + + StatusCode VtxHists::execute( const xAOD::Vertex* vtx, float eventWeight ) { + + //basic + h_type -> Fill( vtx->vertexType(), eventWeight ); + + unsigned int nTrks = vtx->nTrackParticles(); + h_nTrks -> Fill( nTrks, eventWeight ); + h_nTrks_l -> Fill( nTrks, eventWeight ); + + if(m_fillTrkDetails){ + + uint nTracks1GeV = 0; + uint nTracks2GeV = 0; + uint nTracks5GeV = 0; + uint nTracks10GeV = 0; + uint nTracks15GeV = 0; + uint nTracks20GeV = 0; + uint nTracks25GeV = 0; + uint nTracks30GeV = 0; + + std::vector pt_vec; + + float pt_miss_x = 0; + float pt_miss_y = 0; + + for(uint iTrkItr = 0; iTrkItr< nTrks; ++iTrkItr){ + const xAOD::TrackParticle* thisTrk = vtx->trackParticle(iTrkItr); + float trkPt = thisTrk->pt()/1e3; + + h_trk_Pt -> Fill( trkPt, eventWeight ); + h_trk_Pt_l -> Fill( trkPt, eventWeight ); + + if(!m_fillTrkDetails) continue; + + if(trkPt > 1) pt_vec.push_back(trkPt); + + pt_miss_x += thisTrk->p4().Px()/1e3; + pt_miss_y += thisTrk->p4().Py()/1e3; + + if(trkPt > 1) ++nTracks1GeV; + if(trkPt > 2) ++nTracks2GeV; + if(trkPt > 5) ++nTracks5GeV; + if(trkPt > 10) ++nTracks10GeV; + if(trkPt > 15) ++nTracks15GeV; + if(trkPt > 20) ++nTracks20GeV; + if(trkPt > 25) ++nTracks25GeV; + if(trkPt > 30) ++nTracks30GeV; + + } + + if(m_fillTrkPtDetails){ + + // Sort track pts + //std::sort(numbers.begin(), numbers.end(), std::greater()); + std::sort(pt_vec.begin(), pt_vec.end(), std::greater()); + + // Leading track Pts + for(uint iLeadTrks = 0; iLeadTrks < m_nLeadTrackPts; ++iLeadTrks){ + float this_pt = (pt_vec.size() > iLeadTrks) ? pt_vec.at(iLeadTrks) : 0; + h_trk_max_Pt.at(iLeadTrks) -> Fill( this_pt, eventWeight ); + h_trk_max_Pt_l.at(iLeadTrks) -> Fill( this_pt, eventWeight ); + } + + h_nTrks1GeV -> Fill( nTracks1GeV, eventWeight ); + h_nTrks2GeV -> Fill( nTracks2GeV, eventWeight ); + h_nTrks5GeV -> Fill( nTracks5GeV, eventWeight ); + h_nTrks10GeV -> Fill( nTracks10GeV, eventWeight ); + h_nTrks15GeV -> Fill( nTracks15GeV, eventWeight ); + h_nTrks20GeV -> Fill( nTracks20GeV, eventWeight ); + h_nTrks25GeV -> Fill( nTracks25GeV, eventWeight ); + h_nTrks30GeV -> Fill( nTracks30GeV, eventWeight ); + + h_pt_miss_x -> Fill(pt_miss_x , eventWeight ); + h_pt_miss_x_l -> Fill(pt_miss_x , eventWeight ); + + h_pt_miss_y -> Fill(pt_miss_y , eventWeight ); + h_pt_miss_y_l -> Fill(pt_miss_y , eventWeight ); + + float pt_miss = sqrt(pt_miss_x*pt_miss_x + pt_miss_y*pt_miss_y); + h_pt_miss -> Fill(pt_miss , eventWeight ); + h_pt_miss_l -> Fill(pt_miss , eventWeight ); + } + + } + + return StatusCode::SUCCESS; + + } + + float VtxHists::getIso( const xAOD::TrackParticle *inTrack, const xAOD::TrackParticleContainer* trks, float z0_cut , float cone_size) + { + float iso = 0; + + for(auto trk_itr : *trks ) { + + float dZ0 = abs(trk_itr->z0() - inTrack->z0()); + h_dZ0Before->Fill(dZ0, 1.0); + if(dZ0 > z0_cut) continue; + + float dR = trk_itr->p4().DeltaR(inTrack->p4()); + if(dR > cone_size) continue; + if(dR == 0) continue; + iso += trk_itr->pt()/1e3; + } + + return iso; + } diff --git a/_sources/api/program_listing_file_Root_Writer.cxx.rst.txt b/_sources/api/program_listing_file_Root_Writer.cxx.rst.txt new file mode 100644 index 0000000000..e6a05aa7a4 --- /dev/null +++ b/_sources/api/program_listing_file_Root_Writer.cxx.rst.txt @@ -0,0 +1,240 @@ + +.. _program_listing_file_Root_Writer.cxx: + +Program Listing for File Writer.cxx +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``Root/Writer.cxx``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #include + #include + #include + #include + + #include "EventLoop/OutputStream.h" + #include "xAODCore/ShallowCopy.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/JetAuxContainer.h" + + #include + + // this is needed to distribute the algorithm to the workers + ClassImp(Writer) + + + + Writer :: Writer () : + Algorithm("Writer") + { + } + + EL::StatusCode Writer :: setupJob (EL::Job& job) + { + // Here you put code that sets up the job on the submission object + // so that it is ready to work with your algorithm, e.g. you can + // request the D3PDReader service or add output files. Any code you + // put here could instead also go into the submission script. The + // sole advantage of putting it here is that it gets automatically + // activated/deactivated when you add/remove the algorithm from your + // job, which may or may not be of value to you. + // let's initialize the algorithm to use the xAODRootAccess package + job.useXAOD (); + xAOD::Init( "Writer" ).ignore(); // call before opening first file + + m_jetContainerNames = HelperFunctions::SplitString( m_jetContainerNamesStr, ',' ); + m_electronContainerNames = HelperFunctions::SplitString( m_electronContainerNamesStr, ',' ); + m_muonContainerNames = HelperFunctions::SplitString( m_muonContainerNamesStr, ',' ); + + if ( m_outputLabel.Length() == 0 ) { + ANA_MSG_ERROR( "No OutputLabel specified!"); + return EL::StatusCode::FAILURE; + } + + // tell EventLoop about our output xAOD: + EL::OutputStream out(m_outputLabel.Data()); + job.outputAdd (out); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: histInitialize () + { + // Here you do everything that needs to be done at the very + // beginning on each worker node, e.g. create histograms and output + // trees. This method gets called before any input files are + // connected. + ANA_CHECK( xAH::Algorithm::algInitialize()); + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: fileExecute () + { + // Here you do everything that needs to be done exactly once for every + // single file, e.g. collect a list of all lumi-blocks processed + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: changeInput (bool /*firstFile*/) + { + // Here you do everything you need to do when we change input files, + // e.g. resetting branch addresses on trees. If you are using + // D3PDReader or a similar service this method is not needed. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: initialize () + { + // Here you do everything that you need to do after the first input + // file has been connected and before the first event is processed, + // e.g. create additional histograms based on which variables are + // available in the input files. You can also create all of your + // histograms and trees in here, but be aware that this method + // doesn't get called if no events are processed. So any objects + // you create here won't be available in the output if you have no + // input events. + m_event = wk()->xaodEvent(); + m_store = wk()->xaodStore(); + m_numEvent = 0; + + // output xAOD + TFile * file = wk()->getOutputFile (m_outputLabel.Data()); + ANA_CHECK( m_event->writeTo(file)); + + //FIXME add this as well + // Set which variables not to write out: + // event->setAuxItemList( "AntiKt4LCTopoJetsAux.", "-NumTrkPt1000.-NumTrkPt500" ); + // // Set which variable to do write out: + // event->setAuxItemList( "GoodJetsAux.", "JetGhostArea.TrackCount" ); + + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: execute () + { + // Here you do everything that needs to be done on every single + // events, e.g. read input variables, apply cuts, and fill + // histograms and trees. This is where most of your actual analysis + // code will go. + m_numEvent++; + + // try to find the containers in m_event - if there then copy entire container directly + // if not found in m_event, look in m_store - user created - write aux store as well + for( auto contName : m_jetContainerNames ) { + + const xAOD::JetContainer* inJetsConst(nullptr); + // look in event + if ( HelperFunctions::retrieve(inJetsConst, contName.Data(), m_event, 0, msg()).isSuccess() ) { + // without modifying the contents of it: + ANA_MSG_INFO( " Write a collection " << contName.Data() << inJetsConst->size() ); + m_event->copy( contName.Data() ); + ANA_MSG_INFO( " Wrote a collection " << contName.Data()); + continue; + } + + // look in store + xAOD::JetContainer* inJets(nullptr); + if ( HelperFunctions::retrieve(inJets, contName.Data(), 0, m_store, msg()).isSuccess() ){ + // // FIXME add something like this + // jets_shallowCopy.second->setShallowIO( false ); // true = shallow copy, false = deep copy + // // if true should have something like this line somewhere: + + // Record the objects into the output xAOD: + ANA_MSG_INFO( " Write a collection " << contName.Data() << inJets->size() ); + if( ! m_event->record( inJets, contName.Data() ) ) { + ANA_MSG_ERROR(m_name << ": Could not record " << contName.Data()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_INFO( " Wrote a collection " << contName.Data()); + + // get pointer to associated aux container + xAOD::JetAuxContainer* inJetsAux = 0; + ANA_MSG_INFO( " Wrote a aux store " << contName.Data()); + TString auxName( contName + "Aux." ); + if ( HelperFunctions::retrieve(inJetsAux, auxName.Data(), 0, m_store, msg()).isSuccess() ){ + ANA_MSG_ERROR(m_name << ": Could not get Aux data for " << contName.Data()); + return EL::StatusCode::FAILURE; + } + ANA_MSG_INFO( " Wrote a aux store " << contName.Data()); + + if( ! m_event->record( inJetsAux, auxName.Data() ) ) { + ANA_MSG_ERROR( m_name << ": Could not record aux store for " << contName.Data()); + return EL::StatusCode::FAILURE; + } + } + // could not find the container - problems + else { + ANA_MSG_ERROR( m_name << ": Could not find " << contName.Data()); + return EL::StatusCode::FAILURE; + } + } + + // add similar loop for electron and muons + + m_event->fill(); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: postExecute () + { + // Here you do everything that needs to be done after the main event + // processing. This is typically very rare, particularly in user + // code. It is mainly used in implementing the NTupleSvc. + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: finalize () + { + // This method is the mirror image of initialize(), meaning it gets + // called after the last event has been processed on the worker node + // and allows you to finish up any objects you created in + // initialize() before they are written to disk. This is actually + // fairly rare, since this happens separately for each worker node. + // Most of the time you want to do your post-processing on the + // submission node after all your histogram outputs have been + // merged. This is different from histFinalize() in that it only + // gets called on worker nodes that processed input events. + + // finalize and close our output xAOD file ( and write MetaData tree ) + TFile * file = wk()->getOutputFile(m_outputLabel.Data()); + ANA_CHECK( m_event->finishWritingTo( file )); + + return EL::StatusCode::SUCCESS; + } + + + + EL::StatusCode Writer :: histFinalize () + { + // This method is the mirror image of histInitialize(), meaning it + // gets called after the last event has been processed on the worker + // node and allows you to finish up any objects you created in + // histInitialize() before they are written to disk. This is + // actually fairly rare, since this happens separately for each + // worker node. Most of the time you want to do your + // post-processing on the submission node after all your histogram + // outputs have been merged. This is different from finalize() in + // that it gets called on all worker nodes regardless of whether + // they processed input events. + ANA_CHECK( xAH::Algorithm::algFinalize()); + return EL::StatusCode::SUCCESS; + } diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Algorithm.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Algorithm.h.rst.txt new file mode 100644 index 0000000000..411f1e0832 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Algorithm.h.rst.txt @@ -0,0 +1,154 @@ + +.. _program_listing_file_xAODAnaHelpers_Algorithm.h: + +Program Listing for File Algorithm.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Algorithm.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Algorithm_H + #define xAODAnaHelpers_Algorithm_H + + // Infrastructure include(s): + #include "xAODRootAccess/Init.h" + #include "xAODRootAccess/TEvent.h" + #include "xAODRootAccess/TStore.h" + #include "xAODMetaData/FileMetaData.h" + + // EL include(s): + #include + #include + #include + + #include + + // for StatusCode::isSuccess + #include "AsgMessaging/MessageCheck.h" + #include "AsgMessaging/StatusCode.h" + #include "AsgTools/ToolStore.h" + #include "AsgTools/AnaToolHandle.h" + + // for resolving paths of various calibration files + #include "PathResolver/PathResolver.h" + + // messaging includes + #include + #include + #include + + + namespace xAH { + + class Algorithm : public EL::Algorithm { + public: + Algorithm(std::string className = "Algorithm"); + ~Algorithm(); + ClassDef(Algorithm, 1); + + StatusCode algInitialize(); + + StatusCode algFinalize(); + + std::string m_name = "UnnamedAlgorithm"; + + bool m_debug = false; + bool m_verbose = false; + + MSG::Level m_msgLevel = MSG::INFO; + + // output stream name for cutflow + std::string m_cutFlowStreamName = "cutflow"; + + std::string m_systName = ""; + float m_systVal = 0.0; + + std::string m_systValVectorString = ""; + + std::vector m_systValVector; + + StatusCode parseSystValVector(); + + std::string m_eventInfoContainerName = "EventInfo"; + + std::string m_vertexContainerName = "PrimaryVertices"; + + int m_isMC = -1; + + int m_isFastSim = -1; + + int m_isAF3 = -1; + + bool m_useRun3navigation = false; + + std::string m_HLTSummary = "HLTNav_Summary_DAODSlimmed"; + + bool m_forceFastSim = false; + bool m_forceFullSim = false; + bool m_forceData = false; + + bool m_setAFII = false; + bool m_setAF3 = false; + + + protected: + std::string m_className = "Algorithm"; + + xAOD::TEvent* m_event = nullptr; + xAOD::TStore* m_store = nullptr; + + bool isMC(); + + bool isFastSim(); + + bool isAF3(); + + bool isPHYS(); + + void registerInstance(); + int numInstances(); + + void unregisterInstance(); + + template< typename T > + StatusCode checkToolStore( const std::string& tool_name ) { + + if ( !asg::ToolStore::contains(tool_name) ) { + m_toolAlreadyUsed[tool_name] = false; + ANA_MSG_INFO("Tool " << tool_name << " is being used for the first time!" ); + } else { + m_toolAlreadyUsed[tool_name] = true; + ANA_MSG_INFO("Tool " << tool_name << " has been already used!" ); + } + + return StatusCode::SUCCESS; + } + + inline bool isToolAlreadyUsed( const std::string& tool_name ) { + return ( m_toolAlreadyUsed.find(tool_name)->second ); + } + + + template + void setToolName(__attribute__((unused)) asg::AnaToolHandle& handle, __attribute__((unused)) const std::string& name = "") const { } + + std::string getAddress() const { + const void * address = static_cast(this); + std::stringstream ss; + ss << address; + return ss.str(); + } + + private: + bool m_registered = false; + + static std::map m_instanceRegistry; + + std::map m_toolAlreadyUsed; + }; + + } + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..d0ee9f9952 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst.txt @@ -0,0 +1,133 @@ + +.. _program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h: + +Program Listing for File BJetEfficiencyCorrector.h +================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/BJetEfficiencyCorrector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_BJetEfficiencyCorrector_H + #define xAODAnaHelpers_BJetEfficiencyCorrector_H + // EDM includes + #include "xAODEventInfo/EventInfo.h" + #include "xAODJet/JetContainer.h" + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/ISystematicsTool.h" + + // external tools include(s): + #include "FTagAnalysisInterfaces/IBTaggingSelectionTool.h" + #include "FTagAnalysisInterfaces/IBTaggingEfficiencyTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class BJetEfficiencyCorrector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + std::string m_inContainerName = ""; + std::string m_inputAlgo = ""; + + // systematics + std::string m_systName = ""; + std::string m_outputSystName = "BJetEfficiency_Algo"; + bool m_writeSystToMetadata = false; + + std::string m_corrFileName = "xAODBTaggingEfficiency/13p6TeV/2023-22-13p6TeV-MC21-CDI_Test_2023-08-1_v1.root"; + + std::string m_jetAuthor = "AntiKt4EMPFlowJets"; + float m_minPt = 20e3; + std::string m_taggerName = "DL1r"; + bool m_useDevelopmentFile = true; + bool m_coneFlavourLabel = true; + std::string m_systematicsStrategy = "SFEigen"; + bool m_errorOnTagWeightFailure = true; + bool m_alwaysGetTagWeight = false; + + bool m_isRun3 = false; + + // allowed operating points: + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTaggingCalibrationDataInterface#xAOD_interface + //For the fixed cut, valid options are: [ "FixedCutBEff_60", "FixedCutBEff_70", "FixedCutBEff_77", "FixedCutBEff_85" ] + + std::string m_operatingPt = "FixedCutBEff_70"; + std::string m_operatingPtCDI = ""; + bool m_getScaleFactors = false; + bool m_useContinuous = false; + std::string m_decor = "BTag"; + bool m_tagDecisionOnly = false; + + bool m_setMapIndex = false; + std::string m_DSIDtoGenerator_filename = "xAODAnaHelpers/DSIDtoGenerator.txt"; + + float m_orBJetPtUpperThres=-1; + + std::string m_EfficiencyCalibration = ""; + bool m_allowCalibrationFallback = false; + + std::string m_EigenvectorReductionB = "Loose"; + std::string m_EigenvectorReductionC = "Loose"; + std::string m_EigenvectorReductionLight = "Loose"; + + private: + + std::string m_decorSF = ""; + std::string m_decorWeight = ""; // only for continuous b-tagging + std::string m_decorQuantile = ""; // only for continuous b-tagging + + std::map m_DSIDtoGenerator; + std::map m_MCIndexes; + + std::vector m_inputAlgoList; + + bool m_runAllSyst = false; + + // tools + asg::AnaToolHandle m_BJetSelectTool_handle{"BTaggingSelectionTool" , this}; + asg::AnaToolHandle m_BJetEffSFTool_handle{"BTaggingEfficiencyTool", this}; + + std::vector m_systList; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + + // this is a standard constructor + BJetEfficiencyCorrector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + EL::StatusCode executeEfficiencyCorrection(const xAOD::JetContainer* inJets, + const xAOD::EventInfo* eventInfo, + bool doNominal); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // Functions needed only if m_setMapIndex is true + unsigned int getMCIndex (int dsid); + void makeMCIndexMap (std::string effCalib); + std::string getFlavorLabel (const xAOD::Jet &jet) const; + + // this is needed to distribute the algorithm to the workers + ClassDef(BJetEfficiencyCorrector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.rst.txt new file mode 100644 index 0000000000..f9cef6ffd8 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.rst.txt @@ -0,0 +1,233 @@ + +.. _program_listing_file_xAODAnaHelpers_BasicEventSelection.h: + +Program Listing for File BasicEventSelection.h +============================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/BasicEventSelection.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_BasicEventSelection_H + #define xAODAnaHelpers_BasicEventSelection_H + + // ROOT include(s): + #include "TH1D.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "AsgAnalysisInterfaces/IGoodRunsListSelectionTool.h" + #include "AsgAnalysisInterfaces/IPileupReweightingTool.h" + #include "TrigConfInterfaces/ITrigConfigTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + #include "PATInterfaces/IWeightTool.h" + + class BasicEventSelection : public xAH::Algorithm + { + public: + + // Dijet+ISR TLA specific options + bool m_isTLAData = false; + + // Sample type settings + bool m_truthLevelOnly = false; + + bool m_setAFII = false; + bool m_setAF3 = false; + bool m_setFS = false; + + // GRL + bool m_applyGRLCut = false; + std::string m_GRLxml = ""; + std::string m_GRLExcludeList = ""; + + bool m_cleanPowheg = false; + + bool m_reweightSherpa22 = false; + + //PU Reweighting + bool m_doPUreweighting = false; + bool m_doPUreweightingSys = false; + + std::string m_lumiCalcFileNames = ""; + std::string m_PRWFileNames = ""; + bool m_autoconfigPRW = false; + bool m_useCommonPRWFiles = false; + std::string m_prwActualMu2016File = ""; + std::string m_prwActualMu2017File = ""; + std::string m_prwActualMu2018File = ""; + std::string m_prwActualMu2022File = ""; + std::string m_prwActualMu2023File = ""; + std::string m_commonPRWFileMC20a = "PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root"; + std::string m_commonPRWFileMC20d = "PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root"; + std::string m_commonPRWFileMC20e = "PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root"; + std::string m_commonPRWFileMC23a = "PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root"; + std::string m_commonPRWFileMC23c = "PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root"; + std::string m_commonPRWFileMC23d = "PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root"; + std::string m_mcCampaign; + std::string m_periodConfig = "auto"; + + bool m_checkStreams = false; + + int m_actualMuMin = -1; // Default to off + int m_actualMuMax = -1; // Default to off + + bool m_calcBCIDInfo = false; + + // Primary Vertex + bool m_applyPrimaryVertexCut = false; + int m_PVNTrack = 2; + + // Event Cleaning + bool m_applyEventCleaningCut = false; + bool m_applyCoreFlagsCut = false; + + // Jet Cleaning + // Jet Cleaning (see also https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017) + bool m_applyJetCleaningEventFlag = false; + bool m_applyIsBadBatmanFlag = false; + + // Print Branch List + bool m_printBranchList = false; + + // Trigger + std::string m_triggerSelection = ""; + + std::string m_extraTriggerSelection = ""; + + bool m_applyTriggerCut = false; + + bool m_storeTrigDecisions = false; + + bool m_storePassL1 = false; + + bool m_storePassHLT = false; + + bool m_storeTrigKeys = false; + + bool m_storePrescaleWeight = true; + + // Metadata + std::string m_derivationName = ""; + bool m_useMetaData = true; + + /* Output Stream Names */ + + /* + The following public variables allow for rerouting of the + metadata and cutflow histograms to non-default output + streams. E.g. can combine all outputs into a single stream + */ + + // output stream names + std::string m_metaDataStreamName = "metadata"; + std::string m_duplicatesStreamName = "duplicates_tree"; + + bool m_checkDuplicatesData = false; + bool m_checkDuplicatesMC = false; + + // determines whether to add additional debugging histograms on data + bool m_doRunByRunCutflows = false; + + private: + + std::set > m_RunNr_VS_EvtNr; + // trigger unprescale chains + std::vector m_triggerUnprescaleList; + // decisions of triggers which are saved but not cut on, converted into a list + std::vector m_extraTriggerSelectionList; + + // tools + asg::AnaToolHandle m_grl_handle {"GoodRunsListSelectionTool" , this}; + asg::AnaToolHandle m_pileup_tool_handle {"CP::PileupReweightingTool/Pileup" }; + asg::AnaToolHandle m_trigConfTool_handle {"TrigConf::xAODConfigTool/xAODConfigTool" , this}; + asg::AnaToolHandle m_trigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool" }; + //asg::AnaToolHandle m_reweightSherpa22_tool_handle{"PMGTools::PMGSherpa22VJetsWeightTool/PMGSherpa22VJetsWeightTool", this}; //! + + int m_eventCounter; + + // sumW + TH1D* m_histSumW = nullptr; + + // read from MetaData + TH1D* m_histEventCount = nullptr; + uint64_t m_MD_initialNevents; + uint64_t m_MD_finalNevents; + double m_MD_initialSumW; + double m_MD_finalSumW; + double m_MD_initialSumWSquared; + double m_MD_finalSumWSquared; + std::string m_mcCampaignMD; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_all; + int m_cutflow_init; + int m_cutflow_duplicates; + int m_cutflow_grl; + int m_cutflow_lar; + int m_cutflow_tile; + int m_cutflow_SCT; + int m_cutflow_core; + int m_cutflow_jetcleaning; + int m_cutflow_isbadbatman; + int m_cutflow_npv; + int m_cutflow_trigger; + + // extra run-by-run event count cutflow + TH1D* m_runByrun_beforeCuts = nullptr; + TH1D* m_runByrun_afterCuts = nullptr; + + // object cutflow + TH1D* m_el_cutflowHist_1 = nullptr; + TH1D* m_el_cutflowHist_2 = nullptr; + TH1D* m_mu_cutflowHist_1 = nullptr; + TH1D* m_mu_cutflowHist_2 = nullptr; + TH1D* m_ph_cutflowHist_1 = nullptr; + TH1D* m_tau_cutflowHist_1 = nullptr; + TH1D* m_tau_cutflowHist_2 = nullptr; + TH1D* m_jet_cutflowHist_1 = nullptr; + TH1D* m_trk_cutflowHist_1 = nullptr; + TH1D* m_truth_cutflowHist_1= nullptr; + + TTree* m_duplicatesTree = nullptr; + int m_duplRunNumber; + long int m_duplEventNumber; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + StatusCode autoconfigurePileupRWTool(); + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + // + + // this is a standard constructor + BasicEventSelection (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(BasicEventSelection, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Cluster.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Cluster.h.rst.txt new file mode 100644 index 0000000000..7725800b09 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Cluster.h.rst.txt @@ -0,0 +1,24 @@ + +.. _program_listing_file_xAODAnaHelpers_Cluster.h: + +Program Listing for File Cluster.h +================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Cluster.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Cluster_H + #define xAODAnaHelpers_Cluster_H + + #include "xAODAnaHelpers/Particle.h" + + + namespace xAH { + + class Cluster : public Particle { }; + + }//xAH + #endif // xAODAnaHelpers_Cluster_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.rst.txt new file mode 100644 index 0000000000..dd0809f05c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.rst.txt @@ -0,0 +1,51 @@ + +.. _program_listing_file_xAODAnaHelpers_ClusterContainer.h: + +Program Listing for File ClusterContainer.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ClusterContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ClusterContainer_H + #define xAODAnaHelpers_ClusterContainer_H + + #include + #include + + #include + #include + + #include "xAODCaloEvent/CaloClusterContainer.h" + + #include + + #include + #include + + typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ; + + namespace xAH { + + class ClusterContainer : public ParticleContainer + { + public: + ClusterContainer(const std::string& name = "clus", const std::string& detailStr="", float units = 1e3, bool mc = false); + virtual ~ClusterContainer(); + + virtual void setTree(TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillCluster( const xAOD::CaloCluster* cluster ); + virtual void FillCluster( const xAOD::IParticle* particle ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + virtual void updateParticle(uint idx, Cluster& cluster); + + }; + } + #endif // xAODAnaHelpers_ClusterContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.rst.txt new file mode 100644 index 0000000000..8d17d60cb4 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.rst.txt @@ -0,0 +1,49 @@ + +.. _program_listing_file_xAODAnaHelpers_ClusterHists.h: + +Program Listing for File ClusterHists.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ClusterHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ClusterHists_H + #define xAODAnaHelpers_ClusterHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include "xAODCaloEvent/CaloClusterContainer.h" + + ANA_MSG_HEADER(msgClusterHists) + + class ClusterHists : public HistogramManager + { + public: + ClusterHists(std::string name, std::string detailStr ); + ~ClusterHists(); + + StatusCode initialize(); + StatusCode execute( const xAOD::CaloClusterContainer* ccls, float eventWeight ); + StatusCode execute( const xAOD::CaloCluster* ccl, float eventWeight ); + using HistogramManager::book; // make other overloaded versions of book() to show up in subclass + using HistogramManager::execute; // overload + + protected: + // bools to control which histograms are filled + bool m_fillDebugging; + + private: + // Histograms + TH1F* m_ccl_n; + TH1F* m_ccl_e; + TH1F* m_ccl_eta; + TH1F* m_ccl_phi; + TH2F* m_ccl_eta_vs_phi; + TH2F* m_ccl_e_vs_eta; + TH2F* m_ccl_e_vs_phi; + }; + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..cb68a7ded4 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.rst.txt @@ -0,0 +1,60 @@ + +.. _program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h: + +Program Listing for File ClusterHistsAlgo.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ClusterHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ClusterHistsAlgo_H + #define xAODAnaHelpers_ClusterHistsAlgo_H + + #include + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class ClusterHistsAlgo : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + std::string m_inContainerName = ""; + + // configuration variables + std::string m_detailStr = ""; + + private: + ClusterHists* m_plots = nullptr; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + ClusterHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(ClusterHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_DebugTool.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_DebugTool.h.rst.txt new file mode 100644 index 0000000000..a16f131ade --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_DebugTool.h.rst.txt @@ -0,0 +1,50 @@ + +.. _program_listing_file_xAODAnaHelpers_DebugTool.h: + +Program Listing for File DebugTool.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/DebugTool.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_DebugTool_H + #define xAODAnaHelpers_DebugTool_H + + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class DebugTool : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // configuration variables + + bool m_printStore = false; + + public: + + // this is a standard constructor + DebugTool (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(DebugTool, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Electron.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Electron.h.rst.txt new file mode 100644 index 0000000000..edd43c2566 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Electron.h.rst.txt @@ -0,0 +1,118 @@ + +.. _program_listing_file_xAODAnaHelpers_Electron.h: + +Program Listing for File Electron.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Electron.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Electron_H + #define xAODAnaHelpers_Electron_H + + #include "xAODAnaHelpers/Particle.h" + + + namespace xAH { + + class Electron : public Particle + { + public: + + // kinematics + float caloCluster_eta; + float charge; + + // trigger + int isTrigMatched; + std::vector isTrigMatchedToChain; + std::vector listTrigChains; + + // isolation + std::map< std::string, int > isIsolated; + float etcone20; + float ptcone20; + float ptcone30; + float ptcone40; + float ptvarcone20; + float ptvarcone30; + float ptvarcone40; + float topoetcone20; + float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500; + float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000; + float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500; + float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000; + float topoetcone30; + float topoetcone40; + float neflowisol20; + float topoetcone20_CloseByCorr; + float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr; + float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr; + + // PID + std::map< std::string, int > PID; + + // scale factors w/ sys + // per object + std::vector< float > RecoEff_SF; + + std::map< std::string, std::vector< float > > PIDEff_SF; + std::map< std::string, std::vector< float > > IsoEff_SF; + std::map< std::string, std::vector< float > > TrigEff_SF; + std::map< std::string, std::vector< float > > TrigMCEff; + //const std::vector< std::string > m_PIDWPs = {"LooseAndBLayerLLH","MediumLLH","TightLLH"}; + //const std::vector< std::string > m_isolWPs = {"","_isolFixedCutLoose","_isolFixedCutTight","_isolFixedCutTightTrackOnly","_isolGradient","_isolGradientLoose","_isolLoose","_isolLooseTrackOnly","_isolTight"}; + + // reco parameters + int author; + int OQ; + + // track parameters + float trkd0; + float trkd0sig; + float trkz0; + float trkz0sintheta; + float trkphi0; + float trktheta; + float trkcharge; + float trkqOverP; + + // track hit content + int trknSiHits; + int trknPixHits; + int trknPixHoles; + int trknSCTHits; + int trknSCTHoles; + int trknTRTHits; + int trknTRTHoles; + int trknBLayerHits; + int trknInnermostPixLayHits; // not available in DC14 + float trkPixdEdX; // not available in DC14 + + // prompt lepton + float PromptLeptonInput_DL1mu; + float PromptLeptonInput_DRlj; + float PromptLeptonInput_LepJetPtFrac; + float PromptLeptonInput_PtFrac; + float PromptLeptonInput_PtRel; + int PromptLeptonInput_TrackJetNTrack; + float PromptLeptonInput_ip2; + float PromptLeptonInput_ip3; + float PromptLeptonInput_rnnip; + int PromptLeptonInput_sv1_jf_ntrkv; + float PromptLeptonIso; + float PromptLeptonVeto; + + // passSel + char passSel; + // passOR + char passOR; + // isLRT + char isLRT; + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt new file mode 100644 index 0000000000..38510bfec3 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.rst.txt @@ -0,0 +1,93 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronCalibrator.h: + +Program Listing for File ElectronCalibrator.h +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronCalibrator.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ElectronCalibrator_H + #define xAODAnaHelpers_ElectronCalibrator_H + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + + // external tools include(s): + #include "ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h" + #include "IsolationCorrections/IsolationCorrectionTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class ElectronCalibrator : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + bool m_sort = true; + + // systematics + std::string m_inputAlgoSystNames = ""; + + std::string m_outputAlgoSystNames = "ElectronCalibrator_Syst"; + + bool m_writeSystToMetadata = false; + + std::string m_esModel = ""; + std::string m_decorrelationModel = ""; + + bool m_applyIsolationCorrection = false; + + private: + int m_numEvent; + int m_numObject; + + std::string m_outAuxContainerName; + std::string m_outSCContainerName; + std::string m_outSCAuxContainerName; + + std::vector m_systList; + + // tools + CP::EgammaCalibrationAndSmearingTool *m_EgammaCalibrationAndSmearingTool = nullptr; + CP::IsolationCorrectionTool *m_IsolationCorrectionTool = nullptr; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + + // this is a standard constructor + ElectronCalibrator (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(ElectronCalibrator, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.rst.txt new file mode 100644 index 0000000000..4fefe69b3b --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.rst.txt @@ -0,0 +1,130 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronContainer.h: + +Program Listing for File ElectronContainer.h +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ElectronContainer_H + #define xAODAnaHelpers_ElectronContainer_H + + #include + #include + + #include + #include + + #include "xAODEgamma/ElectronContainer.h" + + #include + + #include + #include + + namespace xAH { + + class ElectronContainer : public ParticleContainer + { + public: + ElectronContainer(const std::string& name = "el", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true); + virtual ~ElectronContainer(); + + virtual void setTree(TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillElectron( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex ); + virtual void FillElectron( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + virtual void updateParticle(uint idx, Electron& elec); + + private: + + // kinematics + std::vector* m_caloCluster_eta; + std::vector* m_charge; + + // trigger + std::vector* m_isTrigMatched; + std::vector >* m_isTrigMatchedToChain; + std::vector >* m_listTrigChains; + + // isolation + std::map< std::string, std::vector< int >* >* m_isIsolated; + std::vector* m_topoetcone20; + std::vector* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500; + std::vector* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000; + std::vector* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500; + std::vector* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000; + std::vector* m_neflowisol20; + std::vector* m_topoetcone20_CloseByCorr; + std::vector* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr; + std::vector* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr; + + // PID + std::map< std::string, std::vector< int >* >* m_PID; + + // scale factors w/ sys + // per object + std::vector< std::vector< float > >* m_RecoEff_SF; + + std::map< std::string, std::vector< std::vector< float > >* >* m_PIDEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_IsoEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_TrigEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_TrigMCEff; + + // reco parameters + std::vector* m_author; + std::vector* m_OQ; + + // track parameters + std::vector* m_trkd0; + std::vector* m_trkd0sig; + std::vector* m_trkz0; + std::vector* m_trkz0sintheta; + std::vector* m_trkphi0; + std::vector* m_trktheta; + std::vector* m_trkcharge; + std::vector* m_trkqOverP; + + // track hit content + std::vector* m_trknSiHits; + std::vector* m_trknPixHits; + std::vector* m_trknPixHoles; + std::vector* m_trknSCTHits; + std::vector* m_trknSCTHoles; + std::vector* m_trknTRTHits; + std::vector* m_trknTRTHoles; + std::vector* m_trknBLayerHits; + std::vector* m_trknInnermostPixLayHits; // not available in DC14 + std::vector* m_trkPixdEdX; // not available in DC14 + + // prompt lepton + std::vector* m_PromptLeptonInput_DL1mu; + std::vector* m_PromptLeptonInput_DRlj; + std::vector* m_PromptLeptonInput_LepJetPtFrac; + std::vector* m_PromptLeptonInput_PtFrac; + std::vector* m_PromptLeptonInput_PtRel; + std::vector* m_PromptLeptonInput_TrackJetNTrack; + std::vector* m_PromptLeptonInput_ip2; + std::vector* m_PromptLeptonInput_ip3; + std::vector* m_PromptLeptonInput_rnnip; + std::vector* m_PromptLeptonInput_sv1_jf_ntrkv; + std::vector* m_PromptLeptonIso; + std::vector* m_PromptLeptonVeto; + + // passSel + std::vector* m_passSel; + // passOR + std::vector* m_passOR; + // isLRT + std::vector* m_isLRT; + }; + } + #endif // xAODAnaHelpers_ElectronContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..291b37894c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst.txt @@ -0,0 +1,125 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h: + +Program Listing for File ElectronEfficiencyCorrector.h +====================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronEfficiencyCorrector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_ElectronEfficiencyCorrector_H + #define xAODAnaHelpers_ElectronEfficiencyCorrector_H + + // EDM include(s): + #include "xAODEgamma/ElectronContainer.h" + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + + // external tools include(s): + #include "ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class ElectronEfficiencyCorrector : public xAH::Algorithm + { + public: + std::string m_inContainerName = ""; + + // systematics + std::string m_inputSystNamesElectrons; + + bool m_writeSystToMetadata = false; + + float m_systValPID = 0.0; + float m_systValIso = 0.0; + float m_systValReco = 0.0; + float m_systValTrig = 0.0; + std::string m_systNamePID = ""; + std::string m_systNameIso = ""; + std::string m_systNameReco = ""; + std::string m_systNameTrig = ""; + std::string m_outputSystNamesPID = "EleEffCorr_PIDSyst"; + std::string m_outputSystNamesIso = "EleEffCorr_IsoSyst"; + std::string m_outputSystNamesReco = "EleEffCorr_RecoSyst"; + std::string m_outputSystNamesTrig = "EleEffCorr_TrigSyst"; + + std::string m_correlationModel = "FULL"; + + std::string m_WorkingPointPID = ""; + + std::string m_WorkingPointIso = ""; + + std::string m_WorkingPointReco = ""; + + std::string m_WorkingPointTrig = ""; + // @brief Get per-electron trigger SF (default: true) [if false it will take into account combinatorics using all electrons from the input electron container] + bool m_usePerElectronTriggerSFs = true; + + std::string m_overrideMapFilePath = ""; + + std::string m_overrideMapFilePathTrig = ""; + + private: + int m_numEvent; + int m_numObject; + + // To include the nominal in the Recp/Iso/Trig/TTVA efficiency SFs output, use "All", or include "Nominal" in the list + std::vector m_systListPID; + std::vector m_systListIso; + std::vector m_systListReco; + std::vector m_systListTrig; + + // tools + AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_PID = nullptr; + std::string m_pidEffSF_tool_name; + AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Iso = nullptr; + std::string m_IsoEffSF_tool_name; + AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Reco = nullptr; + std::string m_RecoEffSF_tool_name; + AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_Trig = nullptr; + std::string m_TrigEffSF_tool_name; + AsgElectronEfficiencyCorrectionTool *m_asgElEffCorrTool_elSF_TrigMCEff = nullptr; + std::string m_TrigMCEff_tool_name; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + + // Tree *myTree; //! + // TH1 *myHist; //! + + + // this is a standard constructor + ElectronEfficiencyCorrector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode executeSF ( const xAOD::ElectronContainer* inputElectrons, bool nominal, bool writeSystNames ); + + // this is needed to distribute the algorithm to the workers + ClassDef(ElectronEfficiencyCorrector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.rst.txt new file mode 100644 index 0000000000..63cc210501 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.rst.txt @@ -0,0 +1,80 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronHists.h: + +Program Listing for File ElectronHists.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ElectronHists_H + #define xAODAnaHelpers_ElectronHists_H + + #include "xAODAnaHelpers/IParticleHists.h" + #include + #include "xAODAnaHelpers/Electron.h" + #include "xAODAnaHelpers/EventInfo.h" + #include + + ANA_MSG_HEADER(msgElectronHists) + + class ElectronHists : public IParticleHists + { + public: + + + ElectronHists(std::string name, std::string detailStr); + virtual ~ElectronHists() ; + + virtual StatusCode initialize(); + virtual StatusCode execute( const xAOD::Electron* electron, float eventWeight, const xAOD::EventInfo* eventInfo = 0); + virtual StatusCode execute( const xAH::Electron* electron, float eventWeight, const xAH::EventInfo* eventInfo = 0); + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using IParticleHists::execute; // overload + + protected: + + virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo = 0 ); + + // holds bools that control which histograms are filled + HelperClasses::ElectronInfoSwitch* m_infoSwitch; + + private: + + // Isolation + std::map m_isIsolated; + + // PID + std::map m_PID; + + // clean + TH1F* m_ptcone20; + TH1F* m_ptcone30; + TH1F* m_ptcone40; + TH1F* m_ptvarcone20; + TH1F* m_ptvarcone30; + TH1F* m_ptvarcone40; + TH1F* m_topoetcone20; + TH1F* m_topoetcone30; + TH1F* m_topoetcone40; + + // rel + TH1F* m_ptcone20_rel; + TH1F* m_ptcone30_rel; + TH1F* m_ptcone40_rel; + TH1F* m_ptvarcone20_rel; + TH1F* m_ptvarcone30_rel; + TH1F* m_ptvarcone40_rel; + TH1F* m_topoetcone20_rel; + TH1F* m_topoetcone30_rel; + TH1F* m_topoetcone40_rel; + + + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..e824c2eaed --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.rst.txt @@ -0,0 +1,46 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h: + +Program Listing for File ElectronHistsAlgo.h +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ElectronHistsAlgo_H + #define xAODAnaHelpers_ElectronHistsAlgo_H + + #include "xAODAnaHelpers/IParticleHistsAlgo.h" + + class ElectronHistsAlgo : public IParticleHistsAlgo + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + ElectronHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode execute (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode AddHists( std::string name ); + + // this is needed to distribute the algorithm to the workers + ClassDef(ElectronHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.rst.txt new file mode 100644 index 0000000000..2815146738 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.rst.txt @@ -0,0 +1,210 @@ + +.. _program_listing_file_xAODAnaHelpers_ElectronSelector.h: + +Program Listing for File ElectronSelector.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ElectronSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_ElectronSelector_H + #define xAODAnaHelpers_ElectronSelector_H + + // EDM include(s): + #include "xAODEgamma/ElectronContainer.h" + #include "xAODTracking/Vertex.h" + #include "EgammaAnalysisInterfaces/IAsgDeadHVCellRemovalTool.h" + + // package include(s): + #include "xAODAnaHelpers/ParticlePIDManager.h" + + // ROOT include(s): + #include "TH1D.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "IsolationSelection/IIsolationSelectionTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + #include "TriggerMatchingTool/IMatchingTool.h" + #include "TriggerMatchingTool/IMatchScoringTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // forward-declare for now until IsolationSelectionTool interface is updated + namespace CP { + class IsolationSelectionTool; + } + + class ElectronSelector : public xAH::Algorithm + { + public: + + bool m_useCutFlow = true; + + /* configuration variables */ + + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + // systematics + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "ElectronSelector_Syst"; + + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = false; + int m_nToProcess = -1; + int m_pass_min = -1; + int m_pass_max = -1; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + + float m_eta_max = 1e8; + + bool m_vetoCrack = true; + + float m_d0_max = 1e8; + + float m_d0sig_max = 1e8; + + float m_z0sintheta_max = 1e8; + + bool m_doAuthorCut = true; + bool m_doOQCut = true; + bool m_applyDeadHVCellVeto = false; + + + bool m_readIDFlagsFromDerivation = false; + + bool m_doModifiedEleId = false; + + + bool m_doLHPID = true; + bool m_doLHPIDcut = false; + std::string m_LHOperatingPoint = "Loose"; + + + bool m_doCutBasedPID = false; + bool m_doCutBasedPIDcut = false; + std::string m_CutBasedOperatingPoint = "Loose"; + + /* isolation */ + std::string m_MinIsoWPCut = ""; + std::string m_IsoWPList = "FCLoose,FCTight,Gradient,FCHighPtCaloOnly"; + std::string m_CaloIsoEff = "0.1*x+90"; + std::string m_TrackIsoEff = "98"; + std::string m_CaloBasedIsoType = "topoetcone20"; + std::string m_TrackBasedIsoType = "ptvarcone20"; + + /* trigger matching */ + std::string m_singleElTrigChains = ""; + std::string m_diElTrigChains = ""; + double m_minDeltaR = 0.07; + + bool m_applyCrackVetoCleaning = false; + + bool m_merged_electrons = false; + std::string m_trigInputPrefix = ""; + + std::string m_isoDecSuffix = ""; + + + private: + + bool m_doBLTrackQualityCut; + + std::string m_outAuxContainerName; + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + /* event-level cutflow */ + + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + bool m_isUsedBefore = false; + + /* object-level cutflow */ + + TH1D* m_el_cutflowHist_1 = nullptr; + TH1D* m_el_cutflowHist_2 = nullptr; + + int m_el_cutflow_all; + int m_el_cutflow_author_cut; + int m_el_cutflow_OQ_cut; + int m_el_cutflow_deadHVCell_cut; + int m_el_cutflow_ptmax_cut; + int m_el_cutflow_ptmin_cut; + int m_el_cutflow_eta_cut; + int m_el_cutflow_z0sintheta_cut; + int m_el_cutflow_d0_cut; + int m_el_cutflow_d0sig_cut; + int m_el_cutflow_BL_cut; + int m_el_cutflow_PID_cut; + int m_el_cutflow_iso_cut; + + std::vector m_IsoKeys; + + + + /* tools */ + + asg::AnaToolHandle m_isolationSelectionTool_handle{"CP::IsolationSelectionTool/IsolationSelectionTool", this}; + // this only exists because the interface needs to be updated, complain on pathelp, remove forward declaration for this when fixed + CP::IsolationSelectionTool* m_isolationSelectionTool{nullptr}; + asg::AnaToolHandle m_trigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool" }; + asg::AnaToolHandle m_trigElectronMatchTool_handle; + asg::AnaToolHandle m_scoreTool {"Trig::DRScoringTool/DRScoringTool" }; + + bool m_doTrigMatch = true; + + /* PID manager(s) */ + ElectronLHPIDManager* m_el_LH_PIDManager = nullptr; + ElectronCutBasedPIDManager* m_el_CutBased_PIDManager = nullptr; + + asg::AnaToolHandle m_deadHVTool; + + /* other private members */ + + std::vector m_singleElTrigChainsList; + std::vector m_diElTrigChainsList; + + public: + + /* this is a standard constructor */ + + ElectronSelector (); + + ~ElectronSelector(); + + /* these are the functions inherited from Algorithm */ + + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + /* added functions not from Algorithm */ + + bool executeSelection( const xAOD::ElectronContainer* inElectrons, float mcEvtWeight, bool countPass, + ConstDataVector* selectedElectrons ); + virtual int passCuts( const xAOD::Electron* electron, const xAOD::Vertex *primaryVertex ); + + /* this is needed to distribute the algorithm to the workers */ + ClassDef(ElectronSelector, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_EventInfo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_EventInfo.h.rst.txt new file mode 100644 index 0000000000..5544131eea --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_EventInfo.h.rst.txt @@ -0,0 +1,127 @@ + +.. _program_listing_file_xAODAnaHelpers_EventInfo.h: + +Program Listing for File EventInfo.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/EventInfo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_EventInfo_H + #define xAODAnaHelpers_EventInfo_H + + #include + #include + + #include "xAODEventInfo/EventInfo.h" + #include "xAODTracking/VertexContainer.h" + + #include + + namespace xAH { + + class EventInfo + { + public: + EventInfo(const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSyst = true); + ~EventInfo(); + + void setTree (TTree *tree); + void setBranches(TTree *tree); + void clear(); + void FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event = nullptr, const xAOD::VertexContainer* vertices = nullptr); + template + void connectBranch(TTree *tree, std::string name, T_BR *variable); + + public: + + HelperClasses::EventInfoSwitch m_infoSwitch; + bool m_mc; + bool m_debug; + bool m_storeSyst; + float m_units; + + public: + + int m_runNumber; + Long64_t m_eventNumber; + int m_lumiBlock; + uint32_t m_coreFlags; + uint32_t m_timeStamp; + uint32_t m_timeStampNSOffset; + bool m_TileError; + bool m_LArError; + bool m_SCTError; + uint32_t m_TileFlags; + uint32_t m_LArFlags; + uint32_t m_SCTFlags; + bool m_eventClean_LooseBad; + bool m_eventClean_TightBad; + int m_mcEventNumber; + int m_mcChannelNumber; + float m_mcEventWeight; + std::vector m_mcEventWeights; + float m_weight_pileup; + float m_weight_pileup_up; + float m_weight_pileup_down; + float m_correctedAvgMu; + float m_correctedAndScaledAvgMu; + float m_correctedMu; + float m_correctedAndScaledMu; + int m_rand_run_nr; + int m_rand_lumiblock_nr; + int m_bcid; + int m_DistEmptyBCID; + int m_DistLastUnpairedBCID; + int m_DistNextUnpairedBCID; + + // event pileup + int m_npv; + float m_actualMu; + float m_averageMu; + + // event shapeEM + double m_rhoEM; + double m_rhoEMPFLOW; + double m_rhoLC; + + // beam spot weight + float m_beamspotweight; + + // truth + int m_pdgId1; + int m_pdgId2; + int m_pdfId1; + int m_pdfId2; + float m_x1; + float m_x2; + //float m_scale; + float m_q; + //float m_pdf1; + //float m_pdf2; + float m_xf1; + float m_xf2; + + // CaloCluster + std::vector m_caloCluster_pt; + std::vector m_caloCluster_eta; + std::vector m_caloCluster_phi; + std::vector m_caloCluster_e; + + }; + + template void EventInfo::connectBranch(TTree *tree, std::string name, T_BR *variable) + { + tree->SetBranchStatus (name.c_str() , 1); + tree->SetBranchAddress (name.c_str() , variable); + } + + + } + + + + #endif // xAODAnaHelpers_EventInfo_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_FatJet.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_FatJet.h.rst.txt new file mode 100644 index 0000000000..d83366bb06 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_FatJet.h.rst.txt @@ -0,0 +1,102 @@ + +.. _program_listing_file_xAODAnaHelpers_FatJet.h: + +Program Listing for File FatJet.h +================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/FatJet.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_FatJet_H + #define xAODAnaHelpers_FatJet_H + + #include "xAODAnaHelpers/Particle.h" + #include "xAODAnaHelpers/Jet.h" + + namespace xAH { + + class FatJet : public Particle + { + public: + + // scale + float JetConstitScaleMomentum_eta; + float JetConstitScaleMomentum_phi; + float JetConstitScaleMomentum_m; + float JetConstitScaleMomentum_pt; + + float JetEMScaleMomentum_eta; + float JetEMScaleMomentum_phi; + float JetEMScaleMomentum_m; + float JetEMScaleMomentum_pt; + + // area + float GhostArea; + float ActiveArea; + float VoronoiArea; + float ActiveArea4vec_pt; + float ActiveArea4vec_eta; + float ActiveArea4vec_phi; + float ActiveArea4vec_m; + + // substructure + float Split12; + float Split23; + float Split34; + float tau1_wta; + float tau2_wta; + float tau3_wta; + float tau21_wta; + float tau32_wta; + float ECF1; + float ECF2; + float ECF3; + float C2; + float D2; + float NTrimSubjets; + int NClusters; + int nTracks; + int ungrtrk500; + float EMFrac; + int nChargedParticles; + + // constituent + int numConstituents; + + // constituentAll + std::vector constituentWeights; + std::vector constituent_pt; + std::vector constituent_eta; + std::vector constituent_phi; + std::vector constituent_e; + + // truth + TLorentzVector truth_p4; + + // bosons + int nTQuarks; + int nHBosons; + int nWBosons; + int nZBosons; + + // VTag + int Wtag_medium; + int Ztag_medium; + + int Wtag_tight; + int Ztag_tight; + + std::unordered_map> trkJets; + + // muonCorrection + float muonCorrected_pt; + float muonCorrected_eta; + float muonCorrected_phi; + float muonCorrected_m; + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.rst.txt new file mode 100644 index 0000000000..a80ace0ed6 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.rst.txt @@ -0,0 +1,145 @@ + +.. _program_listing_file_xAODAnaHelpers_FatJetContainer.h: + +Program Listing for File FatJetContainer.h +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/FatJetContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_FatJetContainer_H + #define xAODAnaHelpers_FatJetContainer_H + + #include + #include + + #include + #include + + #include + + #include + #include + + #include + #include + #include + + + namespace xAH { + + class FatJetContainer : public ParticleContainer + { + public: + FatJetContainer(const std::string& name = "fatjet", const std::string& detailStr="", const std::string& subjetDetailStr="kinematic", const std::string& suffix="", + float units = 1e3, bool mc = false); + virtual ~FatJetContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillFatJet( const xAOD::Jet* jet , int pvLocation=0 ); + virtual void FillFatJet( const xAOD::IParticle* particle, int pvLocation=0 ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + float m_trackJetPtCut =10e3; // slimming pT cut on associated track jets + float m_trackJetEtaCut =2.5; // slimmint eta cut on associated track jets + + protected: + + virtual void updateParticle(uint idx, FatJet& jet); + + private: + + bool SelectTrackJet(const xAOD::Jet* TrackJet); + float GetEMFrac(const xAOD::Jet& jet); + + private: + + // + // Vector branches + // + + // scales + std::vector *m_JetConstitScaleMomentum_eta; + std::vector *m_JetConstitScaleMomentum_phi; + std::vector *m_JetConstitScaleMomentum_m; + std::vector *m_JetConstitScaleMomentum_pt; + + std::vector *m_JetEMScaleMomentum_eta; + std::vector *m_JetEMScaleMomentum_phi; + std::vector *m_JetEMScaleMomentum_m; + std::vector *m_JetEMScaleMomentum_pt; + + // area + std::vector *m_GhostArea; + std::vector *m_ActiveArea; + std::vector *m_VoronoiArea; + + std::vector *m_ActiveArea4vec_pt; + std::vector *m_ActiveArea4vec_eta; + std::vector *m_ActiveArea4vec_phi; + std::vector *m_ActiveArea4vec_m; + + // substructure + std::vector *m_Split12; + std::vector *m_Split23; + std::vector *m_Split34; + std::vector *m_tau1_wta; + std::vector *m_tau2_wta; + std::vector *m_tau3_wta; + std::vector *m_tau21_wta; + std::vector *m_tau32_wta; + std::vector *m_ECF1; + std::vector *m_ECF2; + std::vector *m_ECF3; + std::vector *m_C2; + std::vector *m_D2; + std::vector *m_NTrimSubjets; + std::vector *m_NClusters; + std::vector *m_nTracks; + std::vector *m_ungrtrk500; + std::vector *m_EMFrac; + std::vector *m_nChargedParticles; + + // constituent + std::vector< int > *m_numConstituents; + + // constituentAll + std::vector< std::vector > *m_constituentWeights; + std::vector< std::vector > *m_constituent_pt; + std::vector< std::vector > *m_constituent_eta; + std::vector< std::vector > *m_constituent_phi; + std::vector< std::vector > *m_constituent_e; + + // truth + std::vector *m_truth_m; + std::vector *m_truth_pt; + std::vector *m_truth_phi; + std::vector *m_truth_eta; + + // bosonCount + std::vector< int > *m_nTQuarks; + std::vector< int > *m_nHBosons; + std::vector< int > *m_nWBosons; + std::vector< int > *m_nZBosons; + + // Assocated Track Jets + std::unordered_map m_trkJets; + std::unordered_map>* > m_trkJetsIdx; + + // muonCorrection + std::vector *m_muonCorrected_pt; + std::vector *m_muonCorrected_eta; + std::vector *m_muonCorrected_phi; + std::vector *m_muonCorrected_m; + + }; + } + + + + #endif // xAODAnaHelpers_FatJetContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.rst.txt new file mode 100644 index 0000000000..77baefd0d6 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.rst.txt @@ -0,0 +1,79 @@ + +.. _program_listing_file_xAODAnaHelpers_HLTJetGetter.h: + +Program Listing for File HLTJetGetter.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HLTJetGetter.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /****************************************** + * + * This class gets HLT jets from the TDT and can be expanded to get other features + * + * Merlin Davies (merlin.davies@cern.ch) + * Caterina Doglioni (caterina.doglioni@cern.ch) + * John Alison (john.alison@cern.ch) + * + * + ******************************************/ + + #ifndef xAODAnaHelpers_HLTJetGetter_H + #define xAODAnaHelpers_HLTJetGetter_H + + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + + namespace TrigConf { + class xAODConfigTool; + } + + namespace Trig { + class TrigDecisionTool; + } + + + class HLTJetGetter : public xAH::Algorithm + { + + public: + + /* configuration variables */ + std::string m_triggerList = ".*"; + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + private: + + //Trig::TrigDecisionTool* m_trigDecTool = nullptr; //! + asg::AnaToolHandle m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool" }; + TrigConf::xAODConfigTool* m_trigConfTool = nullptr; + bool m_ownTDTAndTCT = false; + + public: + + // this is a standard constructor + HLTJetGetter (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(HLTJetGetter, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt new file mode 100644 index 0000000000..052ec7c2da --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst.txt @@ -0,0 +1,118 @@ + +.. _program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h: + +Program Listing for File HLTJetRoIBuilder.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HLTJetRoIBuilder.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + //#ifndef xAODAnaHelpers_HLTJetRoIBuilder_H + //#define xAODAnaHelpers_HLTJetRoIBuilder_H + // + // + //#include "xAODAnaHelpers/Algorithm.h" + // + //#include "AsgTools/AnaToolHandle.h" + //#include "xAODAnaHelpers/OnlineBeamSpotTool.h" + //#include "TrigDecisionTool/TrigDecisionTool.h" + // + //class HLTJetRoIBuilder : public xAH::Algorithm + //{ + // + // public: + // + // // configuration variables + // + // /** + // @brief name of trigger chain to load + // */ + // std::string m_trigItem = ""; + // std::string m_trigItemVeto = ""; + // + // /** + // @brief Do we load a full BJet trigger chain? + // */ + // bool m_doHLTBJet = true; + // + // /** + // @brief Do we load a jet trigger chain? + // */ + // bool m_doHLTJet = false; + // + // /** + // @brief Do we read in the HLT tracks? + // */ + // bool m_readHLTTracks = true; + // + // + // /** + // @brief Do we read in the HLT vertices? + // */ + // bool m_readHLTVtx = true; + // + // + // /** + // @brief Name of the output container + // */ + // std::string m_outContainerName = ""; + // + // private: + // + // asg::AnaToolHandle m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"}; //! + // + // std::string m_jetName = "EFJet"; //! + // std::string m_trkName = "InDetTrigTrackingxAODCnv_Bjet_IDTrig"; //! + // std::string m_vtxName = "EFHistoPrmVtx"; //! + // xAH::OnlineBeamSpotTool m_onlineBSTool; //! + // + // EL::StatusCode buildHLTBJets (); + // EL::StatusCode buildHLTJets (); + // + // public: + // + // // this is a standard constructor + // HLTJetRoIBuilder (); + // + // // these are the functions inherited from Algorithm + // virtual EL::StatusCode setupJob (EL::Job& job); + // virtual EL::StatusCode fileExecute (); + // virtual EL::StatusCode histInitialize (); + // virtual EL::StatusCode changeInput (bool firstFile); + // virtual EL::StatusCode initialize (); + // virtual EL::StatusCode execute (); + // virtual EL::StatusCode postExecute (); + // virtual EL::StatusCode finalize (); + // virtual EL::StatusCode histFinalize (); + // + // + // /// @cond + // // this is needed to distribute the algorithm to the workers + // ClassDef(HLTJetRoIBuilder, 1); + // /// @endcond + // + // template + // const Object* getTrigObject(Trig::Feature& feature){ + // + // const Collection* trigCol = feature.cptr(); + // if ( !trigCol ) { + // ANA_MSG_ERROR("ERROR: No Trig Collection pointer"); + // return 0; + // } + // + // if(trigCol->size() != 1){ + // ANA_MSG_ERROR("ERROR Trig Collection size " << trigCol->size()); + // return 0;; + // } + // + // return trigCol->at(0); + // } + // + //}; + // + // + //#endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.rst.txt new file mode 100644 index 0000000000..93fc5b7591 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.rst.txt @@ -0,0 +1,435 @@ + +.. _program_listing_file_xAODAnaHelpers_HelpTreeBase.h: + +Program Listing for File HelpTreeBase.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HelpTreeBase.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************** + * HelpTreeBase: + * + * This class is meant to help the user write out a tree. + * Some branches are included by default while others + * need to be added by the user + * + * John Alison (john.alison@cern.ch) + * Gabriel Facini (gabriel.facini@cern.ch) + * Marco Milesi (marco.milesi@cern.ch) + * Jeff Dandoy (jeff.dandoy@cern.ch) + * + ********************************************************/ + + // Dear emacs, this is -*-c++-*- + #ifndef xAODAnaHelpers_HelpTreeBase_H + #define xAODAnaHelpers_HelpTreeBase_H + + + #include "xAODEventInfo/EventInfo.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODCaloEvent/CaloClusterContainer.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODTrigger/JetRoIContainer.h" + #include "xAODTruth/TruthParticleContainer.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODMissingET/MissingETContainer.h" + #include "xAODTracking/TrackParticleContainer.h" + + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/EventInfo.h" + #include "xAODAnaHelpers/MetContainer.h" + #include "xAODAnaHelpers/JetContainer.h" + #include "xAODAnaHelpers/L1JetContainer.h" + #include "xAODAnaHelpers/VertexContainer.h" + #include "xAODAnaHelpers/ElectronContainer.h" + #include "xAODAnaHelpers/PhotonContainer.h" + #include "xAODAnaHelpers/ClusterContainer.h" + #include "xAODAnaHelpers/FatJetContainer.h" + #include "xAODAnaHelpers/TruthContainer.h" + #include "xAODAnaHelpers/TrackContainer.h" + #include "xAODAnaHelpers/MuonContainer.h" + #include "xAODAnaHelpers/TauContainer.h" + #include "xAODRootAccess/TEvent.h" + #include "xAODRootAccess/TStore.h" + + + #include + + // root includes + #include "TTree.h" + #include "TFile.h" + + namespace TrigConf { + class xAODConfigTool; + } + + namespace Trig { + class TrigDecisionTool; + } + + typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ; + + class HelpTreeBase { + + public: + + HelpTreeBase(xAOD::TEvent *event, TTree* tree, TFile* file, const float units = 1e3, bool debug = false, xAOD::TStore* store = nullptr, std::string nominalTreeName = "nominal" ); + HelpTreeBase(TTree* tree, TFile* file, xAOD::TEvent *event = nullptr, xAOD::TStore* store = nullptr, const float units = 1e3, bool debug = false, std::string nominalTreeName = "nominal" ); + virtual ~HelpTreeBase(); + + void AddEvent (const std::string& detailStr = ""); + void AddTrigger (const std::string& detailStr = ""); + void AddJetTrigger (const std::string& detailStr = ""); + void AddMuons (const std::string& detailStr = "", const std::string& muonName = "muon"); + void AddElectrons (const std::string& detailStr = "", const std::string& elecName = "el"); + void AddPhotons (const std::string& detailStr = "", const std::string& photonName = "ph"); + void AddClusters (const std::string& detailStr = "", const std::string& clusterName = "cl"); + void AddJets (const std::string& detailStr = "", const std::string& jetName = "jet"); + void AddL1Jets (const std::string& jetName = ""); + void AddTruthParts (const std::string& detailStr = "", const std::string& truthName = "xAH_truth"); + void AddTrackParts (const std::string& detailStr = "", const std::string& trackName = "trk"); + void AddVertices (const std::string& detailStr = "", const std::string& vertexName = "vertex"); // options for detailStr: "all" or "primary" + void AddTruthVertices (const std::string& detailStr = "", const std::string& vertexName = "truth_vertex"); // options for detailStr: "all" or "primary" + + void AddFatJets (const std::string& detailStr = "", const std::string& fatjetName = "fatjet", const std::string& subjetDetailStr="", const std::string& suffix=""); + void AddTruthFatJets(const std::string& detailStr = "", const std::string& truthFatJetName = "truth_fatjet"); + + void AddTaus (const std::string& detailStr = "", const std::string& tauName = "tau"); + void AddMET (const std::string& detailStr = "", const std::string& metName = "met"); + + static std::string FatJetCollectionName(const std::string& fatjetName = "fatjet", const std::string& suffix = ""); + + xAOD::TEvent* m_event; + xAOD::TStore* m_store; + + std::string m_vertexContainerName = "PrimaryVertices"; + std::string m_truthVertexContainerName = "TruthVertices"; + + // control which branches are filled + HelperClasses::TriggerInfoSwitch* m_trigInfoSwitch; + + std::string m_triggerSelection; + TrigConf::xAODConfigTool* m_trigConfTool; + Trig::TrigDecisionTool* m_trigDecTool; + + void FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event = nullptr, const xAOD::VertexContainer* vertices = nullptr ); + + void FillTrigger( const xAOD::EventInfo* eventInfo ); + void FillJetTrigger(); + + void FillMuons( const xAOD::MuonContainer* muons, const xAOD::Vertex* primaryVertex, const std::string& muonName = "muon" ); + void FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex, const std::string& muonName = "muon" ); + + void FillElectrons( const xAOD::ElectronContainer* electrons, const xAOD::Vertex* primaryVertex, const std::string& elecName = "el" ); + void FillElectron ( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex, const std::string& elecName = "el" ); + + void FillPhotons( const xAOD::PhotonContainer* photons, const std::string& photonName = "ph" ); + void FillPhoton ( const xAOD::Photon* photon, const std::string& photonName = "ph" ); + + void FillClusters( const xAOD::CaloClusterContainer* clusters, const std::string& clusterName = "cl" ); + void FillCluster ( const xAOD::CaloCluster* cluster, const std::string& clusterName = "cl" ); + + void FillJets( const xAOD::JetContainer* jets, int pvLocation = -1, const std::string& jetName = "jet" ); + void FillJet( const xAOD::Jet* jet_itr, const xAOD::Vertex* pv, int pvLocation, const std::string& jetName = "jet" ); + void FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, const std::string& jetName = "L1Jet", bool sortL1Jets = false ); + + template + void FillPhase1L1Jets(T*& jets, const std::string& jetName = "L1Jet", bool sortL1Jets = false){ + + this->ClearL1Jets(jetName); + + xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName]; + + thisL1Jet->FillPhase1L1Jets(jets,sortL1Jets); + } + + void FillTruth( const xAOD::TruthParticleContainer* truth, const std::string& truthName = "xAH_truth" ); + void FillTruth( const xAOD::TruthParticle* truthPart, const std::string& truthName ); + + void FillTracks( const xAOD::TrackParticleContainer* tracks, const std::string& trackName = "trk" ); + void FillTrack( const xAOD::TrackParticle* trackPart, const std::string& trackName ); + + void FillVertices( const xAOD::VertexContainer* vertices, const std::string& vertexName = "vertex" ); + void FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices, const std::string& truthVertexName = "truth_vertex" ); + + void FillFatJets( const xAOD::JetContainer* fatJets , int pvLocation = 0, const std::string& fatjetName = "fatjet", const std::string& suffix = ""); + void FillFatJet ( const xAOD::Jet* fatjet_itr, int pvLocation = 0, const std::string& fatjetName = "fatjet", const std::string& suffix = ""); + + void FillTruthFatJets( const xAOD::JetContainer* truthFatJets, int pvLocation = 0, const std::string& truthFatJetName="truth_fatjet" ); + void FillTruthFatJet ( const xAOD::Jet* truth_fatjet_itr, int pvLocation = 0, const std::string& truthFatJetName="truth_fatjet" ); + + void FillTaus( const xAOD::TauJetContainer* taus, const std::string& tauName = "tau" ); + void FillTau ( const xAOD::TauJet* tau, const std::string& tauName = "tau" ); + void FillMET( const xAOD::MissingETContainer* met, const std::string& metName = "met" ); + + void Fill(); + void ClearEvent(); + void ClearTrigger(); + void ClearJetTrigger(); + void ClearMuons (const std::string& jetName = "muon"); + void ClearElectrons (const std::string& elecName = "el"); + void ClearPhotons (const std::string& photonName = "ph"); + void ClearClusters (const std::string& clusterName = "cl"); + void ClearJets (const std::string& jetName = "jet"); + void ClearL1Jets (const std::string& jetName = "L1Jet"); + void ClearTruth (const std::string& truthName); + void ClearTracks (const std::string& trackName); + void ClearFatJets (const std::string& fatjetName, const std::string& suffix=""); + void ClearTruthFatJets (const std::string& truthFatJetName = "truth_fatjet"); + void ClearTaus (const std::string& tauName = "tau" ); + void ClearMET (const std::string& metName = "met"); + void ClearVertices (const std::string& vertexName = "vertex"); + void ClearTruthVertices (const std::string& vertexName = "truth_vertex"); + + bool writeTo( TFile *file ); + + virtual void AddEventUser(const std::string& detailStr = "") { + if(m_debug) Info("AddEventUser","Empty function called from HelpTreeBase %s",detailStr.c_str()); + return; + }; + + virtual void AddTriggerUser(const std::string& detailStr = "") { + if(m_debug) Info("AddTriggerUser","Empty function called from HelpTreeBase %s",detailStr.c_str()); + return; + }; + + virtual void AddJetTriggerUser(const std::string& detailStr = "") { + if(m_debug) Info("AddJetTriggerUser","Empty function called from HelpTreeBase %s",detailStr.c_str()); + return; + }; + + virtual void AddMuonsUser(const std::string& detailStr = "", const std::string& muonName="muon"){ + if(m_debug) Info("AddMuonsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),muonName.c_str()); + return; + }; + + virtual void AddElectronsUser(const std::string& detailStr = "", const std::string& elecName="el"){ + if(m_debug) Info("AddElectronsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),elecName.c_str()); + return; + }; + + virtual void AddPhotonsUser(const std::string& detailStr = "", const std::string& photonName="ph"){ + if(m_debug) Info("AddPhotonsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),photonName.c_str()); + return; + }; + + virtual void AddClustersUser(const std::string& detailStr = "", const std::string& clusterName="cl"){ + if(m_debug) Info("AddClustersUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),clusterName.c_str()); + return; + }; + + virtual void AddJetsUser(const std::string& detailStr = "", const std::string& jetName = "jet") { + if(m_debug) Info("AddJetsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(), jetName.c_str()); + return; + }; + + virtual void AddTruthUser(const std::string& truthName = "", const std::string& detailStr = "xAH_truth") { + if(m_debug) Info("AddTruthUser","Empty function called from HelpTreeBase %s %s",truthName.c_str(), detailStr.c_str()); + return; + }; + + virtual void AddTracksUser(const std::string& trackName = "", const std::string& detailStr = "trk") { + if(m_debug) Info("AddTracksUser","Empty function called from HelpTreeBase %s %s",trackName.c_str(), detailStr.c_str()); + return; + }; + + virtual void AddFatJetsUser(const std::string& detailStr = "", const std::string& fatjetName = "", const std::string& suffix = "") { + if(m_debug) Info("AddFatJetsUser","Empty function called from HelpTreeBase %s for %s with suffix %s", detailStr.c_str(), fatjetName.c_str(), suffix.c_str()); + return; + }; + + virtual void AddTruthFatJetsUser(const std::string& detailStr = "", const std::string& truthFatJetName = "truth_fatjet") { + if(m_debug) Info("AddTruthFatJetsUser","Empty function called from HelpTreeBase %s for %s", detailStr.c_str(), truthFatJetName.c_str()); + return; + }; + + virtual void AddTausUser(const std::string& detailStr = "", const std::string& tauName="tau") { + if(m_debug) Info("AddTausUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),tauName.c_str()); + return; + }; + + virtual void AddMETUser(const std::string& detailStr = "", const std::string& metName = "met") { + if(m_debug) Info("AddMETUser","Empty function called from HelpTreeBase %s for %s",detailStr.c_str(), metName.c_str()); + return; + }; + + virtual void ClearEventUser () { return; }; + virtual void ClearTriggerUser () { return; }; + virtual void ClearMuonsUser (const std::string& /*muonName = muon"*/) { return; }; + virtual void ClearElectronsUser (const std::string& /*elecName = "el"*/) { return; }; + virtual void ClearPhotonsUser (const std::string& /*photonName = "ph"*/) { return; }; + virtual void ClearClustersUser (const std::string& /*clusterName = "cl"*/) { return; }; + virtual void ClearTruthUser (const std::string& /*truthName*/) { return; }; + virtual void ClearTracksUser (const std::string& /*trackName*/) { return; }; + virtual void ClearJetsUser (const std::string& /*jetName = "jet"*/ ) { return; }; + virtual void ClearFatJetsUser (const std::string& /*fatjetName = "fatjet"*/, const std::string& /*suffix = ""*/) { return; }; + virtual void ClearTruthFatJetsUser(const std::string& /*truthFatJetName = "truth_fatjet"*/) { return; }; + virtual void ClearTausUser (const std::string& /*tauName = "tau"*/) { return; }; + virtual void ClearMETUser (const std::string& /*metName = "met"*/) { return; }; + + virtual void FillEventUser ( const xAOD::EventInfo* ) { return; }; + virtual void FillMuonsUser ( const xAOD::Muon*, const std::string& /*muonName = "muon"*/, const xAOD::Vertex* ) { return; }; + virtual void FillElectronsUser( const xAOD::Electron*, const std::string& /*elecName = "el"*/, const xAOD::Vertex* ) { return; }; + virtual void FillPhotonsUser ( const xAOD::Photon*, const std::string& /*photonName = "ph"*/ ) { return; }; + virtual void FillClustersUser ( const xAOD::CaloCluster*, const std::string& /*clusterName = "cl"*/ ) { return; }; + virtual void FillJetsUser ( const xAOD::Jet*, const std::string& /*jetName = "jet"*/ ) { return; }; + virtual void FillTruthUser ( const xAOD::TruthParticle*, const std::string& /*truthName*/ ) { return; }; + virtual void FillTracksUser ( const xAOD::TrackParticle*, const std::string& /*trackName*/ ) { return; }; + virtual void FillFatJetsUser( const xAOD::Jet* /*jet*/, int /*pvLocation = 0*/, const std::string& /*fatjetName = "fatjet"*/, const std::string& /*suffix = ""*/) { return; }; + virtual void FillTruthFatJetsUser( const xAOD::Jet* /*jet*/, int /*pvLocation = 0*/, const std::string& /*fatjetName = "truth_fatjet"*/ ) { return; }; + virtual void FillTausUser( const xAOD::TauJet*, const std::string& /*tauName = "tau"*/ ) { return; }; + virtual void FillMETUser( const xAOD::MissingETContainer*, const std::string& /*metName = "met"*/ ) { return; }; + virtual void FillTriggerUser( const xAOD::EventInfo* ) { return; }; + virtual void FillJetTriggerUser() { return; }; + + protected: + + template + void safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor& accessor, std::vector& destination, U defaultValue, int m_units = 1); + + template + void safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor >& accessor, std::vector >& destination, int m_units = 1); + + template + void setBranch(std::string prefix, std::string varName, std::vector* localVectorPtr); + + protected: + + TTree* m_tree; + + int m_units; //For MeV to GeV conversion in output + + bool m_debug; + bool m_isMC; + std::string m_nominalTreeName; + bool m_nominalTree; + + // event + xAH::EventInfo* m_eventInfo; + + // trigger + int m_passL1; + int m_passHLT; + unsigned int m_masterKey; + unsigned int m_L1PSKey; + unsigned int m_HLTPSKey; + std::vector m_elTrigForMatching; /* each event can have a list of electron trigger chains to which each electron could be matched. + / This list is created when configuring ElectronSelector.cxx, where the electron trigger matching is actually performed + */ + + // jet trigger + std::vector m_passedTriggers; + std::vector m_disabledTriggers; + std::vector m_triggerPrescales; + std::vector m_triggerPrescalesLumi; + std::vector m_isPassBitsNames; + std::vector m_isPassBits; + + // + // Jets + // + std::map m_jets; + + // + // L1 Jets + // + std::map m_l1Jets; + + // + // Truth + // + std::map m_truth; + + // + // Tracks + // + std::map m_tracks; + + // + // fat jets + // + std::map m_fatjets; + + // + // truth fat jets + // + std::map m_truth_fatjets; + + // + // muons + // + std::map m_muons; + std::map > m_MuonRecoEff_SF_sysNames; + std::map > m_MuonIsoEff_SF_sysNames; + std::map > > m_MuonTrigEff_SF_sysNames; + std::vector m_MuonTTVAEff_SF_sysNames; + + // + // electrons + // + std::map m_elecs; + + // + // photons + // + std::map m_photons; + + // + // clusters + // + std::map m_clusters; + + + // + // taus + // + std::map m_taus; + + // + // met + // + std::map m_met; + + // + // vertices + // + std::map m_vertices; + std::map m_truth_vertices; + + }; + + + template + void HelpTreeBase::safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor& accessor, std::vector& destination, U defaultValue, int m_units){ + if ( accessor.isAvailable( *xAODObj ) ) { + destination.push_back( accessor( *xAODObj ) / m_units ); + } else { + destination.push_back( defaultValue ); + } + return; + } + + template + void HelpTreeBase::safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor >& accessor, std::vector >& destination, int m_units){ + destination.push_back( std::vector() ); + + if ( accessor.isAvailable( *xAODObj ) ) { + for(U itemInVec : accessor(*xAODObj)) destination.back().push_back(itemInVec / m_units); + } + return; + } + + + template + void HelpTreeBase::setBranch(std::string prefix, std::string varName, std::vector* localVectorPtr){ + m_tree->Branch((prefix+"_"+varName).c_str(), localVectorPtr); + } + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.rst.txt new file mode 100644 index 0000000000..f01cd59113 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.rst.txt @@ -0,0 +1,354 @@ + +.. _program_listing_file_xAODAnaHelpers_HelperClasses.h: + +Program Listing for File HelperClasses.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HelperClasses.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_HELPERCLASSES_H + #define xAODAnaHelpers_HELPERCLASSES_H + + #include + #include + #include + + #include "TString.h" + + /* stuff below is for templating getContainer */ + #include + #include + + #include + #include + + #include + + namespace HelperClasses { + + enum class ContainerType { + UNKNOWN = 0, + CONSTDV = 1, + CONSTCONT = 2, + }; + + enum class ToolName { + MUONSELECTOR, + ELECTRONSELECTOR, + PHOTONSELECTOR, + JETSELECTOR, + BJETSELECTOR, + CALIBRATOR, + CORRECTOR, + SELECTOR, + DEFAULT + }; + + template + class EnumParser + { + std::multimap enumMap; + public: + EnumParser(); + + T parseEnum(const std::string &value) + { + typename std::multimap ::const_iterator iValue = enumMap.find(value); + if (iValue == enumMap.end()){ + std::cerr << "Could not find input string in enum!" << std::endl; + } + return iValue->second; + } + }; + + + class InfoSwitch { + protected: + const std::string m_configStr; + std::set m_configDetails; + public: + InfoSwitch(const std::string configStr) : m_configStr(configStr) { + // parse and split by space + std::string token; + std::istringstream ss(m_configStr); + while ( std::getline(ss, token, ' ') ) + m_configDetails.insert(token); + }; + bool has_exact(const std::string flag) { return m_configDetails.find(flag) != m_configDetails.end(); }; + bool has_match(const std::string flag) { return m_configStr.find(flag) != std::string::npos; }; + std::string get_working_point(const std::string flag); + std::vector get_working_points(const std::string flag); + }; + + class EventInfoSwitch : public InfoSwitch { + public: + bool m_noDataInfo; + bool m_eventCleaning; + bool m_bcidInfo; + bool m_pileup; + bool m_pileupsys; + bool m_shapeEM; + bool m_shapeEMPFLOW; + bool m_shapeLC; + bool m_truth; + bool m_caloClus; + bool m_weightsSys; + bool m_beamspotweight; + EventInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); }; + protected: + void initialize(); + }; + + class TriggerInfoSwitch : public InfoSwitch { + public: + bool m_basic; + bool m_menuKeys; + bool m_passTriggers; + bool m_passTrigBits; + bool m_prescales; + bool m_prescalesLumi; + TriggerInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); }; + protected: + void initialize(); + }; + + class IParticleInfoSwitch : public InfoSwitch { + public: + bool m_noMultiplicity; + bool m_kinematic; + int m_numLeading; + bool m_useTheS; + IParticleInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); } + virtual ~IParticleInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class MuonInfoSwitch : public IParticleInfoSwitch { + public: + bool m_trigger; + bool m_isolation; + bool m_isolationKinematics; + bool m_quality; + bool m_trackparams; + bool m_trackhitcont; + bool m_effSF; + bool m_energyLoss; + bool m_promptlepton; + + std::vector< std::string > m_recoWPs; + std::vector< std::string > m_isolWPs; + std::vector< std::string > m_trigWPs; + + bool m_passSel; + bool m_passOR; + + bool m_doLRT; + bool m_closeByCorr; + + bool m_recoEff_sysNames; + bool m_isoEff_sysNames; + bool m_trigEff_sysNames; + bool m_ttvaEff_sysNames; + + + MuonInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }; + virtual ~MuonInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class ElectronInfoSwitch : public IParticleInfoSwitch { + public: + bool m_trigger; + bool m_isolation; + bool m_isolationKinematics; + bool m_quality; + bool m_PID; + bool m_recoparams; + bool m_trackparams; + bool m_trackhitcont; + bool m_effSF; + bool m_promptlepton; + std::vector< std::string > m_PIDWPs; + std::vector< std::string > m_PIDSFWPs; + std::vector< std::string > m_isolWPs; + std::vector< std::string > m_trigWPs; + bool m_passSel; + bool m_passOR; + bool m_doLRT; + bool m_closeByCorr; + ElectronInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }; + virtual ~ElectronInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class PhotonInfoSwitch : public IParticleInfoSwitch { + public: + bool m_isolation; + bool m_PID; + bool m_purity; + bool m_effSF; + bool m_trigger; + std::vector m_isoCones; + PhotonInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); } + virtual ~PhotonInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class ClusterInfoSwitch : public IParticleInfoSwitch { + public: + ClusterInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); } + virtual ~ClusterInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class JetInfoSwitch : public IParticleInfoSwitch { + public: + bool m_trigger; + bool m_substructure; + bool m_ntrimsubjets; + bool m_bosonCount; + bool m_VTags; + bool m_rapidity; + bool m_clean; + bool m_cleanLight; + bool m_cleanLLP; + bool m_cleanTrig; + bool m_timing; + bool m_energy; + bool m_energyLight; + bool m_scales; + bool m_constscaleEta; + bool m_detectorEta; + bool m_resolution; + bool m_truth; + bool m_truthDetails; + bool m_layer; + bool m_trackPV; + bool m_trackAll; + bool m_fJvt; + bool m_chargedPFOPV; + bool m_jvt; + bool m_NNJvt; + bool m_allTrack; + bool m_allTrackDetail; + bool m_allTrackPVSel; + bool m_constituent; + bool m_constituentAll; + bool m_flavorTag; + bool m_flavorTagHLT; + bool m_flavorTagTLA; + bool m_btag_jettrk; + bool m_jetFitterDetails; + bool m_svDetails; + bool m_ipDetails; + bool m_tracksInJet; + bool m_hltVtxComp; + bool m_onlineBS; + bool m_onlineBSTool; + bool m_charge; + bool m_passSel; + bool m_passOR; + bool m_etaPhiMap; + bool m_vsLumiBlock; + bool m_vsActualMu; + bool m_lumiB_runN; + bool m_byEta; + bool m_byAverageMu; + bool m_area; + bool m_JVC; + bool m_muonCorrection; + std::string m_trackName; + std::vector m_trackJetNames; + std::string m_sfJVTName; + std::string m_sffJVTName; + std::map>> m_jetBTag; + std::vector m_jetBTagCts; + JetInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }; + virtual ~JetInfoSwitch() {} + protected: + virtual void initialize(); + }; + + class TruthInfoSwitch : public IParticleInfoSwitch { + public: + bool m_type; + bool m_bVtx; + bool m_parents; + bool m_children; + bool m_dressed; + bool m_origin; + bool m_particleType; + bool m_pdgIdOnly; + TruthInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }; + protected: + void initialize(); + }; + + class TrackInfoSwitch : public InfoSwitch { + public: + bool m_noMultiplicity; + bool m_kinematic; + bool m_fitpars; + bool m_numbers; + bool m_vertex; + bool m_useTheS; + TrackInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); }; + protected: + void initialize(); + }; + + class TauInfoSwitch : public IParticleInfoSwitch { + public: + bool m_trigger; + bool m_JetID; + bool m_EleVeto; + bool m_xahTauJetMatching; + bool m_trackAll; + bool m_trackparams; + bool m_trackhitcont; + bool m_effSF; + + std::vector< std::string > m_tauEffWPs; + std::vector< std::string > m_trigWPs; + + TauInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }; + virtual ~TauInfoSwitch() { } + protected: + virtual void initialize(); + }; + + class METInfoSwitch : public InfoSwitch { + public: + bool m_metClus; + bool m_metTrk; + bool m_sigClus; + bool m_sigTrk; + bool m_sigResolutionClus; + bool m_sigResolutionTrk; + bool m_refEle; + bool m_refGamma; + bool m_refTau; + bool m_refMuons; + bool m_refJet; + bool m_refJetTrk; + bool m_softClus; + bool m_softTrk; + bool m_noExtra; // adds only what it is being asked (false by default) + METInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); }; + protected: + void initialize(); + }; + + } // close namespace HelperClasses + + + # endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.rst.txt new file mode 100644 index 0000000000..40d6e3e9d2 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.rst.txt @@ -0,0 +1,406 @@ + +.. _program_listing_file_xAODAnaHelpers_HelperFunctions.h: + +Program Listing for File HelperFunctions.h +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HelperFunctions.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_HELPERFUNCTIONS_H + #define xAODAnaHelpers_HELPERFUNCTIONS_H + + // for typing in template + #include + #include + // Gaudi/Athena include(s): + #include "AthContainers/normalizedTypeinfoName.h" + + // local includes + #include "AsgMessaging/StatusCode.h" + #include + + #include + + // jet reclustering and trimming + #include + #include "xAODJet/JetContainer.h" + + #include "xAODTracking/VertexContainer.h" + #include "AthContainers/ConstDataVector.h" + #include "xAODAnaHelpers/HelperClasses.h" + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/ISystematicsTool.h" + + // ROOT includes + #include "TTree.h" + #include "TBranch.h" + #include "TFile.h" + #include "TH1D.h" + #include "TObjArray.h" + + // messaging includes + #include + + // Functions that need to have a dictionary built. PyROOT does not + // seem to like the HelperFunctions namespace for some reason. + namespace xAH { + + void addRucio(SH::SampleHandler& sh, const std::string& name, const std::string& dslist); + + } // close namespace xAH + + namespace HelperFunctions { + MsgStream& msg( MSG::Level lvl = MSG::INFO ); + + // primary vertex + bool passPrimaryVertexSelection(const xAOD::VertexContainer* vertexContainer, int Ntracks = 2); + int countPrimaryVertices(const xAOD::VertexContainer* vertexContainer, int Ntracks = 2); + const xAOD::Vertex* getPrimaryVertex(const xAOD::VertexContainer* vertexContainer, MsgStream& msg); + inline const xAOD::Vertex* getPrimaryVertex(const xAOD::VertexContainer* vertexContainer) { return getPrimaryVertex(vertexContainer, msg()); } + float getPrimaryVertexZ(const xAOD::Vertex* pvx); + int getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer, MsgStream& msg); + inline int getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer){ return getPrimaryVertexLocation(vertexContainer, msg()); } + bool applyPrimaryVertexSelection( const xAOD::JetContainer* jets, const xAOD::VertexContainer* vertices ); + std::string replaceString(std::string subjet, const std::string& search, const std::string& replace); + std::vector SplitString(TString& orig, const char separator); + float dPhi(float phi1, float phi2); + bool has_exact(const std::string input, const std::string flag); + + std::size_t string_pos( const std::string& haystack, const std::string& needle, unsigned int N ); + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\ + | | + | Author : Marco Milesi | + | Email : marco.milesi@cern.ch | + | Logic copied from: + PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/trunk/Root/Tools.cxx | + + Function to check if file is Full xAOD + + \*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + StatusCode isAvailableMetaData(TTree* metaData); + bool isFilePrimaryxAOD(TFile* inputFile); + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\ + | | + | Author : Giordon Stark | + | Email : gstark@cern.ch | + | Thanks to Ben Nachman for inspiration | + | | + | jetReclustering(): | + | Takes a set of small-R jets and reclusters to large-R jets | + | | + | @jets | + | jet container to recluster and trim | + | @radius [1.0] | + | radius of large-R jet | + | @fcut [0.05] | + | trimming cut to apply | + | @rc_alg [fastjet::kt_algorithm] | + | clustering algorithm | + | | + | | + | jetTrimming(): | + | Takes a jet or a set of jets and applies an fcut on subjets | + | and reclusters into a TLorentzVector | + | | + | @jet(s) | + | jet (container to loop over and) to apply trimming | + | @radius [0.3] | + | radius of subjets to form | + | @fcut [0.05] | + | trimming cut to apply on subjets | + | @s_alg [fastjet::kt_algorithm] | + | algorithm for building subjets | + | | + \*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + std::vector jetReclustering( + const xAOD::JetContainer* jets, + double radius = 1.0, + double fcut = 0.05, + fastjet::JetAlgorithm rc_alg = fastjet::antikt_algorithm); + /* http://www.lpthe.jussieu.fr/~salam/fastjet/repo/doxygen-3.0alpha2/classfastjet_1_1Filter.html#usage */ + std::vector jetTrimming( + const xAOD::JetContainer* jets, + double radius = 0.3, + double fcut = 0.05, + fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm); + TLorentzVector jetTrimming( + const xAOD::Jet* jet, + double radius = 0.3, + double fcut = 0.05, + fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm); + + + + // miscellaneous + bool sort_pt(const xAOD::IParticle* partA, const xAOD::IParticle* partB); + + std::vector< CP::SystematicSet > getListofSystematics( const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream& msg ); + + void writeSystematicsListHist( const std::vector< CP::SystematicSet > &systs, std::string histName, TFile *file ); + + /* type_name() The awesome type demangler! + - normally, typeid(T).name() is gibberish with gcc. This decodes it. Fucking magic man. + + @ useXAOD [true] If set to false, will use the standard demangling + tool. Otherwise, use built-in StoreGate tool + + Example Usage: + template + void echoType(){ + std::cout << "This is type " << HelperFunctions::type_name() << std::endl; + } + */ + template + std::string type_name(bool useXAOD=true) { + if(useXAOD) return SG::normalizedTypeinfoName( typeid(T) ); + + int status; + std::string tname = typeid(T).name(); + char *demangled_name = abi::__cxa_demangle(tname.c_str(), NULL, NULL, &status); + if(status == 0) { + tname = demangled_name; + std::free(demangled_name); + } + return tname; + } + + template< typename T1, typename T2 > + StatusCode makeSubsetCont( T1*& intCont, T2*& outCont, MsgStream& msg, const std::string& flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT){ + std::string funcName{"in makeSubsetCont<"+type_name()+","+type_name()+">(): "}; + + if ( tool_name == HelperClasses::ToolName::DEFAULT ) { + + for ( auto in_itr : *(intCont) ) { outCont->push_back( in_itr ); } + return StatusCode::SUCCESS; + + } + + if ( flagSelect.empty() ) { + msg << MSG::ERROR << funcName << "flagSelect is an empty string, and passing a non-DEFAULT tool (presumably a SELECTOR). Please pass a non-empty flagSelect!" << endmsg; + return StatusCode::FAILURE; + } + + SG::AuxElement::ConstAccessor myAccessor(flagSelect); + + for ( auto in_itr : *(intCont) ) { + + if ( !myAccessor.isAvailable(*(in_itr)) ) { + std::stringstream ss; ss << in_itr->type(); + msg << MSG::ERROR << funcName << "flag " << flagSelect << " is missing for object of type " << ss.str() << " ! Will not make a subset of its container" << endmsg; + return StatusCode::FAILURE; + } + + if ( myAccessor(*(in_itr)) ) { outCont->push_back( in_itr ); } + + } + + return StatusCode::SUCCESS; + + } + template< typename T1, typename T2 > + StatusCode makeSubsetCont( T1*& intCont, T2*& outCont, const std::string& flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT) { return makeSubsetCont(intCont, outCont, msg(), flagSelect, tool_name); } + + template + StatusCode retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store, MsgStream& msg){ + std::string funcName{"in retrieve<"+type_name()+">(" + name + "): "}; + if((event == NULL) && (store == NULL)){ + msg << MSG::ERROR << funcName << "Both TEvent and TStore objects are null. Cannot retrieve anything." << endmsg; + return StatusCode::FAILURE; + } + msg << MSG::DEBUG << funcName << "\tAttempting to retrieve " << name << " of type " << type_name() << endmsg; + if((event != NULL) && (store == NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TEvent" << endmsg; + if((event == NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore" << endmsg; + if((event != NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore, xAOD::TEvent" << endmsg; + if((store != NULL) && (store->contains(name))){ + msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TStore" << endmsg; + if(!store->retrieve( cont, name ).isSuccess()) return StatusCode::FAILURE; + msg << MSG::DEBUG << funcName << "\t\t\tRetrieved from xAOD::TStore" << endmsg; + } else if((event != NULL) && (event->contains(name))){ + msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TEvent" << endmsg; + if(!event->retrieve( cont, name ).isSuccess()) return StatusCode::FAILURE; + msg << MSG::DEBUG << funcName << "\t\t\tRetrieved from xAOD::TEvent" << endmsg; + } else { + msg << MSG::DEBUG << funcName << "\t\tNot found at all" << endmsg; + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; + } + /* retrieve() overload for no msgStream object passed in */ + template + StatusCode retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store) { return retrieve(cont, name, event, store, msg()); } + template + StatusCode __attribute__((deprecated("retrieve(..., bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882"))) retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store, bool debug) { return retrieve(cont, name, event, store, msg()); } + + template + bool isAvailable(std::string name, xAOD::TEvent* event, xAOD::TStore* store, MsgStream& msg){ + /* Checking Order: + - check if store contains 'xAOD::JetContainer' named 'name' + --- checkstore store + - check if event contains 'xAOD::JetContainer' named 'name' + --- checkstore event + */ + std::string funcName{"in isAvailable<"+type_name()+">(" + name + "): "}; + msg << MSG::DEBUG << funcName << "\tAttempting to retrieve " << name << " of type " << type_name() << endmsg; + if(store == NULL) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TEvent" << endmsg; + if(event == NULL) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore" << endmsg; + if((event != NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore, xAOD::TEvent" << endmsg; + if((store != NULL) && (store->contains(name))){ + msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TStore" << endmsg;; + return true; + } else if((event != NULL) && (event->contains(name))){ + msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TEvent" << endmsg; + return true; + } else { + msg << MSG::DEBUG << funcName << "\t\tNot found at all" << endmsg; + return false; + } + return false; + } + /* isAvailable() overload for no msgStream object passed in */ + template + bool isAvailable(std::string name, xAOD::TEvent* event, xAOD::TStore* store) { return isAvailable(name, event, store, msg()); } + + // stolen from here + // https://svnweb.cern.ch/trac/atlasoff/browser/Event/xAOD/xAODEgamma/trunk/xAODEgamma/EgammaTruthxAODHelpers.h#L20 + // util becomes a general xAOD tool + template + const T* getLink(const xAOD::IParticle* particle, std::string name){ + if (!particle) return 0; + typedef ElementLink< DataVector > Link_t; + + if (!particle->isAvailable< Link_t >(name) ) { + return 0; + } + const Link_t link = particle->auxdata(name); + if (!link.isValid()) { + return 0; + } + return *link; + } + + // + // For Sorting + // + struct pt_sort + { + + inline bool operator() (const TLorentzVector& lhs, const TLorentzVector& rhs) + { + return (lhs.Pt() > rhs.Pt()); + } + + inline bool operator() (const TLorentzVector* lhs, const TLorentzVector* rhs) + { + return (lhs->Pt() > rhs->Pt()); + } + + inline bool operator() (const xAOD::IParticle& lhs, const xAOD::IParticle& rhs) + { + return (lhs.pt() > rhs.pt()); + } + + inline bool operator() (const xAOD::IParticle* lhs, const xAOD::IParticle* rhs) + { + return (lhs->pt() > rhs->pt()); + } + }; + + + template + T sort_container_pt(T* inCont){ + T sortedCont(SG::VIEW_ELEMENTS); + for(auto el : *inCont) sortedCont.push_back( el ); + std::sort(sortedCont.begin(), sortedCont.end(), pt_sort()); + return sortedCont; + } + + template + const T sort_container_pt(const T* inCont){ + ConstDataVector sortedCont(SG::VIEW_ELEMENTS); + + for(auto el : *inCont) sortedCont.push_back( el ); + std::sort(sortedCont.begin(), sortedCont.end(), pt_sort()); + return *sortedCont.asDataVector(); + } + + /* return true if there's a least one non-empty string (i.e., syst name) in input list */ + inline bool found_non_dummy_sys(std::vector* sys_list) { + if ( sys_list ) { + for ( auto sys : *sys_list ) { + if ( !sys.empty() ) { return true; } + } + } + return false; + } + + template + StatusCode makeDeepCopy(xAOD::TStore* m_store, std::string containerName, const T1* cont){ + T1* cont_new = new T1; + T2* auxcont_new = new T2; + cont_new->setStore(auxcont_new); + + if(!m_store->record(cont_new, containerName).isSuccess()){ + std::cout << "can't record " << containerName << std::endl; + return StatusCode::FAILURE; + } + if(!m_store->record(auxcont_new, containerName+"Aux.").isSuccess()){ + std::cout << "can't record aux" << containerName << std::endl; + return StatusCode::FAILURE; + } + + for(const auto p: *cont){ + T3* p_new = new T3; + cont_new->push_back(p_new); + *p_new = *p; + } + return StatusCode::SUCCESS; + } + + template + StatusCode recordOutput(xAOD::TEvent* m_event, xAOD::TStore* m_store, std::string containerName){ + T1* cont(nullptr); + T2* auxcont(nullptr); + + if(!m_store->retrieve(cont, containerName).isSuccess()) return StatusCode::FAILURE; + if(!m_store->retrieve(auxcont, containerName+"Aux.").isSuccess()) return StatusCode::FAILURE; + + if(!m_event->record(cont, containerName).isSuccess()) return StatusCode::FAILURE; + if(!m_event->record(auxcont, containerName+"Aux.").isSuccess()) return StatusCode::FAILURE; + return StatusCode::SUCCESS; + } + + template void connectBranch(std::string name, TTree *tree, const std::string& branch, std::vector **variable) + { + tree->SetBranchStatus ((name+"_"+branch).c_str() , 1); + tree->SetBranchAddress ((name+"_"+branch).c_str() , variable); + } + + // function to remove duplicates from a vector. Thank you, oh internet! + // http://stackoverflow.com/questions/9237216/removing-duplicates-in-a-vector-of-strings + template + void remove_duplicates(std::vector& vec) + { + std::sort(vec.begin(), vec.end()); + vec.erase(std::unique(vec.begin(), vec.end()), vec.end()); + } + + enum ShowerType {Unknown, Pythia8, Herwig7p1, Herwig7p2, Sherpa221, Sherpa2210, Sherpa2212, AmcPy8, AmcH7, Pythia8_517, Sherpa2214, Sherpa_Unknown}; + + ShowerType getMCShowerType(const std::string& sample_name, const std::string& m_taggerName); + + + } // close namespace HelperFunctions + + # endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.rst.txt new file mode 100644 index 0000000000..0970ebbeb2 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.rst.txt @@ -0,0 +1,120 @@ + +.. _program_listing_file_xAODAnaHelpers_HistogramManager.h: + +Program Listing for File HistogramManager.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/HistogramManager.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_HistogramManager_H + #define xAODAnaHelpers_HistogramManager_H + + #include + #include + #include + #include + #include + #include + #include + #include + + // for StatusCode::isSuccess + #include + #include + + class MsgStream; + + class HistogramManager { + + protected: + std::string m_name; + std::string m_detailStr; + std::vector< TH1* > m_allHists; + mutable MsgStream m_msg; + + public: + HistogramManager(std::string name, std::string detailStr); + virtual ~HistogramManager(); + + virtual StatusCode initialize(){ return StatusCode::SUCCESS; }; + virtual StatusCode execute(){ return StatusCode::SUCCESS; }; + virtual StatusCode finalize(){ return StatusCode::SUCCESS; }; + + TH1F* book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh); + + TH2F* book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string xyabel, int ybins, double ylow, double yhigh); + + TH3F* book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, int ybins, double ylow, double yhigh, + std::string zlabel, int zbins, double zlow, double zhigh); + + TH1F* book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinsArr); + + TH2F* book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinsArr, + std::string ylabel, int ybins, double ylow, double yhigh); + + TH2F* book(std::string name, std::string title, + std::string xyabel, int xbins, double xlow, double xhigh, + std::string ylabel, int ybins, const Double_t* ybinsArr); + + TH2F* book(std::string name, std::string title, + std::string xyabel, int xbins, const Double_t* xbinsArr, + std::string ylabel, int ybins, const Double_t* ybinsArr); + + TH3F* book(std::string name, std::string title, + std::string xlabel, int xbins, const Double_t* xbinsArr, + std::string ylabel, int ybins, const Double_t* ybinsArr, + std::string zlabel, int zbins, const Double_t* zbinsArr); + + TProfile* book(std::string name, std::string title, + std::string xlabel, int xbins, double xlow, double xhigh, + std::string ylabel, double ylow, double yhigh, + std::string option = ""); + + TProfile* book(std::string name, std::string title, + int xbins, const Double_t* xbinsArr, double ylow, double yhigh); + + TProfile* book(std::string name, std::string title, + int xbins, double xlow, double xhigh, + double ylow, double yhigh); + + void record(EL::IWorker* wk); + + MsgStream& msg () const; + MsgStream& msg (int level) const; + + typedef std::unordered_map< std::string, TH1* > HistMap_t; + + HistMap_t m_histMap; + + TH1* findHist(const std::string& histName); + + void fillHist(const std::string& histName, double value); + void fillHist(const std::string& histName, double value, double weight); + void fillHist(const std::string& histName, double valueX, double valueY, double weight); + void fillHist(const std::string& histName, double valueX, double valueY, double valueZ, double weight); + void fillProfile(const std::string& histName, double valueX, double valueY, double weight); + + private: + void Sumw2(TH1* hist, bool flag=true); + + void record(TH1* hist); + + void SetLabel(TH1* hist, std::string xlabel); + void SetLabel(TH1* hist, std::string xlabel, std::string ylabel); + void SetLabel(TH1* hist, std::string xlabel, std::string ylabel, std::string zlabel); + + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.rst.txt new file mode 100644 index 0000000000..b20c6a424d --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.rst.txt @@ -0,0 +1,130 @@ + +.. _program_listing_file_xAODAnaHelpers_IParticleHists.h: + +Program Listing for File IParticleHists.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/IParticleHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_IParticleHists_H + #define xAODAnaHelpers_IParticleHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/ParticleContainer.h" + + #include + #include + #include + #include + + ANA_MSG_HEADER(msgIParticleHists) + + class IParticleHists : public HistogramManager + { + public: + + IParticleHists(std::string name, std::string detailStr, std::string prefix="", std::string title=""); + virtual ~IParticleHists() ; + + bool m_debug; + virtual StatusCode initialize(); + StatusCode execute( const xAOD::IParticleContainer* particles, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + + template + StatusCode execute( const xAH::ParticleContainer* particles, float eventWeight, const xAH::EventInfo* eventInfo = 0); + + //StatusCode execute( const xAH::ParticleContainer* particles, float eventWeight, const xAH::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo = 0); + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using HistogramManager::execute; // overload + + protected: + + // holds bools that control which histograms are filled + HelperClasses::IParticleInfoSwitch* m_infoSwitch; + + private: + std::string m_prefix; + std::string m_title; + + //basic + TH1F* m_Pt_l; + TH1F* m_Pt; + TH1F* m_Pt_m; + TH1F* m_Pt_s; + TH1F* m_Eta; + TH1F* m_Phi; + TH1F* m_M; + TH1F* m_E; + TH1F* m_Rapidity; + + // kinematic + TH1F* m_Px; + TH1F* m_Py; + TH1F* m_Pz; + TH1F* m_Et; + TH1F* m_Et_m; + TH1F* m_Et_s; + + //NLeadingParticles + std::vector< TH1F* > m_NPt_l; + std::vector< TH1F* > m_NPt; + std::vector< TH1F* > m_NPt_m; + std::vector< TH1F* > m_NPt_s; + std::vector< TH1F* > m_NEta; + std::vector< TH1F* > m_NPhi; + std::vector< TH1F* > m_NM; + std::vector< TH1F* > m_NE; + std::vector< TH1F* > m_NRapidity; + + // kinematic + std::vector< TH1F* > m_NEt; + std::vector< TH1F* > m_NEt_m; + std::vector< TH1F* > m_NEt_s; + }; + + + template + StatusCode IParticleHists::execute( const xAH::ParticleContainer* particles, float eventWeight, const xAH::EventInfo* eventInfo) { + using namespace msgIParticleHists; + unsigned int nPart = particles->size(); + for(unsigned int i = 0; iexecute( static_cast(&particles->at(i)), eventWeight, eventInfo) ); + + } + + if( m_infoSwitch->m_numLeading > 0){ + int numParticles = std::min( m_infoSwitch->m_numLeading, (int)particles->size() ); + for(int iParticle=0; iParticle < numParticles; ++iParticle){ + const TLorentzVector& partP4 = particles->at(iParticle).p4; + + m_NPt_l.at(iParticle)-> Fill( partP4.Pt(), eventWeight); + m_NPt.at(iParticle)-> Fill( partP4.Pt(), eventWeight); + m_NPt_m.at(iParticle)-> Fill( partP4.Pt(), eventWeight); + m_NPt_s.at(iParticle)-> Fill( partP4.Pt(), eventWeight); + m_NEta.at(iParticle)-> Fill( partP4.Eta(), eventWeight); + m_NPhi.at(iParticle)-> Fill( partP4.Phi(), eventWeight); + m_NM.at(iParticle)-> Fill( partP4.M(), eventWeight); + m_NE.at(iParticle)-> Fill( partP4.E(), eventWeight); + m_NRapidity.at(iParticle)-> Fill( partP4.Rapidity(), eventWeight); + + if(m_infoSwitch->m_kinematic){ + m_NEt .at(iParticle)-> Fill( partP4.Et(), eventWeight); + m_NEt_m.at(iParticle)-> Fill( partP4.Et(), eventWeight); + m_NEt_s.at(iParticle)-> Fill( partP4.Et(), eventWeight); + } + + } + } + + return StatusCode::SUCCESS; + } + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..69534a5b77 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.rst.txt @@ -0,0 +1,128 @@ + +.. _program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h: + +Program Listing for File IParticleHistsAlgo.h +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/IParticleHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_IParticleHistsAlgo_H + #define xAODAnaHelpers_IParticleHistsAlgo_H + + #include + #include + + // algorithm wrapper + #include + #include + #include + #include + + class IParticleHistsAlgo : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + std::string m_inContainerName = ""; + std::string m_detailStr = ""; + std::string m_inputAlgo = ""; + std::string m_histPrefix; + std::string m_histTitle; + + private: + std::map< std::string, IParticleHists* > m_plots; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + IParticleHistsAlgo (std::string className = "IParticleHistsAlgo"); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + template EL::StatusCode execute () + { + static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight"); + + const xAOD::EventInfo* eventInfo(nullptr); + ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) ); + + float eventWeight(1); + if ( mcEvtWeightAcc.isAvailable( *eventInfo ) ) { + eventWeight = mcEvtWeightAcc( *eventInfo ); + } + // if(isMC()) + // { + // double xs =wk()->metaData()->castDouble(SH::MetaFields::crossSection ,1); + // double eff =wk()->metaData()->castDouble(SH::MetaFields::filterEfficiency,1); + // double kfac =wk()->metaData()->castDouble(SH::MetaFields::kfactor ,1); + // eventWeight *= xs * eff * kfac; + // } + + // this will hold the collection processed + const CONT_T* inParticles = 0; + + // if input comes from xAOD, or just running one collection, + // then get the one collection and be done with it + if( m_inputAlgo.empty() ) { + ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName, m_event, m_store, msg()) ); + + // pass the photon collection + ANA_CHECK( static_cast(m_plots[""])->execute( inParticles, eventWeight, eventInfo )); + } + else { // get the list of systematics to run over + + // get vector of string giving the names + std::vector* systNames(nullptr); + ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) ); + + // loop over systematics + for( auto systName : *systNames ) { + ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName+systName, m_event, m_store, msg()) ); + if( m_plots.find( systName ) == m_plots.end() ) { this->AddHists( systName ); } + ANA_CHECK( static_cast(m_plots[systName])->execute( inParticles, eventWeight, eventInfo )); + } + } + + return EL::StatusCode::SUCCESS; + } + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode AddHists( std::string name); + + template EL::StatusCode AddHists( std::string name ) { + std::string fullname(m_name); + fullname += name; // add systematic + HIST_T* particleHists = new HIST_T( fullname, m_detailStr ); // add systematic + particleHists->m_debug = msgLvl(MSG::DEBUG); + ANA_CHECK( particleHists->initialize()); + particleHists->record( wk() ); + m_plots[name] = particleHists; + + return EL::StatusCode::SUCCESS; + } + + // this is needed to distribute the algorithm to the workers + ClassDef(IParticleHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt new file mode 100644 index 0000000000..6c1725f7e0 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.rst.txt @@ -0,0 +1,101 @@ + +.. _program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h: + +Program Listing for File IsoCloseByCorr.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/IsoCloseByCorr.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef XAODANAHELPERS_ISOCLOSEBYCORR_H + #define XAODANAHELPERS_ISOCLOSEBYCORR_H + + // EDM include(s): + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODTau/TauJetContainer.h" + + // external tools include(s): + #include "AssociationUtils/OverlapRemovalInit.h" + #include "AssociationUtils/OverlapRemovalTool.h" + #include "AssociationUtils/ToolBox.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // ROOT include(s): + #include "TH1D.h" + + #include "IsolationSelection/IsolationSelectionTool.h" + #include "IsolationSelection/IsolationCloseByCorrectionTool.h" + #include "InDetTrackSelectionTool/InDetTrackSelectionTool.h" + + class IsoCloseByCorr : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + + bool m_decorateSelectedObjects; + std::string m_decor = "passOR"; + + // Electrons + std::string m_inContainerName_Electrons = ""; + std::string m_inputAlgoElectrons = ""; + std::string m_el_iso_WP = ""; + // Muons + std::string m_inContainerName_Muons = ""; + std::string m_outContainerName_Muons = ""; + std::string m_mu_iso_WP = ""; + // Photons + bool m_doPhotons = false; + std::string m_inContainerName_Photons = ""; + std::string m_outContainerName_Photons = ""; + + protected: + int dummyVaraibleToKeepExample; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + private: + asg::AnaToolHandle m_IsoSelCloseBy_tool; + std::string m_IsoSelToolCloseBy_name; + + asg::AnaToolHandle m_IsoCloseByCorr_tool; + std::string m_IsoCloseByCorr_tool_name; + + asg::AnaToolHandle m_trackSelection_tool; + std::string m_trackSelectionTool_name; + + public: + + // this is a standard constructor + IsoCloseByCorr (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(IsoCloseByCorr, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Jet.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Jet.h.rst.txt new file mode 100644 index 0000000000..8fadd4e06e --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Jet.h.rst.txt @@ -0,0 +1,341 @@ + +.. _program_listing_file_xAODAnaHelpers_Jet.h: + +Program Listing for File Jet.h +============================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Jet.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Jet_H + #define xAODAnaHelpers_Jet_H + + #include "xAODAnaHelpers/Particle.h" + #include "xAODAnaHelpers/MuonContainer.h" + + + namespace xAH { + + class Jet : public Particle + { + public: + enum BTaggerOP { + None, + DL1r_FixedCutBEff_60 , DL1r_FixedCutBEff_70 , DL1r_FixedCutBEff_77 , DL1r_FixedCutBEff_85 , + DL1dv00_FixedCutBEff_60 , DL1dv00_FixedCutBEff_70 , DL1dv00_FixedCutBEff_77 , DL1dv00_FixedCutBEff_85 , + DL1dv01_FixedCutBEff_60 , DL1dv01_FixedCutBEff_70 , DL1dv01_FixedCutBEff_77 , DL1dv01_FixedCutBEff_85 , + GN120220509_FixedCutBEff_60 , GN120220509_FixedCutBEff_70 , GN120220509_FixedCutBEff_77 , GN120220509_FixedCutBEff_85 , + DL1dv00_Continuous, DL1r_Continuous, DL1dv01_Continuous, GN120220509_Continuous , // Continuous + GN2v00LegacyWP_FixedCutBEff_60 , GN2v00LegacyWP_FixedCutBEff_70 , GN2v00LegacyWP_FixedCutBEff_77 , GN2v00LegacyWP_FixedCutBEff_85 , + GN2v00NewAliasWP_FixedCutBEff_60 , GN2v00NewAliasWP_FixedCutBEff_70 , GN2v00NewAliasWP_FixedCutBEff_77 , GN2v00NewAliasWP_FixedCutBEff_85 , + GN2v01_FixedCutBEff_65 , GN2v01_FixedCutBEff_70 , GN2v01_FixedCutBEff_77 , GN2v01_FixedCutBEff_85 , GN2v01_FixedCutBEff_90 , + GN2v01_Continuous , // Continuous + }; + + float rapidity; + + // trigger + int isTrigMatched; + std::vector isTrigMatchedToChain; + std::string listTrigChains; + + // clean + float Timing; + float LArQuality; + float HECQuality; + float NegativeE; + float AverageLArQF; + float BchCorrCell; + float N90Constituents; + float LArBadHVEFrac; + int LArBadHVNCell; + float ChargedFraction; + float OotFracClusters5; + float OotFracClusters10; + float LeadingClusterPt; + float LeadingClusterSecondLambda; + float LeadingClusterCenterLambda; + float LeadingClusterSecondR; + int clean_passLooseBad; + int clean_passLooseBadLLP; + int clean_passLooseBadTrigger; + int clean_passLooseBadTriggerUgly; + int clean_passLooseBadUgly; + int clean_passTightBad; + int clean_passTightBadUgly; + + // energy + float HECFrac; + float EMFrac; + float CentroidR; + float FracSamplingMax; + float FracSamplingMaxIndex; + float LowEtConstituentsFrac; + float GhostMuonSegmentCount; + float Width; + + // trackPV + float NumTrkPt1000PV; + float SumPtTrkPt1000PV; + float TrackWidthPt1000PV; + float NumTrkPt500PV; + float SumPtTrkPt500PV; + float TrackWidthPt500PV; + float JVFPV; + + // trackAll or trackPV + float Jvt; + float JvtJvfcorr; + float JvtRpt; + + // chargedPFOPV + float SumPtChargedPFOPt500PV; + float fCharged; + + //JVC + float JVC; + + // flavTag + float SV0; + float SV1; + float IP3D; + float SV1IP3D; + float COMBx; + float DL1r; + float DL1r_pu; + float DL1r_pc; + float DL1r_pb; + float DL1dv00; + float DL1dv00_pu; + float DL1dv00_pc; + float DL1dv00_pb; + float DL1dv01; + float DL1dv01_pu; + float DL1dv01_pc; + float DL1dv01_pb; + float fastDIPS; + float fastDIPS_pu; + float fastDIPS_pc; + float fastDIPS_pb; + float GN1; + float GN1_pu; + float GN1_pc; + float GN1_pb; + float GN2v00LegacyWP; + float GN2v00LegacyWP_pu; + float GN2v00LegacyWP_pc; + float GN2v00LegacyWP_pb; + float GN2v00NewAliasWP; + float GN2v00NewAliasWP_pu; + float GN2v00NewAliasWP_pc; + float GN2v00NewAliasWP_pb; + float GN2v01; + float GN2v01_pu; + float GN2v01_pc; + float GN2v01_pb; + float GN2v01_ptau; + int HadronConeExclTruthLabelID; + int HadronConeExclExtendedTruthLabelID; + + float vtxOnlineValid; + float vtxHadDummy; + + float bs_online_vx; + float bs_online_vy; + float bs_online_vz; + + float vtx_offline_x0; + float vtx_offline_y0; + float vtx_offline_z0; + + float vtx_online_x0; + float vtx_online_y0; + float vtx_online_z0; + + float vtx_online_bkg_x0; + float vtx_online_bkg_y0; + float vtx_online_bkg_z0; + + float JetFitter_nVTX ; + float JetFitter_nSingleTracks ; + float JetFitter_nTracksAtVtx ; + float JetFitter_mass ; + float JetFitter_energyFraction ; + float JetFitter_significance3d ; + float JetFitter_deltaeta ; + float JetFitter_deltaphi ; + float JetFitter_N2Tpar ; + + float sv0_NGTinSvx ; + float sv0_N2Tpair ; + float sv0_massvx ; + float sv0_efracsvx ; + float sv0_normdist ; + float sv1_pu ; + float sv1_pb ; + float sv1_pc ; + float sv1_c ; + float sv1_cu ; + float sv1_NGTinSvx ; + float sv1_N2Tpair ; + float sv1_massvx ; + float sv1_efracsvx ; + float sv1_normdist ; + float sv1_Lxy ; + float sv1_sig3d ; + float sv1_L3d ; + float sv1_distmatlay; + float sv1_dR ; + + float IP2D_pu ; + float IP2D_pb ; + float IP2D_pc ; + float IP2D ; + float IP2D_c ; + float IP2D_cu ; + float nIP2DTracks ; + + std::vector IP2D_gradeOfTracks ; + std::vector IP2D_flagFromV0ofTracks ; + std::vector IP2D_valD0wrtPVofTracks ; + std::vector IP2D_sigD0wrtPVofTracks ; + std::vector IP2D_weightBofTracks ; + std::vector IP2D_weightCofTracks ; + std::vector IP2D_weightUofTracks ; + + float IP3D_pu ; + float IP3D_pb ; + float IP3D_pc ; + float IP3D_c ; + float IP3D_cu ; + float nIP3DTracks ; + + std::vector IP3D_gradeOfTracks ; + std::vector IP3D_flagFromV0ofTracks ; + std::vector IP3D_valD0wrtPVofTracks ; + std::vector IP3D_sigD0wrtPVofTracks ; + std::vector IP3D_valZ0wrtPVofTracks ; + std::vector IP3D_sigZ0wrtPVofTracks ; + std::vector IP3D_weightBofTracks ; + std::vector IP3D_weightCofTracks ; + std::vector IP3D_weightUofTracks ; + + // jetBTag + + int is_DL1r_FixedCutBEff_60; + std::vector SF_DL1r_FixedCutBEff_60; + int is_DL1r_FixedCutBEff_70; + std::vector SF_DL1r_FixedCutBEff_70; + int is_DL1r_FixedCutBEff_77; + std::vector SF_DL1r_FixedCutBEff_77; + int is_DL1r_FixedCutBEff_85; + std::vector SF_DL1r_FixedCutBEff_85; + int is_DL1dv00_FixedCutBEff_60; + std::vector SF_DL1dv00_FixedCutBEff_60; + int is_DL1dv00_FixedCutBEff_70; + std::vector SF_DL1dv00_FixedCutBEff_70; + int is_DL1dv00_FixedCutBEff_77; + std::vector SF_DL1dv00_FixedCutBEff_77; + int is_DL1dv00_FixedCutBEff_85; + std::vector SF_DL1dv00_FixedCutBEff_85; + int is_DL1dv01_FixedCutBEff_60; + std::vector SF_DL1dv01_FixedCutBEff_60; + int is_DL1dv01_FixedCutBEff_70; + std::vector SF_DL1dv01_FixedCutBEff_70; + int is_DL1dv01_FixedCutBEff_77; + std::vector SF_DL1dv01_FixedCutBEff_77; + int is_DL1dv01_FixedCutBEff_85; + std::vector SF_DL1dv01_FixedCutBEff_85; + int is_GN120220509_FixedCutBEff_60; + std::vector SF_GN120220509_FixedCutBEff_60; + int is_GN120220509_FixedCutBEff_70; + std::vector SF_GN120220509_FixedCutBEff_70; + int is_GN120220509_FixedCutBEff_77; + std::vector SF_GN120220509_FixedCutBEff_77; + int is_GN120220509_FixedCutBEff_85; + std::vector SF_GN120220509_FixedCutBEff_85; + int is_GN2v00LegacyWP_FixedCutBEff_60; + std::vector SF_GN2v00LegacyWP_FixedCutBEff_60; + int is_GN2v00LegacyWP_FixedCutBEff_70; + std::vector SF_GN2v00LegacyWP_FixedCutBEff_70; + int is_GN2v00LegacyWP_FixedCutBEff_77; + std::vector SF_GN2v00LegacyWP_FixedCutBEff_77; + int is_GN2v00LegacyWP_FixedCutBEff_85; + std::vector SF_GN2v00LegacyWP_FixedCutBEff_85; + int is_GN2v00NewAliasWP_FixedCutBEff_60; + std::vector SF_GN2v00NewAliasWP_FixedCutBEff_60; + int is_GN2v00NewAliasWP_FixedCutBEff_70; + std::vector SF_GN2v00NewAliasWP_FixedCutBEff_70; + int is_GN2v00NewAliasWP_FixedCutBEff_77; + std::vector SF_GN2v00NewAliasWP_FixedCutBEff_77; + int is_GN2v00NewAliasWP_FixedCutBEff_85; + std::vector SF_GN2v00NewAliasWP_FixedCutBEff_85; + int is_GN2v01_FixedCutBEff_65; + std::vector SF_GN2v01_FixedCutBEff_65; + int is_GN2v01_FixedCutBEff_70; + std::vector SF_GN2v01_FixedCutBEff_70; + int is_GN2v01_FixedCutBEff_77; + std::vector SF_GN2v01_FixedCutBEff_77; + int is_GN2v01_FixedCutBEff_85; + std::vector SF_GN2v01_FixedCutBEff_85; + int is_GN2v01_FixedCutBEff_90; + std::vector SF_GN2v01_FixedCutBEff_90; + + // Continuous + int is_DL1r_Continuous; + std::vector SF_DL1r_Continuous; + std::vector inEffSF_DL1r_Continuous; + int is_DL1dv00_Continuous; + std::vector SF_DL1dv00_Continuous; + std::vector inEffSF_DL1dv00_Continuous; + int is_DL1dv01_Continuous; + std::vector SF_DL1dv01_Continuous; + std::vector inEffSF_DL1dv01_Continuous; + int is_GN120220509_Continuous; + std::vector SF_GN120220509_Continuous; + std::vector inEffSF_GN120220509_Continuous; + int is_GN2v00LegacyWP_Continuous; + std::vector SF_GN2v00LegacyWP_Continuous; + std::vector inEffSF_GN2v00LegacyWP_Continuous; + int is_GN2v00NewAliasWP_Continuous; + std::vector SF_GN2v00NewAliasWP_Continuous; + std::vector inEffSF_GN2v00NewAliasWP_Continuous; + int is_GN2v01_Continuous; + std::vector SF_GN2v01_Continuous; + std::vector inEffSF_GN2v01_Continuous; + + // truth + int ConeTruthLabelID; + int TruthCount; + float TruthLabelDeltaR_B; + float TruthLabelDeltaR_C; + float TruthLabelDeltaR_T; + int PartonTruthLabelID; + float GhostTruthAssociationFraction; + TLorentzVector truth_p4; + + // charge + double charge; + + // passSel + char passSel; + + // passOR + char passOR; + + const Muon* matchedMuon =nullptr; + const Jet * matchedJet =nullptr; + + public: + int is_btag(BTaggerOP op) const; + const std::vector& SF_btag(BTaggerOP op) const; + + void muonInJetCorrection(const xAH::MuonContainer* muons); + + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.rst.txt new file mode 100644 index 0000000000..dcef4f49df --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.rst.txt @@ -0,0 +1,150 @@ + +.. _program_listing_file_xAODAnaHelpers_JetCalibrator.h: + +Program Listing for File JetCalibrator.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/JetCalibrator.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + /******************************************************** + * JetCalibrator: + * + * This class handles jet calibration and systematics + * + * Jeff Dandoy (jeff.dandoy@cern.ch) + * + ********************************************************/ + + #ifndef xAODAnaHelpers_JetCalibrator_H + #define xAODAnaHelpers_JetCalibrator_H + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicVariation.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "JetCalibTools/IJetCalibrationTool.h" + #include "JetCPInterfaces/ICPJetUncertaintiesTool.h" + #include "JetInterface/IJetSelector.h" + #include "JetCPInterfaces/IJetTileCorrectionTool.h" + // #include "ParticleJetTools/JetTruthLabelingTool.h" + #include "xAODCore/ShallowCopy.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class JetCalibrator : public xAH::Algorithm + { + public: + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + std::string m_jetAlgo = ""; + std::string m_outputAlgo = ""; + bool m_writeSystToMetadata = false; + + + bool m_recalibrateHLTJets = false; + std::string m_HLTVertexContainerName = "HLT_IDVertex_FS"; + std::string m_HLTAvgMuDecor = "EventInfo.AvgMu"; + std::string m_EvtInfoHLTNPVDecor = ""; + + std::string m_calibGSCDepth = ""; + + std::string m_calibConfigDir = ""; + std::string m_calibConfigData = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"; + std::string m_calibConfigFullSim = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"; + std::string m_calibConfigAFII = "JES_MC16Recommendation_AFII_EMTopo_April2018_rel21.config"; + std::string m_calibSequence = ""; + std::string m_uncertConfig = ""; + std::string m_uncertMCType = ""; + std::string m_overrideCalibArea = ""; + std::string m_overrideUncertCalibArea = ""; + std::string m_overrideAnalysisFile = ""; + std::string m_overrideUncertPath = ""; + + bool m_forceInsitu = false; + bool m_forceSmear = false; + bool m_jetCalibToolsDEV = false; + + bool m_addGhostMuonsToJets = false; + + bool m_doCleaning = true; + std::string m_jetCleanCutLevel = "LooseBad"; + bool m_saveAllCleanDecisions = false; + bool m_jetCleanUgly = false; + + bool m_sort = true; + bool m_cleanParent = false; + bool m_applyFatJetPreSel = false; + + bool m_useLargeRTruthLabelingTool = true; + std::string m_truthLabelName = "R10TruthLabel_R21Consolidated"; + bool m_isTruthJetCol = false; + bool m_useTRUTH3 = true; + std::string m_truthParticleContainerName = "TruthParticles"; + std::string m_truthBosonContainerName = "TruthBosonsWithDecayParticles"; + std::string m_truthTopQuarkContainerName = "TruthTopQuarkWithDecayParticles"; + + // systematics + bool m_doJetTileCorr = false; + + bool m_pseudoData = false; + + bool m_mcAndPseudoData = false; + + private: + bool m_runSysts = false; + + int m_numEvent; + int m_numObject; + + std::string m_calibConfig; + + std::vector m_systList; + + // tools + asg::AnaToolHandle m_JetCalibrationTool_handle {"JetCalibrationTool" , this}; + asg::AnaToolHandle m_JetUncertaintiesTool_handle {"JetUncertaintiesTool" , this}; + asg::AnaToolHandle m_pseudodataJERTool_handle {"PseudodataJERTool" , this}; + asg::AnaToolHandle m_JetCleaningTool_handle {"JetCleaningTool" , this}; + // asg::AnaToolHandle m_JetTileCorrectionTool_handle{"JetTileCorrectionTool", this}; //! + // asg::AnaToolHandle m_JetTruthLabelingTool_handle {"JetTruthLabelingTool" , this}; //! + + std::vector> m_AllJetCleaningTool_handles; + std::vector m_decisionNames; + + // Helper functions + EL::StatusCode executeSystematic(const CP::SystematicSet& thisSyst, const xAOD::JetContainer* inJets, + std::pair& calibJetsSC, + std::vector& vecOutContainerNames, bool isPDCopy); + EL::StatusCode initializeUncertaintiesTool(asg::AnaToolHandle& uncToolHandle, bool isData); + + public: + + // this is a standard constructor + JetCalibrator (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(JetCalibrator, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_JetContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_JetContainer.h.rst.txt new file mode 100644 index 0000000000..18e71ac716 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_JetContainer.h.rst.txt @@ -0,0 +1,568 @@ + +.. _program_listing_file_xAODAnaHelpers_JetContainer.h: + +Program Listing for File JetContainer.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/JetContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_JetContainer_H + #define xAODAnaHelpers_JetContainer_H + + #include + #include + + #include + #include + + #include "xAODJet/JetContainer.h" + + #include + #include + + #include + #include + + #include "InDetTrackSelectionTool/InDetTrackSelectionTool.h" + + + namespace xAH { + + class JetContainer : public ParticleContainer + { + public: + JetContainer(const std::string& name = "jet", const std::string& detailStr="", float units = 1e3, bool mc = false); + virtual ~JetContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillJet( const xAOD::Jet* jet, const xAOD::Vertex* pv, int pvLocation ); + virtual void FillJet( const xAOD::IParticle* particle, const xAOD::Vertex* pv, int pvLocation ); + + virtual void updateParticle(uint idx, Jet& jet); + + //template + // void setBranch(TTree* tree, std::string varName, std::vector* localVectorPtr); + + private: + + InDet::InDetTrackSelectionTool * m_trkSelTool; + + // + // Vector branches + + // rapidity + std::vector *m_rapidity; + + // trigger + std::vector *m_isTrigMatched; + std::vector > *m_isTrigMatchedToChain; + std::vector *m_listTrigChains; + + // clean + std::vector *m_Timing; + std::vector *m_LArQuality; + std::vector *m_HECQuality; + std::vector *m_NegativeE; + std::vector *m_AverageLArQF; + std::vector *m_BchCorrCell; + std::vector *m_N90Constituents; + std::vector *m_LArBadHVEnergyFrac; + std::vector *m_LArBadHVNCell; + std::vector *m_ChargedFraction; + std::vector *m_OotFracClusters5; + std::vector *m_OotFracClusters10; + std::vector *m_LeadingClusterPt; + std::vector *m_LeadingClusterSecondLambda; + std::vector *m_LeadingClusterCenterLambda; + std::vector *m_LeadingClusterSecondR; + std::vector *m_clean_passLooseBad; + std::vector *m_clean_passLooseBadLLP; + std::vector *m_clean_passLooseBadUgly; + std::vector *m_clean_passLooseBadTrigger; + std::vector *m_clean_passLooseBadTriggerUgly; + std::vector *m_clean_passTightBad; + std::vector *m_clean_passTightBadUgly; + + // energy + std::vector *m_HECFrac; + std::vector *m_EMFrac; + std::vector *m_CentroidR; + std::vector *m_FracSamplingMax; + std::vector *m_FracSamplingMaxIndex; + std::vector *m_LowEtConstituentsFrac; + std::vector *m_GhostMuonSegmentCount; + std::vector *m_Width; + + // scales + std::vector *m_emScalePt; + std::vector *m_constScalePt; + std::vector *m_pileupScalePt; + std::vector *m_originConstitScalePt; + std::vector *m_etaJESScalePt; + std::vector *m_gscScalePt; + std::vector *m_jmsScalePt; + std::vector *m_insituScalePt; + + std::vector *m_emScaleM; + std::vector *m_constScaleM; + std::vector *m_pileupScaleM; + std::vector *m_originConstitScaleM; + std::vector *m_etaJESScaleM; + std::vector *m_gscScaleM; + std::vector *m_jmsScaleM; + std::vector *m_insituScaleM; + + // constScale Eta + std::vector *m_constScaleEta; + + // detector Eta + std::vector *m_detectorEta; + + // layer + std::vector< std::vector > *m_EnergyPerSampling; + + // tracksAll + std::vector< std::vector > *m_NumTrkPt1000; + std::vector< std::vector > *m_SumPtTrkPt1000; + std::vector< std::vector > *m_TrackWidthPt1000; + std::vector< std::vector > *m_NumTrkPt500; + std::vector< std::vector > *m_SumPtTrkPt500; + std::vector< std::vector > *m_TrackWidthPt500; + std::vector< std::vector > *m_JVF; + + // trackPV + std::vector *m_NumTrkPt1000PV; + std::vector *m_SumPtTrkPt1000PV; + std::vector *m_TrackWidthPt1000PV; + std::vector *m_NumTrkPt500PV; + std::vector *m_SumPtTrkPt500PV; + std::vector *m_TrackWidthPt500PV; + std::vector *m_JVFPV; + + + // trackAll or trackPV + std::vector *m_Jvt; + std::vector *m_JvtPass_Loose; + std::vector< std::vector > *m_JvtEff_SF_Loose; + std::vector *m_JvtPass_Medium; + std::vector< std::vector > *m_JvtEff_SF_Medium; + std::vector *m_JvtPass_Tight; + std::vector< std::vector > *m_JvtEff_SF_Tight; + std::vector *m_JvtJvfcorr; + std::vector *m_JvtRpt; + std::vector *m_fJvt; + std::vector *m_fJvtPass_Loose; + std::vector< std::vector > *m_fJvtEff_SF_Loose; + std::vector *m_fJvtPass_Medium; + std::vector< std::vector > *m_fJvtEff_SF_Medium; + std::vector *m_fJvtPass_Tight; + std::vector< std::vector > *m_fJvtEff_SF_Tight; + + // NNJvt + std::vector *m_NNJvt; + std::vector *m_NNJvtPass; + std::vector *m_JvtPass_FixedEffPt; + std::vector< std::vector > *m_JvtEff_SF_FixedEffPt; + std::vector *m_JvtPass_TightFwd; + std::vector< std::vector > *m_JvtEff_SF_TightFwd; + + // chargedPFOPV + std::vector *m_SumPtChargedPFOPt500PV; + std::vector *m_fCharged; + + // allTrack + std::vector *m_GhostTrackCount; + std::vector *m_GhostTrackPt; + std::vector< std::vector > *m_GhostTrack_pt; + std::vector< std::vector > *m_GhostTrack_qOverP; + std::vector< std::vector > *m_GhostTrack_eta; + std::vector< std::vector > *m_GhostTrack_phi; + std::vector< std::vector > *m_GhostTrack_e; + std::vector< std::vector > *m_GhostTrack_d0; + std::vector< std::vector > *m_GhostTrack_z0; + + // allTrackDetail + std::vector< std::vector > *m_GhostTrack_nPixelHits; + std::vector< std::vector > *m_GhostTrack_nSCTHits; + std::vector< std::vector > *m_GhostTrack_nTRTHits; + std::vector< std::vector > *m_GhostTrack_nPixelSharedHits; + std::vector< std::vector > *m_GhostTrack_nPixelSplitHits; + std::vector< std::vector > *m_GhostTrack_nInnermostPixelLayerHits; + std::vector< std::vector > *m_GhostTrack_nInnermostPixelLayerSharedHits; + std::vector< std::vector > *m_GhostTrack_nInnermostPixelLayerSplitHits; + std::vector< std::vector > *m_GhostTrack_nNextToInnermostPixelLayerHits; + std::vector< std::vector > *m_GhostTrack_nNextToInnermostPixelLayerSharedHits; + std::vector< std::vector > *m_GhostTrack_nNextToInnermostPixelLayerSplitHits; + + // constituent + std::vector< int > *m_numConstituents; + std::vector< std::vector > *m_constituentWeights; + std::vector< std::vector > *m_constituent_pt; + std::vector< std::vector > *m_constituent_eta; + std::vector< std::vector > *m_constituent_phi; + std::vector< std::vector > *m_constituent_e; + + + // flavTag + std::vector *m_HadronConeExclTruthLabelID; + std::vector *m_HadronConeExclExtendedTruthLabelID; + + std::vector *m_DL1r; + std::vector *m_DL1r_pu; + std::vector *m_DL1r_pc; + std::vector *m_DL1r_pb; + std::vector *m_DL1dv00; + std::vector *m_DL1dv00_pu; + std::vector *m_DL1dv00_pc; + std::vector *m_DL1dv00_pb; + std::vector *m_DL1dv01; + std::vector *m_DL1dv01_pu; + std::vector *m_DL1dv01_pc; + std::vector *m_DL1dv01_pb; + std::vector *m_fastDIPS; + std::vector *m_fastDIPS_pu; + std::vector *m_fastDIPS_pb; + std::vector *m_fastDIPS_pc; + std::vector *m_GN1; + std::vector *m_GN1_pu; + std::vector *m_GN1_pc; + std::vector *m_GN1_pb; + std::vector *m_GN2v00LegacyWP; + std::vector *m_GN2v00LegacyWP_pu; + std::vector *m_GN2v00LegacyWP_pc; + std::vector *m_GN2v00LegacyWP_pb; + std::vector *m_GN2v00NewAliasWP; + std::vector *m_GN2v00NewAliasWP_pu; + std::vector *m_GN2v00NewAliasWP_pc; + std::vector *m_GN2v00NewAliasWP_pb; + std::vector *m_GN2v01; + std::vector *m_GN2v01_pu; + std::vector *m_GN2v01_pc; + std::vector *m_GN2v01_pb; + std::vector *m_GN2v01_ptau; + + // Jet Fitter + std::vector *m_JetFitter_nVTX ; + std::vector *m_JetFitter_nSingleTracks ; + std::vector *m_JetFitter_nTracksAtVtx ; + std::vector *m_JetFitter_mass ; + std::vector *m_JetFitter_energyFraction ; + std::vector *m_JetFitter_significance3d ; + std::vector *m_JetFitter_deltaeta ; + std::vector *m_JetFitter_deltaphi ; + std::vector *m_JetFitter_N2Tpar ; + + + // SV Details + std::vector *m_SV0; + std::vector *m_sv0_NGTinSvx ; + std::vector *m_sv0_N2Tpair ; + std::vector *m_sv0_massvx ; + std::vector *m_sv0_efracsvx ; + std::vector *m_sv0_normdist ; + + std::vector *m_SV1; + std::vector *m_SV1IP3D; + std::vector *m_COMBx; + std::vector *m_sv1_pu ; + std::vector *m_sv1_pb ; + std::vector *m_sv1_pc ; + std::vector *m_sv1_c ; + std::vector *m_sv1_cu ; + std::vector *m_sv1_NGTinSvx ; + std::vector *m_sv1_N2Tpair ; + std::vector *m_sv1_massvx ; + std::vector *m_sv1_efracsvx ; + std::vector *m_sv1_normdist ; + std::vector *m_sv1_Lxy ; + std::vector *m_sv1_sig3d ; + std::vector *m_sv1_L3d ; + std::vector *m_sv1_distmatlay; + std::vector *m_sv1_dR ; + + // IP3D + std::vector *m_IP2D_pu ; + std::vector *m_IP2D_pb ; + std::vector *m_IP2D_pc ; + std::vector *m_IP2D ; + std::vector *m_IP2D_c ; + std::vector *m_IP2D_cu ; + std::vector *m_nIP2DTracks ; + + std::vector > *m_IP2D_gradeOfTracks ; + std::vector > *m_IP2D_flagFromV0ofTracks ; + std::vector > *m_IP2D_valD0wrtPVofTracks ; + std::vector > *m_IP2D_sigD0wrtPVofTracks ; + std::vector > *m_IP2D_weightBofTracks ; + std::vector > *m_IP2D_weightCofTracks ; + std::vector > *m_IP2D_weightUofTracks ; + + std::vector *m_IP3D_pu ; + std::vector *m_IP3D_pb ; + std::vector *m_IP3D_pc ; + std::vector *m_IP3D ; + std::vector *m_IP3D_c ; + std::vector *m_IP3D_cu ; + std::vector *m_nIP3DTracks ; + std::vector > *m_IP3D_gradeOfTracks ; + std::vector > *m_IP3D_flagFromV0ofTracks ; + std::vector > *m_IP3D_valD0wrtPVofTracks ; + std::vector > *m_IP3D_sigD0wrtPVofTracks ; + std::vector > *m_IP3D_valZ0wrtPVofTracks ; + std::vector > *m_IP3D_sigZ0wrtPVofTracks ; + std::vector > *m_IP3D_weightBofTracks ; + std::vector > *m_IP3D_weightCofTracks ; + std::vector > *m_IP3D_weightUofTracks ; + + std::vector *m_vtxOnlineValid; + std::vector *m_vtxHadDummy; + + + std::vector *m_bs_online_vx; + std::vector *m_bs_online_vy; + std::vector *m_bs_online_vz; + + + std::vector *m_vtx_offline_x0; + std::vector *m_vtx_offline_y0; + std::vector *m_vtx_offline_z0; + + std::vector *m_vtx_online_x0; + std::vector *m_vtx_online_y0; + std::vector *m_vtx_online_z0; + + std::vector *m_vtx_online_bkg_x0; + std::vector *m_vtx_online_bkg_y0; + std::vector *m_vtx_online_bkg_z0; + + struct btagOpPoint { + bool m_mc; + std::string m_accessorName; + Jet::BTaggerOP m_op = Jet::BTaggerOP::None; + bool m_isContinuous; + + // branches + std::vector* m_isTag; + std::vector< std::vector >* m_sf; + std::vector< std::vector >* m_ineffSf; // for continuous + + btagOpPoint(bool mc, const std::string& tagger, const std::string& wp) + : m_mc(mc), m_accessorName(tagger+"_"+wp) + { + m_isTag = new std::vector(); + m_sf = new std::vector< std::vector >(); + + m_isContinuous = (wp == "Continuous"); + if(m_isContinuous) + m_ineffSf = new std::vector< std::vector >(); + + else if(m_accessorName=="DL1r_FixedCutBEff_60") + m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_60; + else if(m_accessorName=="DL1r_FixedCutBEff_70") + m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_70; + else if(m_accessorName=="DL1r_FixedCutBEff_77") + m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_77; + else if(m_accessorName=="DL1r_FixedCutBEff_85") + m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_85; + + else if(m_accessorName=="DL1dv00_FixedCutBEff_60") + m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_60; + else if(m_accessorName=="DL1dv00_FixedCutBEff_70") + m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_70; + else if(m_accessorName=="DL1dv00_FixedCutBEff_77") + m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_77; + else if(m_accessorName=="DL1dv00_FixedCutBEff_85") + m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_85; + + else if(m_accessorName=="DL1dv01_FixedCutBEff_60") + m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_60; + else if(m_accessorName=="DL1dv01_FixedCutBEff_70") + m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_70; + else if(m_accessorName=="DL1dv01_FixedCutBEff_77") + m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_77; + else if(m_accessorName=="DL1dv01_FixedCutBEff_85") + m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_85; + + else if(m_accessorName=="GN120220509_FixedCutBEff_60") + m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_60; + else if(m_accessorName=="GN120220509_FixedCutBEff_70") + m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_70; + else if(m_accessorName=="GN120220509_FixedCutBEff_77") + m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_77; + else if(m_accessorName=="GN120220509_FixedCutBEff_85") + m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_85; + + else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_60") + m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60; + else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_70") + m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70; + else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_77") + m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77; + else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_85") + m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85; + + else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_60") + m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60; + else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_70") + m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70; + else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_77") + m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77; + else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_85") + m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85; + + else if(m_accessorName=="GN2v01_FixedCutBEff_65") + m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_65; + else if(m_accessorName=="GN2v01_FixedCutBEff_70") + m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_70; + else if(m_accessorName=="GN2v01_FixedCutBEff_77") + m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_77; + else if(m_accessorName=="GN2v01_FixedCutBEff_85") + m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_85; + else if(m_accessorName=="GN2v01_FixedCutBEff_90") + m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_90; + + } + + ~btagOpPoint() + { + delete m_isTag; + delete m_sf; + if(m_isContinuous) + delete m_ineffSf; + } + + void setTree(TTree *tree, const std::string& jetName) + { + std::string branch = m_isContinuous ? "Quantile_"+m_accessorName : "is_"+m_accessorName; + HelperFunctions::connectBranch (jetName, tree, branch, &m_isTag); + if(m_mc) + { + HelperFunctions::connectBranch >(jetName, tree,"SF_"+m_accessorName, &m_sf); + if(m_isContinuous) + HelperFunctions::connectBranch>(jetName, tree, "InefficiencySF_"+m_accessorName, &m_ineffSf); + } + } + + void setBranch(TTree *tree, const std::string& jetName) + { + std::string id = m_isContinuous ? "_Quantile_" : "_is_"; + tree->Branch((jetName+id+m_accessorName).c_str(), &m_isTag); + if ( m_mc ) + { + tree->Branch((jetName+"_SF_"+m_accessorName).c_str() , &m_sf); + if(m_isContinuous) + tree->Branch((jetName+"_InefficiencySF_"+m_accessorName).c_str(), &m_ineffSf); + } + } + + void clear() + { + m_isTag->clear(); + m_sf->clear(); + if(m_isContinuous) + m_ineffSf->clear(); + } + + void Fill( const xAOD::Jet* jet ) + { + static const std::vector junk(1,-999); + + if( m_isContinuous ) + { + SG::AuxElement::ConstAccessor< int > quantile("BTag_Quantile_"+m_accessorName); + m_isTag->push_back( quantile.isAvailable(*jet) ? quantile(*jet) : -1 ); + + if(m_mc) + { + SG::AuxElement::ConstAccessor< std::vector > sf( "BTag_SF_" +m_accessorName); + SG::AuxElement::ConstAccessor< std::vector > ineffSf("BTag_InefficiencySF_"+m_accessorName); + + m_sf ->push_back( sf.isAvailable( *jet ) ? sf( *jet ) : junk); + m_ineffSf->push_back( ineffSf.isAvailable( *jet ) ? ineffSf( *jet ) : junk); + } + } + else + { + SG::AuxElement::ConstAccessor< char > isTag("BTag_"+m_accessorName); + m_isTag->push_back( isTag.isAvailable(*jet) ? isTag(*jet) : -1 ); + + if(m_mc) + { + SG::AuxElement::ConstAccessor< std::vector > sf("BTag_SF_"+m_accessorName); + m_sf->push_back( sf.isAvailable( *jet ) ? sf( *jet ) : junk); + } + } + + } // Fill + }; + + std::vector m_btags; + + // JVC + std::vector *m_JetVertexCharge_discriminant; + + // area + std::vector *m_GhostArea; + std::vector *m_ActiveArea; + std::vector *m_VoronoiArea; + std::vector *m_ActiveArea4vec_pt; + std::vector *m_ActiveArea4vec_eta; + std::vector *m_ActiveArea4vec_phi; + std::vector *m_ActiveArea4vec_m; + + // truth + std::vector *m_ConeTruthLabelID; + std::vector *m_TruthCount; + std::vector *m_TruthLabelDeltaR_B; + std::vector *m_TruthLabelDeltaR_C; + std::vector *m_TruthLabelDeltaR_T; + std::vector *m_PartonTruthLabelID; + std::vector *m_GhostTruthAssociationFraction; + std::vector *m_truth_E; + std::vector *m_truth_pt; + std::vector *m_truth_phi; + std::vector *m_truth_eta; + + + // truth detail + std::vector *m_GhostBHadronsFinalCount; + std::vector *m_GhostBHadronsInitialCount; + std::vector *m_GhostBQuarksFinalCount; + std::vector *m_GhostBHadronsFinalPt; + std::vector *m_GhostBHadronsInitialPt; + std::vector *m_GhostBQuarksFinalPt; + + std::vector *m_GhostCHadronsFinalCount; + std::vector *m_GhostCHadronsInitialCount; + std::vector *m_GhostCQuarksFinalCount; + std::vector *m_GhostCHadronsFinalPt; + std::vector *m_GhostCHadronsInitialPt; + std::vector *m_GhostCQuarksFinalPt; + + std::vector *m_GhostTausFinalCount; + std::vector *m_GhostTausFinalPt; + + std::vector *m_truth_pdgId; + std::vector *m_truth_partonPt; + std::vector *m_truth_partonDR; + + // charge + std::vector *m_charge; + + // passSel + std::vector *m_passSel; + + // passOR + std::vector *m_passOR; + }; + } + + + + #endif // xAODAnaHelpers_JetContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_JetHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_JetHists.h.rst.txt new file mode 100644 index 0000000000..20f16a4192 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_JetHists.h.rst.txt @@ -0,0 +1,385 @@ + +.. _program_listing_file_xAODAnaHelpers_JetHists.h: + +Program Listing for File JetHists.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/JetHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_JetHists_H + #define xAODAnaHelpers_JetHists_H + + #include "xAODAnaHelpers/IParticleHists.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/TracksInJetHists.h" + #include + #include "xAODAnaHelpers/Jet.h" + #include "xAODAnaHelpers/EventInfo.h" + #include "xAODAnaHelpers/OnlineBeamSpotTool.h" + + ANA_MSG_HEADER(msgJetHists) + + class JetHists : public IParticleHists + { + public: + + + JetHists(std::string name, std::string detailStr, const std::string& prefix="jet", const std::string& titleprefix="jet"); + virtual ~JetHists() ; + + virtual StatusCode initialize(); + virtual StatusCode execute( const xAOD::Jet* jet, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAH::Jet* jet, float eventWeight, const xAH::EventInfo* eventInfo = 0); + virtual StatusCode finalize(); + + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using IParticleHists::execute; // overload + virtual void record(EL::IWorker* wk); + + protected: + + virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo = 0 ); + + // holds bools that control which histograms are filled + HelperClasses::JetInfoSwitch* m_infoSwitch; + + private: + + std::string m_titlePrefix; + xAH::OnlineBeamSpotTool m_onlineBSTool; + + // clean + TH1F* m_jetTime; + TH1F* m_LArQuality; + TH1F* m_hecq; + TH1F* m_negE; + TH1F* m_avLArQF; + TH1F* m_bchCorrCell; + TH1F* m_N90Const; + //TH1F* m_LArQmean; + //TH1F* m_LArBadHVEFrac; + //TH1F* m_LArBadHVNCell; + TH1F* m_ChargedFraction; + //TH1F* m_OotFracClusters5; + //TH1F* m_OotFracClusters10; + //TH1F* m_LeadingClusterPt; + //TH1F* m_LeadingClusterSecondLambda; + //TH1F* m_LeadingClusterCenterLambda; + //TH1F* m_LeadingClusterSecondR; + //TH1F* m_clean_passLooseBad; + //TH1F* m_clean_passLooseBadUgly; + //TH1F* m_clean_passTightBad; + //TH1F* m_clean_passTightBadUgly; + + + //layer + TH1F* m_PreSamplerB; + TH1F* m_EMB1; + TH1F* m_EMB2; + TH1F* m_EMB3; + TH1F* m_PreSamplerE; + TH1F* m_EME1; + TH1F* m_EME2; + TH1F* m_EME3; + TH1F* m_HEC0; + TH1F* m_HEC1; + TH1F* m_HEC2; + TH1F* m_HEC3; + TH1F* m_TileBar0; + TH1F* m_TileBar1; + TH1F* m_TileBar2; + TH1F* m_TileGap1; + TH1F* m_TileGap2; + TH1F* m_TileGap3; + TH1F* m_TileExt0; + TH1F* m_TileExt1; + TH1F* m_TileExt2; + TH1F* m_FCAL0; + TH1F* m_FCAL1; + TH1F* m_FCAL2; + + // area + TH1F* m_actArea; + + + TH1F* m_chf; + + //energy + TH1F* m_HECf; + TH1F* m_EMf; + TH1F* m_centroidR; + TH1F* m_fracSampMax; + TH1F* m_fracSampMaxIdx; + TH1F* m_lowEtFrac; + //TH1F* m_GhostMuonSegmentCount; + //TH1F* m_Width; + + + // resolution + TH1F* m_jetGhostTruthPt; + TH2F* m_jetPt_vs_resolution; + TH2F* m_jetGhostTruthPt_vs_resolution; + + // truth jets + TH1F* m_truthLabelID; + TH1F* m_hadronConeExclTruthLabelID; + TH1F* m_partonTruthLabelID; + TH1F* m_truthCount; + TH1F* m_truthPt; + TH1F* m_truthPt_m; + TH1F* m_truthPt_l; + TH1F* m_truthEta; + TH1F* m_truthPhi; + TH1F* m_truthDr_B; + TH1F* m_truthDr_C; + TH1F* m_truthDr_T; + //TH1F *m_GhostTruthAssociationFraction; + + // Detailed truth jet plots + TH1F* m_truthCount_BhadFinal; + TH1F* m_truthCount_BhadInit ; + TH1F* m_truthCount_BQFinal ; + TH1F* m_truthPt_BhadFinal; + TH1F* m_truthPt_BhadInit ; + TH1F* m_truthPt_BQFinal ; + + TH1F* m_truthCount_ChadFinal; + TH1F* m_truthCount_ChadInit ; + TH1F* m_truthCount_CQFinal ; + TH1F* m_truthPt_ChadFinal; + TH1F* m_truthPt_ChadInit ; + TH1F* m_truthPt_CQFinal ; + + + TH1F* m_truthCount_TausFinal; + TH1F* m_truthPt_TausFinal ; + + // JVC + TH1F* m_JVC; + + // Flavor Tag + TH1F* m_COMB ; + TH1F* m_SV0 ; + TH1F* m_JetFitter ; + + TProfile* m_vtxClass_vs_lBlock; + TProfile* m_vtxEff10_vs_lBlock; + TProfile* m_vtxEff1_vs_lBlock; + TProfile* m_vtxEff10_raw_vs_lBlock; + TProfile* m_vtxEff1_raw_vs_lBlock; + TProfile* m_vtxEff10_noDummy_vs_lBlock; + TProfile* m_vtxEff1_noDummy_vs_lBlock; + + TH1F* m_trkSum_ntrk ; + TH1F* m_trkSum_sPt ; + TH1F* m_trkSum_vPt ; + TH1F* m_trkSum_vAbsEta ; + TH1F* m_width ; + TH1F* m_n_trk_sigd0cut ; + TH1F* m_trk3_d0sig ; + TH1F* m_trk3_z0sig ; + TH1F* m_sv_scaled_efc ; + TH1F* m_jf_scaled_efc ; + + TH1F* m_jf_nVTX ; + TH1F* m_jf_nSingleTracks ; + TH1F* m_jf_nTracksAtVtx ; + TH1F* m_jf_mass ; + TH1F* m_jf_energyFraction ; + TH1F* m_jf_significance3d ; + TH1F* m_jf_deltaeta ; + TH1F* m_jf_deltaeta_l ; + TH1F* m_jf_deltaphi ; + TH1F* m_jf_deltaphi_l ; + TH1F* m_jf_deltaR ; + TH1F* m_jf_N2Tpar ; + TH1F* m_jf_pb ; + TH1F* m_jf_pc ; + TH1F* m_jf_pu ; + TH1F* m_jf_mass_unco ; + TH1F* m_jf_dR_flight ; + + TH1F* m_sv0_NGTinSvx ; + TH1F* m_sv0_N2Tpair ; + TH1F* m_sv0_massvx ; + TH1F* m_sv0_efracsvx ; + TH1F* m_sv0_normdist ; + + TH1F* m_SV1_pu ; + TH1F* m_SV1_pb ; + TH1F* m_SV1_pc ; + TH1F* m_SV1 ; + TH1F* m_SV1_c ; + TH1F* m_SV1_cu ; + TH1F* m_sv1_NGTinSvx ; + TH1F* m_sv1_N2Tpair ; + TH1F* m_sv1_massvx ; + TH1F* m_sv1_efracsvx ; + TH1F* m_sv1_normdist ; + TH1F* m_SV1_Lxy ; + TH1F* m_SV1_sig3d ; + TH1F* m_SV1_L3d ; + TH1F* m_SV1_distmatlay ; + TH1F* m_SV1_dR ; + + TH1F* m_nIP2DTracks ; + TH1F* m_IP2D_gradeOfTracks ; + TH1F* m_IP2D_flagFromV0ofTracks ; + TH1F* m_IP2D_valD0wrtPVofTracks ; + TH1F* m_IP2D_sigD0wrtPVofTracks ; + TH1F* m_IP2D_sigD0wrtPVofTracks_l; + TH1F* m_IP2D_errD0wrtPVofTracks ; + TH1F* m_IP2D_weightBofTracks ; + TH1F* m_IP2D_weightCofTracks ; + TH1F* m_IP2D_weightUofTracks ; + TH1F* m_IP2D_pu ; + TH1F* m_IP2D_pb ; + TH1F* m_IP2D_pc ; + TH1F* m_IP2D ; + TH1F* m_IP2D_c ; + TH1F* m_IP2D_cu ; + + TH1F* m_nIP3DTracks ; + TH1F* m_IP3D_gradeOfTracks ; + TH1F* m_IP3D_flagFromV0ofTracks ; + TH1F* m_IP3D_valD0wrtPVofTracks ; + TH1F* m_IP3D_sigD0wrtPVofTracks ; + TH1F* m_IP3D_sigD0wrtPVofTracks_l; + TH1F* m_IP3D_errD0wrtPVofTracks ; + TH1F* m_IP3D_valZ0wrtPVofTracks ; + TH1F* m_IP3D_sigZ0wrtPVofTracks ; + TH1F* m_IP3D_sigZ0wrtPVofTracks_l; + TH1F* m_IP3D_errZ0wrtPVofTracks ; + TH1F* m_IP3D_weightBofTracks ; + TH1F* m_IP3D_weightCofTracks ; + TH1F* m_IP3D_weightUofTracks ; + TH1F* m_IP3D_pu ; + TH1F* m_IP3D_pb ; + TH1F* m_IP3D_pc ; + TH1F* m_IP3D ; + TH1F* m_IP3D_c ; + TH1F* m_IP3D_cu ; + + // substructure + TH1F* m_tau1; + TH1F* m_tau2; + TH1F* m_tau3; + TH1F* m_tau21; + TH1F* m_tau32; + TH1F* m_tau1_wta; + TH1F* m_tau2_wta; + TH1F* m_tau3_wta; + TH1F* m_tau21_wta; + TH1F* m_tau32_wta; + TH1F* m_numConstituents; + + // Tracks in Jets + TH1F* m_nTrk; + TracksInJetHists* m_tracksInJet; + + // By eta + TH1F* m_jetPt_eta_0_1; + TH1F* m_jetPt_eta_1_2; + TH1F* m_jetPt_eta_2_2p5; + TH1F* m_jetPt_eta_1_2p5; + + // bs information + TH1F* m_bs_online_vx; + TH1F* m_bs_online_vy; + TH1F* m_bs_online_vz; + TH1F* m_bs_online_vz_l; + + TH1F* m_eta_bs_online_vz_0_1 ; + TH1F* m_eta_bs_online_vz_1_1p5; + TH1F* m_eta_bs_online_vz_1p5_2; + + // HLT Vertex Comp + TH1F* m_vtx_offline_x0; + TH1F* m_vtx_offline_y0; + TH1F* m_vtx_offline_z0; + TH1F* m_vtx_offline_z0_s; + TH1F* m_vtx_online_x0; + TH1F* m_vtx_online_y0; + TH1F* m_vtx_online_z0; + TH1F* m_vtx_online_z0_s; + TH1F* m_vtx_online_x0_raw; + TH1F* m_vtx_online_y0_raw; + TH1F* m_vtx_online_z0_raw; + + TH1F* m_vtxOnlineValid; + TH1F* m_vtxOfflineValid; + TH1F* m_vtxDiffz0; + TH1F* m_vtxDiffz0_m; + TH1F* m_vtxDiffz0_s; + + TH1F* m_vtxBkgDiffz0; + TH1F* m_vtxBkgDiffz0_m; + TH1F* m_vtxBkgDiffz0_s; + + TH1F* m_vtxDiffx0; + TH1F* m_vtxDiffx0_l; + + TH1F* m_vtxDiffy0; + TH1F* m_vtxDiffy0_l; + + TH1F* m_vtxClass; + TProfile* m_vtxDiffx0_vs_lBlock ; + TProfile* m_vtxDiffy0_vs_lBlock ; + TProfile* m_vtxDiffz0_vs_lBlock ; + + TH2F* m_lumiB_runN; + TH2F* m_lumiB_runN_vtxClass ; + TH2F* m_lumiB_runN_vtxDiffz0 ; + TH2F* m_lumiB_runN_lumiB ; + TH2F* m_lumiB_runN_bs_online_vz ; + TH2F* m_lumiB_runN_bs_den ; + + TProfile* m_vtx_online_x0_vs_vtx_online_z0; + TProfile* m_vtx_online_y0_vs_vtx_online_z0; + + // trackPV + //TH1F* m_NumTrkPt1000PV; + //TH1F* m_SumPtTrkPt1000PV; + //TH1F* m_TrackWidthPt1000PV; + //TH1F* m_NumTrkPt500PV; + //TH1F* m_SumPtTrkPt500PV; + //TH1F* m_TrackWidthPt500PV; + //TH1F* m_JVFPV; + + // trackAll or trackPV + //TH1F* m_Jvt; + //TH1F* m_JvtJvfcorr; + //TH1F* m_JvtRpt; + + + // charge + //TH1F *m_charge; + + TH1F* m_actualMu; // ! + TH1F* m_avgMu; + TH1F* m_jetPt_avgMu_00_15; + TH1F* m_jetPt_avgMu_15_25; + TH1F* m_jetPt_avgMu_25; + TH2F* m_avgMu_vs_jetPt; + + // Eta-phi map + TH2F* m_etaPhi; + + // Some other 2D plots + TH2F* m_vtxDiffz0_vs_vtx_offline_z0; + TH2F* m_vtxDiffz0_s_vs_vtx_offline_z0; + TH2F* m_vtxDiffz0_s_vs_vtxDiffx0; + TH2F* m_vtxDiffz0_s_vs_vtxDiffy0; + + // TProfile in prep for showing it is flat + TH2F* m_vtxClass_vs_jetPt; + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..28b34b6502 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.rst.txt @@ -0,0 +1,49 @@ + +.. _program_listing_file_xAODAnaHelpers_JetHistsAlgo.h: + +Program Listing for File JetHistsAlgo.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/JetHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_JetHistsAlgo_H + #define xAODAnaHelpers_JetHistsAlgo_H + + #include "xAODAnaHelpers/IParticleHistsAlgo.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class JetHistsAlgo : public IParticleHistsAlgo + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + JetHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode execute (); + + // these are the functions not inherited from Algorithm + EL::StatusCode AddHists( std::string name ); + + // this is needed to distribute the algorithm to the workers + ClassDef(JetHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_JetSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_JetSelector.h.rst.txt new file mode 100644 index 0000000000..405833d5c7 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_JetSelector.h.rst.txt @@ -0,0 +1,244 @@ + +.. _program_listing_file_xAODAnaHelpers_JetSelector.h: + +Program Listing for File JetSelector.h +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/JetSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_JetSelector_H + #define xAODAnaHelpers_JetSelector_H + + // EDM include(s): + #include "xAODJet/Jet.h" + #include "xAODJet/JetContainer.h" + + // ROOT include(s): + #include "TH1D.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "ParticleJetTools/JetPileupLabelingTool.h" + #include "JetMomentTools/JetVertexNNTagger.h" + #include "JetAnalysisInterfaces/IJvtEfficiencyTool.h" + #include "PATCore/IAsgSelectionTool.h" + #include "JetInterface/IJetModifier.h" + #include "FTagAnalysisInterfaces/IBTaggingSelectionTool.h" + #include "TriggerMatchingTool/IMatchingTool.h" + #include "TriggerMatchingTool/IMatchScoringTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + + class JetSelector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + bool m_useCutFlow = true; + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + std::string m_truthJetContainer = "AntiKt4TruthJets"; + std::string m_inputAlgo = ""; + std::string m_outputAlgo = ""; + bool m_writeSystToMetadata = false; + std::string m_jetScaleType = ""; + std::string m_decor = "passSel"; + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = false; + int m_nToProcess = -1; + bool m_cleanJets = true; + int m_cleanEvtLeadJets = -1; + bool m_cleanEvent = false; + bool m_markCleanEvent = false; + std::string m_jetScale4Selection = "Final"; + bool m_doMCCleaning = false; + float m_mcCleaningCut = 1.4; + int m_pass_min = -1; + int m_pass_max = -1; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + float m_ET_max = 1e8; + float m_ET_min = 1e8; + float m_eta_max = 1e8; + float m_eta_min = 1e8; + float m_detEta_max = 1e8; + float m_detEta_min = 1e8; + float m_mass_max = 1e8; + float m_mass_min = 1e8; + float m_rapidity_max = 1e8; + float m_rapidity_min = 1e8; + int m_truthLabel = -1; + bool m_useHadronConeExcl = true; + + bool m_doJVF = false; + float m_pt_max_JVF = 50e3; + float m_eta_max_JVF = 2.4; + float m_JVFCut = 0.5; + bool m_doTruthJetTagging = true; + bool m_doJVT = false; + bool m_noJVTVeto = false; + bool m_dofJVT = false; + bool m_dofJVTVeto = true; + float m_pt_max_JVT = 60e3; + float m_eta_max_JVT = 2.4; + bool m_jvtUsedBefore=false; + bool m_haveTruthJets = true; + bool m_getJVTSF = true; + + float m_JVTCut = -1.0; + + std::string m_WorkingPointJVT = "FixedEffPt"; + + std::string m_SFFileJVT = ""; // empty string means to apply dummy SFs + std::string m_outputSystNamesJVT = "JetJvtEfficiency_JVTSyst"; + bool m_recalculateJvtScores = true; + + float m_systValJVT = 0.0; + std::string m_systNameJVT = ""; + + std::string m_WorkingPointfJVT = "Loose"; + + std::string m_SFFilefJVT = ""; // empty string means to apply dummy SFs + + std::string m_outputSystNamesfJVT = "JetJvtEfficiency_fJVTSyst"; + + float m_systValfJVT = 0.0; + std::string m_systNamefJVT = ""; + bool m_fjvtUsedBefore=false; + + bool m_doJetTimingCut = false; + float m_jetTiming_max = -1; + + bool m_doBTagCut = false; + std::string m_corrFileName = "xAODBTaggingEfficiency/cutprofiles_22072015.root"; + std::string m_jetAuthor = "AntiKt4EMPFlowJets"; + std::string m_taggerName = "DL1r"; + std::string m_operatingPt = "FixedCutBEff_70"; + // for BTaggingSelectionTool -- doubles are needed or will crash + // for the b-tagging tool - these are the b-tagging groups minimums + // users making tighter cuts can use the selector's parameters to keep + // things consistent + double m_b_eta_max = 2.5; + double m_b_pt_min = 20e3; + + // HLT Btag quality + bool m_doHLTBTagCut = false; + std::string m_HLTBTagTaggerName = "DL1r"; + float m_HLTBTagCutValue = -0.4434; + bool m_requireHLTVtx = false; + bool m_requireNoHLTVtx = false; + + std::string m_passAuxDecorKeys = ""; + std::string m_failAuxDecorKeys = ""; + + /* trigger matching */ + std::string m_singleJetTrigChains = ""; + std::string m_diJetTrigChains = ""; + + bool m_removeDuplicates = false; + int m_count_events_with_duplicates = 0; + bool m_sort = false; + + private: + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + int m_pvLocation; + + bool m_isEMjet; + bool m_isLCjet; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + std::vector m_passKeys; + std::vector m_failKeys; + + /* object-level cutflow */ + + TH1D* m_jet_cutflowHist_1 = nullptr; + + int m_jet_cutflow_all; + int m_jet_cutflow_cleaning_cut; + int m_jet_cutflow_ptmax_cut; + int m_jet_cutflow_ptmin_cut; + int m_jet_cutflow_etmax_cut; + int m_jet_cutflow_etmin_cut; + int m_jet_cutflow_eta_cut; + int m_jet_cutflow_jvt_cut; + int m_jet_cutflow_timing_cut; + int m_jet_cutflow_btag_cut; + + std::vector m_systListJVT; + std::vector m_systListfJVT; + + std::vector m_singleJetTrigChainsList; + std::vector m_diJetTrigChainsList; + + asg::AnaToolHandle m_jetPileupLabelingTool; + asg::AnaToolHandle m_jetNNJvtMomentTool; + asg::AnaToolHandle m_jetNNJvtSelectionTool; + asg::AnaToolHandle m_jetNNJvtEfficiencyTool; + asg::AnaToolHandle m_jetfJvtSelectionTool; + asg::AnaToolHandle m_jetfJvtEfficiencyTool; + + asg::AnaToolHandle m_BJetSelectTool_handle{"BTaggingSelectionTool"}; + + asg::AnaToolHandle m_trigJetMatchTool_handle; + asg::AnaToolHandle m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"}; + asg::AnaToolHandle m_scoreTool{"Trig::DRScoringTool/DRScoringTool"}; + + bool m_doTrigMatch = true; + + std::string m_outputJVTPassed = "JetJVT_Passed"; + std::string m_outputfJVTPassed = "JetfJVT_Passed"; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + + + // this is a standard constructor + JetSelector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual bool executeSelection( const xAOD::JetContainer* inJets, float mcEvtWeight, bool count, std::string outContainerName, bool isNominal ); + + // added functions not from Algorithm + // why does this need to be virtual? + virtual int PassCuts( const xAOD::Jet* jet ); + + // this is needed to distribute the algorithm to the workers + ClassDef(JetSelector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.rst.txt new file mode 100644 index 0000000000..514f60ad4c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.rst.txt @@ -0,0 +1,88 @@ + +.. _program_listing_file_xAODAnaHelpers_L1JetContainer.h: + +Program Listing for File L1JetContainer.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/L1JetContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_L1JetContainer_H + #define xAODAnaHelpers_L1JetContainer_H + + #include + #include + + #include + #include + + #include + #include + + #include + #include + #include + #include + + #include + #include + + namespace xAH { + + class L1JetContainer : public ParticleContainer + { + public: + L1JetContainer(const std::string& name = "L1Jet", float units = 1e3, bool mc = false); + virtual ~L1JetContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, bool sort); + virtual void updateParticle(uint idx, Jet& jet); + + // access to et, eta and phi is the same for all the Phase1 L1 jet collections + template + void FillPhase1L1Jets(T*& jets, bool sort){ + if(!sort) { + for( auto jet_itr : *jets ) { + m_l1Jet_et->push_back ( static_cast(jet_itr->et()) / m_units ); + m_l1Jet_eta->push_back( jet_itr->eta() ); + m_l1Jet_phi->push_back( jet_itr->phi() ); + } + } else { + std::vector< std::vector > vec; + for( auto jet_itr : *jets ) { + std::vector row; + row.clear(); + row.push_back ( static_cast(jet_itr->et()) / m_units ); + row.push_back(jet_itr->eta()); + row.push_back(jet_itr->phi()); + vec.push_back(row); + } + + std::sort(vec.begin(), vec.end(), [&](const std::vector a, const std::vector b) { return a.at(0) < b.at(0);}); + for (int i = int(vec.size())-1; i >= 0; i--) { + m_l1Jet_et->push_back((vec.at(i)).at(0) / m_units); + m_l1Jet_eta->push_back((vec.at(i)).at(1)); + m_l1Jet_phi->push_back((vec.at(i)).at(2)); + } + vec.clear(); + } + } + + + + private: + // Vector branches + std::vector* m_l1Jet_et; + std::vector* m_l1Jet_eta; + std::vector* m_l1Jet_phi; + }; + + } + + #endif // xAODAnaHelpers_L1JetContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_METConstructor.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_METConstructor.h.rst.txt new file mode 100644 index 0000000000..652e9f586f --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_METConstructor.h.rst.txt @@ -0,0 +1,132 @@ + +.. _program_listing_file_xAODAnaHelpers_METConstructor.h: + +Program Listing for File METConstructor.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/METConstructor.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_METConstructor_H + #define xAODAnaHelpers_METConstructor_H + + #include + + // Infrastructure include(s): + #include "xAODRootAccess/Init.h" + #include "xAODRootAccess/TEvent.h" + #include "xAODRootAccess/TStore.h" + #include "AsgTools/AnaToolHandle.h" + + #include "METInterface/IMETMaker.h" + #include "METInterface/IMETSystematicsTool.h" + #include "METInterface/IMETSignificance.h" + + #include "TauAnalysisTools/ITauSelectionTool.h" + + #include "PATInterfaces/SystematicRegistry.h" + //look at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/SoftwareTutorialxAODAnalysisInROOT + + + using std::string; + + class METConstructor : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // configuration variables + std::string m_mapName = "METAssoc_AntiKt4LCTopo"; + std::string m_coreName = "MET_Core_AntiKt4LCTopo"; + std::string m_outputContainer = "NewRefFinal"; + std::string m_systConfigPrefix = "METUtilities/R22_PreRecs"; + std::string m_systConfigSoftTrkFile = "TrackSoftTerms-pflow.config"; + std::string m_inputJets = ""; + std::string m_inputElectrons = ""; + std::string m_inputPhotons = ""; + std::string m_inputTaus = ""; + std::string m_inputMuons = ""; + + bool m_doElectronCuts = false; + bool m_doPhotonCuts = false; + bool m_doTauCuts = false; + bool m_doMuonCuts = false; + + bool m_doMuonEloss = false; + bool m_doIsolMuonEloss = false; + bool m_doJVTCut = false; + bool m_dofJVTCut = false; + + std::string m_fJVTdecorName = "passFJVT"; + + bool m_doPFlow = true; + + std::string m_METWorkingPoint = ""; + + bool m_rebuildUsingTracksInJets = false; + bool m_addSoftClusterTerms = false; + + // MET significance + bool m_calculateSignificance = false; + bool m_significanceTreatPUJets = true; + double m_significanceSoftTermReso = 10.0; + + // used for systematics + bool m_runNominal = true; + std::string m_systName = "All"; + float m_systVal = 1.0; + + bool m_writeSystToMetadata = false; + + std::string m_jetSystematics = ""; + std::string m_eleSystematics = ""; + std::string m_muonSystematics = ""; + std::string m_tauSystematics = ""; + std::string m_phoSystematics = ""; + + std::string m_outputAlgoSystNames = ""; + + + private: + // tools + asg::AnaToolHandle m_metmaker_handle{"met::METMaker/METMaker", this}; + asg::AnaToolHandle m_metSyst_handle{"met::METSystematicsTool/METSystematicsTool", this}; + asg::AnaToolHandle m_metSignificance_handle{"met::METSignificance/METSignificance", this}; + + asg::AnaToolHandle m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool", this}; + + std::vector m_sysList; + + int m_numEvent; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + METConstructor (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute(); + virtual EL::StatusCode finalize(); + virtual EL::StatusCode histFinalize(); + + // this is needed to distribute the algorithm to the workers + ClassDef(METConstructor, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt new file mode 100644 index 0000000000..f852db4b17 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.rst.txt @@ -0,0 +1,55 @@ + +.. _program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h: + +Program Listing for File MessagePrinterAlgo.h +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MessagePrinterAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MessagePrinterAlgo_H + #define xAODAnaHelpers_MessagePrinterAlgo_H + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include + #include + + // std include + #include + + class MessagePrinterAlgo : public xAH::Algorithm + { + public: + unsigned int m_sourceWidth = 25; + + private: + + std::unique_ptr m_messagePrinter{nullptr}; + std::unique_ptr m_messagePrinterOverlay{nullptr}; + + public: + // this is a standard constructor + MessagePrinterAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(MessagePrinterAlgo, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MetContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MetContainer.h.rst.txt new file mode 100644 index 0000000000..e17208140d --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MetContainer.h.rst.txt @@ -0,0 +1,110 @@ + +.. _program_listing_file_xAODAnaHelpers_MetContainer.h: + +Program Listing for File MetContainer.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MetContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MetContainer_H + #define xAODAnaHelpers_MetContainer_H + + #include + + #include + + #include "xAODMissingET/MissingETContainer.h" + + #include + + namespace xAH { + + class MetContainer + { + public: + MetContainer(const std::string& name = "met", const std::string& detailStr="", float units = 1e3); + ~MetContainer(); + + void setTree (TTree *tree); + void setBranches(TTree *tree); + void clear(); + void FillMET( const xAOD::MissingETContainer* met); + template + void connectBranch(TTree *tree, std::string name, T_BR *variable); + template + void setBranch(TTree *tree, std::string name, T_BR *variable, std::string type); + + public: + + std::string m_name; + HelperClasses::METInfoSwitch m_infoSwitch; + bool m_debug; + float m_units; + + public: + + // met + float m_metFinalClus; + float m_metFinalClusPx; + float m_metFinalClusPy; + float m_metFinalClusPhi; + float m_metFinalClusSumEt; + + float m_metFinalClusOverSqrtSumEt; + float m_metFinalClusOverSqrtHt; + float m_metFinalClusSignificance; + float m_metFinalClusSigDirectional; + float m_metFinalClusRho; + float m_metFinalClusVarL; + float m_metFinalClusVarT; + + float m_metFinalTrk; + float m_metFinalTrkPx; + float m_metFinalTrkPy; + float m_metFinalTrkPhi; + float m_metFinalTrkSumEt; + + float m_metFinalTrkOverSqrtSumEt; + float m_metFinalTrkOverSqrtHt; + float m_metFinalTrkSignificance; + float m_metFinalTrkSigDirectional; + float m_metFinalTrkRho; + float m_metFinalTrkVarL; + float m_metFinalTrkVarT; + + float m_metEle; float m_metEleSumEt; float m_metElePhi; + float m_metGamma; float m_metGammaSumEt; float m_metGammaPhi; + float m_metTau; float m_metTauSumEt; float m_metTauPhi; + float m_metMuons; float m_metMuonsSumEt; float m_metMuonsPhi; + float m_metJet; float m_metJetSumEt; float m_metJetPhi; + float m_metJetTrk; float m_metJetTrkSumEt; float m_metJetTrkPhi; + float m_metSoftClus; float m_metSoftClusSumEt; float m_metSoftClusPhi; + float m_metSoftTrk; float m_metSoftTrkSumEt; float m_metSoftTrkPhi; + + + + }; + + template void MetContainer::connectBranch(TTree *tree, std::string name, T_BR *variable) + { + tree->SetBranchStatus ((m_name + name).c_str() , 1); + tree->SetBranchAddress ((m_name + name).c_str() , variable); + } + template void MetContainer::setBranch(TTree *tree, std::string name, T_BR *variable, std::string type) + { + if (!type.empty()) { + tree->Branch((m_name + name).c_str(), variable, (m_name + name + "/" + type).c_str()); + } else { + tree->Branch((m_name + name).c_str(), variable); + } + } + + } + + + + #endif // xAODAnaHelpers_MetContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MetHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MetHists.h.rst.txt new file mode 100644 index 0000000000..f0e51c1364 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MetHists.h.rst.txt @@ -0,0 +1,56 @@ + +.. _program_listing_file_xAODAnaHelpers_MetHists.h: + +Program Listing for File MetHists.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MetHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MetHists_H + #define xAODAnaHelpers_MetHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODMissingET/MissingETContainer.h" + + class MetHists : public HistogramManager + { + public: + + + MetHists(std::string name, std::string detailStr); + virtual ~MetHists() ; + + bool m_debug; + StatusCode initialize(); + StatusCode execute( const xAOD::MissingETContainer* met, float eventWeight ); + + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using HistogramManager::execute; // overload + + protected: + + // holds bools that control which histograms are filled + HelperClasses::METInfoSwitch* m_infoSwitch; + + private: + + TH1F* m_metFinalClus ; + TH1F* m_metFinalClusPx ; + TH1F* m_metFinalClusPy ; + TH1F* m_metFinalClusSumEt ; + TH1F* m_metFinalClusPhi ; + + TH1F* m_metFinalTrk ; + TH1F* m_metFinalTrkPx ; + TH1F* m_metFinalTrkPy ; + TH1F* m_metFinalTrkSumEt ; + TH1F* m_metFinalTrkPhi ; + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..3051aa3d77 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.rst.txt @@ -0,0 +1,60 @@ + +.. _program_listing_file_xAODAnaHelpers_MetHistsAlgo.h: + +Program Listing for File MetHistsAlgo.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MetHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MetHistsAlgo_H + #define xAODAnaHelpers_MetHistsAlgo_H + + #include + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class MetHistsAlgo : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + std::string m_inContainerName = ""; + + // configuration variables + std::string m_detailStr = ""; + + private: + MetHists* m_plots = nullptr; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + MetHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(MetHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.rst.txt new file mode 100644 index 0000000000..5c9e8f7b72 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.rst.txt @@ -0,0 +1,87 @@ + +.. _program_listing_file_xAODAnaHelpers_MinixAOD.h: + +Program Listing for File MinixAOD.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MinixAOD.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MinixAOD_H + #define xAODAnaHelpers_MinixAOD_H + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + //MetaData + #include + // #include + + #include + #include + #include + + class MinixAOD : public xAH::Algorithm + { + public: + std::string m_outputFileName = "out_miniXAOD"; + + bool m_createOutputFile = true; + + bool m_copyFileMetaData = false; + + bool m_copyTriggerInfo = false; + + bool m_copyCutBookkeeper = false; + + std::string m_simpleCopyKeys = ""; + + std::string m_storeCopyKeys = ""; + + std::string m_shallowCopyKeys = ""; + + std::string m_deepCopyKeys = ""; + + std::string m_vectorCopyKeys = ""; + + private: + std::vector m_simpleCopyKeys_vec; + std::vector> m_shallowCopyKeys_vec; + std::vector> m_deepCopyKeys_vec; + std::vector> m_vectorCopyKeys_vec; + + std::vector m_copyFromStoreToEventKeys_vec; + + xAODMaker::FileMetaDataTool *m_fileMetaDataTool = nullptr; + // xAODMaker::TriggerMenuMetaDataTool *m_trigMetaDataTool = nullptr; //! + + xAOD::CutBookkeeperContainer *m_outputCBKContainer = nullptr; + xAOD::CutBookkeeperAuxContainer *m_outputCBKContainer_aux = nullptr; + xAOD::CutBookkeeperContainer *m_outputInCBKContainer = nullptr; + xAOD::CutBookkeeperAuxContainer *m_outputInCBKContainer_aux = nullptr; + xAOD::CutBookkeeper *m_outputCBK = nullptr; + + public: + // this is a standard constructor + MinixAOD (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(MinixAOD, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Muon.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Muon.h.rst.txt new file mode 100644 index 0000000000..849a30bea1 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Muon.h.rst.txt @@ -0,0 +1,139 @@ + +.. _program_listing_file_xAODAnaHelpers_Muon.h: + +Program Listing for File Muon.h +=============================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Muon.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Muon_H + #define xAODAnaHelpers_Muon_H + + #include "xAODAnaHelpers/Particle.h" + + + namespace xAH { + + class Muon : public Particle + { + public: + + //Muon() {}; + //virtual ~Muon() { }; + + // kinematics + float charge; + + // trigger + int isTrigMatched; + std::vector isTrigMatchedToChain; + std::vector listTrigChains; + + // isolation + std::map< std::string, int > isIsolated; + float ptcone20; + float ptcone30; + float ptcone40; + float ptvarcone20; + float ptvarcone30; + float ptvarcone40; + float topoetcone20; + float topoetcone30; + float topoetcone40; + float neflowisol20; + float ptcone20_Nonprompt_All_MaxWeightTTVA_pt500; + float ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000; + float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500; + float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000; + float topoetcone20_CloseByCorr ; + float neflowisol20_CloseByCorr ; + float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ; + float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr; + + // quality + std::map< std::string, int > quality; + + // scale factors w/ sys + // per object + std::map< std::string, std::vector< float > > RecoEff_SF; + std::map< std::string, std::vector< float > > IsoEff_SF; + std::map< std::string, std::vector< float > > TrigEff_SF; + std::map< std::string, std::vector< float > > TrigMCEff; + + std::vector< float > TTVAEff_SF; + + // track parameters + float trkd0; + float trkd0sig; + float trkz0; + float trkz0sintheta; + float trkphi0; + float trktheta; + float trkcharge; + float trkqOverP; + + // track hit content + int trknSiHits; + int trknPixHits; + int trknPixHoles; + int trknSCTHits; + int trknSCTHoles; + int trknTRTHits; + int trknTRTHoles; + int trknBLayerHits; + int trknInnermostPixLayHits; // not available in DC14 + float trkPixdEdX; // not available in DC14 + + float EnergyLoss; + float EnergyLossSigma; + unsigned char energyLossType; + float MeasEnergyLoss; + float MeasEnergyLossSigma; + float ParamEnergyLoss; + float ParamEnergyLossSigmaMinus; + float ParamEnergyLossSigmaPlus; + + + TLorentzVector vec_eLoss() const{ + + float theta_muon = p4.Theta(); + float phi_muon = p4.Phi(); + float elossX = EnergyLoss/1000 * sin(theta_muon) * cos(phi_muon); + float elossY = EnergyLoss/1000 * sin(theta_muon) * sin(phi_muon); + float elossZ = EnergyLoss/1000 * cos(theta_muon); + + TLorentzVector muonELoss(elossX,elossY,elossZ,EnergyLoss/1000); + + return muonELoss; + } + + // prompt lepton + float PromptLeptonInput_DL1mu; + float PromptLeptonInput_DRlj; + float PromptLeptonInput_LepJetPtFrac; + float PromptLeptonInput_PtFrac; + float PromptLeptonInput_PtRel; + int PromptLeptonInput_TrackJetNTrack; + float PromptLeptonInput_ip2; + float PromptLeptonInput_ip3; + float PromptLeptonInput_rnnip; + int PromptLeptonInput_sv1_jf_ntrkv; + float PromptLeptonIso; + float PromptLeptonVeto; + + char isLRT; + char passIDcuts; + + // passSel + char passSel; + // passOR + char passOR; + + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.rst.txt new file mode 100644 index 0000000000..7962ab0d08 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.rst.txt @@ -0,0 +1,93 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonCalibrator.h: + +Program Listing for File MuonCalibrator.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonCalibrator.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MuonCalibrator_H + #define xAODAnaHelpers_MuonCalibrator_H + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include + #include + #include "MuonMomentumCorrections/MuonCalibTool.h" + + class MuonCalibrator : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + std::string m_calibrationMode = "noOption"; + + bool m_isRun3Geo = false; + + bool m_do2StationsHighPt = false; + + // sort after calibration + bool m_sort = true; + + // systematics + std::string m_inputAlgoSystNames = ""; + // this is the name of the vector of names of the systematically varied containers produced by THIS algo (these will be the m_inputAlgoSystNames of the algo downstream) + std::string m_outputAlgoSystNames = "MuonCalibrator_Syst"; + bool m_writeSystToMetadata = false; + + float m_systVal = 0.0; + std::string m_systName = ""; + + bool m_forceDataCalib = false; + + private: + int m_numEvent; + int m_numObject; + + std::string m_outAuxContainerName; + std::string m_outSCContainerName; + std::string m_outSCAuxContainerName; + + std::vector m_systList; + + // tools + asg::AnaToolHandle m_muonCalibrationTool_handle{"CP::MuonCalibTool/MuonCalibrationTool", this}; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + MuonCalibrator (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(MuonCalibrator, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.rst.txt new file mode 100644 index 0000000000..97d459b73b --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.rst.txt @@ -0,0 +1,146 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonContainer.h: + +Program Listing for File MuonContainer.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MuonContainer_H + #define xAODAnaHelpers_MuonContainer_H + + #include + #include + + #include + #include + + #include + + #include + + #include + #include + + namespace xAH { + + class MuonContainer : public ParticleContainer + { + public: + MuonContainer(const std::string& name = "muon", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true); + virtual ~MuonContainer(); + + virtual void setTree(TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex ); + virtual void FillMuon( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + virtual void updateParticle(uint idx, Muon& muon); + + private: + + // kinematic + std::vector *m_charge; + + // trigger + std::vector *m_isTrigMatched; + std::vector > *m_isTrigMatchedToChain; + std::vector > *m_listTrigChains; + + // isolation + std::map< std::string, std::vector< int >* >* m_isIsolated; + std::vector *m_ptcone20; + std::vector *m_ptcone30; + std::vector *m_ptcone40; + std::vector *m_ptvarcone20; + std::vector *m_ptvarcone30; + std::vector *m_ptvarcone40; + std::vector *m_topoetcone20; + std::vector *m_topoetcone30; + std::vector *m_topoetcone40; + std::vector *m_neflowisol20; + std::vector *m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500; + std::vector *m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000; + std::vector *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500; + std::vector *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000; + std::vector *m_topoetcone20_CloseByCorr ; + std::vector *m_neflowisol20_CloseByCorr ; + std::vector *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ; + std::vector *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr; + + + // quality + std::map< std::string, std::vector< int >* >* m_quality; + + // scale factors w/ sys + // per object + std::vector< std::vector< float > > *m_TTVAEff_SF; + + std::map< std::string, std::vector< std::vector< float > >* >* m_RecoEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_IsoEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_TrigEff_SF; + std::map< std::string, std::vector< std::vector< float > >* >* m_TrigMCEff; + + // track parameters + std::vector *m_trkd0; + std::vector *m_trkd0sig; + std::vector *m_trkz0; + std::vector *m_trkz0sintheta; + std::vector *m_trkphi0; + std::vector *m_trktheta; + std::vector *m_trkcharge; + std::vector *m_trkqOverP; + + // track hit content + std::vector *m_trknSiHits; + std::vector *m_trknPixHits; + std::vector *m_trknPixHoles; + std::vector *m_trknSCTHits; + std::vector *m_trknSCTHoles; + std::vector *m_trknTRTHits; + std::vector *m_trknTRTHoles; + std::vector *m_trknBLayerHits; + std::vector *m_trknInnermostPixLayHits; // not available in DC14 + std::vector *m_trkPixdEdX; // not available in DC14 + + std::vector *m_EnergyLoss; + std::vector *m_EnergyLossSigma; + std::vector *m_energyLossType; + std::vector *m_MeasEnergyLoss; + std::vector *m_MeasEnergyLossSigma; + std::vector *m_ParamEnergyLoss; + std::vector *m_ParamEnergyLossSigmaMinus; + std::vector *m_ParamEnergyLossSigmaPlus; + + // prompt lepton + std::vector* m_PromptLeptonInput_DL1mu; + std::vector* m_PromptLeptonInput_DRlj; + std::vector* m_PromptLeptonInput_LepJetPtFrac; + std::vector* m_PromptLeptonInput_PtFrac; + std::vector* m_PromptLeptonInput_PtRel; + std::vector* m_PromptLeptonInput_TrackJetNTrack; + std::vector* m_PromptLeptonInput_ip2; + std::vector* m_PromptLeptonInput_ip3; + std::vector* m_PromptLeptonInput_rnnip; + std::vector* m_PromptLeptonInput_sv1_jf_ntrkv; + std::vector* m_PromptLeptonIso; + std::vector* m_PromptLeptonVeto; + + std::vector* m_isLRT; + std::vector* m_passIDcuts; + + // passSel + std::vector* m_passSel; + // passOR + std::vector* m_passOR; + + }; + } + #endif // xAODAnaHelpers_MuonContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..eaeb5ce604 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst.txt @@ -0,0 +1,139 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h: + +Program Listing for File MuonEfficiencyCorrector.h +================================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonEfficiencyCorrector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_MuonEfficiencyCorrector_H + #define xAODAnaHelpers_MuonEfficiencyCorrector_H + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/ISystematicsTool.h" + #include "MuonAnalysisInterfaces/IMuonEfficiencyScaleFactors.h" + #include "MuonAnalysisInterfaces/IMuonTriggerScaleFactors.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "PileupReweighting/PileupReweightingTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + namespace CP { + class MuonEfficiencyScaleFactors; + class MuonTriggerScaleFactors; + } + + class MuonEfficiencyCorrector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + + public: + + // configuration variables + std::string m_inContainerName = ""; + + std::string m_overrideCalibRelease = ""; + + // Reco efficiency SF + std::string m_WorkingPointReco = "Loose"; + + // Iso efficiency SF + std::string m_WorkingPointIso = "LooseTrackOnly"; + + bool m_AllowZeroSF = false; + + std::string m_MuTrigLegs = "HLT_mu26_imedium"; + bool m_usePerMuonTriggerSFs = true; + + // TTVA efficiency SF + std::string m_WorkingPointTTVA = "TTVA"; + + // systematics + std::string m_inputSystNamesMuons = ""; + + bool m_writeSystToMetadata = false; + + float m_systValReco = 0.0; + float m_systValIso = 0.0; + float m_systValTrig = 0.0; + float m_systValTTVA = 0.0; + std::string m_systNameReco = ""; + std::string m_systNameIso = ""; + std::string m_systNameTrig = ""; + std::string m_systNameTTVA = ""; + std::string m_outputSystNamesReco = "MuonEfficiencyCorrector_RecoSyst"; + std::string m_outputSystNamesIso = "MuonEfficiencyCorrector_IsoSyst"; + std::string m_outputSystNamesTrig = "MuonEfficiencyCorrector_TrigSyst"; + std::string m_outputSystNamesTTVA = "MuonEfficiencyCorrector_TTVASyst"; + + bool m_doLRT = false; + + private: + int m_numEvent; + int m_numObject; + + // To include the nominal in the Recp/Iso/Trig/TTVA efficiency SFs output, use "All", or include "Nominal" in the list + std::vector m_systListReco; + std::vector m_systListIso; + std::vector m_systListTrig; + std::vector m_systListTTVA; + + std::string m_outputSystNamesTrigBase; + + // tools + asg::AnaToolHandle m_pileup_tool_handle{"CP::PileupReweightingTool/Pileup"}; + asg::AnaToolHandle m_muRecoSF_tool; + std::string m_recoEffSF_tool_name; + asg::AnaToolHandle m_muIsoSF_tool; + std::string m_isoEffSF_tool_name; + asg::AnaToolHandle m_muTrigSF_tool; + std::string m_trigEffSF_tool_name; + asg::AnaToolHandle m_muTTVASF_tool; + std::string m_TTVAEffSF_tool_name; + std::map m_SingleMuTriggerMap; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + MuonEfficiencyCorrector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::MuonContainer* inputMuons, bool nominal, bool writeSystNames ); + + // this is needed to distribute the algorithm to the workers + ClassDef(MuonEfficiencyCorrector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonHists.h.rst.txt new file mode 100644 index 0000000000..f531ed684c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonHists.h.rst.txt @@ -0,0 +1,76 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonHists.h: + +Program Listing for File MuonHists.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MuonHists_H + #define xAODAnaHelpers_MuonHists_H + + #include "xAODAnaHelpers/IParticleHists.h" + #include + #include "xAODAnaHelpers/Muon.h" + #include "xAODAnaHelpers/EventInfo.h" + + ANA_MSG_HEADER(msgMuonHists) + + class MuonHists : public IParticleHists + { + public: + + + MuonHists(std::string name, std::string detailStr, const std::string& prefix="muon", const std::string& titleprefix="muon"); + virtual ~MuonHists() ; + + virtual StatusCode initialize(); + virtual StatusCode execute( const xAOD::Muon* muon, float eventWeight, const xAOD::EventInfo* eventInfo = 0); + virtual StatusCode execute( const xAH::Muon* muon, float eventWeight, const xAH::EventInfo* eventInfo = 0); + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using IParticleHists::execute; // overload + + protected: + + virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + virtual StatusCode execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo = 0 ); + + // holds bools that control which histograms are filled + HelperClasses::MuonInfoSwitch* m_infoSwitch; + + private: + + // Isolation + std::map m_isIsolated; + + TH1F* m_ptcone20 ; + TH1F* m_ptcone30 ; + TH1F* m_ptcone40 ; + TH1F* m_ptvarcone20 ; + TH1F* m_ptvarcone30 ; + TH1F* m_ptvarcone40 ; + TH1F* m_topoetcone20 ; + TH1F* m_topoetcone30 ; + TH1F* m_topoetcone40 ; + + TH1F* m_ptcone20_rel ; + TH1F* m_ptcone30_rel ; + TH1F* m_ptcone40_rel ; + TH1F* m_ptvarcone20_rel ; + TH1F* m_ptvarcone30_rel ; + TH1F* m_ptvarcone40_rel ; + TH1F* m_topoetcone20_rel ; + TH1F* m_topoetcone30_rel ; + TH1F* m_topoetcone40_rel ; + + + // quality + std::map m_quality; + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..d125e3d11b --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.rst.txt @@ -0,0 +1,46 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h: + +Program Listing for File MuonHistsAlgo.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MuonHistsAlgo_H + #define xAODAnaHelpers_MuonHistsAlgo_H + + #include "xAODAnaHelpers/IParticleHistsAlgo.h" + + class MuonHistsAlgo : public IParticleHistsAlgo + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + MuonHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode execute (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode AddHists( std::string name ); + + // this is needed to distribute the algorithm to the workers + ClassDef(MuonHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt new file mode 100644 index 0000000000..3f826d7012 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst.txt @@ -0,0 +1,63 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h: + +Program Listing for File MuonInFatJetCorrector.h +================================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonInFatJetCorrector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_MuonInFatJetCorrector_H + #define xAODAnaHelpers_MuonInFatJetCorrector_H + + #include + + class MuonInFatJetCorrector : public xAH::Algorithm + { + public: + enum Scheme {Calorimeter, TrackAssisted, Combined, SimpleMuon}; + + MuonInFatJetCorrector(); + + std::string m_fatJetContainerName = ""; + std::string m_trackJetContainerName = "AntiKtVR30Rmax4Rmin02TrackJets"; + std::string m_muonContainerName = ""; + std::string m_trackJetLinkName = "GhostVR30Rmax4Rmin02TrackJet"; + std::string m_calibratedMassDecoratorData = "JetInsituScaleMomentum"; + std::string m_calibratedMassDecoratorFullSim = "JetJMSScaleMomentum"; + std::string m_inputAlgo; + + float m_trackJetPtMin = 10000.0; + float m_trackJetEtaMax = 2.5; + float m_trackJetNConst = 2.0; + + float m_muonPtMin = 10000.0; + float m_muonEtaMax = 2.7; + + float m_muonDrMax = 0.4; + + virtual EL::StatusCode setupJob(EL::Job& job); + virtual EL::StatusCode histInitialize(); + virtual EL::StatusCode fileExecute(); + virtual EL::StatusCode changeInput(bool firstFile); + virtual EL::StatusCode initialize(); + virtual EL::StatusCode execute(); + virtual EL::StatusCode postExecute(); + virtual EL::StatusCode finalize(); + virtual EL::StatusCode histFinalize(); + + EL::StatusCode matchTrackJetsToMuons() const; + TLorentzVector getHbbCorrectedVector(const xAOD::Jet &jet); + const xAOD::JetFourMom_t getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector muons, + Scheme scheme, bool useJMSScale = false) const; + + private: + std::string m_calibratedMassDecorator; + + ClassDef(MuonInFatJetCorrector, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.rst.txt new file mode 100644 index 0000000000..84ccc76ace --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.rst.txt @@ -0,0 +1,180 @@ + +.. _program_listing_file_xAODAnaHelpers_MuonSelector.h: + +Program Listing for File MuonSelector.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/MuonSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_MuonSelector_H + #define xAODAnaHelpers_MuonSelector_H + + // EDM include(s): + #include "xAODMuon/MuonContainer.h" + #include "xAODTracking/Vertex.h" + + // ROOT include(s): + #include "TH1D.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "IsolationSelection/IIsolationSelectionTool.h" + #include "MuonAnalysisInterfaces/IMuonSelectionTool.h" + #include "TriggerMatchingTool/IMatchingTool.h" + #include "TriggerMatchingTool/IMatchScoringTool.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // forward-declare for now until IsolationSelectionTool interface is updated + namespace CP { + class IsolationSelectionTool; + } + + class MuonSelector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + + public: + + // cutflow + bool m_useCutFlow = true; + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + std::string m_outAuxContainerName; + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "MuonSelector_Syst"; + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = false; + int m_nToProcess = -1; + int m_pass_min = -1; + int m_pass_max = -1; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + bool m_pT_NaNcheck = false; + std::string m_muonQualityStr = "Medium"; + bool m_isRun3Geo = false; + //std::string m_muonType; + float m_eta_max = 1e8; + float m_d0_max = 1e8; + float m_d0sig_max = 1e8; + float m_z0sintheta_max = 1e8; + + bool m_removeCosmicMuon = false; + bool m_removeEventBadMuon = true; + + // isolation + bool m_doIsolation = true; + std::string m_MinIsoWPCut = ""; + std::string m_IsoWPList = "FCTightTrackOnly_FixedRad,FCLoose_FixedRad,FCTight_FixedRad,FixedCutPflowTight,FixedCutPflowLoose"; + std::string m_CaloIsoEff = "0.1*x+90"; + std::string m_TrackIsoEff = "98"; + std::string m_CaloBasedIsoType = "topoetcone20"; + std::string m_TrackBasedIsoType = "ptvarcone30"; + + /* trigger matching */ + std::string m_singleMuTrigChains = ""; + std::string m_diMuTrigChains = ""; + double m_minDeltaR = 0.1; + bool m_merged_muons = false; + std::string m_trigInputPrefix = ""; + + bool m_doLRT = false; + + std::string m_isoDecSuffix = ""; + + private: + + int m_muonQuality; + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + bool m_isUsedBefore = false; + + // object cutflow + TH1D* m_mu_cutflowHist_1 = nullptr; + TH1D* m_mu_cutflowHist_2 = nullptr; + + int m_mu_cutflow_all; + int m_mu_cutflow_eta_and_quaility_cut; + int m_mu_cutflow_ptmax_cut; + int m_mu_cutflow_ptmin_cut; + int m_mu_cutflow_ptnan_check; + int m_mu_cutflow_type_cut; + int m_mu_cutflow_z0sintheta_cut; + int m_mu_cutflow_d0_cut; + int m_mu_cutflow_d0sig_cut; + int m_mu_cutflow_iso_cut; + int m_mu_cutflow_cosmic_cut; + + std::vector m_IsoKeys; + + /* other private members */ + + std::vector m_singleMuTrigChainsList; + std::vector m_diMuTrigChainsList; + + // tools + asg::AnaToolHandle m_isolationSelectionTool_handle{"CP::IsolationSelectionTool/IsolationSelectionTool", this}; + // this only exists because the interface needs to be updated, complain on pathelp, remove forward declaration for this when fixed + CP::IsolationSelectionTool* m_isolationSelectionTool{nullptr}; + asg::AnaToolHandle m_muonSelectionTool_handle {"CP::MuonSelectionTool/MuonSelectionTool" , this}; + asg::AnaToolHandle m_trigMuonMatchTool_handle; + asg::AnaToolHandle m_trigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool" }; + asg::AnaToolHandle m_scoreTool {"Trig::DRScoringTool/DRScoringTool" }; + + bool m_doTrigMatch = true; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + MuonSelector (); + + ~MuonSelector(); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // added functions not from Algorithm + bool executeSelection( const xAOD::MuonContainer* inMuons, float mcEvtWeight, bool countPass, + ConstDataVector* selectedMuons ); + virtual int passCuts( const xAOD::Muon* muon, const xAOD::Vertex *primaryVertex ); + + // this is needed to distribute the algorithm to the workers + ClassDef(MuonSelector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt new file mode 100644 index 0000000000..a2cbf56f98 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst.txt @@ -0,0 +1,84 @@ + +.. _program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h: + +Program Listing for File OnlineBeamSpotTool.h +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/OnlineBeamSpotTool.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_OnlineBeamSpotTool_H + #define xAODAnaHelpers_OnlineBeamSpotTool_H + + #include "xAODEventInfo/EventInfo.h" + #include "xAODAnaHelpers/EventInfo.h" + + #include + #include + + namespace xAH { + + class OnlineBeamSpotTool + { + + public: + enum BSData{ + BSx, + BSy, + BSz + }; + + private: + struct LBData { + int m_LBStart; + int m_LBEnd; + float m_BSx; + float m_BSy; + float m_BSz; + + LBData(int LBStart, int LBEnd, float BSx, float BSy, float BSz){ + m_LBStart = LBStart; + m_LBEnd = LBEnd; + m_BSx = BSx; + m_BSy = BSy; + m_BSz = BSz; + } + }; + + typedef std::vector RunInfo; + typedef std::map RunToLBDataMap; + typedef std::map::iterator RunToLBDataMapItr; + + public: + + OnlineBeamSpotTool(); + ~OnlineBeamSpotTool(); + + float getOnlineBSInfo(const xAOD::EventInfo* eventInfo, BSData datakey); + float getOnlineBSInfo(const xAH::EventInfo* eventInfo, BSData datakey); + float getOnlineBSInfo(int runNumber, int lumiBlock, bool isMC, BSData datakey); + + private: + + const LBData* getLBData(int runNumber, int lumiBlock, bool isMC); + const LBData* getLBData(int lumiBlock); + + void setRunInfo(int runNumber); + void readFile(std::string rootFileName); + + RunToLBDataMap m_runList; + + int m_cachedRunNum; + int m_cachedLB; + RunInfo* m_cachedRunInfo; + LBData* m_cachedLBData; + LBData* m_mcLBData; + + + }; + + }//xAH + #endif // xAODAnaHelpers_OnlineBeamSpotTool_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.rst.txt new file mode 100644 index 0000000000..894d4c5fe1 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.rst.txt @@ -0,0 +1,168 @@ + +.. _program_listing_file_xAODAnaHelpers_OverlapRemover.h: + +Program Listing for File OverlapRemover.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/OverlapRemover.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef XAODANAHELPERS_OVERLAPREMOVER_H + #define XAODANAHELPERS_OVERLAPREMOVER_H + + // EDM include(s): + #include "xAODBase/IParticleHelpers.h" + #include "xAODBase/IParticleContainer.h" + #include "xAODEgamma/ElectronContainer.h" + #include "xAODMuon/MuonContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODEgamma/PhotonContainer.h" + #include "xAODTau/TauJetContainer.h" + + // external tools include(s): + #include "AssociationUtils/OverlapRemovalInit.h" + #include "AssociationUtils/OverlapRemovalTool.h" + #include "AssociationUtils/ToolBox.h" + + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // ROOT include(s): + #include "TH1D.h" + + class OverlapRemover : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // configuration variables + + bool m_useCutFlow = true; + + bool m_decorateSelectedObjects; + std::string m_decor = "passOR"; + bool m_createSelectedContainers; + bool m_useSelected = false; + std::string m_bTagWP = ""; + bool m_linkOverlapObjects = true; + bool m_useBoostedLeptons = false; + bool m_doEleEleOR = false; + bool m_applyRelPt = false; + bool m_lepFavWP = false; + + std::string m_outputAlgoSystNames = "ORAlgo_Syst"; + + std::string m_inContainerName_Electrons = ""; + std::string m_outContainerName_Electrons = ""; + std::string m_inputAlgoElectrons = ""; + + // Muons + std::string m_inContainerName_Muons = ""; + std::string m_outContainerName_Muons = ""; + std::string m_inputAlgoMuons = ""; + // Jets + std::string m_inContainerName_Jets = ""; + std::string m_outContainerName_Jets = ""; + std::string m_inputAlgoJets = ""; + // Photons + std::string m_inContainerName_Photons = ""; + std::string m_outContainerName_Photons = ""; + std::string m_inputAlgoPhotons = ""; + // Taus + std::string m_inContainerName_Taus = ""; + std::string m_outContainerName_Taus = ""; + std::string m_inputAlgoTaus = ""; + + protected: + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + bool m_useElectrons = false; + bool m_useMuons = false; + bool m_usePhotons = false; + bool m_useTaus = false; + + std::string m_outAuxContainerName_Electrons; + std::string m_outAuxContainerName_Muons; + std::string m_outAuxContainerName_Jets; + std::string m_outAuxContainerName_Photons; + std::string m_outAuxContainerName_Taus; + + ORUtils::ToolBox m_ORToolbox; + + enum SystType { + NOMINAL = 0, + ELSYST = 1, + MUSYST = 2, + JETSYST = 3, + PHSYST = 4, + TAUSYST = 5, + }; + + // object-level cutflow + + TH1D* m_el_cutflowHist_1 = nullptr; + TH1D* m_mu_cutflowHist_1 = nullptr; + TH1D* m_jet_cutflowHist_1 = nullptr; + TH1D* m_ph_cutflowHist_1 = nullptr; + TH1D* m_tau_cutflowHist_1 = nullptr; + + int m_el_cutflow_OR_cut; + int m_mu_cutflow_OR_cut; + int m_jet_cutflow_OR_cut; + int m_ph_cutflow_OR_cut; + int m_tau_cutflow_OR_cut; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + + // this is a standard constructor + OverlapRemover (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode fillObjectCutflow (const xAOD::IParticleContainer* objCont, + const std::string& overlapFlag = "passOR", + const std::string& selectFlag = "passSel"); + + virtual EL::StatusCode executeOR( const xAOD::ElectronContainer* inElectrons, + const xAOD::MuonContainer* inMuons, + const xAOD::JetContainer* inJets, + const xAOD::PhotonContainer* inPhotons, + const xAOD::TauJetContainer* inTaus, + SystType syst_type = NOMINAL, + std::vector* sysVec = nullptr, + std::vector* sysVecOut = nullptr); + + EL::StatusCode setCutFlowHist(); + EL::StatusCode setCounters(); + + // this is needed to distribute the algorithm to the workers + ClassDef(OverlapRemover, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Particle.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Particle.h.rst.txt new file mode 100644 index 0000000000..16751be38c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Particle.h.rst.txt @@ -0,0 +1,32 @@ + +.. _program_listing_file_xAODAnaHelpers_Particle.h: + +Program Listing for File Particle.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Particle.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Particle_H + #define xAODAnaHelpers_Particle_H + + #include + + namespace xAH { + + class Particle + { + + public: + + //Particle() {}; + virtual ~Particle() {} + + TLorentzVector p4; + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.rst.txt new file mode 100644 index 0000000000..9509ad562d --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.rst.txt @@ -0,0 +1,271 @@ + +.. _program_listing_file_xAODAnaHelpers_ParticleContainer.h: + +Program Listing for File ParticleContainer.h +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ParticleContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ParticleContainer_H + #define xAODAnaHelpers_ParticleContainer_H + + #include + #include + + #include + #include + + #include + #include + + #include + #include + + namespace xAH + { + + template + class ParticleContainer + { + public: + ParticleContainer(const std::string& name, + const std::string& detailStr="", + float units = 1e3, + bool mc = false, + bool useMass=false, + bool storeSystSFs = true, + const std::string& suffix="") + : m_name(name), + m_infoSwitch(detailStr), + m_mc(mc), + m_debug(false), + m_units(units), + m_storeSystSFs(storeSystSFs), + m_useMass(useMass), + m_suffix(suffix) + { + m_n = 0; + + // kinematic + m_pt =new std::vector(); + m_eta =new std::vector(); + m_phi =new std::vector(); + m_E =new std::vector(); + m_M =new std::vector(); + } + + virtual ~ParticleContainer() + { + // kinematic + if(m_infoSwitch.m_kinematic){ + delete m_pt; + delete m_eta; + delete m_phi; + delete m_E; + delete m_M; + } + } + + virtual void setTree(TTree *tree) + { + + std::string counterName = "n"+m_name; + if (!m_suffix.empty()) counterName += "_" + m_suffix; + if (m_infoSwitch.m_useTheS) { counterName += "s"; + std::cerr << "WARNING! The useTheS option is depricated in ParticleContainer." << std::endl; + } + + tree->SetBranchStatus (counterName.c_str() , 1); + if(!m_infoSwitch.m_noMultiplicity) tree->SetBranchAddress (counterName.c_str() , &m_n); + + if(m_infoSwitch.m_kinematic) + { + // Determine whether mass or energy is saved + std::string mname = branchName("m"); + m_useMass=tree->GetBranch(mname.c_str())!=0; + + connectBranch(tree,"pt" ,&m_pt); + connectBranch(tree,"eta",&m_eta); + connectBranch(tree,"phi",&m_phi); + if(m_useMass) connectBranch(tree,"m" ,&m_M); + else connectBranch(tree,"E" ,&m_E); + } + } + + virtual void setBranches(TTree *tree) + { + + std::string counterName = "n"+m_name; + if (!m_suffix.empty()) { counterName += "_" + m_suffix; } + + if(!m_infoSwitch.m_noMultiplicity) tree->Branch(counterName.c_str(), &m_n, (counterName+"/I").c_str()); + + if(m_infoSwitch.m_kinematic) { + if(m_useMass) setBranch(tree,"m", m_M ); + else setBranch(tree,"E", m_E ); + setBranch(tree,"pt", m_pt ); + setBranch(tree,"phi", m_phi ); + setBranch(tree,"eta", m_eta ); + } + } + + virtual void clear() + { + m_n = 0; + + if(m_infoSwitch.m_kinematic) { + if(m_useMass) m_M->clear(); + else m_E->clear(); + m_pt ->clear(); + m_phi ->clear(); + m_eta ->clear(); + } + } + + virtual void FillParticle(const xAOD::IParticle* particle) + { + m_n++; + + if( m_infoSwitch.m_kinematic ){ + m_pt -> push_back( particle->pt() / m_units ); + m_eta -> push_back( particle->eta() ); + m_phi -> push_back( particle->phi() ); + if(m_useMass) m_M->push_back ( particle->m() / m_units ); + else m_E->push_back ( particle->e() / m_units ); + } + } + + void updateEntry() + { + m_particles.resize(m_n); + + for(int i=0;i& particles() + { return m_particles; } + + T_PARTICLE& at_nonConst(uint idx) + { return m_particles[idx]; } + + const T_PARTICLE& at(uint idx) const + { return m_particles[idx]; } + + const T_PARTICLE& operator[](uint idx) const + { return m_particles[idx]; } + + uint size() const + { return m_particles.size(); } + + + protected: + std::string branchName(const std::string& varName) + { + std::string name = m_name + "_" + varName; + if (! m_suffix.empty()) { name += "_" + m_suffix; } + return name; + } + + template void connectBranch(TTree *tree, const std::string& branch, std::vector **variable) + { + std::string name = branchName(branch); + if(*variable) { delete (*variable); (*variable)=0; } + if(tree->GetBranch(name.c_str())) + { + (*variable)=new std::vector(); + tree->SetBranchStatus (name.c_str() , 1); + tree->SetBranchAddress (name.c_str() , variable); + } + } + + template void setBranch(TTree* tree, std::string varName, std::vector* localVectorPtr){ + std::string name = branchName(varName); + tree->Branch(name.c_str(), localVectorPtr); + } + + template void safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor& accessor, std::vector* destination, U defaultValue, int units = 1){ + if ( accessor.isAvailable( *xAODObj ) ) { + destination->push_back( accessor( *xAODObj ) / units ); + } else { + destination->push_back( defaultValue ); + } + } + + + template void safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor >& accessor, std::vector >* destination, int units = 1){ + destination->push_back( std::vector() ); + + if ( accessor.isAvailable( *xAODObj ) ) { + for(U itemInVec : accessor(*xAODObj)) destination->back().push_back(itemInVec / units); + } + return; + } + + template void safeSFVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor >& accessor, std::vector >* destination, const std::vector &defaultValue) { + if ( accessor.isAvailable( *xAODObj ) ) { + if ( m_storeSystSFs ) { + destination->push_back( accessor(*xAODObj) ); + } else { + destination->push_back( std::vector< float > ({accessor(*xAODObj)[0]}) ); + //std::cout << "NUMBER: " << std::vector< float > ({accessor(*xAODObj)[0]}) << std::endl; + } + } else { + destination->push_back( defaultValue ); + } + } + + virtual void updateParticle(uint idx, T_PARTICLE& particle) + { + if(m_infoSwitch.m_kinematic) + { + if(m_useMass){ + particle.p4.SetPtEtaPhiM(m_pt ->at(idx), + m_eta->at(idx), + m_phi->at(idx), + m_M ->at(idx)); + + } else{ + particle.p4.SetPtEtaPhiE(m_pt ->at(idx), + m_eta->at(idx), + m_phi->at(idx), + m_E ->at(idx)); + } + } + } + + std::string m_name; + + std::vector m_particles; + + public: + T_INFOSWITCH m_infoSwitch; + bool m_mc; + bool m_debug; + float m_units; + bool m_storeSystSFs; + + int m_n; + + + private: + bool m_useMass; + std::string m_suffix; + + // + // Vector branches + + // kinematic + std::vector *m_pt; + std::vector *m_eta; + std::vector *m_phi; + std::vector *m_E; + std::vector *m_M; + }; + + }//xAH + #endif // xAODAnaHelpers_ParticleContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt new file mode 100644 index 0000000000..b9e31e07ff --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.rst.txt @@ -0,0 +1,126 @@ + +.. _program_listing_file_xAODAnaHelpers_ParticlePIDManager.h: + +Program Listing for File ParticlePIDManager.h +============================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/ParticlePIDManager.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_ParticlePIDManager_H + #define xAODAnaHelpers_ParticlePIDManager_H + + // package include(s): + #include "xAODAnaHelpers/HelperClasses.h" + #include "xAODAnaHelpers/HelperFunctions.h" + + #include + #include "AsgMessaging/StatusCode.h" + + #include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h" + #include "ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h" + #include "ElectronPhotonSelectorTools/egammaPIDdefs.h" + #include "ElectronPhotonSelectorTools/LikelihoodEnums.h" + + // EDM include(s): + #include "xAODEgamma/ElectronContainer.h" + #include "xAODEgamma/Electron.h" + + // ROOT include(s): + #include "TObject.h" + + // C++ include(s) + #include + + ANA_MSG_HEADER(msgPIDManager) + + class ElectronLHPIDManager + { + public: + ElectronLHPIDManager (); + ElectronLHPIDManager ( std::string WP, bool debug = false ); + ~ElectronLHPIDManager(); + + StatusCode setupWPs( bool configTools, std::string selector_name = "" ); + + /* set default values for decorations (do it for all WPs) */ + StatusCode setDecorations( const xAOD::Electron* electron ); + + const std::string getSelectedWP (); + + /* returns a map containing all the tools */ + std::multimap< std::string, AsgElectronLikelihoodTool* > getAllWPTools() { return m_allWPTools; }; + /* returns a map containing only the tools w/ (WP >= selected WP) */ + std::multimap< std::string, AsgElectronLikelihoodTool* > getValidWPTools() { return m_validWPTools; }; + /* returns a string containing all the WPs */ + const std::set getAllWPs() { return m_allWPAuxDecors; }; + /* returns a string containing only the WPs >= selected WP */ + const std::set getValidWPs() { return m_validWPs; }; + + private: + + std::string m_selectedWP; + bool m_debug; + std::multimap m_allWPTools; + std::multimap m_validWPTools; + std::set m_allWPAuxDecors; + std::set m_validWPs; + + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_VeryLoose; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_Loose; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_LooseBL; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_Medium; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_Tight; + + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_VeryLooseLLP; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_LooseLLP; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_MediumLLP; + AsgElectronLikelihoodTool* m_asgElectronLikelihoodTool_TightLLP; + + }; + + class ElectronCutBasedPIDManager + { + public: + ElectronCutBasedPIDManager (); + ElectronCutBasedPIDManager ( std::string WP, bool debug = false ); + ~ElectronCutBasedPIDManager(); + + StatusCode setupWPs( bool configTools, std::string selector_name = "" ); + + /* set default values for decorations (do it for all WPs) */ + StatusCode setDecorations( const xAOD::Electron* electron ); + + const std::string getSelectedWP ( ) { return m_selectedWP; } + + /* returns a map containing all the tools */ + std::multimap< std::string, AsgElectronIsEMSelector* > getAllWPTools() { return m_allWPTools; }; + /* returns a map containing only the tools w/ (WP >= selected WP) */ + std::multimap< std::string, AsgElectronIsEMSelector* > getValidWPTools() { return m_validWPTools; }; + /* returns a string containing all the WPs */ + const std::set getAllWPs() { return m_allWPAuxDecors; }; + /* returns a string containing only the WPs >= selected WP */ + const std::set getValidWPs() { return m_validWPs; }; + + private: + + std::string m_selectedWP; + bool m_debug; + + std::multimap m_allWPTools; + std::multimap m_validWPTools; + std::set m_allWPAuxDecors; + std::set m_validWPs; + + AsgElectronIsEMSelector* m_asgElectronIsEMSelector_Loose; + AsgElectronIsEMSelector* m_asgElectronIsEMSelector_Medium; + AsgElectronIsEMSelector* m_asgElectronIsEMSelector_Tight; + + }; + + #endif + + diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Photon.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Photon.h.rst.txt new file mode 100644 index 0000000000..73266e144e --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Photon.h.rst.txt @@ -0,0 +1,70 @@ + +.. _program_listing_file_xAODAnaHelpers_Photon.h: + +Program Listing for File Photon.h +================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Photon.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Photon_H + #define xAODAnaHelpers_Photon_H + + #include "xAODAnaHelpers/Particle.h" + + + namespace xAH { + + class Photon : public Particle + { + public: + + // isolation + int isIsolated_Cone40CaloOnly; + int isIsolated_Cone40; + int isIsolated_Cone20; + float ptcone20; + float ptcone30; + float ptcone40; + float ptvarcone20; + float ptvarcone30; + float ptvarcone40; + float topoetcone20; + float topoetcone30; + float topoetcone40; + + // PID + int IsLoose; + int IsMedium; + int IsTight; + + //Purity + float radhad1; + float radhad; + float e277; + float reta; + float rphi; + float weta2; + float f1; + float wtot; + float deltae; + float eratio; + + // effSF + float LooseEffSF; + float MediumEffSF; + float TightEffSF; + + float LooseEffSF_Error; + float MediumEffSF_Error; + float TightEffSF_Error; + + // trigger + std::vector trigMatched; + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt new file mode 100644 index 0000000000..c7a94b6afc --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.rst.txt @@ -0,0 +1,124 @@ + +.. _program_listing_file_xAODAnaHelpers_PhotonCalibrator.h: + +Program Listing for File PhotonCalibrator.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/PhotonCalibrator.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_PhotonCalibrator_H + #define xAODAnaHelpers_PhotonCalibrator_H + + // CP interface includes + #include + #include + #include + #include + #include + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "EgammaAnalysisInterfaces/IAsgPhotonEfficiencyCorrectionTool.h" + #include "IsolationCorrections/IIsolationCorrectionTool.h" + + class AsgPhotonIsEMSelector; + class ElectronPhotonVariableCorrectionTool; + + namespace CP { + class EgammaCalibrationAndSmearingTool; + } + + + // algorithm wrapper + #include + + class PhotonCalibrator : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + // Calibration information + // Tool recommends using map, rather than setting individual calib paths. + // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/PhotonEfficiencyRun2#Recommendations_for_full_2015_an + // recommendation is set by tool + std::string m_overridePhotonCalibMap = ""; + + // ID information + // recommended files here: ElectronLikelihoodLooseOfflineConfig2016_Smooth.conf + std::string m_tightIDConfigPath = "ElectronPhotonSelectorTools/offline/20180825/PhotonIsEMTightSelectorCutDefs.conf"; + std::string m_mediumIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf"; + std::string m_looseIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf"; + + // sort after calibration + bool m_sort = true; + + // systematics + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "PhotonCalibrator_Syst"; + + bool m_useAFII = false; //For backwards compatibility + bool m_useAF3 = false; //For backwards compatibility + float m_systVal = 0.0; + std::string m_systName = ""; + + std::string m_esModel = "es2017_R21_v1"; + std::string m_decorrelationModel = ""; + int m_randomRunNumber = -1; + + bool m_readIDFlagsFromDerivation = false; + + private: + std::string m_outAuxContainerName; + std::string m_outSCContainerName; + std::string m_outSCAuxContainerName; + + std::vector m_systList; + + EL::StatusCode decorate(xAOD::Photon * photon); + + // tools + CP::EgammaCalibrationAndSmearingTool* m_EgammaCalibrationAndSmearingTool = nullptr; + asg::AnaToolHandle m_isolationCorrectionTool_handle {"CP::IsolationCorrectionTool/IsolationCorrectionTool", this}; + + ElectronPhotonVariableCorrectionTool* m_photonVarCorrectionTool = nullptr; + AsgPhotonIsEMSelector* m_photonTightIsEMSelector = nullptr; + AsgPhotonIsEMSelector* m_photonMediumIsEMSelector = nullptr; + AsgPhotonIsEMSelector* m_photonLooseIsEMSelector = nullptr; + + asg::AnaToolHandle m_photonTightEffTool_handle {"AsgPhotonEfficiencyCorrectionTool/tight" , this}; + asg::AnaToolHandle m_photonMediumEffTool_handle{"AsgPhotonEfficiencyCorrectionTool/medium" , this}; + asg::AnaToolHandle m_photonLooseEffTool_handle {"AsgPhotonEfficiencyCorrectionTool/loose" , this}; + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + + // this is a standard constructor + PhotonCalibrator (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(PhotonCalibrator, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.rst.txt new file mode 100644 index 0000000000..718ae64114 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.rst.txt @@ -0,0 +1,100 @@ + +.. _program_listing_file_xAODAnaHelpers_PhotonContainer.h: + +Program Listing for File PhotonContainer.h +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/PhotonContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_PhotonContainer_H + #define xAODAnaHelpers_PhotonContainer_H + + #include + #include + + #include + #include + + #include "xAODEgamma/PhotonContainer.h" + + #include + + #include + #include + + typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ; + + namespace xAH { + + class PhotonContainer : public ParticleContainer + { + public: + PhotonContainer(const std::string& name = "ph", const std::string& detailStr="", float units = 1e3, bool mc = false); + virtual ~PhotonContainer(); + + virtual void setTree(TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillPhoton( const xAOD::Photon* photon ); + virtual void FillPhoton( const xAOD::IParticle* particle ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + virtual void updateParticle(uint idx, Photon& photon); + + private: + + // isolation + std::vector* m_isIsolated_Cone40CaloOnly; + std::vector* m_isIsolated_Cone40; + std::vector* m_isIsolated_Cone20; + //std::vector* m_etcone20; + std::vector* m_ptcone20; + std::vector* m_ptcone30; + std::vector* m_ptcone40; + std::vector* m_ptvarcone20; + std::vector* m_ptvarcone30; + std::vector* m_ptvarcone40; + std::vector* m_topoetcone20; + std::vector* m_topoetcone30; + std::vector* m_topoetcone40; + + // PID + int m_n_IsLoose; + std::vector* m_IsLoose; + int m_n_IsMedium; + std::vector* m_IsMedium; + int m_n_IsTight; + std::vector* m_IsTight; + + //Purity + std::vector* m_radhad1; + std::vector* m_radhad; + std::vector* m_e277; + std::vector* m_reta; + std::vector* m_rphi; + std::vector* m_weta2; + std::vector* m_f1; + std::vector* m_wtot; + //std::vector* m_w1; + std::vector* m_deltae; + std::vector* m_eratio; + + // effSF + std::vector *m_LooseEffSF; + std::vector *m_MediumEffSF; + std::vector *m_TightEffSF; + + std::vector *m_LooseEffSF_Error; + std::vector *m_MediumEffSF_Error; + std::vector *m_TightEffSF_Error; + + // trigger + std::vector > *m_trigMatched; + }; + } + #endif // xAODAnaHelpers_PhotonContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.rst.txt new file mode 100644 index 0000000000..8f1e491402 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.rst.txt @@ -0,0 +1,58 @@ + +.. _program_listing_file_xAODAnaHelpers_PhotonHists.h: + +Program Listing for File PhotonHists.h +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/PhotonHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_PhotonHists_H + #define xAODAnaHelpers_PhotonHists_H + + #include "xAODAnaHelpers/IParticleHists.h" + #include + + #include + + ANA_MSG_HEADER(msgPhotonHists) + + class PhotonHists : public IParticleHists + { + public: + + + PhotonHists(std::string name, std::string detailStr); + virtual ~PhotonHists() ; + + virtual StatusCode initialize(); + virtual StatusCode execute( const xAOD::Photon* photon, float eventWeight, const xAOD::EventInfo* eventInfo = 0); + using HistogramManager::book; // make other overloaded version of book() to show up in subclass + using IParticleHists::execute; // overload + + protected: + + virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + + // holds bools that control which histograms are filled + HelperClasses::PhotonInfoSwitch* m_infoSwitch; + + private: + + // clean + TH1F* m_ptcone20; + TH1F* m_ptcone30; + TH1F* m_ptcone40; + TH1F* m_ptvarcone20; + TH1F* m_ptvarcone30; + TH1F* m_ptvarcone40; + TH1F* m_topoetcone20; + TH1F* m_topoetcone30; + TH1F* m_topoetcone40; + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..fcc97d216c --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.rst.txt @@ -0,0 +1,46 @@ + +.. _program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h: + +Program Listing for File PhotonHistsAlgo.h +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/PhotonHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_PhotonHistsAlgo_H + #define xAODAnaHelpers_PhotonHistsAlgo_H + + #include "xAODAnaHelpers/IParticleHistsAlgo.h" + + class PhotonHistsAlgo : public IParticleHistsAlgo + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + PhotonHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode execute (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode AddHists( std::string name ); + + // this is needed to distribute the algorithm to the workers + ClassDef(PhotonHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.rst.txt new file mode 100644 index 0000000000..f4989af211 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.rst.txt @@ -0,0 +1,123 @@ + +.. _program_listing_file_xAODAnaHelpers_PhotonSelector.h: + +Program Listing for File PhotonSelector.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/PhotonSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_PhotonSelector_H + #define xAODAnaHelpers_PhotonSelector_H + + // algorithm wrapper + #include + #include + #include + + namespace CP { + class IsolationSelectionTool; + } + + #include + + class PhotonSelector : public xAH::Algorithm + { + public: + + bool m_useCutFlow = true; + + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "PhotonSelector_Syst"; + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = true; + int m_nToProcess = -1; + int m_pass_min = -1; + int m_pass_max = -1; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + float m_eta_max = 1e8; + bool m_vetoCrack = true; + bool m_doAuthorCut = true; + bool m_doOQCut = true; + bool m_readOQFromDerivation = false; + + /* photon PID */ + std::string m_photonIdCut = "None"; + + /* isolation */ + std::string m_MinIsoWPCut = ""; + std::string m_IsoWPList = "FixedCutTightCaloOnly,FixedCutTight,FixedCutLoose"; + + private: + std::string m_outAuxContainerName; + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + /* event-level cutflow */ + + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + /* object-level cutflow */ + + TH1D* m_ph_cutflowHist_1 = nullptr; + + int m_ph_cutflow_all; + int m_ph_cutflow_author_cut; + int m_ph_cutflow_OQ_cut; + int m_ph_cutflow_PID_cut; + int m_ph_cutflow_ptmax_cut; + int m_ph_cutflow_ptmin_cut; + int m_ph_cutflow_eta_cut; + int m_ph_cutflow_iso_cut; + + + std::vector m_IsoKeys; + + /* tools */ + CP::IsolationSelectionTool* m_IsolationSelectionTool = nullptr; + + public: + + /* this is a standard constructor */ + + PhotonSelector (); + + ~PhotonSelector(); + + /* these are the functions inherited from Algorithm */ + + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + /* these are the functions not inherited from Algorithm */ + + bool executeSelection( const xAOD::PhotonContainer* inPhotons, float mcEvtWeight, bool countPass, + ConstDataVector* selectedPhotons ); + virtual bool passCuts( const xAOD::Photon* photon ); + + + ClassDef(PhotonSelector, 1); + + }; + + + #endif //#ifndef xAODAnaHelpers_PhotonSelector_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Tau.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Tau.h.rst.txt new file mode 100644 index 0000000000..d1e48c7f88 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Tau.h.rst.txt @@ -0,0 +1,72 @@ + +.. _program_listing_file_xAODAnaHelpers_Tau.h: + +Program Listing for File Tau.h +============================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Tau.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Tau_H + #define xAODAnaHelpers_Tau_H + + #include "xAODAnaHelpers/Particle.h" + + + namespace xAH { + + class Tau : public Particle + { + public: + + // trigger + int isTrigMatched; + std::vector isTrigMatchedToChain; + std::string listTrigChains; + + int ntrk; + float charge; + + std::map< std::string, std::vector< float > > TauEff_SF; + std::map< std::string, std::vector< float > > TauTrigEff_SF; + + // might need to delete these + int isJetRNNSigVeryLoose; + int isJetRNNSigLoose; + int isJetRNNSigMedium; + int isJetRNNSigTight; + + float JetRNNScore; + float JetRNNScoreSigTrans; + + int isEleRNNLoose; + int isEleRNNMedium; + int isEleRNNTight; + + float EleRNNScore; + + int passEleOLR; + + float matchedJetWidth; + float matchedJetJvt; + + std::vector tracks_pt; + std::vector tracks_eta; + std::vector tracks_phi; + + std::vector< int > tracks_isCore; + std::vector< int > tracks_isWide; + std::vector< int > tracks_failTrackFilter; + std::vector< int > tracks_passTrkSel; + std::vector< int > tracks_isClCharged; + std::vector< int > tracks_isClIso; + std::vector< int > tracks_isClConv; + std::vector< int > tracks_isClFake; + + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.rst.txt new file mode 100644 index 0000000000..9082b4d6c3 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.rst.txt @@ -0,0 +1,99 @@ + +.. _program_listing_file_xAODAnaHelpers_TauCalibrator.h: + +Program Listing for File TauCalibrator.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TauCalibrator.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TauCalibrator_H + #define xAODAnaHelpers_TauCalibrator_H + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "TauAnalysisTools/ITauSmearingTool.h" + + class TauCalibrator : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + + std::string m_RecommendationTag = ""; + + // apply a compatibility check between calo TES and MVA TES. For taus that do not pass the test calo based TES is used. Not recommended for 2022-prerec tag. + bool m_applyMVATESQualityCheck = false; + // For 2022-prerec, toggle between smearing/uncertainties calculated from PowhegPythia or Sherpa + std::string m_generator = ""; + std::string m_campaign = ""; + bool m_setAFII = false; + bool m_setAF3 = false; + + bool m_skipTruthMatchCheck = false; + + // sort after calibration + bool m_sort = true; + + // systematics + std::string m_inputAlgoSystNames = ""; + // this is the name of the vector of names of the systematically varied containers produced by THIS algo (these will be the m_inputAlgoSystNames of the algo downstream) + std::string m_outputAlgoSystNames = "TauCalibrator_Syst"; + bool m_writeSystToMetadata = false; + + private: + int m_numEvent; + int m_numObject; + + std::string m_outAuxContainerName; + std::string m_outSCContainerName; + std::string m_outSCAuxContainerName; + + std::vector m_systList; + + // tools + asg::AnaToolHandle m_tauSmearingTool_handle{"TauAnalysisTools::TauSmearingTool/TauSmearingTool", this}; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TauCalibrator (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(TauCalibrator, 1); + + }; + + #endif + + + + + diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TauContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TauContainer.h.rst.txt new file mode 100644 index 0000000000..a0df0a9b19 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TauContainer.h.rst.txt @@ -0,0 +1,97 @@ + +.. _program_listing_file_xAODAnaHelpers_TauContainer.h: + +Program Listing for File TauContainer.h +======================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TauContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TauContainer_H + #define xAODAnaHelpers_TauContainer_H + + #include + #include + + #include + #include + + #include + + #include + + #include + #include + + namespace xAH { + + class TauContainer : public ParticleContainer + { + public: + TauContainer(const std::string& name = "tau", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true); + virtual ~TauContainer(); + + virtual void setTree(TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillTau( const xAOD::TauJet* tau ); + virtual void FillTau( const xAOD::IParticle* particle ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + virtual void updateParticle(uint idx, Tau& tau); + + private: + + // trigger + std::vector *m_isTrigMatched; + std::vector > *m_isTrigMatchedToChain; + std::vector *m_listTrigChains; + + std::vector *m_ntrk; + std::vector *m_charge; + + // scale factors w/ sys + // per object + std::map< std::string, std::vector< std::vector< float > > >* m_TauEff_SF; + std::map< std::string, std::vector< std::vector< float > > >* m_TauTrigEff_SF; + + // might need to delete these + std::vector *m_isJetRNNSigVeryLoose; + std::vector *m_isJetRNNSigLoose; + std::vector *m_isJetRNNSigMedium; + std::vector *m_isJetRNNSigTight; + + std::vector *m_JetRNNScore; + std::vector *m_JetRNNScoreSigTrans; + + std::vector *m_isEleRNNLoose; + std::vector *m_isEleRNNMedium; + std::vector *m_isEleRNNTight; + + std::vector *m_EleRNNScore; + + std::vector *m_passEleOLR; + + std::vector< float > *m_tau_matchedJetWidth; + std::vector< float > *m_tau_matchedJetJvt; + + std::vector< std::vector< float > > *m_tau_tracks_pt; + std::vector< std::vector< float > > *m_tau_tracks_eta; + std::vector< std::vector< float > > *m_tau_tracks_phi; + + std::vector< std::vector< int > > *m_tau_tracks_isCore; + std::vector< std::vector< int > > *m_tau_tracks_isWide; + std::vector< std::vector< int > > *m_tau_tracks_failTrackFilter; + std::vector< std::vector< int > > *m_tau_tracks_passTrkSel; + std::vector< std::vector< int > > *m_tau_tracks_isClCharged; + std::vector< std::vector< int > > *m_tau_tracks_isClIso; + std::vector< std::vector< int > > *m_tau_tracks_isClConv; + std::vector< std::vector< int > > *m_tau_tracks_isClFake; + + }; + } + #endif // xAODAnaHelpers_TauContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt new file mode 100644 index 0000000000..67ac38cebd --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst.txt @@ -0,0 +1,116 @@ + +.. _program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h: + +Program Listing for File TauEfficiencyCorrector.h +================================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TauEfficiencyCorrector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_TauEfficiencyCorrector_H + #define xAODAnaHelpers_TauEfficiencyCorrector_H + + // CP interface includes + #include "PATInterfaces/SystematicRegistry.h" + #include "PATInterfaces/SystematicSet.h" + #include "PATInterfaces/SystematicsUtil.h" + #include "PATInterfaces/SystematicVariation.h" + #include "PATInterfaces/ISystematicsTool.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include "AsgTools/AnaToolHandle.h" + #include "PileupReweighting/PileupReweightingTool.h" + #include "TauAnalysisTools/TauEfficiencyCorrectionsTool.h" + #include "TauAnalysisTools/ITauEfficiencyCorrectionsTool.h" + #include "TauAnalysisTools/ITauSelectionTool.h" + + class TauEfficiencyCorrector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + + public: + + std::string m_RecommendationTag = ""; + + // configuration variables + std::string m_inContainerName = ""; + + // Reco efficiency SF + std::string m_WorkingPointReco = ""; + + // EleOLR efficiency SF if the the reco tau is a true tau + std::string m_WorkingPointEleOLRHadTau = ""; + + // EleIDLevel efficiency SF if the the reco tau is a true electron + std::string m_WorkingPointTauEleID = ""; + + // JetIDLevel efficiency SF + std::string m_WorkingPointTauJetID = ""; + + // working point for tauID used in + // combination with the trigger + std::string m_TriggerName = ""; + + // systematics + std::string m_inputSystNamesTaus = ""; + + bool m_writeSystToMetadata = false; + + float m_systVal = 0.0; + + std::string m_systName = ""; + + std::string m_outputSystNames = "TauEfficiencyCorrector_Syst"; + + private: + int m_numEvent; + int m_numObject; + + std::vector m_systList; + + // tools + asg::AnaToolHandle m_pileup_tool_handle{"CP::PileupReweightingTool/Pileup"}; + asg::AnaToolHandle m_tauEffCorrTool_handle{"TauAnalysisTools::TauEfficiencyCorrectionsTool/TauEfficiencyCorrectionsTool", this}; + // the selection tool is needed for baseline configuration + asg::AnaToolHandle m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool"}; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TauEfficiencyCorrector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual EL::StatusCode executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::TauJetContainer* inputTaus, bool nominal, bool writeSystNames ); + + // this is needed to distribute the algorithm to the workers + ClassDef(TauEfficiencyCorrector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.rst.txt new file mode 100644 index 0000000000..cd91214f65 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.rst.txt @@ -0,0 +1,86 @@ + +.. _program_listing_file_xAODAnaHelpers_TauJetMatching.h: + +Program Listing for File TauJetMatching.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TauJetMatching.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TauJetMatching_H + #define xAODAnaHelpers_TauJetMatching_H + + // EDM include(s): + #include "xAODTau/TauJet.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODJet/JetContainer.h" + #include "xAODJet/Jet.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class TauJetMatching : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + + public: + + // configuration variables + /* input container name */ + std::string m_inContainerName = ""; + /* output container name */ + std::string m_outContainerName; + /* output auxiliary container name */ + std::string m_outAuxContainerName; + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "TauJetMatching_Syst"; + + std::string m_inJetContainerName = ""; + float m_DeltaR = 0.2; + + private: + + int m_numEvent; + int m_numObject; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TauJetMatching (); + + ~TauJetMatching(); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // added functions not from Algorithm + bool executeDecoration( std::unordered_map >, const xAOD::TauJetContainer* tauCont); + float getDR(float eta1, float eta2, float phi1, float phi2); + std::unordered_map > findBestMatchDR(const xAOD::JetContainer* jetCont, + const xAOD::TauJetContainer* tauCont, + float best_DR); + + // this is needed to distribute the algorithm to the workers + ClassDef(TauJetMatching, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TauSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TauSelector.h.rst.txt new file mode 100644 index 0000000000..1280d2136b --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TauSelector.h.rst.txt @@ -0,0 +1,166 @@ + +.. _program_listing_file_xAODAnaHelpers_TauSelector.h: + +Program Listing for File TauSelector.h +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TauSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TauSelector_H + #define xAODAnaHelpers_TauSelector_H + + // EDM include(s): + #include "xAODTau/TauJet.h" + #include "xAODTau/TauJetContainer.h" + #include "xAODTau/TauTrack.h" + + // ROOT include(s): + #include "TH1D.h" + + // external tools include(s): + //#include "TauAnalysisTools/TauSelectionTool.h" + #include "AsgTools/AnaToolHandle.h" + #include "TrigDecisionTool/TrigDecisionTool.h" + #include "TriggerMatchingTool/IMatchingTool.h" + #include "TriggerMatchingTool/IMatchScoringTool.h" + #include "TauAnalysisTools/ITauSelectionTool.h" + + //#include "TauAnalysisTools/TauOverlappingElectronLLHDecorator.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class TauSelector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + + public: + + // cutflow + bool m_useCutFlow = true; + + // configuration variables + /* input container name */ + std::string m_inContainerName = ""; + /* output container name */ + std::string m_outContainerName; + /* output auxiliary container name */ + std::string m_outAuxContainerName; + std::string m_inputAlgoSystNames = ""; + std::string m_outputAlgoSystNames = "TauSelector_Syst"; + /* decorate selected taus with tracks */ + bool m_decorateWithTracks = false; + /* decorate selected objects - default "passSel" */ + bool m_decorateSelectedObjects = true; + /* Name for selected object decoration*/ + std::string m_decorationName = "passSel"; + /* fill using SG::VIEW_ELEMENTS to be light weight */ + bool m_createSelectedContainer = false; + /* look at n objects */ + int m_nToProcess = -1; + /* minimum number of objects passing cuts */ + int m_pass_min = -1; + /* maximum number of objects passing cuts */ + int m_pass_max = -1; + /* path to config file for the TauSelectionTool */ + + // IMPORTANT: if no working point is specified the one in this configuration will be used + std::string m_ConfigPath = "xAODAnaHelpers/TauConf/00-01-19/Selection/recommended_selection_mc15.conf"; + /* a minimal pT threshold b/c some derivations may apply a thinning on tau tracks' features needed by the TauSelectionTool, which would cause a crash at runtime */ + float m_minPtDAOD = 15e3; + std::string m_JetIDWP = ""; + std::string m_EleRNNWP = ""; + bool m_EleID = true; + + /* trigger matching */ + + /* + * A comma-separated string w/ all the HLT + * single muon trigger chains for which you want + * to perform the matching. If left empty (as it is by default), + * no trigger matching will be attempted at all + */ + + std::string m_singleTauTrigChains = ""; + + /* + * A comma-separated string w/ all the HLT + * dimuon trigger chains for which you want + * to perform the matching. If left empty (as it is by default), + * no trigger matching will be attempted at all + */ + + std::string m_diTauTrigChains = ""; + + private: + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + bool m_isUsedBefore = false; + + // object cutflow + TH1D* m_tau_cutflowHist_1 = nullptr; + TH1D* m_tau_cutflowHist_2 = nullptr; + + int m_tau_cutflow_all; + int m_tau_cutflow_selected; + + // tools + std::vector m_singleTauTrigChainsList; + std::vector m_diTauTrigChainsList; + asg::AnaToolHandle m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool", this}; + asg::AnaToolHandle m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool" }; + asg::AnaToolHandle m_trigTauMatchTool_handle; + asg::AnaToolHandle m_scoreTool{"Trig::DRScoringTool/DRScoringTool"}; + + bool m_doTrigMatch = true; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TauSelector (); + + ~TauSelector(); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // added functions not from Algorithm + bool executeSelection( const xAOD::TauJetContainer* inTaus, float mcEvtWeight, bool countPass, + ConstDataVector* selectedTaus ); + virtual int passCuts( const xAOD::TauJet* tau ); + + // this is needed to distribute the algorithm to the workers + ClassDef(TauSelector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.rst.txt new file mode 100644 index 0000000000..20fea04ea0 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.rst.txt @@ -0,0 +1,87 @@ + +.. _program_listing_file_xAODAnaHelpers_TrackContainer.h: + +Program Listing for File TrackContainer.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrackContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TrackContainer_H + #define xAODAnaHelpers_TrackContainer_H + + #include + #include + + #include + #include + + #include "xAODTracking/TrackParticle.h" + + #include + #include + + #include + #include + + namespace xAH { + + class TrackContainer : public ParticleContainer + { + public: + TrackContainer(const std::string& name = "track", const std::string& detailStr="", float units = 1e3); + virtual ~TrackContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillTrack( const xAOD::TrackParticle* track ); + virtual void FillTrack( const xAOD::IParticle* particle ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + + virtual void updateParticle(uint idx, TrackPart& track); + + private: + // + // Vector branches + // + + std::vector* m_chiSquared; + std::vector* m_d0; + std::vector >* m_definingParametersCovMatrix; + std::vector* m_expectInnermostPixelLayerHit; + std::vector* m_expectNextToInnermostPixelLayerHit; + std::vector* m_numberDoF; + std::vector* m_numberOfInnermostPixelLayerHits; + std::vector* m_numberOfNextToInnermostPixelLayerHits; + std::vector* m_numberOfPhiHoleLayers; + std::vector* m_numberOfPhiLayers; + std::vector* m_numberOfPixelDeadSensors; + std::vector* m_numberOfPixelHits; + std::vector* m_numberOfPixelHoles; + std::vector* m_numberOfPixelSharedHits; + std::vector* m_numberOfPrecisionHoleLayers; + std::vector* m_numberOfPrecisionLayers; + std::vector* m_numberOfSCTDeadSensors; + std::vector* m_numberOfSCTHits; + std::vector* m_numberOfSCTHoles; + std::vector* m_numberOfSCTSharedHits; + std::vector* m_numberOfTRTHits; + std::vector* m_numberOfTRTOutliers; + std::vector* m_phi; + std::vector* m_qOverP; + std::vector* m_theta; + std::vector* m_vertexLink; + std::vector* m_vertexLink_persIndex; + std::vector* m_vertexLink_persKey; + std::vector* m_vz; + std::vector* m_z0; + }; + } + + #endif // xAODAnaHelpers_TrackContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrackHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrackHists.h.rst.txt new file mode 100644 index 0000000000..0641f62971 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrackHists.h.rst.txt @@ -0,0 +1,132 @@ + +.. _program_listing_file_xAODAnaHelpers_TrackHists.h: + +Program Listing for File TrackHists.h +===================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrackHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TrackHists_H + #define xAODAnaHelpers_TrackHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include + #include + #include + + ANA_MSG_HEADER(msgTrackHists) + + class TrackHists : public HistogramManager + { + public: + TrackHists(std::string name, std::string detailStr ); + ~TrackHists(); + + StatusCode initialize(); + StatusCode execute( const xAOD::TrackParticleContainer* tracks, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo = 0 ); + StatusCode execute( const xAOD::TrackParticle* track, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo = 0); + using HistogramManager::book; // make other overloaded versions of book() to show up in subclass + using HistogramManager::execute; // overload + + protected: + // bools to control which histograms are filled + bool m_fill2D; + bool m_fillIPDetails; + bool m_fillHitCounts; + bool m_fillChi2Details; + bool m_fillTPErrors; + bool m_fillDebugging; + bool m_fillVsLumi; + + private: + // Histograms + TH1F* m_trk_n; + TH1F* m_trk_n_l; + TH1F* m_trk_Pt; + TH1F* m_trk_Pt_l; + TH1F* m_trk_P; + TH1F* m_trk_P_l; + TH1F* m_trk_Eta; + TH1F* m_trk_Phi; + TH1F* m_trk_d0; + TH1F* m_trk_d0_s; + TH1F* m_trk_d0_ss; + TH1F* m_trk_z0; + TH1F* m_trk_z0_s; + TH1F* m_trk_chi2Prob; + TH1F* m_trk_charge; + TH1F* m_trk_d0_l; + TH1F* m_trk_d0Err; + TH1F* m_trk_d0Sig; + TH1F* m_trk_z0Err; + TH1F* m_trk_z0_l; + TH1F* m_trk_z0Sig; + TH1F* m_trk_z0sinT; + TH1F* m_trk_z0sinT_l; + TH1F* m_trk_z0SigsinT; + TH1F* m_trk_chi2Prob_l; + TH1F* m_trk_chi2Prob_s; + TH1F* m_trk_chi2Prob_ss; + TH1F* m_trk_chi2ndof; + TH1F* m_trk_chi2ndof_l; + TH1F* m_trk_nSi; + TH1F* m_trk_nSiAndDead; + TH1F* m_trk_nSiDead; + TH1F* m_trk_nSCT; + TH1F* m_trk_nPix; + TH1F* m_trk_nPixHoles; + TH1F* m_trk_nPixDead; + TH1F* m_trk_nTRT; + // TH1F* m_trk_nTRTHoles; //! + // TH1F* m_trk_nTRTDead; //! + TH1F* m_trk_nBL; + TH1F* m_trk_phiErr; + TH1F* m_trk_thetaErr; + TH1F* m_trk_qOpErr; + TH1F* m_trk_mc_prob; + TH1F* m_trk_mc_barcode; + TH1F* m_trk_mc_barcode_s; + TH1F* m_trk_eta_vl; + TH1F* m_trk_z0_vl; + TH1F* m_trk_z0_m; + TH1F* m_trk_z0_raw_m; + TH1F* m_trk_vz; + TH1F* m_trk_z0_atlas_m; + TH1F* m_trk_d0_vl; + TH1F* m_trk_pt_ss; + TH1F* m_trk_phiManyBins; + + TH1F* m_lBlock; + TProfile* m_trk_z0_vs_lBlock; + TProfile* m_trk_z0_raw_vs_lBlock; + TProfile* m_trk_z0_atlas_vs_lBlock; + TProfile* m_trk_vz_vs_lBlock; + TProfile* m_pvz_vs_lBlock; + TProfile* m_pv_valid_vs_lBlock; + + TProfile* m_bsX_vs_lBlock; + TProfile* m_bsY_vs_lBlock; + TProfile* m_bsZ_vs_lBlock; + TH1F* m_bsX; + TH1F* m_bsY; + TH1F* m_bsZ; + + TH2F* m_trk_Eta_vs_trk_P; + TH2F* m_trk_Eta_vs_trk_P_l; + TH2F* m_trk_Phi_vs_trk_P; + TH2F* m_trk_Phi_vs_trk_P_l; + TH2F* m_trk_Eta_vs_trk_Phi; + TH2F* m_trk_d0_vs_trk_P; + TH2F* m_trk_d0_vs_trk_P_l; + TH2F* m_trk_z0_vs_trk_P; + TH2F* m_trk_z0_vs_trk_P_l; + TH2F* m_trk_z0sinT_vs_trk_P; + TH2F* m_trk_z0sinT_vs_trk_P_l; + }; + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt new file mode 100644 index 0000000000..fb4fa75cdb --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.rst.txt @@ -0,0 +1,60 @@ + +.. _program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h: + +Program Listing for File TrackHistsAlgo.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrackHistsAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TrackHistsAlgo_H + #define xAODAnaHelpers_TrackHistsAlgo_H + + #include + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class TrackHistsAlgo : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + std::string m_inContainerName = ""; + + // configuration variables + std::string m_detailStr = ""; + + private: + TrackHists* m_plots = nullptr; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TrackHistsAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(TrackHistsAlgo, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrackPart.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrackPart.h.rst.txt new file mode 100644 index 0000000000..803e431277 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrackPart.h.rst.txt @@ -0,0 +1,66 @@ + +.. _program_listing_file_xAODAnaHelpers_TrackPart.h: + +Program Listing for File TrackPart.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrackPart.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TrackPart_H + #define xAODAnaHelpers_TrackPart_H + + #include "xAODAnaHelpers/Particle.h" + + namespace xAH { + class TrackPart : public Particle + { + public: + // TrackPart() { }; + // virtual ~TrackPart(); + + float chiSquared; + float d0; + + std::vector definingParametersCovMatrix; + char expectInnermostPixelLayerHit; + char expectNextToInnermostPixelLayerHit; + + float numberDoF; + + char numberOfInnermostPixelLayerHits; + char numberOfNextToInnermostPixelLayerHits; + char numberOfPhiHoleLayers; + char numberOfPhiLayers; + char numberOfPixelDeadSensors; + char numberOfPixelHits; + char numberOfPixelHoles; + char numberOfPixelSharedHits; + char numberOfPrecisionHoleLayers; + char numberOfPrecisionLayers; + char numberOfSCTDeadSensors; + char numberOfSCTHits; + char numberOfSCTHoles; + char numberOfSCTSharedHits; + char numberOfTRTHits; + char numberOfTRTOutliers; + + float phi; + float qOverP; + float theta; + + Int_t vertexLink; + UInt_t vertexLink_persIndex; + UInt_t vertexLink_persKey; + + float vz; + float z0; + + }; + } //xAH + + #endif // xAODAnaHelpers_TrackPart_H + diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.rst.txt new file mode 100644 index 0000000000..30bd9276ea --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.rst.txt @@ -0,0 +1,139 @@ + +.. _program_listing_file_xAODAnaHelpers_TrackSelector.h: + +Program Listing for File TrackSelector.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrackSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TrackSelector_H + #define xAODAnaHelpers_TrackSelector_H + + // ROOT include(s): + #include "TH1D.h" + + // EDM include(s): + #include "xAODTracking/VertexContainer.h" + #include "xAODTracking/TrackParticleContainer.h" + + // external tools include(s): + #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h" + #include "AsgTools/AnaToolHandle.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + + class TrackSelector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + + bool m_useCutFlow = true; + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + std::string m_inJetContainerName = ""; + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = false; + int m_nToProcess = -1; + int m_pass_min = -1; + int m_pass_max = -1; + std::string m_cutLevelString = ""; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + float m_p_min = 1e8; + float m_eta_max = 1e8; + float m_eta_min = 1e8; + float m_etaSigned_min = 1e8; + float m_etaSigned_max = 1e8; + float m_d0_max = 1e8; + float m_z0_max = 1e8; + float m_sigmad0_max = 1e8; + float m_d0oversigmad0_max = 1e8; + float m_z0sinT_max = 1e8; + float m_sigmaz0_max = 1e8; + float m_sigmaz0sintheta_max = 1e8; + float m_z0oversigmaz0_max = 1e8; + float m_z0sinthetaoversigmaz0sintheta_max=1e8; + int m_nPixelHits_min =1e8; + int m_nPixelHitsPhysical_min =1e8; + int m_nSctHits_min =1e8; + int m_nSctHitsPhysical_min =1e8; + int m_nSi_min = 1e8; + int m_nSiPhysical_min = 1e8; + int m_nPixHoles_max = 1e8; + int m_nSctHoles_max = 1e8; + int m_nSiHoles_max =1e8; + int m_nInnermostPixel_min =1e8; + int m_nNextToInnermostPixel_min =1e8; + int m_nBothInnermostLayersHits_min =1e8; + int m_nPixelSharedHits_max =1e8; + int m_nSctSharedHits_max =1e8; + int m_nSiSharedHits_max =1e8; + int m_nSiSharedModules_max =1e8; + float m_chi2NdofCut_max = 1e8; + float m_chi2Prob_max = 1e8; + float m_chi2Prob_min = 1e8; + int m_nBL_min = 1e8; + + + std::string m_passAuxDecorKeys = ""; + std::string m_failAuxDecorKeys = ""; + + bool m_doTracksInJets = false; + + private: + + std::vector m_passKeys; + std::vector m_failKeys; + + asg::AnaToolHandle m_trkSelTool_handle{"InDet::InDetTrackSelectionTool/TrackSelectionTool", this}; + + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_numObjectPass; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + + + // this is a standard constructor + TrackSelector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + EL::StatusCode executeTrackCollection (float mcEvtWeight); + EL::StatusCode executeTracksInJets (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // added functions not from Algorithm + // why does this need to be virtual? + virtual int PassCuts( const xAOD::TrackParticle* jet, const xAOD::Vertex *pvx ); + + // this is needed to distribute the algorithm to the workers + ClassDef(TrackSelector, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.rst.txt new file mode 100644 index 0000000000..196897c73a --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.rst.txt @@ -0,0 +1,62 @@ + +.. _program_listing_file_xAODAnaHelpers_TracksInJetHists.h: + +Program Listing for File TracksInJetHists.h +=========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TracksInJetHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TracksInJetHists_H + #define xAODAnaHelpers_TracksInJetHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include + #include + + ANA_MSG_HEADER(msgTracksInJetHists) + + class TracksInJetHists : public HistogramManager + { + public: + TracksInJetHists(std::string name, std::string detailStr ); + ~TracksInJetHists(); + + float getD0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet); + float getZ0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx); + + StatusCode initialize(); + StatusCode execute( const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo ); + using HistogramManager::book; // make other overloaded versions of book() to show up in subclass + using HistogramManager::execute; // overload + virtual void record(EL::IWorker* wk); + + protected: + + private: + + TrackHists* m_trkPlots; + + // Histograms + TH1F* m_trk_d0 ; + TH1F* m_trk_d0Sig ; + TH1F* m_trk_d0SigPDF ; + TH2F* m_trk_z0sinTd0 ; + TH1F* m_trk_z0_signed ; + TH1F* m_trk_z0sinT_signed ; + TH1F* m_trk_z0Sig_signed ; + TH1F* m_trk_z0Sig_signed_pdf ; + TH1F* m_trk_z0SigsinT_signed ; + TH1F* m_trk_jetdPhi ; + TH1F* m_trk_jetdEta ; + TH1F* m_trk_jetdR ; + TH1F* m_trk_jetdR_l ; + + + }; + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.rst.txt new file mode 100644 index 0000000000..f0dbc82021 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.rst.txt @@ -0,0 +1,144 @@ + +.. _program_listing_file_xAODAnaHelpers_TreeAlgo.h: + +Program Listing for File TreeAlgo.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TreeAlgo.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TreeAlgo_H + #define xAODAnaHelpers_TreeAlgo_H + + #include "TTree.h" + + #include + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class TreeAlgo : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + // choose whether the tree gets saved in the same directory as output histograms + bool m_outHistDir = false; + std::string m_treeStreamName = "tree"; + + // holds bools that control which branches are filled + std::string m_evtDetailStr = ""; + std::string m_trigDetailStr = ""; + std::string m_muDetailStr = ""; + std::string m_elDetailStr = ""; + std::string m_jetDetailStr = ""; + std::string m_trigJetDetailStr = ""; + std::string m_truthJetDetailStr = ""; + std::string m_fatJetDetailStr = ""; + std::string m_truthFatJetDetailStr = ""; + std::string m_tauDetailStr = ""; + std::string m_METDetailStr = ""; + std::string m_METReferenceDetailStr = ""; + std::string m_photonDetailStr = ""; + std::string m_clusterDetailStr = ""; + std::string m_truthParticlesDetailStr = ""; + std::string m_trackParticlesDetailStr = ""; + std::string m_vertexDetailStr = ""; + + std::string m_evtContainerName = ""; + std::string m_muContainerName = ""; + std::string m_elContainerName = ""; + std::string m_jetContainerName = ""; + std::string m_jetBranchName = "jet"; + std::string m_truthJetContainerName = ""; + std::string m_truthJetBranchName = "truthJet"; + std::string m_trigJetContainerName = ""; + std::string m_trigJetBranchName = "trigJet"; + std::string m_fatJetContainerName = ""; + std::string m_fatJetBranchName = ""; // default is to use container name + std::string m_truthFatJetContainerName = ""; + std::string m_truthFatJetBranchName = "truth_fatjet"; + std::string m_tauContainerName = ""; + std::string m_METContainerName = ""; + std::string m_METReferenceContainerName = ""; + std::string m_photonContainerName = ""; + std::string m_clusterContainerName = ""; + std::string m_clusterBranchName = "CaloCalTopoClusters"; + std::string m_truthParticlesContainerName = ""; + std::string m_truthParticlesBranchName = "xAH_truth"; + std::string m_trackParticlesContainerName = ""; + std::string m_l1JetContainerName = ""; + std::string m_l1JetBranchName = "L1Jet"; + std::string m_vertexBranchName = "vertex"; + bool m_sortL1Jets = false; + bool m_retrievePV = true; + + // if these are set, assume systematics are being processed over + std::string m_muSystsVec = ""; + std::string m_elSystsVec = ""; + std::string m_tauSystsVec = ""; + std::string m_jetSystsVec = ""; + std::string m_photonSystsVec = ""; + std::string m_fatJetSystsVec = ""; + std::string m_metSystsVec = ""; + + float m_units = 1e3; + + int m_autoFlush = 0; + + protected: + std::vector m_jetDetails; + std::vector m_trigJetDetails; + std::vector m_fatJetDetails; + + std::vector m_jetContainers; + std::vector m_truthJetContainers; + std::vector m_trigJetContainers; + std::vector m_fatJetContainers; + std::vector m_l1JetContainers; + std::vector m_vertexContainers; + std::vector m_truthParticlesContainers; + + std::vector m_jetBranches; + std::vector m_truthJetBranches; + std::vector m_trigJetBranches; + std::vector m_fatJetBranches; + std::vector m_l1JetBranches; + std::vector m_vertexBranches; + std::vector m_truthParticlesBranches; + + std::vector m_clusterDetails; + std::vector m_clusterContainers; + std::vector m_clusterBranches; + + std::vector m_vertexDetails; + + std::map m_trees; + + public: + + // this is a standard constructor + TreeAlgo (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // Help tree creator function + virtual HelpTreeBase* createTree(xAOD::TEvent *event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store); + + // this is needed to distribute the algorithm to the workers + ClassDef(TreeAlgo, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.rst.txt new file mode 100644 index 0000000000..892deb73d8 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.rst.txt @@ -0,0 +1,68 @@ + +.. _program_listing_file_xAODAnaHelpers_TrigMatcher.h: + +Program Listing for File TrigMatcher.h +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TrigMatcher.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + + #ifndef xAODAnaHelpers_TrigMatcher_H + #define xAODAnaHelpers_TrigMatcher_H + + // algorithm wrapper + #include + + #include + #include + #include + #include "TriggerMatchingTool/IMatchScoringTool.h" + + #include + + class TrigMatcher : public xAH::Algorithm + { + public: + /* configuration variables */ + + std::string m_inContainerName = ""; + std::string m_systNames = ""; + + std::string m_trigChains = ""; + + private: + + /* tools */ + asg::AnaToolHandle m_trigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool" }; + asg::AnaToolHandle m_trigMatchTool_handle; + asg::AnaToolHandle m_scoreTool {"Trig::DRScoringTool/DRScoringTool"}; + + std::vector m_trigChainsList; + + public: + + /* this is a standard constructor */ + + TrigMatcher (); + + ~TrigMatcher(); + + /* these are the functions inherited from Algorithm */ + + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + + /* these are the functions not inherited from Algorithm */ + EL::StatusCode executeMatching( const xAOD::IParticleContainer* inParticles ); + + ClassDef(TrigMatcher, 1); + + }; + + + #endif //#ifndef xAODAnaHelpers_TrigMatcher_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.rst.txt new file mode 100644 index 0000000000..79e654627d --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.rst.txt @@ -0,0 +1,99 @@ + +.. _program_listing_file_xAODAnaHelpers_TruthContainer.h: + +Program Listing for File TruthContainer.h +========================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TruthContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TruthContainer_H + #define xAODAnaHelpers_TruthContainer_H + + #include + #include + + #include + #include + + #include "xAODTruth/TruthParticle.h" + + #include + #include + + #include + #include + + namespace xAH { + + class TruthContainer : public ParticleContainer + { + public: + TruthContainer(const std::string& name = "truth", const std::string& detailStr="", float units = 1e3); + virtual ~TruthContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillTruth( const xAOD::TruthParticle* truth ); + virtual void FillTruth( const xAOD::IParticle* particle ); + using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass + + protected: + + virtual void updateParticle(uint idx, TruthPart& truth); + + private: + + + // + // Vector branches + // + + // All + std::vector* m_pdgId; + std::vector* m_status; + std::vector* m_barcode; + + // type + std::vector* m_is_higgs; + std::vector* m_is_bhad; + + // bVtx + std::vector* m_Bdecay_x; + std::vector* m_Bdecay_y; + std::vector* m_Bdecay_z; + + // parents + std::vector* m_nParents; + std::vector< std::vector >* m_parent_pdgId; + std::vector< std::vector >* m_parent_barcode; + std::vector< std::vector >* m_parent_status; + + // children + std::vector* m_nChildren; + std::vector< std::vector >* m_child_pdgId; + std::vector< std::vector >* m_child_barcode; + std::vector< std::vector >* m_child_status; + + // dressed + std::vector* m_pt_dressed; + std::vector* m_eta_dressed; + std::vector* m_phi_dressed; + std::vector* m_e_dressed; + + // origin + std::vector* m_origin; + + // particle type + std::vector* m_particleType; + + }; + } + + + + #endif // xAODAnaHelpers_TruthContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TruthPart.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TruthPart.h.rst.txt new file mode 100644 index 0000000000..7c94d0f440 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TruthPart.h.rst.txt @@ -0,0 +1,66 @@ + +.. _program_listing_file_xAODAnaHelpers_TruthPart.h: + +Program Listing for File TruthPart.h +==================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TruthPart.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TruthPart_H + #define xAODAnaHelpers_TruthPart_H + + #include "xAODAnaHelpers/Particle.h" + + namespace xAH { + + class TruthPart : public Particle + { + public: + + //TruthPart() { }; + //virtual ~TruthPart(); + int pdgId; + int status; + int barcode; + + // type + bool is_higgs; + bool is_bhad; + + // BVtx + float Bdecay_x; + float Bdecay_y; + float Bdecay_z; + + // Parents + int nParents; + std::vector parent_pdgId; + std::vector parent_barcode; + std::vector parent_status; + + // Children + int nChildren; + std::vector child_pdgId; + std::vector child_barcode; + std::vector child_status; + + // Dressed + float pt_dressed; + float eta_dressed; + float phi_dressed; + float e_dressed; + + // Origin + unsigned int origin; + + // Type + unsigned int type; + + }; + + }//xAH + #endif // xAODAnaHelpers_Particle_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.rst.txt new file mode 100644 index 0000000000..6a964aff78 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.rst.txt @@ -0,0 +1,115 @@ + +.. _program_listing_file_xAODAnaHelpers_TruthSelector.h: + +Program Listing for File TruthSelector.h +======================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/TruthSelector.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_TruthSelector_H + #define xAODAnaHelpers_TruthSelector_H + + // EDM include(s): + #include "xAODTruth/TruthParticle.h" + #include "xAODTruth/TruthParticleContainer.h" + + // ROOT include(s): + #include "TH1D.h" + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + // external tools include(s): + #include "xAODBTaggingEfficiency/BTaggingSelectionTool.h" + + class TruthSelector : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + bool m_useCutFlow = true; + + // configuration variables + std::string m_inContainerName = ""; + std::string m_outContainerName = ""; + std::string m_decor = "passSel"; + bool m_decorateSelectedObjects = true; + bool m_createSelectedContainer = false; + int m_nToProcess = -1; + int m_pass_min = -1; + int m_pass_max = -1; + float m_pT_max = 1e8; + float m_pT_min = 1e8; + float m_eta_max = 1e8; + float m_eta_min = 1e8; + float m_mass_max = 1e8; + float m_mass_min = 1e8; + float m_rapidity_max = 1e8; + float m_rapidity_min = 1e8; + unsigned int m_type = 1000; // this will apply no selection + std::string m_typeOptions; // this will apply no selection + unsigned int m_origin = 1000; // this will apply no selection + std::string m_originOptions; // this will apply no selection + float m_pT_dressed_min = 1e8; + float m_eta_dressed_min = 1e8; + float m_eta_dressed_max = 1e8; + + private: + int m_numEvent; + int m_numObject; + int m_numEventPass; + int m_weightNumEventPass; + int m_numObjectPass; + + // cutflow + TH1D* m_cutflowHist = nullptr; + TH1D* m_cutflowHistW = nullptr; + int m_cutflow_bin; + + /* object-level cutflow */ + + TH1D* m_truth_cutflowHist_1 = nullptr; + + int m_truth_cutflow_all; + int m_truth_cutflow_ptmax_cut; + int m_truth_cutflow_ptmin_cut; + int m_truth_cutflow_eta_cut; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + TruthSelector (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // these are the functions not inherited from Algorithm + virtual bool executeSelection( const xAOD::TruthParticleContainer* inTruthParts, float mcEvtWeight, bool count, std::string outContainerName ); + + // added functions not from Algorithm + // why does this need to be virtual? + virtual int PassCuts( const xAOD::TruthParticle* truthPart ); + + // this is needed to distribute the algorithm to the workers + ClassDef(TruthSelector, 1); + + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.rst.txt new file mode 100644 index 0000000000..c6b345b5fa --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.rst.txt @@ -0,0 +1,77 @@ + +.. _program_listing_file_xAODAnaHelpers_VertexContainer.h: + +Program Listing for File VertexContainer.h +========================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/VertexContainer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_VertexContainer_H + #define xAODAnaHelpers_VertexContainer_H + + #include + #include + + #include + #include + + #include + #include + + #include "xAODTracking/VertexContainer.h" + #include "xAODTruth/TruthVertexContainer.h" + + namespace xAH { + + class VertexContainer + { + public: + VertexContainer(const std::string& detailStr, const std::string& name = "vertex"); + virtual ~VertexContainer(); + + virtual void setTree (TTree *tree); + virtual void setBranches(TTree *tree); + virtual void clear(); + virtual void FillVertices( const xAOD::VertexContainer* vertices); + virtual void FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices); + + std::string m_name; + + std::string branchName(const std::string& varName) + { + std::string name = m_name + "_" + varName; + return name; + } + + template void connectBranch(TTree *tree, const std::string& branch, std::vector **variable) + { + std::string name = branchName(branch); + if(*variable) { delete (*variable); (*variable)=0; } + if(tree->GetBranch(name.c_str())) + { + (*variable)=new std::vector(); + tree->SetBranchStatus (name.c_str() , 1); + tree->SetBranchAddress (name.c_str() , variable); + } + } + + template void setBranch(TTree* tree, std::string varName, std::vector* localVectorPtr){ + std::string name = branchName(varName); + tree->Branch(name.c_str(), localVectorPtr); + } + + private: + // Vector branches + std::vector* m_vertex_x; + std::vector* m_vertex_y; + std::vector* m_vertex_z; + std::string m_detailStr; + }; + + } + + #endif // xAODAnaHelpers_VertexContainer_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_VtxHists.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_VtxHists.h.rst.txt new file mode 100644 index 0000000000..e7bacc877a --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_VtxHists.h.rst.txt @@ -0,0 +1,111 @@ + +.. _program_listing_file_xAODAnaHelpers_VtxHists.h: + +Program Listing for File VtxHists.h +=================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/VtxHists.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_VtxHists_H + #define xAODAnaHelpers_VtxHists_H + + #include "xAODAnaHelpers/HistogramManager.h" + #include + #include + #include + #include + + ANA_MSG_HEADER(msgVtxHists) + + class VtxHists : public HistogramManager + { + public: + VtxHists(std::string name, std::string detailStr ); + ~VtxHists(); + + StatusCode initialize(); + StatusCode execute( const xAOD::VertexContainer* vtxs, float eventWeight ); + StatusCode execute( const xAOD::Vertex *vtx, float eventWeight ); + + // Use tracks passed in to calculate isolated track quantities + StatusCode execute( const xAOD::VertexContainer* vtxs, const xAOD::TrackParticleContainer* trks, float eventWeight ); + StatusCode execute( const xAOD::Vertex *vtx, const xAOD::TrackParticleContainer* trks, float eventWeight ); + + + using HistogramManager::book; // make other overloaded versions of book() to show up in subclass + using HistogramManager::execute; // overload + + protected: + // bools to control which histograms are filled + bool m_fillTrkDetails; + bool m_fillIsoTrkDetails; + bool m_fillDebugging; + bool m_fillTrkPtDetails; + + private: + + float getIso( const xAOD::TrackParticle *inTrack, const xAOD::TrackParticleContainer* trks, float z0_cut = 2, float cone_size = 0.2); + + // Histograms + TH1F* h_type ; + TH1F* h_nTrks ; + TH1F* h_nTrks_l ; + TH1F* h_trk_Pt ; + TH1F* h_trk_Pt_l ; + TH1F* h_nTrks1GeV ; + TH1F* h_nTrks2GeV ; + TH1F* h_nTrks5GeV ; + TH1F* h_nTrks10GeV ; + TH1F* h_nTrks15GeV ; + TH1F* h_nTrks20GeV ; + TH1F* h_nTrks25GeV ; + TH1F* h_nTrks30GeV ; + TH1F* h_pt_miss_x ; + TH1F* h_pt_miss_x_l ; + TH1F* h_pt_miss_y ; + TH1F* h_pt_miss_y_l ; + TH1F* h_pt_miss ; + TH1F* h_pt_miss_l ; + + // Pt of the nth track + unsigned int m_nLeadTrackPts ; + std::vector h_trk_max_Pt ; + std::vector h_trk_max_Pt_l ; + + + TH1F* h_trkIsoAll ; + TH1F* h_trkIso ; + TH1F* h_nIsoTrks ; + TH1F* h_nIsoTrks_l ; + TH1F* h_IsoTrk_Pt ; + TH1F* h_IsoTrk_Pt_l ; + TH1F* h_nIsoTrks1GeV ; + TH1F* h_nIsoTrks2GeV ; + TH1F* h_nIsoTrks5GeV ; + TH1F* h_nIsoTrks10GeV ; + TH1F* h_nIsoTrks15GeV ; + TH1F* h_nIsoTrks20GeV ; + TH1F* h_nIsoTrks25GeV ; + TH1F* h_nIsoTrks30GeV ; + TH1F* h_dZ0Before ; + TH1F* h_pt_miss_iso_x ; + TH1F* h_pt_miss_iso_x_l ; + TH1F* h_pt_miss_iso_y ; + TH1F* h_pt_miss_iso_y_l ; + TH1F* h_pt_miss_iso ; + TH1F* h_pt_miss_iso_l ; + + // Pt of the nth track + unsigned int m_nLeadIsoTrackPts ; + std::vector h_IsoTrk_max_Pt ; + std::vector h_IsoTrk_max_Pt_l ; + + + }; + + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_Writer.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_Writer.h.rst.txt new file mode 100644 index 0000000000..76dd3f2ffc --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_Writer.h.rst.txt @@ -0,0 +1,62 @@ + +.. _program_listing_file_xAODAnaHelpers_Writer.h: + +Program Listing for File Writer.h +================================= + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/Writer.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #ifndef xAODAnaHelpers_Writer_H + #define xAODAnaHelpers_Writer_H + + // algorithm wrapper + #include "xAODAnaHelpers/Algorithm.h" + + class Writer : public xAH::Algorithm + { + // put your configuration variables here as public variables. + // that way they can be set directly from CINT and python. + public: + TString m_outputLabel = ""; + + TString m_jetContainerNamesStr = ""; + TString m_electronContainerNamesStr = ""; + TString m_muonContainerNamesStr = ""; + + private: + int m_numEvent; + + std::vector m_jetContainerNames; + std::vector m_electronContainerNames; + std::vector m_muonContainerNames; + + // variables that don't get filled at submission time should be + // protected from being send from the submission node to the worker + // node (done by the //!) + public: + // Tree *myTree; //! + // TH1 *myHist; //! + + // this is a standard constructor + Writer (); + + // these are the functions inherited from Algorithm + virtual EL::StatusCode setupJob (EL::Job& job); + virtual EL::StatusCode fileExecute (); + virtual EL::StatusCode histInitialize (); + virtual EL::StatusCode changeInput (bool firstFile); + virtual EL::StatusCode initialize (); + virtual EL::StatusCode execute (); + virtual EL::StatusCode postExecute (); + virtual EL::StatusCode finalize (); + virtual EL::StatusCode histFinalize (); + + // this is needed to distribute the algorithm to the workers + ClassDef(Writer, 1); + }; + + #endif diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt new file mode 100644 index 0000000000..e008164475 --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.rst.txt @@ -0,0 +1,23 @@ + +.. _program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h: + +Program Listing for File ReturnCheck.h +====================================== + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/tools/ReturnCheck.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #warning Please use instead ANA_CHECK in AsgMessaging/MessageCheck.h + + #include "AsgMessaging/MessageCheck.h" + + #ifndef xAODAnaHelpers_TOOLS_RETURNCHECK_H + #define xAODAnaHelpers_TOOLS_RETURNCHECK_H + + #define RETURN_CHECK( CONTEXT, EXP, INFO ) ANA_CHECK(EXP) + #define EL_RETURN_CHECK( CONTEXT, EXP ) ANA_CHECK(EXP) + + #endif // xAODAnaHelpers_TOOLS_RETURNCHECK_H diff --git a/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt b/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt new file mode 100644 index 0000000000..d231d4bd9e --- /dev/null +++ b/_sources/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst.txt @@ -0,0 +1,35 @@ + +.. _program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h: + +Program Listing for File ReturnCheckConfig.h +============================================ + +|exhale_lsh| :ref:`Return to documentation for file ` (``xAODAnaHelpers/tools/ReturnCheckConfig.h``) + +.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS + +.. code-block:: cpp + + #warning Please use instead ANA_CHECK in AsgMessaging/MessageCheck.h + + #ifndef xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H + #define xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H + + #include "AsgMessaging/MessageCheck.h + + #define RETURN_CHECK_CONFIG( CONTEXT, CONFIG ) \ + do { \ + /* check if file exists \ + https://root.cern.ch/root/roottalk/roottalk02/5332.html */ \ + FileStat_t fStats; \ + int fSuccess = gSystem->GetPathInfo(CONFIG.c_str(), fStats); \ + if(fSuccess != 0){ \ + ANA_MSG_ERROR( "Could not find the " \ + "configuration file:" << CONFIG.c_str()); \ + return EL::StatusCode::FAILURE; \ + } else { \ + ANA_MSG_INFO( "Found configuration file: " << CONFIG.c_str()); \ + } \ + } while( false ) + + #endif // xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H diff --git a/_sources/api/structHelperFunctions_1_1pt__sort.rst.txt b/_sources/api/structHelperFunctions_1_1pt__sort.rst.txt new file mode 100644 index 0000000000..5b76a4ffa6 --- /dev/null +++ b/_sources/api/structHelperFunctions_1_1pt__sort.rst.txt @@ -0,0 +1,16 @@ +.. _exhale_struct_structHelperFunctions_1_1pt__sort: + +Struct pt_sort +============== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Struct Documentation +-------------------- + + +.. doxygenstruct:: HelperFunctions::pt_sort + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/structxAH_1_1JetContainer_1_1btagOpPoint.rst.txt b/_sources/api/structxAH_1_1JetContainer_1_1btagOpPoint.rst.txt new file mode 100644 index 0000000000..421dac662c --- /dev/null +++ b/_sources/api/structxAH_1_1JetContainer_1_1btagOpPoint.rst.txt @@ -0,0 +1,22 @@ +.. _exhale_struct_structxAH_1_1JetContainer_1_1btagOpPoint: + +Struct JetContainer::btagOpPoint +================================ + +- Defined in :ref:`file_xAODAnaHelpers_JetContainer.h` + + +Nested Relationships +-------------------- + +This struct is a nested type of :ref:`exhale_class_classxAH_1_1JetContainer`. + + +Struct Documentation +-------------------- + + +.. doxygenstruct:: xAH::JetContainer::btagOpPoint + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.rst.txt b/_sources/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.rst.txt new file mode 100644 index 0000000000..c249485675 --- /dev/null +++ b/_sources/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.rst.txt @@ -0,0 +1,22 @@ +.. _exhale_struct_structxAH_1_1OnlineBeamSpotTool_1_1LBData: + +Struct OnlineBeamSpotTool::LBData +================================= + +- Defined in :ref:`file_xAODAnaHelpers_OnlineBeamSpotTool.h` + + +Nested Relationships +-------------------- + +This struct is a nested type of :ref:`exhale_class_classxAH_1_1OnlineBeamSpotTool`. + + +Struct Documentation +-------------------- + + +.. doxygenstruct:: xAH::OnlineBeamSpotTool::LBData + :members: + :protected-members: + :undoc-members: \ No newline at end of file diff --git a/_sources/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt b/_sources/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt new file mode 100644 index 0000000000..2c1d18994d --- /dev/null +++ b/_sources/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb: + +Typedef floatAccessor +===================== + +- Defined in :ref:`file_xAODAnaHelpers_ClusterContainer.h` + + +Typedef Documentation +--------------------- + + +.. doxygentypedef:: floatAccessor diff --git a/_sources/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt b/_sources/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt new file mode 100644 index 0000000000..e35016840e --- /dev/null +++ b/_sources/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb: + +Typedef floatAccessor +===================== + +- Defined in :ref:`file_xAODAnaHelpers_HelpTreeBase.h` + + +Typedef Documentation +--------------------- + + +.. doxygentypedef:: floatAccessor diff --git a/_sources/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt b/_sources/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt new file mode 100644 index 0000000000..86af9afec3 --- /dev/null +++ b/_sources/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb: + +Typedef floatAccessor +===================== + +- Defined in :ref:`file_xAODAnaHelpers_PhotonContainer.h` + + +Typedef Documentation +--------------------- + + +.. doxygentypedef:: floatAccessor diff --git a/_sources/api/unabridged_api.rst.txt b/_sources/api/unabridged_api.rst.txt new file mode 100644 index 0000000000..222809d572 --- /dev/null +++ b/_sources/api/unabridged_api.rst.txt @@ -0,0 +1,986 @@ + +Full API +-------- + +Namespaces +********** + + +.. toctree:: + :maxdepth: 5 + + namespace_CP.rst + +.. toctree:: + :maxdepth: 5 + + namespace_EL.rst + +.. toctree:: + :maxdepth: 5 + + namespace_HelperClasses.rst + +.. toctree:: + :maxdepth: 5 + + namespace_HelperFunctions.rst + +.. toctree:: + :maxdepth: 5 + + namespace_Trig.rst + +.. toctree:: + :maxdepth: 5 + + namespace_TrigConf.rst + +.. toctree:: + :maxdepth: 5 + + namespace_xAH.rst + +Classes and Structs +******************* + + +.. toctree:: + :maxdepth: 5 + + structHelperFunctions_1_1pt__sort.rst + +.. toctree:: + :maxdepth: 5 + + structxAH_1_1JetContainer_1_1btagOpPoint.rst + +.. toctree:: + :maxdepth: 5 + + structxAH_1_1OnlineBeamSpotTool_1_1LBData.rst + +.. toctree:: + :maxdepth: 5 + + classBasicEventSelection.rst + +.. toctree:: + :maxdepth: 5 + + classBJetEfficiencyCorrector.rst + +.. toctree:: + :maxdepth: 5 + + classClusterHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classDebugTool.rst + +.. toctree:: + :maxdepth: 5 + + classElectronCalibrator.rst + +.. toctree:: + :maxdepth: 5 + + classElectronCutBasedPIDManager.rst + +.. toctree:: + :maxdepth: 5 + + classElectronEfficiencyCorrector.rst + +.. toctree:: + :maxdepth: 5 + + classElectronHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classElectronSelector.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1ClusterInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1ElectronInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1EnumParser.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1EventInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1InfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1IParticleInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1JetInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1METInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1MuonInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1PhotonInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1TauInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1TrackInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1TriggerInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelperClasses_1_1TruthInfoSwitch.rst + +.. toctree:: + :maxdepth: 5 + + classHelpTreeBase.rst + +.. toctree:: + :maxdepth: 5 + + classHistogramManager.rst + +.. toctree:: + :maxdepth: 5 + + classHLTJetGetter.rst + +.. toctree:: + :maxdepth: 5 + + classIParticleHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classIsoCloseByCorr.rst + +.. toctree:: + :maxdepth: 5 + + classJetCalibrator.rst + +.. toctree:: + :maxdepth: 5 + + classJetHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classJetSelector.rst + +.. toctree:: + :maxdepth: 5 + + classMessagePrinterAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classMETConstructor.rst + +.. toctree:: + :maxdepth: 5 + + classMetHists.rst + +.. toctree:: + :maxdepth: 5 + + classMetHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classMinixAOD.rst + +.. toctree:: + :maxdepth: 5 + + classMuonCalibrator.rst + +.. toctree:: + :maxdepth: 5 + + classMuonEfficiencyCorrector.rst + +.. toctree:: + :maxdepth: 5 + + classMuonHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classMuonInFatJetCorrector.rst + +.. toctree:: + :maxdepth: 5 + + classMuonSelector.rst + +.. toctree:: + :maxdepth: 5 + + classOverlapRemover.rst + +.. toctree:: + :maxdepth: 5 + + classPhotonCalibrator.rst + +.. toctree:: + :maxdepth: 5 + + classPhotonHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classPhotonSelector.rst + +.. toctree:: + :maxdepth: 5 + + classTauCalibrator.rst + +.. toctree:: + :maxdepth: 5 + + classTauEfficiencyCorrector.rst + +.. toctree:: + :maxdepth: 5 + + classTauJetMatching.rst + +.. toctree:: + :maxdepth: 5 + + classTauSelector.rst + +.. toctree:: + :maxdepth: 5 + + classTrackHistsAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classTrackSelector.rst + +.. toctree:: + :maxdepth: 5 + + classTreeAlgo.rst + +.. toctree:: + :maxdepth: 5 + + classTrigMatcher.rst + +.. toctree:: + :maxdepth: 5 + + classTruthSelector.rst + +.. toctree:: + :maxdepth: 5 + + classWriter.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Algorithm.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Cluster.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1ClusterContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Electron.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1ElectronContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1EventInfo.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1FatJet.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1FatJetContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Jet.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1JetContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1L1JetContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1MetContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Muon.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1MuonContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1OnlineBeamSpotTool.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Particle.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1ParticleContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Photon.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1PhotonContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1Tau.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1TauContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1TrackContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1TrackPart.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1TruthContainer.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1TruthPart.rst + +.. toctree:: + :maxdepth: 5 + + classxAH_1_1VertexContainer.rst + +Enums +***** + + +.. toctree:: + :maxdepth: 5 + + enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.rst + +.. toctree:: + :maxdepth: 5 + + enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.rst + +.. toctree:: + :maxdepth: 5 + + enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.rst + +Functions +********* + + +.. toctree:: + :maxdepth: 5 + + function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.rst + +.. toctree:: + :maxdepth: 5 + + function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.rst + +.. toctree:: + :maxdepth: 5 + + function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.rst + +.. toctree:: + :maxdepth: 5 + + function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.rst + +.. toctree:: + :maxdepth: 5 + + function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.rst + +.. toctree:: + :maxdepth: 5 + + function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.rst + +.. toctree:: + :maxdepth: 5 + + function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f.rst + +.. toctree:: + :maxdepth: 5 + + function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c.rst + +.. toctree:: + :maxdepth: 5 + + function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427.rst + +.. toctree:: + :maxdepth: 5 + + function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.rst + +.. toctree:: + :maxdepth: 5 + + function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.rst + +.. toctree:: + :maxdepth: 5 + + function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.rst + +.. toctree:: + :maxdepth: 5 + + function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.rst + +.. toctree:: + :maxdepth: 5 + + function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.rst + +.. toctree:: + :maxdepth: 5 + + function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.rst + +.. toctree:: + :maxdepth: 5 + + function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.rst + +.. toctree:: + :maxdepth: 5 + + function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.rst + +.. toctree:: + :maxdepth: 5 + + function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.rst + +.. toctree:: + :maxdepth: 5 + + function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.rst + +.. toctree:: + :maxdepth: 5 + + function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.rst + +.. toctree:: + :maxdepth: 5 + + function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.rst + +.. toctree:: + :maxdepth: 5 + + function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.rst + +.. toctree:: + :maxdepth: 5 + + function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.rst + +.. toctree:: + :maxdepth: 5 + + function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.rst + +.. toctree:: + :maxdepth: 5 + + function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.rst + +.. toctree:: + :maxdepth: 5 + + function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.rst + +.. toctree:: + :maxdepth: 5 + + function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.rst + +.. toctree:: + :maxdepth: 5 + + function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.rst + +.. toctree:: + :maxdepth: 5 + + function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.rst + +.. toctree:: + :maxdepth: 5 + + function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.rst + +.. toctree:: + :maxdepth: 5 + + function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.rst + +.. toctree:: + :maxdepth: 5 + + function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.rst + +.. toctree:: + :maxdepth: 5 + + function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.rst + +.. toctree:: + :maxdepth: 5 + + function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.rst + +.. toctree:: + :maxdepth: 5 + + function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.rst + +.. toctree:: + :maxdepth: 5 + + function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.rst + +.. toctree:: + :maxdepth: 5 + + function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.rst + +.. toctree:: + :maxdepth: 5 + + function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c.rst + +.. toctree:: + :maxdepth: 5 + + function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c.rst + +.. toctree:: + :maxdepth: 5 + + function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37.rst + +.. toctree:: + :maxdepth: 5 + + function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7.rst + +.. toctree:: + :maxdepth: 5 + + function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9.rst + +.. toctree:: + :maxdepth: 5 + + function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6.rst + +.. toctree:: + :maxdepth: 5 + + function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb.rst + +.. toctree:: + :maxdepth: 5 + + function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988.rst + +.. toctree:: + :maxdepth: 5 + + function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0.rst + +.. toctree:: + :maxdepth: 5 + + function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.rst + +.. toctree:: + :maxdepth: 5 + + function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.rst + +Variables +********* + + +.. toctree:: + :maxdepth: 5 + + variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.rst + +.. toctree:: + :maxdepth: 5 + + variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.rst + +.. toctree:: + :maxdepth: 5 + + variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.rst + +.. toctree:: + :maxdepth: 5 + + variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.rst + +.. toctree:: + :maxdepth: 5 + + variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.rst + +Defines +******* + + +.. toctree:: + :maxdepth: 5 + + define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.rst + +.. toctree:: + :maxdepth: 5 + + define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.rst + +Typedefs +******** + + +.. toctree:: + :maxdepth: 5 + + typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst + +.. toctree:: + :maxdepth: 5 + + typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst + +.. toctree:: + :maxdepth: 5 + + typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst diff --git a/_sources/api/unabridged_orphan.rst.txt b/_sources/api/unabridged_orphan.rst.txt new file mode 100644 index 0000000000..48dd30e9b1 --- /dev/null +++ b/_sources/api/unabridged_orphan.rst.txt @@ -0,0 +1,792 @@ +:orphan: + + +Full API +======== + +Directories +*********** + + +.. toctree:: + :maxdepth: 5 + + dir_Root.rst + +.. toctree:: + :maxdepth: 5 + + dir_xAODAnaHelpers.rst + +.. toctree:: + :maxdepth: 5 + + dir_xAODAnaHelpers_tools.rst + +Files +***** + + +.. toctree:: + :maxdepth: 5 + + file_Root_Algorithm.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Algorithm.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_BasicEventSelection.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_BasicEventSelection.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_BJetEfficiencyCorrector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Cluster.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ClusterContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ClusterContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ClusterHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ClusterHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ClusterHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ClusterHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_DebugTool.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_DebugTool.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Electron.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronCalibrator.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronCalibrator.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronEfficiencyCorrector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ElectronSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ElectronSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_EventInfo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_EventInfo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_FatJet.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_FatJetContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_FatJetContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HelperClasses.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HelperClasses.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HelperFunctions.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HelperFunctions.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HelpTreeBase.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HelpTreeBase.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HistogramManager.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HistogramManager.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HLTJetGetter.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HLTJetGetter.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_HLTJetRoIBuilder.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_IParticleHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_IParticleHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_IParticleHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_IParticleHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_IsoCloseByCorr.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_IsoCloseByCorr.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_Jet.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Jet.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_JetCalibrator.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_JetCalibrator.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_JetContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_JetContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_JetHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_JetHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_JetHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_JetHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_JetSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_JetSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_L1JetContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_L1JetContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_LinkDef.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MessagePrinterAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MessagePrinterAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_METConstructor.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_METConstructor.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MetContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MetContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MetHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MetHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MetHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MetHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MinixAOD.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MinixAOD.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Muon.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonCalibrator.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonCalibrator.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonEfficiencyCorrector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonInFatJetCorrector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_MuonSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_MuonSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_OnlineBeamSpotTool.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_OverlapRemover.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_OverlapRemover.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Particle.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ParticleContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_ParticlePIDManager.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_ParticlePIDManager.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Photon.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_PhotonCalibrator.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_PhotonCalibrator.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_PhotonContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_PhotonContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_PhotonHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_PhotonHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_PhotonHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_PhotonHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_PhotonSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_PhotonSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_tools_ReturnCheck.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Tau.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TauCalibrator.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TauCalibrator.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TauContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TauContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TauEfficiencyCorrector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TauJetMatching.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TauJetMatching.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TauSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TauSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TrackContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrackContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TrackHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrackHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TrackHistsAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrackHistsAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrackPart.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TrackSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrackSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TracksInJetHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TracksInJetHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TreeAlgo.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TreeAlgo.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TrigMatcher.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TrigMatcher.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TruthContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TruthContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TruthPart.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_TruthSelector.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_TruthSelector.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_VertexContainer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_VertexContainer.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_VtxHists.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_VtxHists.h.rst + +.. toctree:: + :maxdepth: 5 + + file_Root_Writer.cxx.rst + +.. toctree:: + :maxdepth: 5 + + file_xAODAnaHelpers_Writer.h.rst + +Pages +***** + + +.. toctree:: + :maxdepth: 5 + + page_bug.rst diff --git a/_sources/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.rst.txt b/_sources/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.rst.txt new file mode 100644 index 0000000000..9163975110 --- /dev/null +++ b/_sources/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f: + +Variable HelperFunctions::event +=============================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Variable Documentation +---------------------- + + +.. doxygenvariable:: HelperFunctions::event diff --git a/_sources/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.rst.txt b/_sources/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.rst.txt new file mode 100644 index 0000000000..f8f2f1bab8 --- /dev/null +++ b/_sources/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d: + +Variable HelperFunctions::store +=============================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Variable Documentation +---------------------- + + +.. doxygenvariable:: HelperFunctions::store diff --git a/_sources/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.rst.txt b/_sources/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.rst.txt new file mode 100644 index 0000000000..6b46c21e3c --- /dev/null +++ b/_sources/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397: + +Variable HelperFunctions::name +============================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Variable Documentation +---------------------- + + +.. doxygenvariable:: HelperFunctions::name diff --git a/_sources/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.rst.txt b/_sources/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.rst.txt new file mode 100644 index 0000000000..98f82c8514 --- /dev/null +++ b/_sources/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac: + +Variable HelperFunctions::debug +=============================== + +- Defined in :ref:`file_xAODAnaHelpers_HelperFunctions.h` + + +Variable Documentation +---------------------- + + +.. doxygenvariable:: HelperFunctions::debug diff --git a/_sources/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.rst.txt b/_sources/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.rst.txt new file mode 100644 index 0000000000..cfead07b4d --- /dev/null +++ b/_sources/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.rst.txt @@ -0,0 +1,13 @@ +.. _exhale_variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba: + +Variable else +============= + +- Defined in :ref:`file_xAODAnaHelpers_tools_ReturnCheckConfig.h` + + +Variable Documentation +---------------------- + + +.. doxygenvariable:: else diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000000..63fb2d8ea5 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,70 @@ +.. _MainPage: + +xAODAnaHelpers +============== + +.. image:: https://zenodo.org/badge/35496971.svg + :target: https://zenodo.org/badge/latestdoi/35496971 + +.. image:: https://travis-ci.org/UCATLAS/xAODAnaHelpers.svg?branch=main + :target: https://travis-ci.org/UCATLAS/xAODAnaHelpers + +.. raw:: html + +
    + + +|release_badges|_ + +.. _release_badges: Installing.html#cmake + +The xAOD analysis framework, born out of ProofAna...or not. + +Welcome to the xAODAnaHelpers wiki! This is an xAOD Analysis Framework built for Run II of ATLAS. + +Supported releases +------------------ + +xAODAnaHelpers supports 21 and 22 releases. This documentation is for R22, please follow this `link `_ to see the documentation for R21. + +.. _Versions: + +Latest Version +-------------- + +.. Cannot bold just yet: http://stackoverflow.com/questions/33537747/substitution-inside-inline-markup-while-escaping-whitespace + +.. note:: + If you need to add a new release to be supported, please make sure you update the GitHub Actions `ci.yml `_ workflow file first. + +We support the following releases: |all_releases| + +Python Code Quality +------------------- + +.. image:: https://landscape.io/github/UCATLAS/xAODAnaHelpers/main/landscape.svg?style=flat + :target: https://landscape.io/github/UCATLAS/xAODAnaHelpers/main + :alt: Code Health + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + + Intro + Installing + UsingUs + Algorithms + Development + Community + FAQs + API + api/library_root + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + diff --git a/_sources/xAHAlgorithm.rst.txt b/_sources/xAHAlgorithm.rst.txt new file mode 100644 index 0000000000..337a56e107 --- /dev/null +++ b/_sources/xAHAlgorithm.rst.txt @@ -0,0 +1,8 @@ +xAH::Algorithm +============== + +.. doxygenclass:: xAH::Algorithm + :members: + :undoc-members: + :protected-members: + :private-members: diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000000..bf18350b65 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,906 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/collapsible-lists/LICENSE.md b/_static/collapsible-lists/LICENSE.md new file mode 100644 index 0000000000..ef81a64535 --- /dev/null +++ b/_static/collapsible-lists/LICENSE.md @@ -0,0 +1,7 @@ +This code is the fruit of Kate Morley's labor, taken from here: + +- http://code.iamkate.com/javascript/collapsible-lists/ + +She includes a generous CC0 1.0 license for all materials on her site: + +- http://code.iamkate.com/ diff --git a/_static/collapsible-lists/css/button-closed.png b/_static/collapsible-lists/css/button-closed.png new file mode 100644 index 0000000000..417eb2fc40 Binary files /dev/null and b/_static/collapsible-lists/css/button-closed.png differ diff --git a/_static/collapsible-lists/css/button-open.png b/_static/collapsible-lists/css/button-open.png new file mode 100644 index 0000000000..ac4a6ef32a Binary files /dev/null and b/_static/collapsible-lists/css/button-open.png differ diff --git a/_static/collapsible-lists/css/button.png b/_static/collapsible-lists/css/button.png new file mode 100644 index 0000000000..631d734d13 Binary files /dev/null and b/_static/collapsible-lists/css/button.png differ diff --git a/_static/collapsible-lists/css/list-item-contents.png b/_static/collapsible-lists/css/list-item-contents.png new file mode 100644 index 0000000000..bc082929dc Binary files /dev/null and b/_static/collapsible-lists/css/list-item-contents.png differ diff --git a/_static/collapsible-lists/css/list-item-last-open.png b/_static/collapsible-lists/css/list-item-last-open.png new file mode 100644 index 0000000000..cf4cf9bdb9 Binary files /dev/null and b/_static/collapsible-lists/css/list-item-last-open.png differ diff --git a/_static/collapsible-lists/css/list-item-last.png b/_static/collapsible-lists/css/list-item-last.png new file mode 100644 index 0000000000..1eb1c64a25 Binary files /dev/null and b/_static/collapsible-lists/css/list-item-last.png differ diff --git a/_static/collapsible-lists/css/list-item-open.png b/_static/collapsible-lists/css/list-item-open.png new file mode 100644 index 0000000000..0889c801a9 Binary files /dev/null and b/_static/collapsible-lists/css/list-item-open.png differ diff --git a/_static/collapsible-lists/css/list-item-root.png b/_static/collapsible-lists/css/list-item-root.png new file mode 100644 index 0000000000..874417106a Binary files /dev/null and b/_static/collapsible-lists/css/list-item-root.png differ diff --git a/_static/collapsible-lists/css/list-item.png b/_static/collapsible-lists/css/list-item.png new file mode 100644 index 0000000000..81934f9b82 Binary files /dev/null and b/_static/collapsible-lists/css/list-item.png differ diff --git a/_static/collapsible-lists/css/tree_view.css b/_static/collapsible-lists/css/tree_view.css new file mode 100644 index 0000000000..fa21ac4e84 --- /dev/null +++ b/_static/collapsible-lists/css/tree_view.css @@ -0,0 +1,61 @@ +/* Source taken directly from: + * view-source:http://code.iamkate.com/javascript/collapsible-lists/ + * + * Kate Morley's license for this code is CC0: + * Created by [Kate Morley](http://iamkate.com/). Except where explicitly + * stated otherwise, all content is released under the terms of the + * [CC0 1.0 Universal legal code](http://creativecommons.org/publicdomain/zero/1.0/legalcode). + */ +.treeView{ + -moz-user-select:none; + position:relative; +} + +.treeView ul{ + margin:0 0 0 -1.5em ! important; + padding:0 0 0 1.5em ! important; +} + +.treeView ul ul{ + background:url('list-item-contents.png') repeat-y left ! important; +} + +.treeView li.lastChild > ul{ + background-image:none ! important; +} + +.treeView li{ + margin:0 ! important; + padding:0 ! important; + background:url('list-item-root.png') no-repeat top left ! important; + list-style-position:inside ! important; + list-style-image:url('button.png') ! important; + cursor:auto; +} + +.treeView li.collapsibleListOpen{ + list-style-image:url('button-open.png') ! important; + cursor:pointer; +} + +.treeView li.collapsibleListClosed{ + list-style-image:url('button-closed.png') ! important; + cursor:pointer; +} + +.treeView li li{ + background-image:url('list-item.png') ! important; + padding-left:1.5em ! important; +} + +.treeView li.lastChild{ + background-image:url('list-item-last.png') ! important; +} + +.treeView li.collapsibleListOpen{ + background-image:url('list-item-open.png') ! important; +} + +.treeView li.collapsibleListOpen.lastChild{ + background-image:url('list-item-last-open.png') ! important; +} diff --git a/_static/collapsible-lists/js/CollapsibleLists.compressed.js b/_static/collapsible-lists/js/CollapsibleLists.compressed.js new file mode 100644 index 0000000000..429406cf39 --- /dev/null +++ b/_static/collapsible-lists/js/CollapsibleLists.compressed.js @@ -0,0 +1,83 @@ +/* + +CollapsibleLists.js + +An object allowing lists to dynamically expand and collapse + +Created by Kate Morley - http://code.iamkate.com/ - and released under +the terms of the CC0 1.0 Universal legal code: + +http://creativecommons.org/publicdomain/zero/1.0/legalcode + +*/ + +var CollapsibleLists=new function(){ +this.apply=function(_1){ +var _2=document.getElementsByTagName("ul"); +for(var _3=0;_3<_2.length;_3++){ +if(_2[_3].className.match(/(^| )collapsibleList( |$)/)){ +this.applyTo(_2[_3],true); +if(!_1){ +var _4=_2[_3].getElementsByTagName("ul"); +for(var _5=0;_5<_4.length;_5++){ +_4[_5].className+=" collapsibleList"; +} +} +} +} +}; +this.applyTo=function(_6,_7){ +var _8=_6.getElementsByTagName("li"); +for(var _9=0;_9<_8.length;_9++){ +if(!_7||_6==_8[_9].parentNode){ +if(_8[_9].addEventListener){ +_8[_9].addEventListener("mousedown",function(e){ +e.preventDefault(); +},false); +}else{ +_8[_9].attachEvent("onselectstart",function(){ +event.returnValue=false; +}); +} +if(_8[_9].addEventListener){ +_8[_9].addEventListener("click",_a(_8[_9]),false); +}else{ +_8[_9].attachEvent("onclick",_a(_8[_9])); +} +_b(_8[_9]); +} +} +}; +function _a(_c){ +return function(e){ +if(!e){ +e=window.event; +} +var _d=(e.target?e.target:e.srcElement); +while(_d.nodeName!="LI"){ +_d=_d.parentNode; +} +if(_d==_c){ +_b(_c); +} +}; +}; +function _b(_e){ +var _f=_e.className.match(/(^| )collapsibleListClosed( |$)/); +var uls=_e.getElementsByTagName("ul"); +for(var _10=0;_100){ +_e.className+=" collapsibleList"+(_f?"Open":"Closed"); +} +}; +}(); + diff --git a/_static/collapsible-lists/js/apply-collapsible-lists.js b/_static/collapsible-lists/js/apply-collapsible-lists.js new file mode 100644 index 0000000000..e848bb9811 --- /dev/null +++ b/_static/collapsible-lists/js/apply-collapsible-lists.js @@ -0,0 +1,3 @@ +$(document).ready(function() { + CollapsibleLists.apply(); +}); diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 0000000000..3c33cef545 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 0000000000..aed8cef066 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,6 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content .code-block-caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content .code-block-caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#3a7ca8;height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin:12px 0 0 0;display:block;font-weight:bold;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000000..e1bfd708b7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,358 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + this.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar : function() { + $('input[name=q]').first().focus(); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + return; + + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON') { + if (event.altKey || event.ctrlKey || event.metaKey) + return; + + if (!event.shiftKey) { + switch (event.key) { + case 'ArrowLeft': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 'ArrowRight': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + case 'Escape': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.hideSearchWords(); + return false; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case '/': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.focusSearchBar(); + return false; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000000..3af5013580 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'c38ee56', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000..a858a410e4 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/fonts/Inconsolata-Bold.ttf b/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 0000000000..809c1f5828 Binary files /dev/null and b/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/_static/fonts/Inconsolata-Regular.ttf b/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 0000000000..fc981ce7ad Binary files /dev/null and b/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/_static/fonts/Inconsolata.ttf b/_static/fonts/Inconsolata.ttf new file mode 100644 index 0000000000..4b8a36d249 Binary files /dev/null and b/_static/fonts/Inconsolata.ttf differ diff --git a/_static/fonts/Lato-Bold.ttf b/_static/fonts/Lato-Bold.ttf new file mode 100644 index 0000000000..1d23c7066e Binary files /dev/null and b/_static/fonts/Lato-Bold.ttf differ diff --git a/_static/fonts/Lato-Regular.ttf b/_static/fonts/Lato-Regular.ttf new file mode 100644 index 0000000000..0f3d0f837d Binary files /dev/null and b/_static/fonts/Lato-Regular.ttf differ diff --git a/_static/fonts/Lato/lato-bold.eot b/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 0000000000..3361183a41 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.eot differ diff --git a/_static/fonts/Lato/lato-bold.ttf b/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 0000000000..29f691d5ed Binary files /dev/null and b/_static/fonts/Lato/lato-bold.ttf differ diff --git a/_static/fonts/Lato/lato-bold.woff b/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 0000000000..c6dff51f06 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff differ diff --git a/_static/fonts/Lato/lato-bold.woff2 b/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 0000000000..bb195043cf Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/_static/fonts/Lato/lato-bolditalic.eot b/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 0000000000..3d4154936b Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/_static/fonts/Lato/lato-bolditalic.ttf b/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 0000000000..f402040b3e Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff b/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 0000000000..88ad05b9ff Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff2 b/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 0000000000..c4e3d804b5 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/_static/fonts/Lato/lato-italic.eot b/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 0000000000..3f826421a1 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.eot differ diff --git a/_static/fonts/Lato/lato-italic.ttf b/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 0000000000..b4bfc9b24a Binary files /dev/null and b/_static/fonts/Lato/lato-italic.ttf differ diff --git a/_static/fonts/Lato/lato-italic.woff b/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 0000000000..76114bc033 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff differ diff --git a/_static/fonts/Lato/lato-italic.woff2 b/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 0000000000..3404f37e2e Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/_static/fonts/Lato/lato-regular.eot b/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 0000000000..11e3f2a5f0 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.eot differ diff --git a/_static/fonts/Lato/lato-regular.ttf b/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 0000000000..74decd9ebb Binary files /dev/null and b/_static/fonts/Lato/lato-regular.ttf differ diff --git a/_static/fonts/Lato/lato-regular.woff b/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 0000000000..ae1307ff5f Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff differ diff --git a/_static/fonts/Lato/lato-regular.woff2 b/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 0000000000..3bf9843328 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/_static/fonts/RobotoSlab-Bold.ttf b/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 0000000000..df5d1df273 Binary files /dev/null and b/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/_static/fonts/RobotoSlab-Regular.ttf b/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 0000000000..eb52a79073 Binary files /dev/null and b/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 0000000000..79dc8efed3 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 0000000000..df5d1df273 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 0000000000..6cb6000018 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 0000000000..7059e23142 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 0000000000..2f7ca78a1e Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 0000000000..eb52a79073 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 0000000000..f815f63f99 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 0000000000..f2c76e5bda Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/_static/fonts/fontawesome-webfont.eot b/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000..e9f60ca953 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.eot differ diff --git a/_static/fonts/fontawesome-webfont.svg b/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..855c845e53 --- /dev/null +++ b/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/fonts/fontawesome-webfont.ttf b/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.ttf differ diff --git a/_static/fonts/fontawesome-webfont.woff b/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000..400014a4b0 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.woff differ diff --git a/_static/fonts/fontawesome-webfont.woff2 b/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000..4d13fc6040 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/jquery-3.5.1.js b/_static/jquery-3.5.1.js new file mode 100644 index 0000000000..50937333b9 --- /dev/null +++ b/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class BJetEfficiencyCorrector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class BJetEfficiencyCorrector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +BJetEfficiencyCorrector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +EL::StatusCode executeEfficiencyCorrection(const xAOD::JetContainer *inJets, const xAOD::EventInfo *eventInfo, bool doNominal)
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +unsigned int getMCIndex(int dsid)
    +
    + +
    +
    +void makeMCIndexMap(std::string effCalib)
    +
    + +
    +
    +std::string getFlavorLabel(const xAOD::Jet &jet) const
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_inputAlgo = ""
    +

    The name of the vector containing the names of the systematically-varied jet-related containers from the upstream algorithm, which will be processed by this algorithm.

    +

    Only jet calibration systematics or any other that create shallow copies of jet containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

    +
    + +
    +
    +std::string m_systName = ""
    +
    + +
    +
    +std::string m_outputSystName = "BJetEfficiency_Algo"
    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +
    + +
    +
    +std::string m_corrFileName = "xAODBTaggingEfficiency/13p6TeV/2023-22-13p6TeV-MC21-CDI_Test_2023-08-1_v1.root"
    +
    + +
    +
    +std::string m_jetAuthor = "AntiKt4EMPFlowJets"
    +
    + +
    +
    +float m_minPt = 20e3
    +

    Minimum pT in MeV for taggable jets.

    +
    + +
    +
    +std::string m_taggerName = "DL1r"
    +
    + +
    +
    +bool m_useDevelopmentFile = true
    +
    + +
    +
    +bool m_coneFlavourLabel = true
    +
    + +
    +
    +std::string m_systematicsStrategy = "SFEigen"
    +
    + +
    +
    +bool m_errorOnTagWeightFailure = true
    +

    BTaggingSelectionTool throws an error on missing tagging weights. If false, a warning is given instead.

    +
    + +
    +
    +bool m_alwaysGetTagWeight = false
    +

    Decorate tag weights even if we’re not doing pseudocontinuous b-tagging.

    +
    + +
    +
    +bool m_isRun3 = false
    +

    Flag to get Run3 MC-MC SFs.

    +
    + +
    +
    +std::string m_operatingPt = "FixedCutBEff_70"
    +

    Operating point.

    +
    + +
    +
    +std::string m_operatingPtCDI = ""
    +

    Operating point that CDI will understand.

    +
    + +
    +
    +bool m_getScaleFactors = false
    +

    will only get scale factors for calibrated working points

    +
    + +
    +
    +bool m_useContinuous = false
    +

    will get tagWeight, quantile, and SF

    +
    + +
    +
    +std::string m_decor = "BTag"
    +

    The decoration key written to passing objects.

    +
    + +
    +
    +bool m_tagDecisionOnly = false
    +

    Only apply b-tag decision decoration; don’t retrieve scale factors (Not recommended. For expert use.)

    +
    + +
    +
    +bool m_setMapIndex = false
    +

    Select an efficiency map for use in MC/MC and inefficiency scale factors, based on user specified selection of efficiency maps.

    +
    + +
    +
    +std::string m_DSIDtoGenerator_filename = "xAODAnaHelpers/DSIDtoGenerator.txt"
    +
    + +
    +
    +float m_orBJetPtUpperThres = -1
    +

    upper pt threshold of b-jet in OR in unit of GeV, negative value means no pt threshold

    +
    + +
    +
    +std::string m_EfficiencyCalibration = ""
    +

    Calibration to use for MC (EfficiencyB/C/T/LightCalibrations), “auto” to determine from sample name (multiple samples can be provided as long as they are separated by ‘;’)

    +

    Example: “410470;410250;410558;410464” (Pythia8,Sherpa22,Herwig7,MG)

    +
    + +
    +
    +bool m_allowCalibrationFallback = false
    +

    Allow to fallback to “default” configuration when the shower type can’t be determined automatically.

    +
    + +
    +
    +std::string m_EigenvectorReductionB = "Loose"
    +

    To change NP scheme for b-tagging systematics - Loose is the default value in athena.

    +
    + +
    +
    +std::string m_EigenvectorReductionC = "Loose"
    +
    + +
    +
    +std::string m_EigenvectorReductionLight = "Loose"
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classBasicEventSelection.html b/api/classBasicEventSelection.html new file mode 100644 index 0000000000..76700b73b5 --- /dev/null +++ b/api/classBasicEventSelection.html @@ -0,0 +1,642 @@ + + + + + + + + + + + Class BasicEventSelection — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class BasicEventSelection

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class BasicEventSelection : public xAH::Algorithm
    +

    This algorithm performs the very basic event selection. This should be the first algo in the algo chain. It can create weighted and unweighted cutflow objects to be picked up downstream by other xAH algos, and your own. The selection applied in data only is:

    +
    +
      +
    • GRL (can be turned off)

    • +
    • LAr Error

    • +
    • Tile Error

    • +
    • Core Flag

    • +
    +
    +

    In both data and simulation (MC), the following cuts are applied

    +
    +
    +
    +

    For derivations, the metadata can be accessed and added to the cutflow for normalization. The parameters to control the trigger are described in this header file. If one wants to write out some of the trigger information into a tree using HelpTreeBase, flags must be set here.

    +

    +
    +

    Note

    +

    For MC only, the pileup reweight can also be applied.

    +
    +
    +

    Public Functions

    +
    +
    +BasicEventSelection()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_isTLAData = false
    +

    Flag to determine when running on TLA data for different handling of TDT.

    +
    + +
    +
    +bool m_truthLevelOnly = false
    +

    Protection when running on truth xAOD.

    +
    + +
    +
    +bool m_setAFII = false
    +

    SimulationFlavour will be determined from the sample MetaData, unless AFII or FS is explicitely requested with the following flags.

    +
    + +
    +
    +bool m_setAF3 = false
    +
    + +
    +
    +bool m_setFS = false
    +
    + +
    +
    +bool m_applyGRLCut = false
    +

    Apply GRL selection.

    +
    + +
    +
    +std::string m_GRLxml = ""
    +

    Path to GRL XML file.

    +
    + +
    +
    +std::string m_GRLExcludeList = ""
    +

    Run numbers to skip in GRL.

    +
    + +
    +
    +bool m_cleanPowheg = false
    +

    Clean Powheg huge weight.

    +
    + +
    +
    +bool m_reweightSherpa22 = false
    +

    Reweight Sherpa 2.2 Samples.

    +
    + +
    +
    +bool m_doPUreweighting = false
    +

    Reweight pile-up profile \(\mu\)

    +
    + +
    +
    +bool m_doPUreweightingSys = false
    +
    + +
    +
    +std::string m_lumiCalcFileNames = ""
    +

    Comma separated list of filenames.

    +
    + +
    +
    +std::string m_PRWFileNames = ""
    +

    Comma separated list of filenames.

    +
    + +
    +
    +bool m_autoconfigPRW = false
    +

    Automatically configure PRW using config files from SUSYTools instead of using m_PRWFileNames.

    +
    + +
    +
    +bool m_useCommonPRWFiles = false
    +

    Configure PRW using common files instead of DSID-specific files.

    +
    + +
    +
    +std::string m_prwActualMu2016File = ""
    +

    actualMu configuration file for the MC16a campaign (2015/2016). Added to the PRW tool when using PRW autoconfiguration.

    +
    + +
    +
    +std::string m_prwActualMu2017File = ""
    +

    actualMu configuration file for the MC16d campaign (2017). Added to the PRW tool when using PRW autoconfiguration.

    +
    + +
    +
    +std::string m_prwActualMu2018File = ""
    +

    actualMu configuration file for the MC16e campaign (2018). Added to the PRW tool when using PRW autoconfiguration.

    +
    + +
    +
    +std::string m_prwActualMu2022File = ""
    +

    actualMu configuration file for the MC23a campaign (2022). Added to the PRW tool when using PRW autoconfiguration.

    +
    + +
    +
    +std::string m_prwActualMu2023File = ""
    +

    actualMu configuration file for the MC23d campaign (2023). Added to the PRW tool when using PRW autoconfiguration.

    +
    + +
    +
    +std::string m_commonPRWFileMC20a = "PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root"
    +

    Common PRW file for the MC20a campaign (2015/16). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_commonPRWFileMC20d = "PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root"
    +

    Common PRW file for the MC20d campaign (2017). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_commonPRWFileMC20e = "PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root"
    +

    Common PRW file for the MC20e campaign (2018). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_commonPRWFileMC23a = "PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root"
    +

    Common PRW file for the MC23a campaign (2022). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_commonPRWFileMC23c = "PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root"
    +

    Common PRW file for the MC23c campaign (2023). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_commonPRWFileMC23d = "PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root"
    +

    Common PRW file for the MC23d campaign (2023). Added to the PRW tool when using PRW autoconfiguration with common PRW files option.

    +
    + +
    +
    +std::string m_mcCampaign
    +

    mc16(acd) to bypass the automatic campaign determination from AMI, several campaigns can be separated by a comma. Only used +when m_autoconfigPRW is true

    +
    + +
    +
    +std::string m_periodConfig = "auto"
    +

    Use Period Configuration or auto.

    +
    + +
    +
    +bool m_checkStreams = false
    +

    Print streamTags (only in debug mode)

    +
    + +
    +
    +int m_actualMuMin = -1
    +

    The minimum threshold for EventInfo::actualInteractionsPerCrossing()

    +
    + +
    +
    +int m_actualMuMax = -1
    +

    The maximum threshold for EventInfo::actualInteractionsPerCrossing()

    +
    + +
    +
    +bool m_calcBCIDInfo = false
    +

    Calculate distance to nearest empty and unpaired BCIDs.

    +
    + +
    +
    +bool m_applyPrimaryVertexCut = false
    +

    Enable to apply a primary vertex cut.

    +
    + +
    +
    +int m_PVNTrack = 2
    +

    Minimum number of tracks from the primary vertex (Harmonized Cut)

    +
    + +
    +
    +bool m_applyEventCleaningCut = false
    +
    + +
    +
    +bool m_applyCoreFlagsCut = false
    +
    + +
    +
    +bool m_applyJetCleaningEventFlag = false
    +

    recommended way to clean all jets, but especially collections other than EMTopo … equivalent to “loose” jet-by-jet cleaning!

    +
    + +
    +
    +bool m_applyIsBadBatmanFlag = false
    +

    should only ever be used in 2015 and 2016 data, for analyses which may be of interest for analyses where fake MET can be an issue

    +
    + +
    +
    +bool m_printBranchList = false
    +
    + +
    +
    +std::string m_triggerSelection = ""
    +

    RegEx expression to choose triggers to consider to be cut on with m_applyTriggerCut

    +
    + +
    +
    +std::string m_extraTriggerSelection = ""
    +

    Decisions of triggers which are saved but not cut on.

    +
    + +
    +
    +bool m_applyTriggerCut = false
    +

    Skip events in which the trigger string m_triggerSelection does not fire

    +
    + +
    +
    +bool m_storeTrigDecisions = false
    +

    Save string of fired triggers matching m_triggerSelection

    +
    + +
    +
    +bool m_storePassL1 = false
    +

    Save if any L1 trigger fired, e.g. "L1_.*"

    +
    + +
    +
    +bool m_storePassHLT = false
    +

    Save if any HLT trigger fired, e.g. "HLT_.*"

    +
    + +
    +
    +bool m_storeTrigKeys = false
    +

    Save master, L1, and HLT key.

    +
    + +
    +
    +bool m_storePrescaleWeight = true
    +

    Save the trigger prescale weight.

    +
    + +
    +
    +std::string m_derivationName = ""
    +

    The name of the derivation (use this as an override)

    +
    + +
    +
    +bool m_useMetaData = true
    +

    Retrieve and save information on DAOD selection.

    +
    + +
    +
    +std::string m_metaDataStreamName = "metadata"
    +
    + +
    +
    +std::string m_duplicatesStreamName = "duplicates_tree"
    +
    + +
    +
    +bool m_checkDuplicatesData = false
    +

    Check for duplicated events in data

    +
    + +
    +
    +bool m_checkDuplicatesMC = false
    +

    Check for duplicated events in MC

    +
    + +
    +
    +bool m_doRunByRunCutflows = false
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classClusterHistsAlgo.html b/api/classClusterHistsAlgo.html new file mode 100644 index 0000000000..b122b580c2 --- /dev/null +++ b/api/classClusterHistsAlgo.html @@ -0,0 +1,307 @@ + + + + + + + + + + + Class ClusterHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ClusterHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ClusterHistsAlgo : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +ClusterHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_detailStr = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classDebugTool.html b/api/classDebugTool.html new file mode 100644 index 0000000000..a6a63b29f9 --- /dev/null +++ b/api/classDebugTool.html @@ -0,0 +1,302 @@ + + + + + + + + + + + Class DebugTool — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class DebugTool

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class DebugTool : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +DebugTool()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_printStore = false
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classElectronCalibrator.html b/api/classElectronCalibrator.html new file mode 100644 index 0000000000..147b24ef43 --- /dev/null +++ b/api/classElectronCalibrator.html @@ -0,0 +1,362 @@ + + + + + + + + + + + Class ElectronCalibrator — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronCalibrator

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronCalibrator : public xAH::Algorithm
    +

    This is the algorithm class used to calibrate electrons.

    +

    In a nutshell, this algorithm performs the following actions:

    +
    +
      +
    • retrieves an xAOD::ElectronContainer from either TEvent or TStore

    • +
    • makes a shallow copy container and fills it with energy-and-direction calibrated electrons using the EgammaCalibrationAndSmearingTool in Tools Used

    • +
    • saves the shallow copy container to TStore from where it can be retrieved by algorithms downstream via name lookup

    • +
    +
    +

    +
    +

    Public Functions

    +
    +
    +ElectronCalibrator()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +

    The name of the input container for this algorithm to read from TEvent or TStore

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    The name of the nominal output container written by the algorithm to TStore

    +

    If the algorithm applies systematic variations, for each shallow copy saved to TStore, the systematic name will be appended to this.

    +
    + +
    +
    +bool m_sort = true
    +

    Sort the processed container elements by transverse momentum.

    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    The name of the vector containing the names of the systematically-varied containers from the upstream algorithm, which will be processed by this algorithm.

    +

    This vector is retrieved from the TStore. If left blank, it means there is no upstream algorithm which applies systematics. This is the case when processing straight from the original xAOD or DxAOD.

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "ElectronCalibrator_Syst"
    +

    The name of the vector containing the names of the systematically-varied containers created by by this algorithm.

    +

    If m_systName is empty, the vector will contain only an empty string. When running on systematics, this is the string a downstream algorithm needs to process electrons.

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +std::string m_esModel = ""
    +
    + +
    +
    +std::string m_decorrelationModel = ""
    +
    + +
    +
    +bool m_applyIsolationCorrection = false
    +

    Apply isolation correction, not needed by default.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classElectronCutBasedPIDManager.html b/api/classElectronCutBasedPIDManager.html new file mode 100644 index 0000000000..8dce3d493e --- /dev/null +++ b/api/classElectronCutBasedPIDManager.html @@ -0,0 +1,285 @@ + + + + + + + + + + + Class ElectronCutBasedPIDManager — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronCutBasedPIDManager

    + +
    +

    Class Documentation

    +
    +
    +class ElectronCutBasedPIDManager
    +
    +

    Public Functions

    +
    +
    +ElectronCutBasedPIDManager()
    +
    + +
    +
    +ElectronCutBasedPIDManager(std::string WP, bool debug = false)
    +
    + +
    +
    +~ElectronCutBasedPIDManager()
    +
    + +
    +
    +StatusCode setupWPs(bool configTools, std::string selector_name = "")
    +
    + +
    +
    +StatusCode setDecorations(const xAOD::Electron *electron)
    +
    + +
    +
    +inline const std::string getSelectedWP()
    +
    + +
    +
    +inline std::multimap<std::string, AsgElectronIsEMSelector*> getAllWPTools()
    +
    + +
    +
    +inline std::multimap<std::string, AsgElectronIsEMSelector*> getValidWPTools()
    +
    + +
    +
    +inline const std::set<std::string> getAllWPs()
    +
    + +
    +
    +inline const std::set<std::string> getValidWPs()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classElectronEfficiencyCorrector.html b/api/classElectronEfficiencyCorrector.html new file mode 100644 index 0000000000..49aacc94f8 --- /dev/null +++ b/api/classElectronEfficiencyCorrector.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Class ElectronEfficiencyCorrector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronEfficiencyCorrector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronEfficiencyCorrector : public xAH::Algorithm
    +

    This is the algorithm class that applies generic corrections to electrons. At the moment, only data/MC efficiency correction is included (electron trigger SF and others will follow…).

    +

    In a nutshell, this algorithm performs the following actions:

    +
    +
      +
    • retrieves an xAOD::ElectronContainer from either TEvent or TStore

    • +
    • adds a scale factor (SF) decoration for each electron in the input container calculated via the AsgElectronEfficiencyCorrectionTool in Tools Used

    • +
    • the nominal SF and all the systematically-varied ones are saved as a vector<double> decoration for each electron

    • +
    +
    +

    +
    +

    Note

    +

    Bear in mind that this algorithm must be called after ElectronSelector. In fact, the configuration file(s) being used must have the same working point as the one chosen in the selector.

    +
    +
    +

    Public Functions

    +
    +
    +ElectronEfficiencyCorrector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual EL::StatusCode executeSF(const xAOD::ElectronContainer *inputElectrons, bool nominal, bool writeSystNames)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +

    The name of the input container for this algorithm to read from TEvent or TStore

    +
    + +
    +
    +std::string m_inputSystNamesElectrons
    +

    The name of the vector containing the names of the systematically-varied electrons-related containers from the upstream algorithm, which will be processed by this algorithm.

    +

    Only electron calibration systematics or any other that create shallow copies of electron containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +float m_systValPID = 0.0
    +
    + +
    +
    +float m_systValIso = 0.0
    +
    + +
    +
    +float m_systValReco = 0.0
    +
    + +
    +
    +float m_systValTrig = 0.0
    +
    + +
    +
    +std::string m_systNamePID = ""
    +
    + +
    +
    +std::string m_systNameIso = ""
    +
    + +
    +
    +std::string m_systNameReco = ""
    +
    + +
    +
    +std::string m_systNameTrig = ""
    +
    + +
    +
    +std::string m_outputSystNamesPID = "EleEffCorr_PIDSyst"
    +
    + +
    +
    +std::string m_outputSystNamesIso = "EleEffCorr_IsoSyst"
    +
    + +
    +
    +std::string m_outputSystNamesReco = "EleEffCorr_RecoSyst"
    +
    + +
    +
    +std::string m_outputSystNamesTrig = "EleEffCorr_TrigSyst"
    +
    + +
    +
    +std::string m_correlationModel = "FULL"
    +

    Systematic correlation model.

    +
    + +
    +
    +std::string m_WorkingPointPID = ""
    +

    PID working point (LooseBLayer, Medium, Tight)

    +
    + +
    +
    +std::string m_WorkingPointIso = ""
    +

    Isolation working point.

    +
    + +
    +
    +std::string m_WorkingPointReco = ""
    +

    Reconstruction working point (Reconstruction only)

    +
    + +
    +
    +std::string m_WorkingPointTrig = ""
    +

    Trigger working point.

    +
    + +
    +
    +bool m_usePerElectronTriggerSFs = true
    +
    + +
    +
    +std::string m_overrideMapFilePath = ""
    +

    Override corrections map file (not recommended)

    +
    + +
    +
    +std::string m_overrideMapFilePathTrig = ""
    +

    Override corrections map file for trigger (needed as Run2 R22 Trigger SF use R21 values)

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classElectronHistsAlgo.html b/api/classElectronHistsAlgo.html new file mode 100644 index 0000000000..e7d79970a2 --- /dev/null +++ b/api/classElectronHistsAlgo.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Class ElectronHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronHistsAlgo : public IParticleHistsAlgo
    +
    +

    Public Functions

    +
    +
    +ElectronHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +

    Calls execute<IParticleContainer>

    +
    + +
    +
    +virtual EL::StatusCode AddHists(std::string name)
    +

    Calls AddHists<IParticleHists>

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classElectronSelector.html b/api/classElectronSelector.html new file mode 100644 index 0000000000..395de9f4a5 --- /dev/null +++ b/api/classElectronSelector.html @@ -0,0 +1,569 @@ + + + + + + + + + + + Class ElectronSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronSelector : public xAH::Algorithm
    +

    This is the algorithm class that selects electrons according to user’s choice.

    +

    In a nutshell, this algorithm performs the following actions:

    +
    +
      +
    • retrieves an xAOD::ElectronContainer from either TEvent or TStore

    • +
    • iterates over the input container, and if electron passes selection, copies it in a ConstDataVector(SG::VIEW_ELEMENTS) container. Otherwise, the electron is skipped

    • +
    • saves the view container to TStore, from where it can be retrieved by algorithms downstream via a name lookup

    • +
    +
    +

    +
    +

    Public Functions

    +
    +
    +ElectronSelector()
    +
    + +
    +
    +~ElectronSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +bool executeSelection(const xAOD::ElectronContainer *inElectrons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::ElectronContainer> *selectedElectrons)
    +
    + +
    +
    +virtual int passCuts(const xAOD::Electron *electron, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    The name of the input container for this algorithm read from TEvent or TStore

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    The name of the nominal output container written by the algorithm to TStore

    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    The name of the vector containing the names of the systematically-varied containers from the upstream algorithm, which will be processed by this algorithm.

    +

    This vector is retrieved from the TStore. If left blank, it means there is no upstream algorithm which applies systematics. This is the case when processing straight from the original xAOD or DxAOD.

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "ElectronSelector_Syst"
    +

    The name of the vector containing the names of the systematically-varied containers created by by this algorithm.

    +

    If m_systName is empty, the vector will contain only an empty string. When running on systematics, this is the string a downstream algorithm needs to process electrons.

    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    Adds a passSel decoration for objects that pass selection.

    +
    + +
    +
    +bool m_createSelectedContainer = false
    +

    Fill using a read-only container (SG::VIEW_ELEMENTS) to TStore

    +
    + +
    +
    +int m_nToProcess = -1
    +

    Number of objects to process, set n=-1 to look at all.

    +
    + +
    +
    +int m_pass_min = -1
    +

    Require event to have minimum number of objects passing selection.

    +
    + +
    +
    +int m_pass_max = -1
    +

    Require event to have maximum number of objects passing selection.

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    [MeV] Require objects to have maximum transverse momentum threshold

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    [MeV] Require objects to have minimum transverse momentum threshold

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    Require objects to have maximum \(|\eta|\) value

    +
    + +
    +
    +bool m_vetoCrack = true
    +

    Require objects to have \(|\eta|\) outside the crack region using caloCluster->eta()

    +
    + +
    +
    +float m_d0_max = 1e8
    +

    Require objects to have a maximum \(d_{0}\) [mm] (transverse impact parameter)

    +
    + +
    +
    +float m_d0sig_max = 1e8
    +

    Require objects to have a maximum \(d_{0}\) significance at BL

    +
    + +
    +
    +float m_z0sintheta_max = 1e8
    +

    Require objects to have maximum \(z_{0}\sin(\theta)\) [mm] (longitudinal impact paramter) at BL - corrected with vertex info

    +
    + +
    +
    +bool m_doAuthorCut = true
    +

    Perform author kinematic cut.

    +
    + +
    +
    +bool m_doOQCut = true
    +

    Perform object quality cut.

    +
    + +
    +
    +bool m_applyDeadHVCellVeto = false
    +

    Apply veto dead HV cells, affects only 2016 data.

    +
    + +
    +
    +bool m_readIDFlagsFromDerivation = false
    +

    To read electron PID decision from DAOD, rather than recalculate with tool.

    +
    + +
    +
    +bool m_doModifiedEleId = false
    +

    To correct egamma bug, see ATLSUSYSW-445.

    +
    + +
    +
    +bool m_doLHPID = true
    +

    Instantiate and perform the electron Likelihood PID.

    +
    + +
    +
    +bool m_doLHPIDcut = false
    +

    Cut on electron Likelihood PID (recommended)

    +
    + +
    +
    +std::string m_LHOperatingPoint = "Loose"
    +

    Loosest Likelihood PID operating point to save.

    +
    + +
    +
    +bool m_doCutBasedPID = false
    +

    Instantiate and perform the electron cut-based PID.

    +
    + +
    +
    +bool m_doCutBasedPIDcut = false
    +

    Cut on electron cut-based PID.

    +
    + +
    +
    +std::string m_CutBasedOperatingPoint = "Loose"
    +

    Loosest cut-based PID operating point to save.

    +
    + +
    +
    +std::string m_MinIsoWPCut = ""
    +

    reject objects which do not pass this isolation cut - default = “” (no cut)

    +
    + +
    +
    +std::string m_IsoWPList = "FCLoose,FCTight,Gradient,FCHighPtCaloOnly"
    +

    decorate objects with isIsolated_* flag for each WP in this input list - default = all current ASG WPs

    +
    + +
    +
    +std::string m_CaloIsoEff = "0.1*x+90"
    +

    to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

    +
    + +
    +
    +std::string m_TrackIsoEff = "98"
    +

    to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

    +
    + +
    +
    +std::string m_CaloBasedIsoType = "topoetcone20"
    +

    to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

    +
    + +
    +
    +std::string m_TrackBasedIsoType = "ptvarcone20"
    +

    to define a custom WP - make sure "UserDefined" is added in m_IsoWPList

    +
    + +
    +
    +std::string m_singleElTrigChains = ""
    +

    A comma-separated string w/ alll the HLT single electron trigger chains for which you want to perform the matching. This is passed by the user as input in configuration If left empty (as it is by default), no trigger matching will be attempted at all.

    +
    + +
    +
    +std::string m_diElTrigChains = ""
    +

    A comma-separated string w/ alll the HLT di-electron trigger chains for which you want to perform the matching. This is passed by the user as input in configuration If left empty (as it is by default), no trigger matching will be attempted at all.

    +
    + +
    +
    +double m_minDeltaR = 0.07
    +

    Recommended threshold for egamma triggers: see https://svnweb.cern.ch/trac/atlasoff/browser/Trigger/TrigAnalysis/TriggerMatchingTool/trunk/src/TestMatchingToolAlg.cxx.

    +
    + +
    +
    +bool m_applyCrackVetoCleaning = false
    +

    Apply fix to EGamma Crack-Electron topocluster association bug for MET (PFlow) / false by default.

    +
    + +
    +
    +bool m_merged_electrons = false
    +

    Element links need to be updated if merged electrons are used (LRT + std) / false by default.

    +
    + +
    +
    +std::string m_trigInputPrefix = ""
    +

    Input prefix of trigger decision tool.

    +
    + +
    +
    +std::string m_isoDecSuffix = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHLTJetGetter.html b/api/classHLTJetGetter.html new file mode 100644 index 0000000000..e6292fe93d --- /dev/null +++ b/api/classHLTJetGetter.html @@ -0,0 +1,315 @@ + + + + + + + + + + + Class HLTJetGetter — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class HLTJetGetter

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class HLTJetGetter : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +HLTJetGetter()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_triggerList = ".*"
    +

    List of triggers whose features will be extracted from TDT.

    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    input container name, WITHOUT the HLT_xAOD__JetContainer_ prefix

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelpTreeBase.html b/api/classHelpTreeBase.html new file mode 100644 index 0000000000..9a077889ee --- /dev/null +++ b/api/classHelpTreeBase.html @@ -0,0 +1,1085 @@ + + + + + + + + + + + Class HelpTreeBase — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class HelpTreeBase

    + +
    +

    Class Documentation

    +
    +
    +class HelpTreeBase
    +
    +

    Public Functions

    +
    +
    +HelpTreeBase(xAOD::TEvent *event, TTree *tree, TFile *file, const float units = 1e3, bool debug = false, xAOD::TStore *store = nullptr, std::string nominalTreeName = "nominal")
    +
    + +
    +
    +HelpTreeBase(TTree *tree, TFile *file, xAOD::TEvent *event = nullptr, xAOD::TStore *store = nullptr, const float units = 1e3, bool debug = false, std::string nominalTreeName = "nominal")
    +
    + +
    +
    +virtual ~HelpTreeBase()
    +
    + +
    +
    +void AddEvent(const std::string &detailStr = "")
    +
    + +
    +
    +void AddTrigger(const std::string &detailStr = "")
    +
    + +
    +
    +void AddJetTrigger(const std::string &detailStr = "")
    +
    + +
    +
    +void AddMuons(const std::string &detailStr = "", const std::string &muonName = "muon")
    +
    + +
    +
    +void AddElectrons(const std::string &detailStr = "", const std::string &elecName = "el")
    +
    + +
    +
    +void AddPhotons(const std::string &detailStr = "", const std::string &photonName = "ph")
    +
    + +
    +
    +void AddClusters(const std::string &detailStr = "", const std::string &clusterName = "cl")
    +
    + +
    +
    +void AddJets(const std::string &detailStr = "", const std::string &jetName = "jet")
    +
    + +
    +
    +void AddL1Jets(const std::string &jetName = "")
    +
    + +
    +
    +void AddTruthParts(const std::string &detailStr = "", const std::string &truthName = "xAH_truth")
    +
    + +
    +
    +void AddTrackParts(const std::string &detailStr = "", const std::string &trackName = "trk")
    +
    + +
    +
    +void AddVertices(const std::string &detailStr = "", const std::string &vertexName = "vertex")
    +
    + +
    +
    +void AddTruthVertices(const std::string &detailStr = "", const std::string &vertexName = "truth_vertex")
    +
    + +
    +
    +void AddFatJets(const std::string &detailStr = "", const std::string &fatjetName = "fatjet", const std::string &subjetDetailStr = "", const std::string &suffix = "")
    +

    Declare a new collection of fatjets to be written to the output tree.

    +
    +
    Parameters
    +
      +
    • detailStr – A (space-separated) list of detail options. These keywords specify exactly which information about each jet is written out. Current influential options are: kinematic substructure constituent constituentAll

    • +
    • fatjetName – The (prefix) name of the container. Default: fatjet.

    • +
    • subjetDetailStr – List of detail options to pass to the subjet container. See :cpp:member:HelpTreeBase::AddJets for list of supported values.

    • +
    +
    +
    +
    + +
    +
    +void AddTruthFatJets(const std::string &detailStr = "", const std::string &truthFatJetName = "truth_fatjet")
    +
    + +
    +
    +void AddTaus(const std::string &detailStr = "", const std::string &tauName = "tau")
    +
    + +
    +
    +void AddMET(const std::string &detailStr = "", const std::string &metName = "met")
    +
    + +
    +
    +void FillEvent(const xAOD::EventInfo *eventInfo, xAOD::TEvent *event = nullptr, const xAOD::VertexContainer *vertices = nullptr)
    +
    + +
    +
    +void FillTrigger(const xAOD::EventInfo *eventInfo)
    +
    + +
    +
    +void FillJetTrigger()
    +
    + +
    +
    +void FillMuons(const xAOD::MuonContainer *muons, const xAOD::Vertex *primaryVertex, const std::string &muonName = "muon")
    +
    + +
    +
    +void FillMuon(const xAOD::Muon *muon, const xAOD::Vertex *primaryVertex, const std::string &muonName = "muon")
    +
    + +
    +
    +void FillElectrons(const xAOD::ElectronContainer *electrons, const xAOD::Vertex *primaryVertex, const std::string &elecName = "el")
    +
    + +
    +
    +void FillElectron(const xAOD::Electron *elec, const xAOD::Vertex *primaryVertex, const std::string &elecName = "el")
    +
    + +
    +
    +void FillPhotons(const xAOD::PhotonContainer *photons, const std::string &photonName = "ph")
    +
    + +
    +
    +void FillPhoton(const xAOD::Photon *photon, const std::string &photonName = "ph")
    +
    + +
    +
    +void FillClusters(const xAOD::CaloClusterContainer *clusters, const std::string &clusterName = "cl")
    +
    + +
    +
    +void FillCluster(const xAOD::CaloCluster *cluster, const std::string &clusterName = "cl")
    +
    + +
    +
    +void FillJets(const xAOD::JetContainer *jets, int pvLocation = -1, const std::string &jetName = "jet")
    +
    + +
    +
    +void FillJet(const xAOD::Jet *jet_itr, const xAOD::Vertex *pv, int pvLocation, const std::string &jetName = "jet")
    +
    + +
    +
    +void FillLegacyL1Jets(const xAOD::JetRoIContainer *jets, const std::string &jetName = "L1Jet", bool sortL1Jets = false)
    +
    + +
    +
    +template<typename T>
    inline void FillPhase1L1Jets(T *&jets, const std::string &jetName = "L1Jet", bool sortL1Jets = false)
    +
    + +
    +
    +void FillTruth(const xAOD::TruthParticleContainer *truth, const std::string &truthName = "xAH_truth")
    +
    + +
    +
    +void FillTruth(const xAOD::TruthParticle *truthPart, const std::string &truthName)
    +
    + +
    +
    +void FillTracks(const xAOD::TrackParticleContainer *tracks, const std::string &trackName = "trk")
    +
    + +
    +
    +void FillTrack(const xAOD::TrackParticle *trackPart, const std::string &trackName)
    +
    + +
    +
    +void FillVertices(const xAOD::VertexContainer *vertices, const std::string &vertexName = "vertex")
    +
    + +
    +
    +void FillTruthVertices(const xAOD::TruthVertexContainer *truthVertices, const std::string &truthVertexName = "truth_vertex")
    +
    + +
    +
    +void FillFatJets(const xAOD::JetContainer *fatJets, int pvLocation = 0, const std::string &fatjetName = "fatjet", const std::string &suffix = "")
    +

    Write a container of jets to the specified container name (and optionally suffix). The container name and suffix should be declared beforehand using AddFatJets(). This clears the current branch state for the collection so it only makes sense to call once per call to Fill().

    +
    +
    Parameters
    +
      +
    • fatJets – A container of jets to be written out.

    • +
    • fatjetName – The name of the output collection to write to.

    • +
    • suffix – The suffix of the output collection to write to.

    • +
    +
    +
    +
    + +
    +
    +void FillFatJet(const xAOD::Jet *fatjet_itr, int pvLocation = 0, const std::string &fatjetName = "fatjet", const std::string &suffix = "")
    +
    + +
    +
    +void FillTruthFatJets(const xAOD::JetContainer *truthFatJets, int pvLocation = 0, const std::string &truthFatJetName = "truth_fatjet")
    +
    + +
    +
    +void FillTruthFatJet(const xAOD::Jet *truth_fatjet_itr, int pvLocation = 0, const std::string &truthFatJetName = "truth_fatjet")
    +
    + +
    +
    +void FillTaus(const xAOD::TauJetContainer *taus, const std::string &tauName = "tau")
    +
    + +
    +
    +void FillTau(const xAOD::TauJet *tau, const std::string &tauName = "tau")
    +
    + +
    +
    +void FillMET(const xAOD::MissingETContainer *met, const std::string &metName = "met")
    +
    + +
    +
    +void Fill()
    +
    + +
    +
    +void ClearEvent()
    +
    + +
    +
    +void ClearTrigger()
    +
    + +
    +
    +void ClearJetTrigger()
    +
    + +
    +
    +void ClearMuons(const std::string &jetName = "muon")
    +
    + +
    +
    +void ClearElectrons(const std::string &elecName = "el")
    +
    + +
    +
    +void ClearPhotons(const std::string &photonName = "ph")
    +
    + +
    +
    +void ClearClusters(const std::string &clusterName = "cl")
    +
    + +
    +
    +void ClearJets(const std::string &jetName = "jet")
    +
    + +
    +
    +void ClearL1Jets(const std::string &jetName = "L1Jet")
    +
    + +
    +
    +void ClearTruth(const std::string &truthName)
    +
    + +
    +
    +void ClearTracks(const std::string &trackName)
    +
    + +
    +
    +void ClearFatJets(const std::string &fatjetName, const std::string &suffix = "")
    +
    + +
    +
    +void ClearTruthFatJets(const std::string &truthFatJetName = "truth_fatjet")
    +
    + +
    +
    +void ClearTaus(const std::string &tauName = "tau")
    +
    + +
    +
    +void ClearMET(const std::string &metName = "met")
    +
    + +
    +
    +void ClearVertices(const std::string &vertexName = "vertex")
    +
    + +
    +
    +void ClearTruthVertices(const std::string &vertexName = "truth_vertex")
    +
    + +
    +
    +bool writeTo(TFile *file)
    +
    + +
    +
    +inline virtual void AddEventUser(const std::string &detailStr = "")
    +
    + +
    +
    +inline virtual void AddTriggerUser(const std::string &detailStr = "")
    +
    + +
    +
    +inline virtual void AddJetTriggerUser(const std::string &detailStr = "")
    +
    + +
    +
    +inline virtual void AddMuonsUser(const std::string &detailStr = "", const std::string &muonName = "muon")
    +
    + +
    +
    +inline virtual void AddElectronsUser(const std::string &detailStr = "", const std::string &elecName = "el")
    +
    + +
    +
    +inline virtual void AddPhotonsUser(const std::string &detailStr = "", const std::string &photonName = "ph")
    +
    + +
    +
    +inline virtual void AddClustersUser(const std::string &detailStr = "", const std::string &clusterName = "cl")
    +
    + +
    +
    +inline virtual void AddJetsUser(const std::string &detailStr = "", const std::string &jetName = "jet")
    +
    + +
    +
    +inline virtual void AddTruthUser(const std::string &truthName = "", const std::string &detailStr = "xAH_truth")
    +
    + +
    +
    +inline virtual void AddTracksUser(const std::string &trackName = "", const std::string &detailStr = "trk")
    +
    + +
    +
    +inline virtual void AddFatJetsUser(const std::string &detailStr = "", const std::string &fatjetName = "", const std::string &suffix = "")
    +

    Declare a new fat jet collection. Automatically called once per call to AddFatJets(); override this if you want to provide your own additional branches for fatjets.

    +
    +
    Parameters
    +
      +
    • detailStr – The space-separated list of detail requested by the called.

    • +
    • fatjetName – The (prefix) name of the output collection.

    • +
    • suffix – A suffix to be appeneded to the end of the output branch name(s).

    • +
    +
    +
    +
    + +
    +
    +inline virtual void AddTruthFatJetsUser(const std::string &detailStr = "", const std::string &truthFatJetName = "truth_fatjet")
    +
    + +
    +
    +inline virtual void AddTausUser(const std::string &detailStr = "", const std::string &tauName = "tau")
    +
    + +
    +
    +inline virtual void AddMETUser(const std::string &detailStr = "", const std::string &metName = "met")
    +
    + +
    +
    +inline virtual void ClearEventUser()
    +
    + +
    +
    +inline virtual void ClearTriggerUser()
    +
    + +
    +
    +inline virtual void ClearMuonsUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearElectronsUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearPhotonsUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearClustersUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearTruthUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearTracksUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearJetsUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearFatJetsUser(const std::string&, const std::string&)
    +
    + +
    +
    +inline virtual void ClearTruthFatJetsUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearTausUser(const std::string&)
    +
    + +
    +
    +inline virtual void ClearMETUser(const std::string&)
    +
    + +
    +
    +inline virtual void FillEventUser(const xAOD::EventInfo*)
    +
    + +
    +
    +inline virtual void FillMuonsUser(const xAOD::Muon*, const std::string&, const xAOD::Vertex*)
    +
    + +
    +
    +inline virtual void FillElectronsUser(const xAOD::Electron*, const std::string&, const xAOD::Vertex*)
    +
    + +
    +
    +inline virtual void FillPhotonsUser(const xAOD::Photon*, const std::string&)
    +
    + +
    +
    +inline virtual void FillClustersUser(const xAOD::CaloCluster*, const std::string&)
    +
    + +
    +
    +inline virtual void FillJetsUser(const xAOD::Jet*, const std::string&)
    +
    + +
    +
    +inline virtual void FillTruthUser(const xAOD::TruthParticle*, const std::string&)
    +
    + +
    +
    +inline virtual void FillTracksUser(const xAOD::TrackParticle*, const std::string&)
    +
    + +
    +
    +inline virtual void FillFatJetsUser(const xAOD::Jet*, int, const std::string&, const std::string&)
    +

    Called once per call to FillFatJets().Ooverride this if you want to any additional information to your jet collection.

    +
    +
    Parameters
    +
      +
    • jet – a pointer to the current xAOD::Jet object that should be written to the output branch(s).

    • +
    • fatjetName – the (prefix) name of the output collection

    • +
    • suffix – the suffix to append to output branches.

    • +
    +
    +
    +
    + +
    +
    +inline virtual void FillTruthFatJetsUser(const xAOD::Jet*, int, const std::string&)
    +
    + +
    +
    +inline virtual void FillTausUser(const xAOD::TauJet*, const std::string&)
    +
    + +
    +
    +inline virtual void FillMETUser(const xAOD::MissingETContainer*, const std::string&)
    +
    + +
    +
    +inline virtual void FillTriggerUser(const xAOD::EventInfo*)
    +
    + +
    +
    +inline virtual void FillJetTriggerUser()
    +
    + +
    +
    +

    Public Members

    +
    +
    +xAOD::TEvent *m_event
    +
    + +
    +
    +xAOD::TStore *m_store
    +
    + +
    +
    +std::string m_vertexContainerName = "PrimaryVertices"
    +

    Name of vertex container.

    +
    + +
    +
    +std::string m_truthVertexContainerName = "TruthVertices"
    +
    + +
    +
    +HelperClasses::TriggerInfoSwitch *m_trigInfoSwitch
    +
    + +
    +
    +std::string m_triggerSelection
    +
    + +
    +
    +TrigConf::xAODConfigTool *m_trigConfTool
    +
    + +
    +
    +Trig::TrigDecisionTool *m_trigDecTool
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static std::string FatJetCollectionName(const std::string &fatjetName = "fatjet", const std::string &suffix = "")
    +

    Helper function to lookup each fatjet container name/suffix combo in the internal map of vectors for vectors. You probably don’t need this but it might be useful if you’re implementing [Add/Fill/Clear]FatJetsUser().

    +
    +
    Parameters
    +
      +
    • fatjetName – The (prefix) name of the container.

    • +
    • suffix – The container branch suffix.

    • +
    +
    +
    Returns
    +

    a string that uniquely identifies the collection name/suffix in the lookup map.

    +
    +
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +template<typename T, typename U, typename V>
    void safeFill(const V *xAODObj, SG::AuxElement::ConstAccessor<T> &accessor, std::vector<U> &destination, U defaultValue, int m_units = 1)
    +
    + +
    +
    +template<typename T, typename U, typename V>
    void safeVecFill(const V *xAODObj, SG::AuxElement::ConstAccessor<std::vector<T>> &accessor, std::vector<std::vector<U>> &destination, int m_units = 1)
    +
    + +
    +
    +template<typename T>
    void setBranch(std::string prefix, std::string varName, std::vector<T> *localVectorPtr)
    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +TTree *m_tree
    +
    + +
    +
    +int m_units
    +
    + +
    +
    +bool m_debug
    +
    + +
    +
    +bool m_isMC
    +
    + +
    +
    +std::string m_nominalTreeName
    +
    + +
    +
    +bool m_nominalTree
    +
    + +
    +
    +xAH::EventInfo *m_eventInfo
    +
    + +
    +
    +int m_passL1
    +
    + +
    +
    +int m_passHLT
    +
    + +
    +
    +unsigned int m_masterKey
    +
    + +
    +
    +unsigned int m_L1PSKey
    +
    + +
    +
    +unsigned int m_HLTPSKey
    +
    + +
    +
    +std::vector<std::string> m_elTrigForMatching
    +
    + +
    +
    +std::vector<std::string> m_passedTriggers
    +
    + +
    +
    +std::vector<std::string> m_disabledTriggers
    +
    + +
    +
    +std::vector<float> m_triggerPrescales
    +
    + +
    +
    +std::vector<float> m_triggerPrescalesLumi
    +
    + +
    +
    +std::vector<std::string> m_isPassBitsNames
    +
    + +
    +
    +std::vector<unsigned int> m_isPassBits
    +
    + +
    +
    +std::map<std::string, xAH::JetContainer*> m_jets
    +
    + +
    +
    +std::map<std::string, xAH::L1JetContainer*> m_l1Jets
    +
    + +
    +
    +std::map<std::string, xAH::TruthContainer*> m_truth
    +
    + +
    +
    +std::map<std::string, xAH::TrackContainer*> m_tracks
    +
    + +
    +
    +std::map<std::string, xAH::FatJetContainer*> m_fatjets
    +
    + +
    +
    +std::map<std::string, xAH::FatJetContainer*> m_truth_fatjets
    +
    + +
    +
    +std::map<std::string, xAH::MuonContainer*> m_muons
    +
    + +
    +
    +std::map<std::string, std::vector<std::string>> m_MuonRecoEff_SF_sysNames
    +
    + +
    +
    +std::map<std::string, std::vector<std::string>> m_MuonIsoEff_SF_sysNames
    +
    + +
    +
    +std::map<std::string, std::map<std::string, std::vector<std::string>>> m_MuonTrigEff_SF_sysNames
    +
    + +
    +
    +std::vector<std::string> m_MuonTTVAEff_SF_sysNames
    +
    + +
    +
    +std::map<std::string, xAH::ElectronContainer*> m_elecs
    +
    + +
    +
    +std::map<std::string, xAH::PhotonContainer*> m_photons
    +
    + +
    +
    +std::map<std::string, xAH::ClusterContainer*> m_clusters
    +
    + +
    +
    +std::map<std::string, xAH::TauContainer*> m_taus
    +
    + +
    +
    +std::map<std::string, xAH::MetContainer*> m_met
    +
    + +
    +
    +std::map<std::string, xAH::VertexContainer*> m_vertices
    +
    + +
    +
    +std::map<std::string, xAH::VertexContainer*> m_truth_vertices
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1ClusterInfoSwitch.html b/api/classHelperClasses_1_1ClusterInfoSwitch.html new file mode 100644 index 0000000000..a3bde47751 --- /dev/null +++ b/api/classHelperClasses_1_1ClusterInfoSwitch.html @@ -0,0 +1,262 @@ + + + + + + + + + + + Class ClusterInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ClusterInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ClusterInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +
    +

    Public Functions

    +
    +
    +inline ClusterInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~ClusterInfoSwitch()
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1ElectronInfoSwitch.html b/api/classHelperClasses_1_1ElectronInfoSwitch.html new file mode 100644 index 0000000000..a5b6aa8b69 --- /dev/null +++ b/api/classHelperClasses_1_1ElectronInfoSwitch.html @@ -0,0 +1,445 @@ + + + + + + + + + + + Class ElectronInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::IParticleInfoSwitch class for Electron Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_trigger

    trigger

    exact

    m_isolation

    isolation

    exact

    m_isolationKinematics

    isolationKinematics

    exact

    m_PID

    PID

    exact

    m_trackparams

    trackparams

    exact

    m_trackhitcont

    trackhitcont

    exact

    m_effSF

    effSF

    exact

    m_PIDWPs[XYZ]

    PID_XYZ

    pattern

    m_PIDSFWPs[XYZ]

    PIDSF_XYZ

    pattern

    m_isolWPs[“”]

    ISOL_

    exact

    m_isolWPs[“”]

    ISOL_NONE

    exact

    m_isolWPs[XYZ]

    ISOL_XYZ

    pattern

    m_trigWPs[XYZ]

    TRIG_XYZ

    pattern

    m_passSel

    passSel

    exact

    m_passOR

    passOR

    exact

    +

    +
    +

    Note

    +

    PID, isolation and effSF switches do not enable any additional output by themselves. They require additional working point pattern using PID_XYZ for PID working points, PIDSF_XYZ for PID scale factors, ISOL_XYZ for isolation working points and scale factors, and TRIG_XYZ for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

    +
    m_configStr = "... PID_LHMedium PIDSF_MediumLLH ..."
    +
    +
    +

    will define the LHMedium PID working point and the accompanying scale factors. Note that not all PID working points have scale factors available.

    +

    Isolation supports NONE or empty option which will enable scale factors without additional isolation requirements, for example:

    +
    m_configStr = "... ISOL_NONE ISOL_Loose ..."
    +
    +
    +

    will define the Loose isolation working point status branch, and scale factors without isolation requirements and using the Loose WP.

    +
    +
    +

    Public Functions

    +
    +
    +inline ElectronInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~ElectronInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_trigger
    +
    + +
    +
    +bool m_isolation
    +
    + +
    +
    +bool m_isolationKinematics
    +
    + +
    +
    +bool m_quality
    +
    + +
    +
    +bool m_PID
    +
    + +
    +
    +bool m_recoparams
    +
    + +
    +
    +bool m_trackparams
    +
    + +
    +
    +bool m_trackhitcont
    +
    + +
    +
    +bool m_effSF
    +
    + +
    +
    +bool m_promptlepton
    +
    + +
    +
    +std::vector<std::string> m_PIDWPs
    +
    + +
    +
    +std::vector<std::string> m_PIDSFWPs
    +
    + +
    +
    +std::vector<std::string> m_isolWPs
    +
    + +
    +
    +std::vector<std::string> m_trigWPs
    +
    + +
    +
    +bool m_passSel
    +
    + +
    +
    +bool m_passOR
    +
    + +
    +
    +bool m_doLRT
    +
    + +
    +
    +bool m_closeByCorr
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1EnumParser.html b/api/classHelperClasses_1_1EnumParser.html new file mode 100644 index 0000000000..1d17ff4372 --- /dev/null +++ b/api/classHelperClasses_1_1EnumParser.html @@ -0,0 +1,276 @@ + + + + + + + + + + + Template Class EnumParser — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Class EnumParser

    + +
    +

    Class Documentation

    +
    +
    +template<typename T>
    class EnumParser
    +

    template enum parser. Copied from: http://stackoverflow.com/a/726681

    +
    +

    Public Functions

    +
    +
    +EnumParser()
    +
    + +
    +
    +inline T parseEnum(const std::string &value)
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    +EnumParser()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1EventInfoSwitch.html b/api/classHelperClasses_1_1EventInfoSwitch.html new file mode 100644 index 0000000000..66a3763a93 --- /dev/null +++ b/api/classHelperClasses_1_1EventInfoSwitch.html @@ -0,0 +1,385 @@ + + + + + + + + + + + Class EventInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class EventInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class EventInfoSwitch : public HelperClasses::InfoSwitch
    +

    The HelperClasses::InfoSwitch struct for Event Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_noDataInfo

    noDataInfo

    exact

    m_eventCleaning

    eventCleaning

    exact

    m_bcidInfo

    bcidInfo

    exact

    m_pileup

    pileup

    exact

    m_pileupsys

    pileupsys

    exact

    m_shapeEM

    shapeEM

    exact

    m_shapeEMPFLOW

    shapeEMPFLOW

    exact

    m_shapeLC

    shapeLC

    exact

    m_truth

    truth

    exact

    m_caloClus

    caloClusters

    exact

    m_weightsSys

    weightsSys

    exact

    m_beamspotweight

    beamspotweight

    exact

    +

    +
    +

    Public Functions

    +
    +
    +inline EventInfoSwitch(const std::string configStr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_noDataInfo
    +
    + +
    +
    +bool m_eventCleaning
    +
    + +
    +
    +bool m_bcidInfo
    +
    + +
    +
    +bool m_pileup
    +
    + +
    +
    +bool m_pileupsys
    +
    + +
    +
    +bool m_shapeEM
    +
    + +
    +
    +bool m_shapeEMPFLOW
    +
    + +
    +
    +bool m_shapeLC
    +
    + +
    +
    +bool m_truth
    +
    + +
    +
    +bool m_caloClus
    +
    + +
    +
    +bool m_weightsSys
    +
    + +
    +
    +bool m_beamspotweight
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1IParticleInfoSwitch.html b/api/classHelperClasses_1_1IParticleInfoSwitch.html new file mode 100644 index 0000000000..dbb369b774 --- /dev/null +++ b/api/classHelperClasses_1_1IParticleInfoSwitch.html @@ -0,0 +1,340 @@ + + + + + + + + + + + Class IParticleInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class IParticleInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +

    Derived Types

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class IParticleInfoSwitch : public HelperClasses::InfoSwitch
    +

    The HelperClasses::InfoSwitch struct for IParticle Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_noMultiplicity

    noMultiplicity

    exact

    m_kinematic

    kinematic

    exact

    m_numLeading

    NLeading

    partial

    m_useTheS

    useTheS

    exact

    +

    +
    +

    Note

    +

    m_numLeading requires a number XX to follow it, defining the number of leading partiles and associate it with that variable.

    +

    For example:

    +
    m_configStr = "... NLeading4 ..."
    +
    +
    +

    will define int m_numLeading = 4.

    +
    +

    Subclassed by HelperClasses::ClusterInfoSwitch, HelperClasses::ElectronInfoSwitch, HelperClasses::JetInfoSwitch, HelperClasses::MuonInfoSwitch, HelperClasses::PhotonInfoSwitch, HelperClasses::TauInfoSwitch, HelperClasses::TruthInfoSwitch

    +
    +

    Public Functions

    +
    +
    +inline IParticleInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~IParticleInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_noMultiplicity
    +
    + +
    +
    +bool m_kinematic
    +
    + +
    +
    +int m_numLeading
    +
    + +
    +
    +bool m_useTheS
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1InfoSwitch.html b/api/classHelperClasses_1_1InfoSwitch.html new file mode 100644 index 0000000000..a685ae2891 --- /dev/null +++ b/api/classHelperClasses_1_1InfoSwitch.html @@ -0,0 +1,336 @@ + + + + + + + + + + + Class InfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class InfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Derived Types

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class InfoSwitch
    +

    A struct that is used for parsing configuration strings and assigning booleans to various properties. Currently used in plotting code.

    +

    Strings are used to turn on and off histograms and branches in the tree The following structs hold the bools used to control the content and also have the string which is necessary to turn a set on. +See the derived members for more information about what is supported. Each derived member should provide a table of parameters, patterns, and type of matching scheme used. The pattern will use standard PCRE-syntax when appropriate.

    +

    We support two major matching schemes:

    +
    +
    +
    Exact

    If a variable is matched exactly to a string, then a boolean is set to True or False based on whether an exact match exists or not.

    +
    +
    Partial

    If a variable is partially matched to a string, then there is some specific pattern we are extracting that will succeed the partial match that determines what the variable will be set to (usually not a bool).

    +
    +
    +
    +

    +

    Subclassed by HelperClasses::EventInfoSwitch, HelperClasses::IParticleInfoSwitch, HelperClasses::METInfoSwitch, HelperClasses::TrackInfoSwitch, HelperClasses::TriggerInfoSwitch

    +
    +

    Public Functions

    +
    +
    +inline InfoSwitch(const std::string configStr)
    +

    Constructor. Take in input string, create vector of tokens.

    +
    +
    Parameters
    +

    configStr – The configuration string to split up.

    +
    +
    +
    + +
    +
    +inline bool has_exact(const std::string flag)
    +

    Search for an exact match in m_configDetails.

    +

    +
    +
    Parameters
    +

    flag – The string we search for.

    +
    +
    +
    + +
    +
    +inline bool has_match(const std::string flag)
    +

    Search for a partial match in m_configStr.

    +

    +
    +
    Parameters
    +

    flag – The string we search for.

    +
    +
    +
    + +
    +
    +std::string get_working_point(const std::string flag)
    +

    Search for a single flag in m_configDetails and parse out the working point.

    +

    +
    +
    Parameters
    +

    flag – The string we search for.

    +
    +
    +
    + +
    +
    +std::vector<std::string> get_working_points(const std::string flag)
    +

    Search for multiple flags in m_configDetails and parse out the working points.

    +

    +
    +
    Parameters
    +

    flag – The string we search for.

    +
    +
    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +const std::string m_configStr
    +

    The input configuration string from which we split up into tokens.

    +
    + +
    +
    +std::set<std::string> m_configDetails
    +

    The vector of tokens from which we search through for finding matches.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1JetInfoSwitch.html b/api/classHelperClasses_1_1JetInfoSwitch.html new file mode 100644 index 0000000000..fe67e80a9f --- /dev/null +++ b/api/classHelperClasses_1_1JetInfoSwitch.html @@ -0,0 +1,825 @@ + + + + + + + + + + + Class JetInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class JetInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class JetInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::IParticleInfoSwitch class for Jet Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_noMultiplicity

    noMultiplicity

    exact

    m_kinematic

    kinematic

    exact

    m_trigger

    trigger

    exact

    m_substructure

    substructure

    exact

    m_ntrimsubjets

    ntrimsubjets

    exact

    m_bosonCount

    bosonCount

    exact

    m_VTags

    VTags

    exact

    m_rapidity

    rapidity

    exact

    m_clean

    clean

    exact

    m_cleanLight

    cleanLight

    exact

    m_cleanLightLLP

    cleanLightLLP

    exact

    m_cleanTrig

    cleanTrig

    exact

    m_timing

    timing

    exact

    m_energy

    energy

    exact

    m_energyLight

    energyLight

    exact

    m_scales

    scales

    exact

    m_constscaleEta

    constscaleEta

    exact

    m_detectorEta

    detectorEta

    exact

    m_resolution

    resolution

    exact

    m_truth

    truth

    exact

    m_truthDetails

    truth_details

    exact

    m_layer

    layer

    exact

    m_trackPV

    trackPV

    exact

    m_trackAll

    trackAll

    exact

    m_chargedPFOPV

    chargedPFOPV

    exact

    m_jvt

    JVT

    exact

    m_NNJvt

    NNJvt

    exact

    m_sfJVTName

    sfJVT

    partial

    m_sffJVTName

    sffJVT

    partial

    m_allTrack

    allTrack

    exact

    m_allTrackPVSel

    allTrackPVSel

    exact

    m_allTrackDetail

    allTrackDetail

    exact

    m_constituent

    constituent

    exact

    m_constituentAll

    constituentAll

    exact

    m_flavorTag

    flavorTag

    exact

    m_flavorTagHLT

    flavorTagHLT

    exact

    m_flavorTagTLA

    flavorTagTLA

    exact

    m_sfFTagFix

    sfFTagFix

    partial

    m_sfFTagFlt

    sfFTagFlt

    partial

    m_sfFTagHyb

    sfFTagHyb

    partial

    m_jetBTag

    jetBTag

    partial

    m_area

    area

    exact

    m_JVC

    JVC

    exact

    m_tracksInJet

    tracksInJet

    partial

    m_trackJetName

    trackJetName

    partial

    m_hltVtxComp

    hltVtxComp

    exact

    m_onlineBS

    onlineBS

    exact

    m_onlineBSTool

    onlineBSTool

    exact

    m_charge

    charge

    exact

    m_passSel

    passSel

    exact

    m_passOR

    passOR

    exact

    m_vsLumiBlock

    vsLumiBlock

    exact

    m_vsActualMu

    vsActualMu

    exact

    m_lumiB_runN

    lumiB_runN

    exact

    m_byAverageMu

    byAverageMu

    exact

    m_byEta

    byEta

    exact

    m_etaPhiMap

    etaPhiMap

    exact

    m_muonCorrection

    muonCorrection

    exact

    +

    trackJetName expects one or more track jet container names separated by an underscore. For example, the string trackJetName_GhostAntiKt2TrackJet_GhostVR30Rmax4Rmin02TrackJet will set the attriubte m_trackJetNames +to {"GhostAntiKt2TrackJet", "GhostVR30Rmax4Rmin02TrackJet"}.

    +

    +
    +

    Note

    +

    sfJVT requires a working point after it, for example:

    +
    m_configStr = "... sfJVTMedium ..."
    +
    +
    +

    jetBTag expects the format jetBTag_tagger_type_AABB..MM..YY.ZZ. This will create a vector of working points (AA, BB, CC, …, ZZ) associated with that tagger. Several entries can be given. For example:

    +

    m_configStr = “… jetBTag_DL1r_FixedCutBEff_60707785 …”

    +
    +
    +

    Public Functions

    +
    +
    +inline JetInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~JetInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_trigger
    +
    + +
    +
    +bool m_substructure
    +
    + +
    +
    +bool m_ntrimsubjets
    +
    + +
    +
    +bool m_bosonCount
    +
    + +
    +
    +bool m_VTags
    +
    + +
    +
    +bool m_rapidity
    +
    + +
    +
    +bool m_clean
    +
    + +
    +
    +bool m_cleanLight
    +
    + +
    +
    +bool m_cleanLLP
    +
    + +
    +
    +bool m_cleanTrig
    +
    + +
    +
    +bool m_timing
    +
    + +
    +
    +bool m_energy
    +
    + +
    +
    +bool m_energyLight
    +
    + +
    +
    +bool m_scales
    +
    + +
    +
    +bool m_constscaleEta
    +
    + +
    +
    +bool m_detectorEta
    +
    + +
    +
    +bool m_resolution
    +
    + +
    +
    +bool m_truth
    +
    + +
    +
    +bool m_truthDetails
    +
    + +
    +
    +bool m_layer
    +
    + +
    +
    +bool m_trackPV
    +
    + +
    +
    +bool m_trackAll
    +
    + +
    +
    +bool m_fJvt
    +
    + +
    +
    +bool m_chargedPFOPV
    +
    + +
    +
    +bool m_jvt
    +
    + +
    +
    +bool m_NNJvt
    +
    + +
    +
    +bool m_allTrack
    +
    + +
    +
    +bool m_allTrackDetail
    +
    + +
    +
    +bool m_allTrackPVSel
    +
    + +
    +
    +bool m_constituent
    +
    + +
    +
    +bool m_constituentAll
    +
    + +
    +
    +bool m_flavorTag
    +
    + +
    +
    +bool m_flavorTagHLT
    +
    + +
    +
    +bool m_flavorTagTLA
    +
    + +
    +
    +bool m_btag_jettrk
    +
    + +
    +
    +bool m_jetFitterDetails
    +
    + +
    +
    +bool m_svDetails
    +
    + +
    +
    +bool m_ipDetails
    +
    + +
    +
    +bool m_tracksInJet
    +
    + +
    +
    +bool m_hltVtxComp
    +
    + +
    +
    +bool m_onlineBS
    +
    + +
    +
    +bool m_onlineBSTool
    +
    + +
    +
    +bool m_charge
    +
    + +
    +
    +bool m_passSel
    +
    + +
    +
    +bool m_passOR
    +
    + +
    +
    +bool m_etaPhiMap
    +
    + +
    +
    +bool m_vsLumiBlock
    +
    + +
    +
    +bool m_vsActualMu
    +
    + +
    +
    +bool m_lumiB_runN
    +
    + +
    +
    +bool m_byEta
    +
    + +
    +
    +bool m_byAverageMu
    +
    + +
    +
    +bool m_area
    +
    + +
    +
    +bool m_JVC
    +
    + +
    +
    +bool m_muonCorrection
    +
    + +
    +
    +std::string m_trackName
    +
    + +
    +
    +std::vector<std::string> m_trackJetNames
    +
    + +
    +
    +std::string m_sfJVTName
    +
    + +
    +
    +std::string m_sffJVTName
    +
    + +
    +
    +std::map<std::string, std::vector<std::pair<std::string, uint>>> m_jetBTag
    +
    + +
    +
    +std::vector<std::string> m_jetBTagCts
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1METInfoSwitch.html b/api/classHelperClasses_1_1METInfoSwitch.html new file mode 100644 index 0000000000..c23622d935 --- /dev/null +++ b/api/classHelperClasses_1_1METInfoSwitch.html @@ -0,0 +1,417 @@ + + + + + + + + + + + Class METInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class METInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class METInfoSwitch : public HelperClasses::InfoSwitch
    +

    The HelperClasses::InfoSwitch struct for Missing \(\text{E}_{\text{T}}\) Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_metClus

    metClus

    exact

    m_metTrk

    metTrk

    exact

    m_sigClus

    sigClus|all

    exact

    m_sigTrk

    sigTrk|all

    exact

    m_sigResolutionClus

    sigResolutionClus|all

    exact

    m_sigResolutionTrk

    sigResolutionTrk|all

    exact

    m_refEle

    refEle|all

    exact

    m_refGamma

    refGamma|all

    exact

    m_refTau

    refTau|all

    exact

    m_refMuons

    refMuons|all

    exact

    m_refJet

    refJet|all

    exact

    m_refJetTrk

    refJetTrk

    exact

    m_softClus

    softClus|all

    exact

    m_softTrk

    softTrk|all

    exact

    m_noExtra

    noExtra

    exact

    +

    +
    +

    Note

    +

    For all except m_refJetTrk, you can pass in the string "all" to enable all information. You can force only calocluster- or track-based MET using m_metClus or m_metTrk.

    +
    +
    +

    Public Functions

    +
    +
    +inline METInfoSwitch(const std::string configStr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_metClus
    +
    + +
    +
    +bool m_metTrk
    +
    + +
    +
    +bool m_sigClus
    +
    + +
    +
    +bool m_sigTrk
    +
    + +
    +
    +bool m_sigResolutionClus
    +
    + +
    +
    +bool m_sigResolutionTrk
    +
    + +
    +
    +bool m_refEle
    +
    + +
    +
    +bool m_refGamma
    +
    + +
    +
    +bool m_refTau
    +
    + +
    +
    +bool m_refMuons
    +
    + +
    +
    +bool m_refJet
    +
    + +
    +
    +bool m_refJetTrk
    +
    + +
    +
    +bool m_softClus
    +
    + +
    +
    +bool m_softTrk
    +
    + +
    +
    +bool m_noExtra
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1MuonInfoSwitch.html b/api/classHelperClasses_1_1MuonInfoSwitch.html new file mode 100644 index 0000000000..1b8c77194a --- /dev/null +++ b/api/classHelperClasses_1_1MuonInfoSwitch.html @@ -0,0 +1,459 @@ + + + + + + + + + + + Class MuonInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::IParticleInfoSwitch class for Muon Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_trigger

    trigger

    exact

    m_isolation

    isolation

    exact

    m_isolationKinematics

    isolationKinematics

    exact

    m_quality

    quality

    exact

    m_recoparams

    recoparams

    exact

    m_trackparams

    trackparams

    exact

    m_trackhitcont

    trackhitcont

    exact

    m_effSF

    effSF

    exact

    m_energyLoss

    energyLoss

    exact

    m_recoWPs[XYZ]

    RECO_XYZ

    pattern

    m_isolWPs[“”]

    ISOL_

    exact

    m_isolWPs[“”]

    ISOL_NONE

    exact

    m_isolWPs[XYZ]

    ISOL_XYZ

    pattern

    m_trigWPs[XYZ]

    TRIG_XYZ

    pattern

    m_passSel

    passSel

    exact

    m_passOR

    passOR

    exact

    +

    +
    +

    Note

    +

    quality, isolation and effSF switches do not enable any additional output by themselves. They require additional working point pattern using RECO_XYZ for quality working points and scale factors, ISOL_XYZ for isolation working points and scale factors, and TRIG_XYZ for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

    +
    m_configStr = "... RECO_Medium ..."
    +
    +
    +

    will define the Medium quality working point and the accompanying scale factors.

    +

    Isolation supports NONE or empty option which will enable scale factors without additional isolation requirements, for example:

    +
    m_configStr = "... ISOL_NONE ISOL_Loose ..."
    +
    +
    +

    will define the Loose isolation working point status branch, and scale factors without isolation requirements and using the Loose WP.

    +
    +
    +

    Public Functions

    +
    +
    +inline MuonInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~MuonInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_trigger
    +
    + +
    +
    +bool m_isolation
    +
    + +
    +
    +bool m_isolationKinematics
    +
    + +
    +
    +bool m_quality
    +
    + +
    +
    +bool m_trackparams
    +
    + +
    +
    +bool m_trackhitcont
    +
    + +
    +
    +bool m_effSF
    +
    + +
    +
    +bool m_energyLoss
    +
    + +
    +
    +bool m_promptlepton
    +
    + +
    +
    +std::vector<std::string> m_recoWPs
    +
    + +
    +
    +std::vector<std::string> m_isolWPs
    +
    + +
    +
    +std::vector<std::string> m_trigWPs
    +
    + +
    +
    +bool m_passSel
    +
    + +
    +
    +bool m_passOR
    +
    + +
    +
    +bool m_doLRT
    +
    + +
    +
    +bool m_closeByCorr
    +
    + +
    +
    +bool m_recoEff_sysNames
    +
    + +
    +
    +bool m_isoEff_sysNames
    +
    + +
    +
    +bool m_trigEff_sysNames
    +
    + +
    +
    +bool m_ttvaEff_sysNames
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1PhotonInfoSwitch.html b/api/classHelperClasses_1_1PhotonInfoSwitch.html new file mode 100644 index 0000000000..588c8d2ce2 --- /dev/null +++ b/api/classHelperClasses_1_1PhotonInfoSwitch.html @@ -0,0 +1,344 @@ + + + + + + + + + + + Class PhotonInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class PhotonInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class PhotonInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::IParticleInfoSwitch class for Photon Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_isolation

    isolation

    exact

    m_PID

    PID

    exact

    m_purity

    purity

    exact

    m_effSF

    effSF

    exact

    m_trigger

    trigger

    exact

    m_isoCones

    isoCone

    partial

    +

    +
    +

    Note

    +

    isoCone can be repeated but requires a number after it, for example:

    +
    m_configStr = "... isoCone20 isoCone40 ..."
    +
    +
    +

    which will define std::vector<int> m_isoCones = {20,40}.

    +
    +
    +

    Public Functions

    +
    +
    +inline PhotonInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~PhotonInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_isolation
    +
    + +
    +
    +bool m_PID
    +
    + +
    +
    +bool m_purity
    +
    + +
    +
    +bool m_effSF
    +
    + +
    +
    +bool m_trigger
    +
    + +
    +
    +std::vector<std::string> m_isoCones
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1TauInfoSwitch.html b/api/classHelperClasses_1_1TauInfoSwitch.html new file mode 100644 index 0000000000..66c398e97a --- /dev/null +++ b/api/classHelperClasses_1_1TauInfoSwitch.html @@ -0,0 +1,327 @@ + + + + + + + + + + + Class TauInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::IParticleInfoSwitch struct for Tau Information.

    +

    +
    +

    Note

    +

    identification and effSF switches do not enable any additional output by themselves. +They require additional working point pattern using TAUEFF_XYZ for combined scale factors, and TRIG_XYZ +for trigger scale factors. XYZ in the pattern should be replaced using the working point name, for example:

    +
    m_configStr = "... TAUEFF_EleOLRElectronEleRNNLoose_TauIDMedium ... TRIG_EleOLRElectronEleRNNMedium_TauIDLoose_TrigMyTriggerMenu"
    +
    +
    +

    Notice that the working point for TAUEFF is a combination of two working points from EleOLRElectron and TauID.

    +
    +
    +

    Public Functions

    +
    +
    +inline TauInfoSwitch(const std::string configStr)
    +
    + +
    +
    +inline virtual ~TauInfoSwitch()
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_trigger
    +
    + +
    +
    +bool m_JetID
    +
    + +
    +
    +bool m_EleVeto
    +
    + +
    +
    +bool m_xahTauJetMatching
    +
    + +
    +
    +bool m_trackAll
    +
    + +
    +
    +bool m_trackparams
    +
    + +
    +
    +bool m_trackhitcont
    +
    + +
    +
    +bool m_effSF
    +
    + +
    +
    +std::vector<std::string> m_tauEffWPs
    +
    + +
    +
    +std::vector<std::string> m_trigWPs
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1TrackInfoSwitch.html b/api/classHelperClasses_1_1TrackInfoSwitch.html new file mode 100644 index 0000000000..030d609e19 --- /dev/null +++ b/api/classHelperClasses_1_1TrackInfoSwitch.html @@ -0,0 +1,331 @@ + + + + + + + + + + + Class TrackInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrackInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrackInfoSwitch : public HelperClasses::InfoSwitch
    +

    The HelperClasses::InfoSwitch struct for Track Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_noMultiplicity

    noMultiplicity

    exact

    m_kinematic

    kinematic

    exact

    m_fitpars

    fitpars

    exact

    m_numbers

    numbers

    exact

    m_vertex

    vertex

    exact

    m_useTheS

    useTheS

    exact

    +

    +
    +

    Public Functions

    +
    +
    +inline TrackInfoSwitch(const std::string configStr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_noMultiplicity
    +
    + +
    +
    +bool m_kinematic
    +
    + +
    +
    +bool m_fitpars
    +
    + +
    +
    +bool m_numbers
    +
    + +
    +
    +bool m_vertex
    +
    + +
    +
    +bool m_useTheS
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1TriggerInfoSwitch.html b/api/classHelperClasses_1_1TriggerInfoSwitch.html new file mode 100644 index 0000000000..00103a662f --- /dev/null +++ b/api/classHelperClasses_1_1TriggerInfoSwitch.html @@ -0,0 +1,335 @@ + + + + + + + + + + + Class TriggerInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TriggerInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TriggerInfoSwitch : public HelperClasses::InfoSwitch
    +

    The HelperClasses::InfoSwitch struct for Trigger Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_basic

    basic

    exact

    m_menuKeys

    menuKeys

    exact

    m_passTriggers

    passTriggers

    exact

    m_passTrigBits

    passTrigBits

    exact

    m_prescales

    prescales

    exact

    m_prescalesLumi

    prescalesLumi

    exact

    +

    +
    +

    Note

    +

    m_prescales contains information from the TrigDecisionTool for every trigger used in event selection and event trigger-matching. m_prescalesLumi contains information retrieved from the pile-up reweighting tool based on the actual luminosities of triggers.

    +
    +
    +

    Public Functions

    +
    +
    +inline TriggerInfoSwitch(const std::string configStr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_basic
    +
    + +
    +
    +bool m_menuKeys
    +
    + +
    +
    +bool m_passTriggers
    +
    + +
    +
    +bool m_passTrigBits
    +
    + +
    +
    +bool m_prescales
    +
    + +
    +
    +bool m_prescalesLumi
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHelperClasses_1_1TruthInfoSwitch.html b/api/classHelperClasses_1_1TruthInfoSwitch.html new file mode 100644 index 0000000000..48c303088c --- /dev/null +++ b/api/classHelperClasses_1_1TruthInfoSwitch.html @@ -0,0 +1,357 @@ + + + + + + + + + + + Class TruthInfoSwitch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TruthInfoSwitch

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TruthInfoSwitch : public HelperClasses::IParticleInfoSwitch
    +

    The HelperClasses::InfoSwitch struct for Truth Information.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    Pattern

    Match

    m_noMultiplicity

    noMultiplicity

    exact

    m_kinematic

    kinematic

    exact

    m_type

    type

    exact

    m_bVtx

    bVtx

    exact

    m_parents

    parents

    exact

    m_children

    children

    exact

    m_dressed

    dressed

    exact

    m_origin

    origin

    exact

    m_particleType

    particleType

    exact

    m_pdgIdOnly

    pdgIdOnly

    exact

    +

    +
    +

    Public Functions

    +
    +
    +inline TruthInfoSwitch(const std::string configStr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_type
    +
    + +
    +
    +bool m_bVtx
    +
    + +
    +
    +bool m_parents
    +
    + +
    +
    +bool m_children
    +
    + +
    +
    +bool m_dressed
    +
    + +
    +
    +bool m_origin
    +
    + +
    +
    +bool m_particleType
    +
    + +
    +
    +bool m_pdgIdOnly
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void initialize()
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classHistogramManager.html b/api/classHistogramManager.html new file mode 100644 index 0000000000..8fedccde25 --- /dev/null +++ b/api/classHistogramManager.html @@ -0,0 +1,527 @@ + + + + + + + + + + + Class HistogramManager — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class HistogramManager

    + +
    +

    Inheritance Relationships

    +
    +

    Derived Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class HistogramManager
    +

    This is used by any class extending to pre-define a set of histograms to book by default.

    +

    We expect the user to create a new group of histograms, such as for jets:

    +
    class JetHists : public HistogramManager
    +{
    +  public:
    +    JetHists(std::string name, std::string detailStr);
    +    virtual ~JetHists() ;
    +
    +    bool m_debug;
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::JetContainer  jets, float eventWeight, int pvLoc = -1);
    +    StatusCode execute( const xAOD::Jet  jet, float eventWeight, int pvLoc = -1 );
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +};
    +
    +
    +

    The above example is taken from our implementation in JetHists.

    +

    +
    +

    Note

    +

    The expectation is that the user does not directly use this class but rather inherits from it.

    +
    +

    Subclassed by MetHists

    +
    +

    Public Types

    +
    +
    +typedef std::unordered_map<std::string, TH1*> HistMap_t
    +

    Typedef for convenience.

    +
    + +
    +
    +

    Public Functions

    +
    +
    +HistogramManager(std::string name, std::string detailStr)
    +

    Initialization.

    +
    +
    Parameters
    +
      +
    • name – The top-level path in which all histograms are stored under (think of TDirectory)

    • +
    • detailStr – Specify the various details of which to plot. For example, jets might want "kinematic substructure".

    • +
    +
    +
    +
    + +
    +
    +virtual ~HistogramManager()
    +

    Destructor, allows the user to delete histograms that are not being recorded.

    +
    + +
    +
    +inline virtual StatusCode initialize()
    +

    Initialize and book all histograms.

    +

    Example implementation:

    +
    StatusCode JetHists::initialize() {
    +  m_jetPt          = book(m_name, "jetPt",  "jet p_{T} [GeV]", 120, 0, 3000.);
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +

    +
    +

    Note

    +

    This should call the overloaded functions HistogramManager::book() to create the histograms so that the user can call hists->record(wk()) to record all histograms to the EventLoop worker.

    +
    +
    + +
    +
    +inline virtual StatusCode execute()
    +

    Execute by filling in the histograms.

    +

    Example implementation:

    +
    StatusCode JetHists::execute( const xAOD::JetContainer  jets, float eventWeight ){
    +  for(const auto& jet:  jets)
    +    m_jetPt->Fill( jet->pt()/1.e3, eventWeight );
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +

    +
    + +
    +
    +inline virtual StatusCode finalize()
    +

    Finalize anything that needs to be finalized.

    +
    +

    Warning

    +

    This should rarely be used. There is not a good use case for this functionality but it needs to exist in the off-chance that a user comes along and needs it for their histogram class.

    +
    +
    + +
    +
    +TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh)
    +

    record a histogram and call various functions

    +
    +

    Note

    +

    This is an overloaded function. It will build the right histogram given the correct number of input arguments.

    +
    +
    +
    Parameters
    +
      +
    • name – name of histogram, access it in ROOT file like h_jetPt->Draw()

    • +
    • title – usually pointless,put a description of the histogram in here

    • +
    • xlabel – label to put on the x-axis

    • +
    • xbins – number of xbins to use

    • +
    • xlow – lower bound on xbins

    • +
    • xhigh – upper bound on xbins

    • +
    • xbinsArr – variable xbins, test math \((x_1,y_1)\) and \((x_2,y_2)\)

    • +
    • ylabel – label to put on the y-axis

    • +
    • ylow – lower bound on ybins

    • +
    • yhigh – upper bound on ybins

    • +
    • ybinsArr – variable ybins

    • +
    • zlabel – label to put on the z-axix

    • +
    • zlow – lower bound on zbins

    • +
    • zhigh – upper bound on zbins

    • +
    • zbinsArr – variable zbins

    • +
    +
    +
    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string xyabel, int ybins, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, double ylow, double yhigh, std::string zlabel, int zbins, double zlow, double zhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, const Double_t *ybinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr, std::string zlabel, int zbins, const Double_t *zbinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, double ylow, double yhigh, std::string option = "")
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, int xbins, const Double_t *xbinsArr, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, int xbins, double xlow, double xhigh, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +void record(EL::IWorker *wk)
    +

    record all histograms from HistogramManager::m_allHists to the worker

    +
    + +
    +
    +MsgStream &msg() const
    +

    the standard message stream for this algorithm

    +
    + +
    +
    +MsgStream &msg(int level) const
    +

    allow ANA_MSG_XXXX macros to be used within algorithms for a given level

    +
    + +
    +
    +TH1 *findHist(const std::string &histName)
    +

    Return the pointer to the histogram.

    +
    + +
    +
    +void fillHist(const std::string &histName, double value)
    +

    Fill a histogram by name. Can be overloaded with weight.

    +
    +
    Parameters
    +
      +
    • histName – The name of the histogram to be filled

    • +
    • value – The value to fill the histogram with

    • +
    +
    +
    +
    + +
    +
    +void fillHist(const std::string &histName, double value, double weight)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +void fillHist(const std::string &histName, double valueX, double valueY, double weight)
    +
    + +
    +
    +void fillHist(const std::string &histName, double valueX, double valueY, double valueZ, double weight)
    +
    + +
    +
    +void fillProfile(const std::string &histName, double valueX, double valueY, double weight)
    +
    + +
    +
    +

    Public Members

    +
    +
    +HistMap_t m_histMap
    +

    The map of histogram names to their pointers.

    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +std::string m_name
    +

    generically the main name assigned to all histograms

    +
    + +
    +
    +std::string m_detailStr
    +

    a detail level in the form of a string

    +
    + +
    +
    +std::vector<TH1*> m_allHists
    +

    a container holding all generated histograms

    +
    + +
    +
    +mutable MsgStream m_msg
    +

    hold the MsgStream object

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classIParticleHistsAlgo.html b/api/classIParticleHistsAlgo.html new file mode 100644 index 0000000000..d01baf5071 --- /dev/null +++ b/api/classIParticleHistsAlgo.html @@ -0,0 +1,383 @@ + + + + + + + + + + + Class IParticleHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class IParticleHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +

    Derived Types

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class IParticleHistsAlgo : public xAH::Algorithm
    +

    Subclassed by ElectronHistsAlgo, JetHistsAlgo, MuonHistsAlgo, PhotonHistsAlgo

    +
    +

    Public Functions

    +
    +
    +IParticleHistsAlgo(std::string className = "IParticleHistsAlgo")
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +

    Calls execute<IParticleContainer>

    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +template<class HIST_T, class CONT_T>
    inline EL::StatusCode execute()
    +

    Fill histograms with particles in a container.

    +

    +

    Templated (container type) function that loops over all systematics (or nominal only)

    +
    +

    and fills the corresponding histogram objects.

    +
    +
    The event weight, in case of Monte Carlo samples, is

    mcEventWeight crossSection*filterEfficiency*kfactor

    +
    +
    +

    where the sample-weights are taken from SampleHandler and set to 1 by default.

    +

    +
    + +
    +
    +virtual EL::StatusCode AddHists(std::string name)
    +

    Calls AddHists<IParticleHists>

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    +template<class HIST_T>
    inline EL::StatusCode AddHists(std::string name)
    +

    Create histograms.

    +

    +

    Tempalated (histogram colllection class) function that creates all necessary histogram

    +
    +

    objects for a given systematic. The class chosen for HIST_T template must inherit from +IParticleHists.

    +

    +

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +

    input container

    +
    + +
    +
    +std::string m_detailStr = ""
    +

    which plots will be turned on

    +
    + +
    +
    +std::string m_inputAlgo = ""
    +

    name of algo input container comes from - only if

    +
    + +
    +
    +std::string m_histPrefix
    +

    Histogram name prefix when using IParticleHistsAlgo directly

    +
    + +
    +
    +std::string m_histTitle
    +

    Histogram xaxis title when using IParticleHistsAlgo directly

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classIsoCloseByCorr.html b/api/classIsoCloseByCorr.html new file mode 100644 index 0000000000..49b43ec42b --- /dev/null +++ b/api/classIsoCloseByCorr.html @@ -0,0 +1,366 @@ + + + + + + + + + + + Class IsoCloseByCorr — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class IsoCloseByCorr

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class IsoCloseByCorr : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +IsoCloseByCorr()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +ClassDef (IsoCloseByCorr, 1)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_decorateSelectedObjects
    +

    Decorate selected objects (the default decoration string is passOR)

    +
    + +
    +
    +std::string m_decor = "passOR"
    +
    + +
    +
    +std::string m_inContainerName_Electrons = ""
    +
    + +
    +
    +std::string m_inputAlgoElectrons = ""
    +
    + +
    +
    +std::string m_el_iso_WP = ""
    +
    + +
    +
    +std::string m_inContainerName_Muons = ""
    +
    + +
    +
    +std::string m_outContainerName_Muons = ""
    +
    + +
    +
    +std::string m_mu_iso_WP = ""
    +
    + +
    +
    +bool m_doPhotons = false
    +
    + +
    +
    +std::string m_inContainerName_Photons = ""
    +
    + +
    +
    +std::string m_outContainerName_Photons = ""
    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +int dummyVaraibleToKeepExample
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classJetCalibrator.html b/api/classJetCalibrator.html new file mode 100644 index 0000000000..a2f812bef0 --- /dev/null +++ b/api/classJetCalibrator.html @@ -0,0 +1,560 @@ + + + + + + + + + + + Class JetCalibrator — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class JetCalibrator

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class JetCalibrator : public xAH::Algorithm
    +

    A wrapper to a few JetETMiss packages. By setting the configuration parameters detailed in the header documentation, one can:

    +
    +
      +
    • calibrate a given jet collection

    • +
    • apply systematic variations for JES

    • +
    • apply systematic variations for JER

    • +
    • decorate the jet with the decision of the Jet Cleaning tool

    • +
    +
    +

    When considering systematics, a new xAOD::JetCollection is created for each systematic variation. The names are then saved in a vector for downstream algorithms to use.

    +

    +
    +

    Public Functions

    +
    +
    +JetCalibrator()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +

    The name of the input container for this algorithm to read from TEvent or TStore

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    The name of the nominal output container written by the algorithm to TStore

    +

    If the algorithm applies systematic variations, for each shallow copy saved to TStore, the systematic name will be appended to this.

    +
    + +
    +
    +std::string m_jetAlgo = ""
    +

    set to AntiKt4EMTopo for AntiKt4EMTopoJets

    +
    + +
    +
    +std::string m_outputAlgo = ""
    +

    name of vector holding names of jet systematics given by the JetEtmiss Tools

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +bool m_recalibrateHLTJets = false
    +

    whether to run HLT jet re-calibration

    +
    + +
    +
    +std::string m_HLTVertexContainerName = "HLT_IDVertex_FS"
    +

    vertex container name to use for HLT jet re-calibration

    +
    + +
    +
    +std::string m_HLTAvgMuDecor = "EventInfo.AvgMu"
    +

    HLT average mu decoration on EventInfo after formatting.

    +
    + +
    +
    +std::string m_EvtInfoHLTNPVDecor = ""
    +

    location of the HLT NPV on EventInfo object (e.g. EventInfo.NPV) this defaults to an empty string and is only configured in JetCalibrationTool when a non-empty string is provided

    +
    + +
    +
    +std::string m_calibGSCDepth = ""
    +

    GSCDepth property to override GSCDepth in config file when set to a non-empty string and GSC is in the calibration sequence.

    +
    + +
    +
    +std::string m_calibConfigDir = ""
    +

    config for JetCalibrationTool ConfigDir, set it to override tool defaults

    +
    + +
    +
    +std::string m_calibConfigData = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"
    +

    config for JetCalibrationTool for Data

    +
    + +
    +
    +std::string m_calibConfigFullSim = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config"
    +

    config for JetCalibrationTool for Full Sim MC

    +
    + +
    +
    +std::string m_calibConfigAFII = "JES_MC16Recommendation_AFII_EMTopo_April2018_rel21.config"
    +

    config for JetCalibrationTool for AFII MC

    +
    + +
    +
    +std::string m_calibSequence = ""
    +

    List of calibration steps. Auto-configured to the Jet/Etmiss recommendation if left blank.

    +
    + +
    +
    +std::string m_uncertConfig = ""
    +

    config for Jet Uncertainty Tool

    +
    + +
    +
    +std::string m_uncertMCType = ""
    +

    MC type for Jet Uncertainty Tool (need to be set for FullSim)

    +
    + +
    +
    +std::string m_overrideCalibArea = ""
    +

    Override CalibArea tag (default recommended)

    +
    + +
    +
    +std::string m_overrideUncertCalibArea = ""
    +

    Override uncertainties CalibArea tag (default recommended)

    +
    + +
    +
    +std::string m_overrideAnalysisFile = ""
    +

    Set analysis-specific jet flavour composition file for JetUncertainties (default: unknown comp.)

    +
    + +
    +
    +std::string m_overrideUncertPath = ""
    +

    Override uncertainties path (not recommended)

    +
    + +
    +
    +bool m_forceInsitu = false
    +

    when running data “_Insitu” is appended to calibration sequence

    +
    + +
    +
    +bool m_forceSmear = false
    +

    when running FullSim “_Smear” is appended to calibration sequence

    +
    + +
    +
    +bool m_jetCalibToolsDEV = false
    +

    when using DEV mode of JetCalibTools

    +
    + +
    +
    +bool m_addGhostMuonsToJets = false
    +

    Run muon-to-jet ghost association (recommended for MET)

    +
    + +
    +
    +bool m_doCleaning = true
    +

    enable to apply jet cleaning decoration

    +
    + +
    +
    +std::string m_jetCleanCutLevel = "LooseBad"
    +

    Cut Level.

    +
    + +
    +
    +bool m_saveAllCleanDecisions = false
    +

    Save all cleaning decisions as decorators.

    +
    + +
    +
    +bool m_jetCleanUgly = false
    +

    Do Ugly cleaning ( i.e. TileGap 3 )

    +
    + +
    +
    +bool m_sort = true
    +

    Sort the processed container elements by transverse momentum.

    +
    + +
    +
    +bool m_cleanParent = false
    +

    Apply jet cleaning to parent jet.

    +
    + +
    +
    +bool m_applyFatJetPreSel = false
    +
    + +
    +
    +bool m_useLargeRTruthLabelingTool = true
    +

    Use large-R jet truth labeling tool (needed for systematics)

    +
    + +
    +
    +std::string m_truthLabelName = "R10TruthLabel_R21Consolidated"
    +

    Name of the large-R jet truth labeling definition.

    +
    + +
    +
    +bool m_isTruthJetCol = false
    +

    Flag to indicate if using a truth jet collection.

    +
    + +
    +
    +bool m_useTRUTH3 = true
    +

    Flag to indicate if input xAOD uses TRUTH3 style containers.

    +
    + +
    +
    +std::string m_truthParticleContainerName = "TruthParticles"
    +

    Name of the truth particle container if not using TRUTH3 containers.

    +
    + +
    +
    +std::string m_truthBosonContainerName = "TruthBosonsWithDecayParticles"
    +

    Name of the truth boson container if using TRUTH3 containers.

    +
    + +
    +
    +std::string m_truthTopQuarkContainerName = "TruthTopQuarkWithDecayParticles"
    +

    Name of the truth top quark container if using TRUTH3 containers.

    +
    + +
    +
    +bool m_doJetTileCorr = false
    +

    jet tile correction

    +
    + +
    +
    +bool m_pseudoData = false
    +

    needed in case want to treat MC as pseudoData for JER uncertainty propagation

    +
    + +
    +
    +bool m_mcAndPseudoData = false
    +

    Treat MC as usual, then run the JER uncertainties on it a second time treating it as pseudodata. Overrides m_pseudodata if true.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classJetHistsAlgo.html b/api/classJetHistsAlgo.html new file mode 100644 index 0000000000..b08fedc8b5 --- /dev/null +++ b/api/classJetHistsAlgo.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Class JetHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class JetHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class JetHistsAlgo : public IParticleHistsAlgo
    +
    +

    Public Functions

    +
    +
    +JetHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +

    Calls execute<IParticleContainer>

    +
    + +
    +
    +virtual EL::StatusCode AddHists(std::string name)
    +

    Calls AddHists<IParticleHists>

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classJetSelector.html b/api/classJetSelector.html new file mode 100644 index 0000000000..c2c9e6f226 --- /dev/null +++ b/api/classJetSelector.html @@ -0,0 +1,792 @@ + + + + + + + + + + + Class JetSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class JetSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class JetSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +JetSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual bool executeSelection(const xAOD::JetContainer *inJets, float mcEvtWeight, bool count, std::string outContainerName, bool isNominal)
    +
    + +
    +
    +virtual int PassCuts(const xAOD::Jet *jet)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    input container name

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    +std::string m_truthJetContainer = "AntiKt4TruthJets"
    +

    truth jet container name (used for JVT SF)

    +
    + +
    +
    +std::string m_inputAlgo = ""
    +

    input type - from xAOD or from xAODAnaHelper Algo output

    +
    + +
    +
    +std::string m_outputAlgo = ""
    +

    output type - this is how the vector<string> w/ syst names will be saved in TStore

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +std::string m_jetScaleType = ""
    +

    Type of Scale Momementum.

    +
    + +
    +
    +std::string m_decor = "passSel"
    +

    The decoration key written to passing objects.

    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    decorate selected objects? defaul passSel

    +
    + +
    +
    +bool m_createSelectedContainer = false
    +

    fill using SG::VIEW_ELEMENTS to be light weight

    +
    + +
    +
    +int m_nToProcess = -1
    +

    look at n objects

    +
    + +
    +
    +bool m_cleanJets = true
    +

    require cleanJet decoration to not be set and false

    +
    + +
    +
    +int m_cleanEvtLeadJets = -1
    +

    kill event if any of the N leading jets are not clean

    +
    + +
    +
    +bool m_cleanEvent = false
    +

    Kill event if any passing jets are not clean.

    +
    +

    Note

    +

    The jets need the cleanJet decoration which is set when you enable JetCalibrator::m_doCleaning

    +
    +
    + +
    +
    +bool m_markCleanEvent = false
    +

    Mark event with decorator if any passing jets are not clean.

    +
    + +
    +
    +std::string m_jetScale4Selection = "Final"
    +

    Choose the scale at which the selection is performed (default “Final”, i.e. default 4vector)

    +
    + +
    +
    +bool m_doMCCleaning = false
    +

    (MC-only) Kill pileup overlay event if reconstructed jets avg(pT1,pT2) > 1.4*(truth jet pT1)

    +
    + +
    +
    +float m_mcCleaningCut = 1.4
    +

    Change the default 1.4 cut to x > 1.0.

    +
    + +
    +
    +int m_pass_min = -1
    +

    minimum number of objects passing cuts

    +
    + +
    +
    +int m_pass_max = -1
    +

    maximum number of objects passing cuts

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    require pT < pt_max

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    require pT > pt_min

    +
    + +
    +
    +float m_ET_max = 1e8
    +

    require ET < ET_max

    +
    + +
    +
    +float m_ET_min = 1e8
    +

    require ET > ET_min

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    require eta < eta_max

    +
    + +
    +
    +float m_eta_min = 1e8
    +

    require eta > eta_min

    +
    + +
    +
    +float m_detEta_max = 1e8
    +

    require detEta < detEta_max

    +
    + +
    +
    +float m_detEta_min = 1e8
    +

    require detEta > detEta_min

    +
    + +
    +
    +float m_mass_max = 1e8
    +

    require mass < mass_max

    +
    + +
    +
    +float m_mass_min = 1e8
    +

    require mass > mass_min

    +
    + +
    +
    +float m_rapidity_max = 1e8
    +

    require rapidity < rapidity_max

    +
    + +
    +
    +float m_rapidity_min = 1e8
    +

    require rapidity > rapidity_min

    +
    + +
    +
    +int m_truthLabel = -1
    +

    require truth level on truth jets

    +
    + +
    +
    +bool m_useHadronConeExcl = true
    +

    use HadronConeExclTruthLabelID for truth match (default)

    +
    + +
    +
    +bool m_doJVF = false
    +

    check JVF

    +
    + +
    +
    +float m_pt_max_JVF = 50e3
    +

    max pT [GeV] (JVF is a pileup cut)

    +
    + +
    +
    +float m_eta_max_JVF = 2.4
    +

    detector eta cut

    +
    + +
    +
    +float m_JVFCut = 0.5
    +

    cut value

    +
    + +
    +
    +bool m_doTruthJetTagging = true
    +

    (re-)evaluate the hard-scatter jet label (isJvtHS) required for Jvt efficiency tools

    +
    + +
    +
    +bool m_doJVT = false
    +

    check JVT

    +
    + +
    +
    +bool m_noJVTVeto = false
    +

    keep JVT-rejected jets and decorate passing status

    +
    + +
    +
    +bool m_dofJVT = false
    +

    check forward JVT

    +
    + +
    +
    +bool m_dofJVTVeto = true
    +

    Remove jets that fail fJVT. Like JVT, the default is to clean the collection.

    +
    + +
    +
    +float m_pt_max_JVT = 60e3
    +

    max pT [GeV] (JVT is a pileup cut)

    +
    + +
    +
    +float m_eta_max_JVT = 2.4
    +

    detector eta cut

    +
    + +
    +
    +bool m_jvtUsedBefore = false
    +

    was JVT already run in an earlier instance of JetSelector?

    +
    + +
    +
    +bool m_haveTruthJets = true
    +

    Does the input have truth jets? If not, cannot decorate with true hard scatter / pileup info.

    +
    + +
    +
    +bool m_getJVTSF = true
    +

    Retrieve JVT SFs (true by default, when false: allows to get JVT decision w/o needing truth jets)

    +
    + +
    +
    +float m_JVTCut = -1.0
    +

    Minimum value of JVT for selecting jets.

    +
    +

    Warning

    +

    If set to a non-negative value (default is -1.0), it will override any set value for JetSelector::m_WorkingPointJVT

    +
    +
    + +
    +
    +std::string m_WorkingPointJVT = "FixedEffPt"
    +

    WP for NNJvt.

    +
    + +
    +
    +std::string m_SFFileJVT = ""
    +

    SF file for NNJvtEfficiencyTool.

    +
    + +
    +
    +std::string m_outputSystNamesJVT = "JetJvtEfficiency_JVTSyst"
    +
    + +
    +
    +bool m_recalculateJvtScores = true
    +

    Do re-calculation of NNJvt - scores need to be re-evaluated in case jet pt changed w.r.t. derivation.

    +
    + +
    +
    +float m_systValJVT = 0.0
    +
    + +
    +
    +std::string m_systNameJVT = ""
    +
    + +
    +
    +std::string m_WorkingPointfJVT = "Loose"
    +

    WP for fJvt.

    +
    + +
    +
    +std::string m_SFFilefJVT = ""
    +

    SF file for fJvtEfficiencyTool.

    +
    + +
    +
    +std::string m_outputSystNamesfJVT = "JetJvtEfficiency_fJVTSyst"
    +
    + +
    +
    +float m_systValfJVT = 0.0
    +
    + +
    +
    +std::string m_systNamefJVT = ""
    +
    + +
    +
    +bool m_fjvtUsedBefore = false
    +

    was fJVT already run in an earlier instance of JetSelector?

    +
    + +
    +
    +bool m_doJetTimingCut = false
    +

    Timing cut.

    +
    + +
    +
    +float m_jetTiming_max = -1
    +
    + +
    +
    +bool m_doBTagCut = false
    +

    Flag to apply btagging cut, if false just decorate decisions.

    +
    + +
    +
    +std::string m_corrFileName = "xAODBTaggingEfficiency/cutprofiles_22072015.root"
    +
    + +
    +
    +std::string m_jetAuthor = "AntiKt4EMPFlowJets"
    +
    + +
    +
    +std::string m_taggerName = "DL1r"
    +
    + +
    +
    +std::string m_operatingPt = "FixedCutBEff_70"
    +
    + +
    +
    +double m_b_eta_max = 2.5
    +
    + +
    +
    +double m_b_pt_min = 20e3
    +
    + +
    +
    +bool m_doHLTBTagCut = false
    +
    + +
    +
    +std::string m_HLTBTagTaggerName = "DL1r"
    +
    + +
    +
    +float m_HLTBTagCutValue = -0.4434
    +
    + +
    +
    +bool m_requireHLTVtx = false
    +
    + +
    +
    +bool m_requireNoHLTVtx = false
    +
    + +
    +
    +std::string m_passAuxDecorKeys = ""
    +
    + +
    +
    +std::string m_failAuxDecorKeys = ""
    +
    + +
    +
    +std::string m_singleJetTrigChains = ""
    +

    A comma-separated string w/ alll the HLT single jet trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

    +
    + +
    +
    +std::string m_diJetTrigChains = ""
    +

    A comma-separated string w/ all the HLT dijet trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

    +
    + +
    +
    +bool m_removeDuplicates = false
    +

    remove duplicate jets (exactly the same eta)

    +
    + +
    +
    +int m_count_events_with_duplicates = 0
    +

    number of events with duplicates

    +
    + +
    +
    +bool m_sort = false
    +

    sort jets (normally done by JetCalibrator, but HLT jets need sorting and don’t get calibrated here)

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMETConstructor.html b/api/classMETConstructor.html new file mode 100644 index 0000000000..a6b6874653 --- /dev/null +++ b/api/classMETConstructor.html @@ -0,0 +1,493 @@ + + + + + + + + + + + Class METConstructor — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class METConstructor

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class METConstructor : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +METConstructor()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_mapName = "METAssoc_AntiKt4LCTopo"
    +
    + +
    +
    +std::string m_coreName = "MET_Core_AntiKt4LCTopo"
    +
    + +
    +
    +std::string m_outputContainer = "NewRefFinal"
    +
    + +
    +
    +std::string m_systConfigPrefix = "METUtilities/R22_PreRecs"
    +
    + +
    +
    +std::string m_systConfigSoftTrkFile = "TrackSoftTerms-pflow.config"
    +
    + +
    +
    +std::string m_inputJets = ""
    +
    + +
    +
    +std::string m_inputElectrons = ""
    +
    + +
    +
    +std::string m_inputPhotons = ""
    +
    + +
    +
    +std::string m_inputTaus = ""
    +
    + +
    +
    +std::string m_inputMuons = ""
    +
    + +
    +
    +bool m_doElectronCuts = false
    +
    + +
    +
    +bool m_doPhotonCuts = false
    +
    + +
    +
    +bool m_doTauCuts = false
    +
    + +
    +
    +bool m_doMuonCuts = false
    +
    + +
    +
    +bool m_doMuonEloss = false
    +
    + +
    +
    +bool m_doIsolMuonEloss = false
    +
    + +
    +
    +bool m_doJVTCut = false
    +
    + +
    +
    +bool m_dofJVTCut = false
    +
    + +
    +
    +std::string m_fJVTdecorName = "passFJVT"
    +

    Name of fJVT decoration.

    +
    + +
    +
    +bool m_doPFlow = true
    +

    To turn on p-flow MET calculation set m_doPFlow to true.

    +
    + +
    +
    +std::string m_METWorkingPoint = ""
    +

    Name of MET Working Point (defines the JetSelection applied in METMaker)

    +
    + +
    +
    +bool m_rebuildUsingTracksInJets = false
    +

    Rebuild MET using tracks in calo jets.

    +
    + +
    +
    +bool m_addSoftClusterTerms = false
    +

    Include soft cluster terms if rebuilding MET using jet terms (only considered if m_rebuildUsingTracksInJets is false)

    +
    + +
    +
    +bool m_calculateSignificance = false
    +

    Enable MET significance calculation.

    +
    + +
    +
    +bool m_significanceTreatPUJets = true
    +

    Introduce “resolution” for jets with low JVT, if the analysis is sensitive to pileup jets.

    +
    + +
    +
    +double m_significanceSoftTermReso = 10.0
    +

    Set soft term resolution.

    +
    + +
    +
    +bool m_runNominal = true
    +

    set to false if you want to run met systematics

    +
    + +
    +
    +std::string m_systName = "All"
    +

    do not change it, not useful

    +
    + +
    +
    +float m_systVal = 1.0
    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +std::string m_jetSystematics = ""
    +

    Name of jet systematics vector from JetCalibrator.

    +
    + +
    +
    +std::string m_eleSystematics = ""
    +

    Name of electron systematics vector from ElectronCalibrator.

    +
    + +
    +
    +std::string m_muonSystematics = ""
    +

    Name of muon systematics vector from MuonCalibrator.

    +
    + +
    +
    +std::string m_tauSystematics = ""
    +

    Name of tau systematics vector from TauCalibrator.

    +
    + +
    +
    +std::string m_phoSystematics = ""
    +

    Name of photon systematics vector from PhotonCalibrator.

    +
    + +
    +
    +std::string m_outputAlgoSystNames = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMessagePrinterAlgo.html b/api/classMessagePrinterAlgo.html new file mode 100644 index 0000000000..1b0d02df3e --- /dev/null +++ b/api/classMessagePrinterAlgo.html @@ -0,0 +1,304 @@ + + + + + + + + + + + Class MessagePrinterAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MessagePrinterAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MessagePrinterAlgo : public xAH::Algorithm
    +

    This algorithm changes the format of the MsgStream objects for all other algorithms. There should only be on instance of it, and it should probably be first.

    +
    +

    Public Functions

    +
    +
    +MessagePrinterAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +unsigned int m_sourceWidth = 25
    +

    Set the width of the name in the message.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMetHists.html b/api/classMetHists.html new file mode 100644 index 0000000000..87125e6b0b --- /dev/null +++ b/api/classMetHists.html @@ -0,0 +1,400 @@ + + + + + + + + + + + Class MetHists — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MetHists

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MetHists : public HistogramManager
    +
    +

    Public Functions

    +
    +
    +MetHists(std::string name, std::string detailStr)
    +
    + +
    +
    +virtual ~MetHists()
    +
    + +
    +
    +virtual StatusCode initialize()
    +

    Initialize and book all histograms.

    +

    Example implementation:

    +
    StatusCode JetHists::initialize() {
    +  m_jetPt          = book(m_name, "jetPt",  "jet p_{T} [GeV]", 120, 0, 3000.);
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +

    +
    +

    Note

    +

    This should call the overloaded functions HistogramManager::book() to create the histograms so that the user can call hists->record(wk()) to record all histograms to the EventLoop worker.

    +
    +
    + +
    +
    +StatusCode execute(const xAOD::MissingETContainer *met, float eventWeight)
    +
    + +
    +
    +TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh)
    +

    record a histogram and call various functions

    +
    +

    Note

    +

    This is an overloaded function. It will build the right histogram given the correct number of input arguments.

    +
    +
    +
    Parameters
    +
      +
    • name – name of histogram, access it in ROOT file like h_jetPt->Draw()

    • +
    • title – usually pointless,put a description of the histogram in here

    • +
    • xlabel – label to put on the x-axis

    • +
    • xbins – number of xbins to use

    • +
    • xlow – lower bound on xbins

    • +
    • xhigh – upper bound on xbins

    • +
    • xbinsArr – variable xbins, test math \((x_1,y_1)\) and \((x_2,y_2)\)

    • +
    • ylabel – label to put on the y-axis

    • +
    • ylow – lower bound on ybins

    • +
    • yhigh – upper bound on ybins

    • +
    • ybinsArr – variable ybins

    • +
    • zlabel – label to put on the z-axix

    • +
    • zlow – lower bound on zbins

    • +
    • zhigh – upper bound on zbins

    • +
    • zbinsArr – variable zbins

    • +
    +
    +
    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string xyabel, int ybins, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, double ylow, double yhigh, std::string zlabel, int zbins, double zlow, double zhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, const Double_t *ybinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr, std::string zlabel, int zbins, const Double_t *zbinsArr)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, double ylow, double yhigh, std::string option = "")
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, int xbins, const Double_t *xbinsArr, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +TProfile *book(std::string name, std::string title, int xbins, double xlow, double xhigh, double ylow, double yhigh)
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    +
    + +
    +
    +inline virtual StatusCode execute()
    +

    Execute by filling in the histograms.

    +

    Example implementation:

    +
    StatusCode JetHists::execute( const xAOD::JetContainer  jets, float eventWeight ){
    +  for(const auto& jet:  jets)
    +    m_jetPt->Fill( jet->pt()/1.e3, eventWeight );
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +

    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_debug
    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +HelperClasses::METInfoSwitch *m_infoSwitch
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMetHistsAlgo.html b/api/classMetHistsAlgo.html new file mode 100644 index 0000000000..2d019b5d52 --- /dev/null +++ b/api/classMetHistsAlgo.html @@ -0,0 +1,307 @@ + + + + + + + + + + + Class MetHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MetHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MetHistsAlgo : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +MetHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_detailStr = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMinixAOD.html b/api/classMinixAOD.html new file mode 100644 index 0000000000..c2eb90df30 --- /dev/null +++ b/api/classMinixAOD.html @@ -0,0 +1,438 @@ + + + + + + + + + + + Class MinixAOD — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MinixAOD

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MinixAOD : public xAH::Algorithm
    +

    Produce xAOD outputs.

    +

    I can think up the following cases when a user is doing an EL Algorithm:

    +
    +

    input containers in TEvent (simple) +deep-copied containers in TStore (deep-copy) +shallow-copied containers in TStore (shallow) +CDV containers in TStore (cdv)

    +
    +

    For the above use-cases, we might produce outputs like so:

    +
    +

    write the input container to the output. This uses TEvent::copy(). +write the deep-copied containers to the output. This calls TStore::retrieve() and then TEvent::record(). +two options when we have shallow-copies:

    +
      +
    1. shallowIO=false: write to the output as a deep-copy like in the previous option

    2. +
    3. shallowIO=true: write to the output as a shallow-copy, but make sure the original container is also written to the output

    4. +
    +

    make a deep-copy of the ConstDataVector and then move from TStore to TEvent. The problem is that we point to local memory that will not persist when making the CDV.

    +
    +

    The trickiest case is with shallow copies because those could be our systematics – and you might want to copy the original container, and only copy over systematics via true shallow copies to conserve memory and space.

    +

    +
    +

    Warning

    +

    Care must be taken when managing memory and using copies. You need to think about how copies point to each other and whether you can use shallow copies or deep copies or both.

    +
    +
    +

    Public Functions

    +
    +
    +MinixAOD()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_outputFileName = "out_miniXAOD"
    +

    name of the output file to use for xAOD dumping

    +
    + +
    +
    +bool m_createOutputFile = true
    +

    enable to create the output file for xAOD dumping

    +
    + +
    +
    +bool m_copyFileMetaData = false
    +

    copy the file metadata over

    +
    + +
    +
    +bool m_copyTriggerInfo = false
    +

    copy the trigger containers and meta data over

    +
    + +
    +
    +bool m_copyCutBookkeeper = false
    +

    copy the cutbookkeeper data over

    +
    + +
    +
    +std::string m_simpleCopyKeys = ""
    +

    names of containers to copy from the input file

    +

    Container names should be space-delimited:

    +
    "m_simpleCopyKeys": "EventInfo AntiKt4EMTopoJets"
    +
    +
    +

    +
    + +
    +
    +std::string m_storeCopyKeys = ""
    +

    names of containers in the TStore to copy over

    +

    Container names should be space-delimited:

    +
    "m_storeCopyKeys": "BrandNewJetContainer ReclusteredJets"
    +
    +
    +

    +
    +

    Note

    +

    This option is appropriate for deep-copied containers.

    +
    +
    + +
    +
    +std::string m_shallowCopyKeys = ""
    +

    names of containers that have been shallow-copied

    +

    This option is a little different because shallow-copied containers have parent containers. However, there are two options depending on the setShallowIO option

    +
    +
    +
    True

    If this is set to true, you will want to specify the parent container so that we copy it over as well (it is assumed that the parent container is in TStore or TEvent):

    +
    "m_shallowCopyKeys": "SCAntiKt4EMTopoJets|AntiKt4EMTopoJets SCMuons|Muons_Presel"
    +
    +
    +
    +
    False

    If this is set to false, you will not want to specify the parent container

    +
    +

    ”m_shallowCopyKeys”: “SCAntiKt4EMTopoJets| SCMuons|”

    +
    +
    +
    +
    +

    Always specify your string in a space-delimited format where pairs are split up by shallow container name|parent container name.

    +

    +
    +

    Note

    +

    This option is appropriate for shallow-copied containers.

    +
    +
    +

    Warning

    +

    Please note that the shallowIO option is what determines how the memory is managed. If you run into issues with shallow-copied containers here, make sure you know whether this option was enabled or not before asking for help.

    +
    +
    + +
    +
    +std::string m_deepCopyKeys = ""
    +

    names of containers that have been shallow-copied

    +

    Here, we will do the deep-copying for you, so that the containers can be correctly recorded into the output. Due to the way view-only containers work, we can’t figure out whether the memory points to a specific parent container we can copy, or to a non-persistable, local (stack) memory. The best option is to just deep-copy and allocate new memory instead:

    +
    "m_deepCopyKeys": "AntiKt4EMTopoJets|DeepCopyAntiKt4Jets Muons|DeepCopyMuons"
    +
    +
    +

    Always specify your string in a space-delimited format where pairs are split up by input container name|output container name.

    +

    +
    +

    Note

    +

    This option is appropriate for view-only containers such as ConstDataVector.

    +
    +
    + +
    +
    +std::string m_vectorCopyKeys = ""
    +

    names of vectors that have container names for its contents

    +

    Here, we will do the copying for you by retrieving the vector of container names and copy each one over. See how MinixAOD::m_shallowCopyKeys works.

    +

    Always specify your string in a space-delimited format where pairs are split up by vector name|parent container name.

    +

    +
    +

    Note

    +

    This option is appropriate for groups shallow-copied containers such as when you are dealing with systematics.

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMuonCalibrator.html b/api/classMuonCalibrator.html new file mode 100644 index 0000000000..d324900a42 --- /dev/null +++ b/api/classMuonCalibrator.html @@ -0,0 +1,369 @@ + + + + + + + + + + + Class MuonCalibrator — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonCalibrator

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonCalibrator : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +MuonCalibrator()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_outContainerName = ""
    +
    + +
    +
    +std::string m_calibrationMode = "noOption"
    +

    Set calibrationMode property if different than noOption.

    +
    + +
    +
    +bool m_isRun3Geo = false
    +

    Switch on Run3 geometry for muon selector tool.

    +
    + +
    +
    +bool m_do2StationsHighPt = false
    +
    + +
    +
    +bool m_sort = true
    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "MuonCalibrator_Syst"
    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +float m_systVal = 0.0
    +
    + +
    +
    +std::string m_systName = ""
    +
    + +
    +
    +bool m_forceDataCalib = false
    +

    Force MuonCalibrationPeriodTool.h to calibrate data.

    +

    MuonSelectorTool depends on a specific decoration existing on Muons, namely MuonSpectrometerPt. This is decorated by the MuonCalibrationAndSmearingTool. However, you do not calibrate data by default so this tool would not be run on data.

    +

    In the case where you need the tool to be forced to run on data in order to have this decoration on your muons, you need to flip this boolean. See the Muon Combined Performance Working Group twiki for more information.

    +

    +
    +

    Note

    +

    This should not modify the momentum of muons in data (according to the tool as of MuonMomentumCorrections-01-00-37).

    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMuonEfficiencyCorrector.html b/api/classMuonEfficiencyCorrector.html new file mode 100644 index 0000000000..95d6a67ec3 --- /dev/null +++ b/api/classMuonEfficiencyCorrector.html @@ -0,0 +1,425 @@ + + + + + + + + + + + Class MuonEfficiencyCorrector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonEfficiencyCorrector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonEfficiencyCorrector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +MuonEfficiencyCorrector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual EL::StatusCode executeSF(const xAOD::EventInfo *eventInfo, const xAOD::MuonContainer *inputMuons, bool nominal, bool writeSystNames)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_overrideCalibRelease = ""
    +

    Recommendations release (not recommended to change)

    +
    + +
    +
    +std::string m_WorkingPointReco = "Loose"
    +
    + +
    +
    +std::string m_WorkingPointIso = "LooseTrackOnly"
    +
    + +
    +
    +bool m_AllowZeroSF = false
    +

    Use with caution!!!

    +
    + +
    +
    +std::string m_MuTrigLegs = "HLT_mu26_imedium"
    +

    list of comma-separated single-mu trigger corrections. Individual legs of di-mu menus can be parsed

    +
    + +
    +
    +bool m_usePerMuonTriggerSFs = true
    +

    Get per-muon trigger SF (default: true) [if false it will take into account combinatorics using all muons from the input muon container].

    +
    + +
    +
    +std::string m_WorkingPointTTVA = "TTVA"
    +
    + +
    +
    +std::string m_inputSystNamesMuons = ""
    +

    The name of the vector containing the names of the systematically-varied muons-related containers from the upstream algorithm, which will be processed by this algorithm.

    +

    Only muon calibration systematics or any other that create shallow copies of electron containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +float m_systValReco = 0.0
    +
    + +
    +
    +float m_systValIso = 0.0
    +
    + +
    +
    +float m_systValTrig = 0.0
    +
    + +
    +
    +float m_systValTTVA = 0.0
    +
    + +
    +
    +std::string m_systNameReco = ""
    +
    + +
    +
    +std::string m_systNameIso = ""
    +
    + +
    +
    +std::string m_systNameTrig = ""
    +
    + +
    +
    +std::string m_systNameTTVA = ""
    +
    + +
    +
    +std::string m_outputSystNamesReco = "MuonEfficiencyCorrector_RecoSyst"
    +
    + +
    +
    +std::string m_outputSystNamesIso = "MuonEfficiencyCorrector_IsoSyst"
    +
    + +
    +
    +std::string m_outputSystNamesTrig = "MuonEfficiencyCorrector_TrigSyst"
    +
    + +
    +
    +std::string m_outputSystNamesTTVA = "MuonEfficiencyCorrector_TTVASyst"
    +
    + +
    +
    +bool m_doLRT = false
    +

    Turn on if using LRT muons.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMuonHistsAlgo.html b/api/classMuonHistsAlgo.html new file mode 100644 index 0000000000..35018acded --- /dev/null +++ b/api/classMuonHistsAlgo.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Class MuonHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonHistsAlgo : public IParticleHistsAlgo
    +
    +

    Public Functions

    +
    +
    +MuonHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +

    Calls execute<IParticleContainer>

    +
    + +
    +
    +virtual EL::StatusCode AddHists(std::string name)
    +

    Calls AddHists<IParticleHists>

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMuonInFatJetCorrector.html b/api/classMuonInFatJetCorrector.html new file mode 100644 index 0000000000..7f8cf7ada3 --- /dev/null +++ b/api/classMuonInFatJetCorrector.html @@ -0,0 +1,425 @@ + + + + + + + + + + + Class MuonInFatJetCorrector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonInFatJetCorrector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonInFatJetCorrector : public xAH::Algorithm
    +

    Algorithm for correcting the momentum of largeR jets containing muon decays.

    +

    Only muons associated to track jets are used. Quality and kinematic cuts for the muons and track jets can be adjusted by the user.

    +

    There are currently four correction schemes; Calorimeter, TrackAssisted, Combined, and SimpleMuon. At present, Combined is used, which takes a weighted sum of corrections from both the TrackAssisted and Calorimeter Schemes.

    +

    The corrected large-R are saved as a TLorentzVector in a decorator named “correctedFatJets_tlv”.

    +

    +
    +

    Public Types

    +
    +
    +enum Scheme
    +

    Different schemes for the muon in jet correction.

    +

    Values:

    +
    +
    +enumerator Calorimeter
    +
    + +
    +
    +enumerator TrackAssisted
    +
    + +
    +
    +enumerator Combined
    +
    + +
    +
    +enumerator SimpleMuon
    +
    + +
    + +
    +
    +

    Public Functions

    +
    +
    +MuonInFatJetCorrector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +EL::StatusCode matchTrackJetsToMuons() const
    +
    + +
    +
    +TLorentzVector getHbbCorrectedVector(const xAOD::Jet &jet)
    +
    + +
    +
    +const xAOD::JetFourMom_t getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector<const xAOD::Muon*> muons, Scheme scheme, bool useJMSScale = false) const
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_fatJetContainerName = ""
    +

    The name of the container with fat jets to be corrected.

    +
    + +
    +
    +std::string m_trackJetContainerName = "AntiKtVR30Rmax4Rmin02TrackJets"
    +

    The name of the container with track jets used for matching.

    +
    + +
    +
    +std::string m_muonContainerName = ""
    +

    The name of the container with muons to be used for the correction.

    +
    + +
    +
    +std::string m_trackJetLinkName = "GhostVR30Rmax4Rmin02TrackJet"
    +

    The name of the link to matched track jets.

    +
    + +
    +
    +std::string m_calibratedMassDecoratorData = "JetInsituScaleMomentum"
    +

    Name of calibrated jet mass decorator, without the TA/Calo suffix, for data.

    +
    + +
    +
    +std::string m_calibratedMassDecoratorFullSim = "JetJMSScaleMomentum"
    +

    Name of calibrated jet mass decorator, without the TA/Calo suffix, for full sim.

    +
    + +
    +
    +std::string m_inputAlgo
    +

    Algortihm systematics loop.

    +
    + +
    +
    +float m_trackJetPtMin = 10000.0
    +

    Minimum pt of track jets to use for correction.

    +
    + +
    +
    +float m_trackJetEtaMax = 2.5
    +

    Maximum eta of track jets to use for correction.

    +
    + +
    +
    +float m_trackJetNConst = 2.0
    +

    Minimum number of constituents (tracks) of track jets to use for correction.

    +
    + +
    +
    +float m_muonPtMin = 10000.0
    +

    Minimum pt of muons to use for correction.

    +
    + +
    +
    +float m_muonEtaMax = 2.7
    +

    Maximum eta of muons to use for correction.

    +
    + +
    +
    +float m_muonDrMax = 0.4
    +

    DR cut to use when matching muons to track jets.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classMuonSelector.html b/api/classMuonSelector.html new file mode 100644 index 0000000000..97d8374d6e --- /dev/null +++ b/api/classMuonSelector.html @@ -0,0 +1,524 @@ + + + + + + + + + + + Class MuonSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +MuonSelector()
    +
    + +
    +
    +~MuonSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +bool executeSelection(const xAOD::MuonContainer *inMuons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::MuonContainer> *selectedMuons)
    +
    + +
    +
    +virtual int passCuts(const xAOD::Muon *muon, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    input container name

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    +std::string m_outAuxContainerName
    +

    output auxiliary container name

    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +
    + +
    +
    +std::string m_outputAlgoSystNames = "MuonSelector_Syst"
    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    decorate selected objects - default “passSel”

    +
    + +
    +
    +bool m_createSelectedContainer = false
    +

    fill using SG::VIEW_ELEMENTS to be light weight

    +
    + +
    +
    +int m_nToProcess = -1
    +

    look at n objects

    +
    + +
    +
    +int m_pass_min = -1
    +

    minimum number of objects passing cuts

    +
    + +
    +
    +int m_pass_max = -1
    +

    maximum number of objects passing cuts

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    require pT < pt_max

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    require pT > pt_min

    +
    + +
    +
    +bool m_pT_NaNcheck = false
    +

    check if pT is NaN

    +
    + +
    +
    +std::string m_muonQualityStr = "Medium"
    +

    require quality

    +
    + +
    +
    +bool m_isRun3Geo = false
    +

    Switch on Run3 geometry for muon selector tool.

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    require type require |eta| < eta_max

    +
    + +
    +
    +float m_d0_max = 1e8
    +

    require d0 < m_d0_max

    +
    + +
    +
    +float m_d0sig_max = 1e8
    +

    require d0 significance (at BL) < m_d0sig_max

    +
    + +
    +
    +float m_z0sintheta_max = 1e8
    +

    require z0*sin(theta) (at BL - corrected with vertex info) < m_z0sintheta_max

    +
    + +
    +
    +bool m_removeCosmicMuon = false
    +

    Remove cosmic muons that fail absolute z0 and d0 selections.

    +
    + +
    +
    +bool m_removeEventBadMuon = true
    +

    Remove events with a bad muon, defined by poor q/p.

    +
    + +
    +
    +bool m_doIsolation = true
    +

    enable or disable isolation

    +
    + +
    +
    +std::string m_MinIsoWPCut = ""
    +

    reject objects which do not pass this isolation cut - default = “” (no cut)

    +
    + +
    +
    +std::string m_IsoWPList = "FCTightTrackOnly_FixedRad,FCLoose_FixedRad,FCTight_FixedRad,FixedCutPflowTight,FixedCutPflowLoose"
    +

    decorate objects with ‘isIsolated_*’ flag for each WP in this input list - default = all current ASG WPs

    +
    + +
    +
    +std::string m_CaloIsoEff = "0.1*x+90"
    +

    to define a custom WP - make sure “UserDefined” is added in the above input list!

    +
    + +
    +
    +std::string m_TrackIsoEff = "98"
    +

    to define a custom WP - make sure “UserDefined” is added in the above input list!

    +
    + +
    +
    +std::string m_CaloBasedIsoType = "topoetcone20"
    +

    to define a custom WP - make sure “UserDefined” is added in the above input list!

    +
    + +
    +
    +std::string m_TrackBasedIsoType = "ptvarcone30"
    +

    to define a custom WP - make sure “UserDefined” is added in the above input list!

    +
    + +
    +
    +std::string m_singleMuTrigChains = ""
    +

    A comma-separated string w/ alll the HLT single muon trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

    +
    + +
    +
    +std::string m_diMuTrigChains = ""
    +

    A comma-separated string w/ all the HLT dimuon trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

    +
    + +
    +
    +double m_minDeltaR = 0.1
    +

    Recommended threshold for muon triggers: see https://svnweb.cern.ch/trac/atlasoff/browser/Trigger/TrigAnalysis/TriggerMatchingTool/trunk/src/TestMatchingToolAlg.cxx.

    +
    + +
    +
    +bool m_merged_muons = false
    +

    Element links need to be updated if merged muons are used (LRT + std) / false by default.

    +
    + +
    +
    +std::string m_trigInputPrefix = ""
    +

    Input prefix of trigger decision tool.

    +
    + +
    +
    +bool m_doLRT = false
    +

    add LRT muon information

    +
    + +
    +
    +std::string m_isoDecSuffix = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classOverlapRemover.html b/api/classOverlapRemover.html new file mode 100644 index 0000000000..0819da0a52 --- /dev/null +++ b/api/classOverlapRemover.html @@ -0,0 +1,732 @@ + + + + + + + + + + + Class OverlapRemover — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class OverlapRemover

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class OverlapRemover : public xAH::Algorithm
    +

    A wrapper of the overlap removal tool in the ASG AssociationUtils package.

    +

    The logic of the OLR belongs to the ASG tool itself, and is described extensively in the Analysis Harmonisation Task Force note.

    +

    If you wish to apply a custom OLR scheme, please contact the author marco.milesi@cern.ch for detailed instructions.

    +

    The idea behind this algorithm is to consistently thread together the inputs from upstream xAODAnaHelpers algorithms based on user’s configuration, handling also the case where systematics on the input physics objects are taken into account. Here follows a usage example.

    +

    Consider the simplified scenario where we care only about jets** and electrons. +Assuming the typical xAODAnaHelpers analysis configuration through xAH_config, the analysis workflow could look like the following:

    +
    c = xAH_config()
    +# ...
    +c.algorithm("JetSelector", JetSelectorDict)
    +c.algorithm("ElectronSelector", ElectronSelectorDict)
    +# ...
    +c.algorithm("OverlapRemover", OverlapRemoverDict)
    +# ...
    +
    +
    +

    where each algorithm has the following I/O systematics configuration (via python dictionaries):

    +
     JetSelectorDict = {
    +     # ...
    +     "m_inputAlgo" : "JetCalibrator_Syst",
    +     "m_outputAlgo" : "JetSelector_Syst",
    +     # ...
    + }
    +
    + ElectronSelectorDict = {
    +     # ...
    +     "m_inputAlgo" : "ElectronCalibrator_Syst",
    +     "m_outputAlgo" : "ElectronSelector_Syst",
    +     # ...
    +}
    +
    +OverlapRemoverDict = {
    +     # ...
    +     "m_inputAlgoJets" : "JetSelector_Syst", # leave empty when not considering jet systematics
    +     "m_inputAlgoElectrons" : "ElectronSelector_Syst", # leave empty when not considering electron systematics
    +     # ...
    +}
    +
    +
    +

    In this way the overlap removal algorithm will be able to correctly work out all the combinatorics, generating output xAOD containers for jets and electrons for each input systematics combination to be subsequently used downstream according to the user’s needs. The overlap removal algorithm creates an output systematic list that is a combination of systematics from all input containers.

    +

    +
    +

    Public Functions

    +
    +
    +OverlapRemover()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual EL::StatusCode fillObjectCutflow(const xAOD::IParticleContainer *objCont, const std::string &overlapFlag = "passOR", const std::string &selectFlag = "passSel")
    +

    Fill the cutflow histograms.

    +
    +
    Parameters
    +
      +
    • objCont – The xAOD container to be considered

    • +
    • overlapFlag – The string identifying objects not overlapping with another object, to be kept (default is "passOR")

    • +
    • selectFlag – The string identifying selected objects (default is "passSel")

    • +
    +
    +
    +
    + +
    +
    +virtual EL::StatusCode executeOR(const xAOD::ElectronContainer *inElectrons, const xAOD::MuonContainer *inMuons, const xAOD::JetContainer *inJets, const xAOD::PhotonContainer *inPhotons, const xAOD::TauJetContainer *inTaus, SystType syst_type = NOMINAL, std::vector<std::string> *sysVec = nullptr, std::vector<std::string> *sysVecOut = nullptr)
    +

    Function that internally calls the OLR tool for the input containers (and systematics)

    +
    +
    Parameters
    +
      +
    • inElectrons – Input xAOD container for electrons

    • +
    • inMuons – Input xAOD container for muons

    • +
    • inJets – Input xAOD container for jets

    • +
    • inPhotons – Input xAOD container for photons

    • +
    • inTaus – Input xAOD container for taus

    • +
    • syst_type – The type of object for which input systematics should be considered. Default is NOMINAL

    • +
    • sysVec – The list of the input systematics for a given object. Must match with the choice of syst_type. Default is nullptr

    • +
    +
    +
    +
    + +
    +
    +EL::StatusCode setCutFlowHist()
    +

    Setup cutflow histograms.

    +
    + +
    +
    +EL::StatusCode setCounters()
    +

    Initialise counters for events/objects.

    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +

    Fill the cutflow histogram(s) for object counting.

    +
    + +
    +
    +bool m_decorateSelectedObjects
    +

    Decorate selected objects (the default decoration string is passOR)

    +
    + +
    +
    +std::string m_decor = "passOR"
    +
    + +
    +
    +bool m_createSelectedContainers
    +

    Make a copy of input container(s) with selected objects (using SG::VIEW_ELEMENTS to be light weight)

    +
    + +
    +
    +bool m_useSelected = false
    +

    In the OLR, consider only objects passing a (pre)selection.

    +
    + +
    +
    +std::string m_bTagWP = ""
    +

    Use b-tagging decision, set previously with the given decoration name, to remove electrons and muons.

    +
    +

    Note

    +

    This is automatically set by BJetEfficiencyCorrector

    +
    +
    + +
    +
    +bool m_linkOverlapObjects = true
    +

    Create a link between overlapped objects.

    +
    + +
    +
    +bool m_useBoostedLeptons = false
    +

    Use boosted object working point.

    +
    + +
    +
    +bool m_doEleEleOR = false
    +

    Do overlap removal between electrons (HSG2 prescription)

    +
    + +
    +
    +bool m_applyRelPt = false
    +

    Turn ON ApplyRelPt in MuJetOverlapTool (default is false)

    +
    + +
    +
    +bool m_lepFavWP = false
    +

    Turn ON Lepton favored working point (HSG2 prescription)

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "ORAlgo_Syst"
    +

    Output systematics list container name.

    +
    + +
    +
    +std::string m_inContainerName_Electrons = ""
    +

    Input container name.

    +
    + +
    +
    +std::string m_outContainerName_Electrons = ""
    +

    Output container name.

    +
    + +
    +
    +std::string m_inputAlgoElectrons = ""
    +

    Name of the std::vector of systematics coming from the upstream algorithm

    +
    + +
    +
    +std::string m_inContainerName_Muons = ""
    +
    + +
    +
    +std::string m_outContainerName_Muons = ""
    +
    + +
    +
    +std::string m_inputAlgoMuons = ""
    +
    + +
    +
    +std::string m_inContainerName_Jets = ""
    +
    + +
    +
    +std::string m_outContainerName_Jets = ""
    +
    + +
    +
    +std::string m_inputAlgoJets = ""
    +
    + +
    +
    +std::string m_inContainerName_Photons = ""
    +
    + +
    +
    +std::string m_outContainerName_Photons = ""
    +
    + +
    +
    +std::string m_inputAlgoPhotons = ""
    +
    + +
    +
    +std::string m_inContainerName_Taus = ""
    +
    + +
    +
    +std::string m_outContainerName_Taus = ""
    +
    + +
    +
    +std::string m_inputAlgoTaus = ""
    +
    + +
    +
    +

    Protected Types

    +
    +
    +enum SystType
    +

    An enum encoding systematics according to the various objects.

    +

    Values:

    +
    +
    +enumerator NOMINAL
    +
    + +
    +
    +enumerator ELSYST
    +
    + +
    +
    +enumerator MUSYST
    +
    + +
    +
    +enumerator JETSYST
    +
    + +
    +
    +enumerator PHSYST
    +
    + +
    +
    +enumerator TAUSYST
    +
    + +
    + +
    +
    +

    Protected Attributes

    +
    +
    +int m_numEvent
    +

    A counter for the number of processed events.

    +
    + +
    +
    +int m_numObject
    +

    A counter for the number of processed objects.

    +
    + +
    +
    +int m_numEventPass
    +

    A counter for the number of passed events.

    +
    + +
    +
    +int m_weightNumEventPass
    +

    A counter for the number of passed weighted events.

    +
    + +
    +
    +int m_numObjectPass
    +

    A counter for the number of passed objects.

    +
    + +
    +
    +bool m_useElectrons = false
    +

    Consider electrons in the OLR.

    +

    This is set to false if m_inContainerName_Electrons is set as an empty string. +Electrons (unlike jets) are considered “optional” objetcs in the OLR.

    +
    + +
    +
    +bool m_useMuons = false
    +

    Consider muons in the OLR.

    +

    This is set to false if m_inContainerName_Muons is set as an empty string. +Muons (unlike jets) are considered “optional” objects in the OLR.

    +
    + +
    +
    +bool m_usePhotons = false
    +

    Consider photons in the OLR.

    +

    This is set to false if m_inContainerName_Photons is set as an empty string. +Photons (unlike jets) are considered “optional” objects in the OLR.

    +
    + +
    +
    +bool m_useTaus = false
    +

    Consider taus in the OLR.

    +

    This is set to false if m_inContainerName_Taus is set as an empty string. +Taus (unlike jets) are considered “optional” objects in the OLR.

    +
    + +
    +
    +std::string m_outAuxContainerName_Electrons
    +

    Output auxiliary container name.

    +
    + +
    +
    +std::string m_outAuxContainerName_Muons
    +

    Output auxiliary container name.

    +
    + +
    +
    +std::string m_outAuxContainerName_Jets
    +

    Output auxiliary container name.

    +
    + +
    +
    +std::string m_outAuxContainerName_Photons
    +

    Output auxiliary container name.

    +
    + +
    +
    +std::string m_outAuxContainerName_Taus
    +

    Output auxiliary container name.

    +
    + +
    +
    +ORUtils::ToolBox m_ORToolbox
    +

    Pointer to the CP Tool which performs the actual OLR.

    +
    + +
    +
    +TH1D *m_el_cutflowHist_1 = nullptr
    +

    Pointer to the histogram for the electron cutflow.

    +
    + +
    +
    +TH1D *m_mu_cutflowHist_1 = nullptr
    +

    Pointer to the histogram for the muon cutflow.

    +
    + +
    +
    +TH1D *m_jet_cutflowHist_1 = nullptr
    +

    Pointer to the histogram for the jet cutflow.

    +
    + +
    +
    +TH1D *m_ph_cutflowHist_1 = nullptr
    +

    Pointer to the histogram for the photon cutflow.

    +
    + +
    +
    +TH1D *m_tau_cutflowHist_1 = nullptr
    +

    Pointer to the histogram for the tau cutflow.

    +
    + +
    +
    +int m_el_cutflow_OR_cut
    +
    + +
    +
    +int m_mu_cutflow_OR_cut
    +
    + +
    +
    +int m_jet_cutflow_OR_cut
    +
    + +
    +
    +int m_ph_cutflow_OR_cut
    +
    + +
    +
    +int m_tau_cutflow_OR_cut
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classPhotonCalibrator.html b/api/classPhotonCalibrator.html new file mode 100644 index 0000000000..2b9efcbe76 --- /dev/null +++ b/api/classPhotonCalibrator.html @@ -0,0 +1,385 @@ + + + + + + + + + + + Class PhotonCalibrator — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class PhotonCalibrator

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class PhotonCalibrator : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +PhotonCalibrator()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_outContainerName = ""
    +
    + +
    +
    +std::string m_overridePhotonCalibMap = ""
    +
    + +
    +
    +std::string m_tightIDConfigPath = "ElectronPhotonSelectorTools/offline/20180825/PhotonIsEMTightSelectorCutDefs.conf"
    +
    + +
    +
    +std::string m_mediumIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf"
    +
    + +
    +
    +std::string m_looseIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf"
    +
    + +
    +
    +bool m_sort = true
    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "PhotonCalibrator_Syst"
    +

    this is the name of the vector of names of the systematically varied containers produced by THIS algo ( these will be the m_inputAlgoSystNames of the algo downstream

    +
    + +
    +
    +bool m_useAFII = false
    +
    + +
    +
    +bool m_useAF3 = false
    +
    + +
    +
    +float m_systVal = 0.0
    +
    + +
    +
    +std::string m_systName = ""
    +
    + +
    +
    +std::string m_esModel = "es2017_R21_v1"
    +
    + +
    +
    +std::string m_decorrelationModel = ""
    +
    + +
    +
    +int m_randomRunNumber = -1
    +
    + +
    +
    +bool m_readIDFlagsFromDerivation = false
    +

    To read PID decision from DAOD, rather than recalculate with tool.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classPhotonHistsAlgo.html b/api/classPhotonHistsAlgo.html new file mode 100644 index 0000000000..40b802f6d4 --- /dev/null +++ b/api/classPhotonHistsAlgo.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Class PhotonHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class PhotonHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class PhotonHistsAlgo : public IParticleHistsAlgo
    +
    +

    Public Functions

    +
    +
    +PhotonHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +

    Calls execute<IParticleContainer>

    +
    + +
    +
    +virtual EL::StatusCode AddHists(std::string name)
    +

    Calls AddHists<IParticleHists>

    +
    +
    Parameters
    +

    name – Name of the systematic

    +
    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classPhotonSelector.html b/api/classPhotonSelector.html new file mode 100644 index 0000000000..13bd2149aa --- /dev/null +++ b/api/classPhotonSelector.html @@ -0,0 +1,428 @@ + + + + + + + + + + + Class PhotonSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class PhotonSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class PhotonSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +PhotonSelector()
    +
    + +
    +
    +~PhotonSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +bool executeSelection(const xAOD::PhotonContainer *inPhotons, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::PhotonContainer> *selectedPhotons)
    +
    + +
    +
    +virtual bool passCuts(const xAOD::Photon *photon)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    configuration variables input container name

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    output auxiliary container name

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "PhotonSelector_Syst"
    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    decorate selected objects - default “passSel”

    +
    + +
    +
    +bool m_createSelectedContainer = true
    +

    fill using SG::VIEW_ELEMENTS to be light weight

    +
    + +
    +
    +int m_nToProcess = -1
    +

    look at n objects

    +
    + +
    +
    +int m_pass_min = -1
    +

    minimum number of objects passing cuts

    +
    + +
    +
    +int m_pass_max = -1
    +

    maximum number of objects passing cuts

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    require pT < pt_max

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    require pT > pt_min

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    require |eta| < eta_max

    +
    + +
    +
    +bool m_vetoCrack = true
    +

    require |eta| outside crack region

    +
    + +
    +
    +bool m_doAuthorCut = true
    +
    + +
    +
    +bool m_doOQCut = true
    +
    + +
    +
    +bool m_readOQFromDerivation = false
    +

    read object quality from derivation, rather than calculating it on the fly

    +
    + +
    +
    +std::string m_photonIdCut = "None"
    +

    Name of ID variable to cut

    +
    + +
    +
    +std::string m_MinIsoWPCut = ""
    +

    reject objects which do not pass this isolation cut - default = “” (no cut)

    +
    + +
    +
    +std::string m_IsoWPList = "FixedCutTightCaloOnly,FixedCutTight,FixedCutLoose"
    +

    decorate objects with ‘isIsolated_*’ flag for each WP in this input list - default = all current ASG WPs

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTauCalibrator.html b/api/classTauCalibrator.html new file mode 100644 index 0000000000..f9c398b24e --- /dev/null +++ b/api/classTauCalibrator.html @@ -0,0 +1,364 @@ + + + + + + + + + + + Class TauCalibrator — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauCalibrator

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauCalibrator : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TauCalibrator()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_outContainerName = ""
    +
    + +
    +
    +std::string m_RecommendationTag = ""
    +
    + +
    +
    +bool m_applyMVATESQualityCheck = false
    +
    + +
    +
    +std::string m_generator = ""
    +
    + +
    +
    +std::string m_campaign = ""
    +
    + +
    +
    +bool m_setAFII = false
    +
    + +
    +
    +bool m_setAF3 = false
    +
    + +
    +
    +bool m_skipTruthMatchCheck = false
    +
    + +
    +
    +bool m_sort = true
    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +

    this is the name of the vector of names of the systematically varied containers produced by the upstream algo (e.g., the SC containers with calibration systematics)

    +
    + +
    +
    +std::string m_outputAlgoSystNames = "TauCalibrator_Syst"
    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTauEfficiencyCorrector.html b/api/classTauEfficiencyCorrector.html new file mode 100644 index 0000000000..25af4fae7d --- /dev/null +++ b/api/classTauEfficiencyCorrector.html @@ -0,0 +1,365 @@ + + + + + + + + + + + Class TauEfficiencyCorrector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauEfficiencyCorrector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauEfficiencyCorrector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TauEfficiencyCorrector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual EL::StatusCode executeSF(const xAOD::EventInfo *eventInfo, const xAOD::TauJetContainer *inputTaus, bool nominal, bool writeSystNames)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_RecommendationTag = ""
    +
    + +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_WorkingPointReco = ""
    +
    + +
    +
    +std::string m_WorkingPointEleOLRHadTau = ""
    +
    + +
    +
    +std::string m_WorkingPointTauEleID = ""
    +
    + +
    +
    +std::string m_WorkingPointTauJetID = ""
    +
    + +
    +
    +std::string m_TriggerName = ""
    +
    + +
    +
    +std::string m_inputSystNamesTaus = ""
    +

    The name of the vector containing the names of the systematically-varied taus-related containers from the upstream algorithm, which will be processed by this algorithm.

    +

    Only tau systematics or any other that create shallow copies of tau containers should be passed to this tool. It is advised to run this algorithm before running algorithms combining multiple calibration systematics (e.g. overlap removal).

    +
    + +
    +
    +bool m_writeSystToMetadata = false
    +

    Write systematics names to metadata.

    +
    + +
    +
    +float m_systVal = 0.0
    +
    + +
    +
    +std::string m_systName = ""
    +
    + +
    +
    +std::string m_outputSystNames = "TauEfficiencyCorrector_Syst"
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTauJetMatching.html b/api/classTauJetMatching.html new file mode 100644 index 0000000000..143e5afcff --- /dev/null +++ b/api/classTauJetMatching.html @@ -0,0 +1,352 @@ + + + + + + + + + + + Class TauJetMatching — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauJetMatching

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauJetMatching : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TauJetMatching()
    +
    + +
    +
    +~TauJetMatching()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +bool executeDecoration(std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet*>>, const xAOD::TauJetContainer *tauCont)
    +
    + +
    +
    +float getDR(float eta1, float eta2, float phi1, float phi2)
    +
    + +
    +
    +std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet*>> findBestMatchDR(const xAOD::JetContainer *jetCont, const xAOD::TauJetContainer *tauCont, float best_DR)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_outContainerName
    +
    + +
    +
    +std::string m_outAuxContainerName
    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +
    + +
    +
    +std::string m_outputAlgoSystNames = "TauJetMatching_Syst"
    +
    + +
    +
    +std::string m_inJetContainerName = ""
    +
    + +
    +
    +float m_DeltaR = 0.2
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTauSelector.html b/api/classTauSelector.html new file mode 100644 index 0000000000..963f9cee97 --- /dev/null +++ b/api/classTauSelector.html @@ -0,0 +1,412 @@ + + + + + + + + + + + Class TauSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TauSelector()
    +
    + +
    +
    +~TauSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +bool executeSelection(const xAOD::TauJetContainer *inTaus, float mcEvtWeight, bool countPass, ConstDataVector<xAOD::TauJetContainer> *selectedTaus)
    +
    + +
    +
    +virtual int passCuts(const xAOD::TauJet *tau)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_outContainerName
    +
    + +
    +
    +std::string m_outAuxContainerName
    +
    + +
    +
    +std::string m_inputAlgoSystNames = ""
    +
    + +
    +
    +std::string m_outputAlgoSystNames = "TauSelector_Syst"
    +
    + +
    +
    +bool m_decorateWithTracks = false
    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +
    + +
    +
    +std::string m_decorationName = "passSel"
    +
    + +
    +
    +bool m_createSelectedContainer = false
    +
    + +
    +
    +int m_nToProcess = -1
    +
    + +
    +
    +int m_pass_min = -1
    +
    + +
    +
    +int m_pass_max = -1
    +
    + +
    +
    +std::string m_ConfigPath = "xAODAnaHelpers/TauConf/00-01-19/Selection/recommended_selection_mc15.conf"
    +
    + +
    +
    +float m_minPtDAOD = 15e3
    +
    + +
    +
    +std::string m_JetIDWP = ""
    +
    + +
    +
    +std::string m_EleRNNWP = ""
    +
    + +
    +
    +bool m_EleID = true
    +
    + +
    +
    +std::string m_singleTauTrigChains = ""
    +
    + +
    +
    +std::string m_diTauTrigChains = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTrackHistsAlgo.html b/api/classTrackHistsAlgo.html new file mode 100644 index 0000000000..8c4fa1418c --- /dev/null +++ b/api/classTrackHistsAlgo.html @@ -0,0 +1,307 @@ + + + + + + + + + + + Class TrackHistsAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrackHistsAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrackHistsAlgo : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TrackHistsAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +
    + +
    +
    +std::string m_detailStr = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTrackSelector.html b/api/classTrackSelector.html new file mode 100644 index 0000000000..d4cfaf05ad --- /dev/null +++ b/api/classTrackSelector.html @@ -0,0 +1,603 @@ + + + + + + + + + + + Class TrackSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrackSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrackSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TrackSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +EL::StatusCode executeTrackCollection(float mcEvtWeight)
    +
    + +
    +
    +EL::StatusCode executeTracksInJets()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual int PassCuts(const xAOD::TrackParticle *jet, const xAOD::Vertex *pvx)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    input container name

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    +std::string m_inJetContainerName = ""
    +

    input jet container name

    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    decorate selected objects? defaul passSel

    +
    + +
    +
    +bool m_createSelectedContainer = false
    +

    fill using SG::VIEW_ELEMENTS to be light weight

    +
    + +
    +
    +int m_nToProcess = -1
    +

    look at n objects

    +
    + +
    +
    +int m_pass_min = -1
    +

    minimum number of objects passing cuts

    +
    + +
    +
    +int m_pass_max = -1
    +

    maximum number of objects passing cuts

    +
    + +
    +
    +std::string m_cutLevelString = ""
    +

    available: Loose LoosePrimary TightPrimary LooseMuon LooseElectron MinBias HILoose HITight

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    require pT < pt_max

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    require pT > pt_max

    +
    + +
    +
    +float m_p_min = 1e8
    +

    require |p| > p_min

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    require |eta| < eta_max

    +
    + +
    +
    +float m_eta_min = 1e8
    +

    require |eta| > eta_min

    +
    + +
    +
    +float m_etaSigned_min = 1e8
    +

    require eta > eta_min

    +
    + +
    +
    +float m_etaSigned_max = 1e8
    +

    require eta < eta_max

    +
    + +
    +
    +float m_d0_max = 1e8
    +

    require |d0| < d0_max

    +
    + +
    +
    +float m_z0_max = 1e8
    +

    require |z0| < z0_max

    +
    + +
    +
    +float m_sigmad0_max = 1e8
    +

    maximum error on d0

    +
    + +
    +
    +float m_d0oversigmad0_max = 1e8
    +

    maximum significance of |d0|

    +
    + +
    +
    +float m_z0sinT_max = 1e8
    +

    require |z0xsin(theta)| < z0sintheta_max

    +
    + +
    +
    +float m_sigmaz0_max = 1e8
    +

    maximum error on z0

    +
    + +
    +
    +float m_sigmaz0sintheta_max = 1e8
    +

    maximum error on z0*sin(theta)

    +
    + +
    +
    +float m_z0oversigmaz0_max = 1e8
    +

    max |z0| significance

    +
    + +
    +
    +float m_z0sinthetaoversigmaz0sintheta_max = 1e8
    +

    max |z0sin(theta)| significance

    +
    + +
    +
    +int m_nPixelHits_min = 1e8
    +

    minimum pixel hits (counting dead sensors)

    +
    + +
    +
    +int m_nPixelHitsPhysical_min = 1e8
    +

    minimum pixel hits (no dead sensors)

    +
    + +
    +
    +int m_nSctHits_min = 1e8
    +

    minimum SCT hits (counting dead sensors)

    +
    + +
    +
    +int m_nSctHitsPhysical_min = 1e8
    +

    minimum SCT hits (no dead sensors)

    +
    + +
    +
    +int m_nSi_min = 1e8
    +

    require nSi >= nSi_min (nSi = nPix + nSct)

    +
    + +
    +
    +int m_nSiPhysical_min = 1e8
    +

    require nSi >= nSi_min (nSi = nPix + nSct, no dead sensors)

    +
    + +
    +
    +int m_nPixHoles_max = 1e8
    +

    require nPixHoles <= nPixHoles_max

    +
    + +
    +
    +int m_nSctHoles_max = 1e8
    +

    require nSCTHoles <= nSCTHoles_max

    +
    + +
    +
    +int m_nSiHoles_max = 1e8
    +

    maximum silicon holes

    +
    + +
    +
    +int m_nInnermostPixel_min = 1e8
    +

    minimum nIBL (if expected)

    +
    + +
    +
    +int m_nNextToInnermostPixel_min = 1e8
    +

    minimum nBL (if expected)

    +
    + +
    +
    +int m_nBothInnermostLayersHits_min = 1e8
    +

    minimum nIBL + nBL (if every hit that is not expected, we require one less)

    +
    + +
    +
    +int m_nPixelSharedHits_max = 1e8
    +

    maximum pixel hits shared with other tracks

    +
    + +
    +
    +int m_nSctSharedHits_max = 1e8
    +

    maximum SCT hits shared with other tracks

    +
    + +
    +
    +int m_nSiSharedHits_max = 1e8
    +

    maximum silicon hits shared with other tracks

    +
    + +
    +
    +int m_nSiSharedModules_max = 1e8
    +

    maximum (pixel + SCT/2) shared hits

    +
    + +
    +
    +float m_chi2NdofCut_max = 1e8
    +

    require chi2/ndof < chi2NdofCut_max

    +
    + +
    +
    +float m_chi2Prob_max = 1e8
    +

    require TMath::Prob(chi2,ndof) < chi2ProbMax

    +
    + +
    +
    +float m_chi2Prob_min = 1e8
    +

    require TMath::Prob(chi2,ndof) > chi2ProbMax

    +
    + +
    +
    +int m_nBL_min = 1e8
    +

    require nIBL >= nBL_min (not recommended; for downward compatibility)

    +
    + +
    +
    +std::string m_passAuxDecorKeys = ""
    +
    + +
    +
    +std::string m_failAuxDecorKeys = ""
    +
    + +
    +
    +bool m_doTracksInJets = false
    +

    do track selection on track within jets

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTreeAlgo.html b/api/classTreeAlgo.html new file mode 100644 index 0000000000..396b66c1f4 --- /dev/null +++ b/api/classTreeAlgo.html @@ -0,0 +1,692 @@ + + + + + + + + + + + Class TreeAlgo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TreeAlgo

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TreeAlgo : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TreeAlgo()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual HelpTreeBase *createTree(xAOD::TEvent *event, TTree *tree, TFile *file, const float units, bool debug, xAOD::TStore *store)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_outHistDir = false
    +
    + +
    +
    +std::string m_treeStreamName = "tree"
    +
    + +
    +
    +std::string m_evtDetailStr = ""
    +
    + +
    +
    +std::string m_trigDetailStr = ""
    +
    + +
    +
    +std::string m_muDetailStr = ""
    +
    + +
    +
    +std::string m_elDetailStr = ""
    +
    + +
    +
    +std::string m_jetDetailStr = ""
    +
    + +
    +
    +std::string m_trigJetDetailStr = ""
    +
    + +
    +
    +std::string m_truthJetDetailStr = ""
    +
    + +
    +
    +std::string m_fatJetDetailStr = ""
    +
    + +
    +
    +std::string m_truthFatJetDetailStr = ""
    +
    + +
    +
    +std::string m_tauDetailStr = ""
    +
    + +
    +
    +std::string m_METDetailStr = ""
    +
    + +
    +
    +std::string m_METReferenceDetailStr = ""
    +
    + +
    +
    +std::string m_photonDetailStr = ""
    +
    + +
    +
    +std::string m_clusterDetailStr = ""
    +
    + +
    +
    +std::string m_truthParticlesDetailStr = ""
    +
    + +
    +
    +std::string m_trackParticlesDetailStr = ""
    +
    + +
    +
    +std::string m_vertexDetailStr = ""
    +
    + +
    +
    +std::string m_evtContainerName = ""
    +
    + +
    +
    +std::string m_muContainerName = ""
    +
    + +
    +
    +std::string m_elContainerName = ""
    +
    + +
    +
    +std::string m_jetContainerName = ""
    +
    + +
    +
    +std::string m_jetBranchName = "jet"
    +
    + +
    +
    +std::string m_truthJetContainerName = ""
    +
    + +
    +
    +std::string m_truthJetBranchName = "truthJet"
    +
    + +
    +
    +std::string m_trigJetContainerName = ""
    +
    + +
    +
    +std::string m_trigJetBranchName = "trigJet"
    +
    + +
    +
    +std::string m_fatJetContainerName = ""
    +
    + +
    +
    +std::string m_fatJetBranchName = ""
    +
    + +
    +
    +std::string m_truthFatJetContainerName = ""
    +
    + +
    +
    +std::string m_truthFatJetBranchName = "truth_fatjet"
    +
    + +
    +
    +std::string m_tauContainerName = ""
    +
    + +
    +
    +std::string m_METContainerName = ""
    +
    + +
    +
    +std::string m_METReferenceContainerName = ""
    +
    + +
    +
    +std::string m_photonContainerName = ""
    +
    + +
    +
    +std::string m_clusterContainerName = ""
    +
    + +
    +
    +std::string m_clusterBranchName = "CaloCalTopoClusters"
    +
    + +
    +
    +std::string m_truthParticlesContainerName = ""
    +
    + +
    +
    +std::string m_truthParticlesBranchName = "xAH_truth"
    +
    + +
    +
    +std::string m_trackParticlesContainerName = ""
    +
    + +
    +
    +std::string m_l1JetContainerName = ""
    +
    + +
    +
    +std::string m_l1JetBranchName = "L1Jet"
    +
    + +
    +
    +std::string m_vertexBranchName = "vertex"
    +
    + +
    +
    +bool m_sortL1Jets = false
    +
    + +
    +
    +bool m_retrievePV = true
    +
    + +
    +
    +std::string m_muSystsVec = ""
    +
    + +
    +
    +std::string m_elSystsVec = ""
    +
    + +
    +
    +std::string m_tauSystsVec = ""
    +
    + +
    +
    +std::string m_jetSystsVec = ""
    +
    + +
    +
    +std::string m_photonSystsVec = ""
    +
    + +
    +
    +std::string m_fatJetSystsVec = ""
    +
    + +
    +
    +std::string m_metSystsVec = ""
    +
    + +
    +
    +float m_units = 1e3
    +

    unit conversion from MeV, default is GeV

    +
    + +
    +
    +int m_autoFlush = 0
    +

    Set to a large negative number, such as -1000000, to ensure that the tree flushes memory after a reasonable amount of time. Otherwise, jobs with a lot of systematics use too much memory.

    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +std::vector<std::string> m_jetDetails
    +
    + +
    +
    +std::vector<std::string> m_trigJetDetails
    +
    + +
    +
    +std::vector<std::string> m_fatJetDetails
    +
    + +
    +
    +std::vector<std::string> m_jetContainers
    +
    + +
    +
    +std::vector<std::string> m_truthJetContainers
    +
    + +
    +
    +std::vector<std::string> m_trigJetContainers
    +
    + +
    +
    +std::vector<std::string> m_fatJetContainers
    +
    + +
    +
    +std::vector<std::string> m_l1JetContainers
    +
    + +
    +
    +std::vector<std::string> m_vertexContainers
    +
    + +
    +
    +std::vector<std::string> m_truthParticlesContainers
    +
    + +
    +
    +std::vector<std::string> m_jetBranches
    +
    + +
    +
    +std::vector<std::string> m_truthJetBranches
    +
    + +
    +
    +std::vector<std::string> m_trigJetBranches
    +
    + +
    +
    +std::vector<std::string> m_fatJetBranches
    +
    + +
    +
    +std::vector<std::string> m_l1JetBranches
    +
    + +
    +
    +std::vector<std::string> m_vertexBranches
    +
    + +
    +
    +std::vector<std::string> m_truthParticlesBranches
    +
    + +
    +
    +std::vector<std::string> m_clusterDetails
    +
    + +
    +
    +std::vector<std::string> m_clusterContainers
    +
    + +
    +
    +std::vector<std::string> m_clusterBranches
    +
    + +
    +
    +std::vector<std::string> m_vertexDetails
    +
    + +
    +
    +std::map<std::string, HelpTreeBase*> m_trees
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTrigMatcher.html b/api/classTrigMatcher.html new file mode 100644 index 0000000000..eb48d4616c --- /dev/null +++ b/api/classTrigMatcher.html @@ -0,0 +1,329 @@ + + + + + + + + + + + Class TrigMatcher — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrigMatcher

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrigMatcher : public xAH::Algorithm
    +

    A wrapper of the trigger matching tool in the ASG TriggerMatchingTool package.

    +

    The idea behind this algorithm is to decorate inputs from upstream xAODAnaHelpers algorithms based on user’s configuration, handling also the case where systematics on the input physics objects are taken into account. The list of trigger chains that contain a trigger object matched to a reconstructed object are saved in the trigMatched decoration as :cpp:any:`std::vector<std::string>.

    +

    Here follows a usage example for photon matching.

    +

    Assuming the typical xAODAnaHelpers analysis configuration through xAH_config, the analysis workflow could look like the following:

    +
    c = xAH_config()
    +# ...
    +c.algorithm("PhotonSelector", PhotonSelectorDict)
    +# ...
    +c.algorithm("TrigMatcher", TrigMatcherDict)
    +# ...
    +
    +
    +

    where each algorithm has the following I/O systematics configuration (via python dictionaries):

    +
     PhotonSelectorDict = {
    +     # ...
    +     "m_inputAlgo" : "PhotonCalibrator_Syst",
    + "m_outContainerName" : "PhotonSelector_Out",
    +     "m_outputAlgo" : "PhotonSelector_Syst",
    +     # ...
    +}
    +
    +TrigMatcherDict = {
    +     # ...
    + "m_inContainerName" : "PhotonSelector_Out",
    + "m_systNames" : "PhotonSelector_Syst",  # leave empty when not considering systematics
    + "m_trigChains" : "HLT_g120_loose,HLT_g140_loose"
    +     # ...
    +}
    +
    +
    +

    In this way the trigger matching algorithm will be able to correctly work out all the combinatorics, assigning decoration to input objects in each input systematics combination to be subsequently used downstream according to the user’s needs.

    +

    +
    +

    Public Functions

    +
    +
    +TrigMatcher()
    +

    /* contains all the HLT trigger chains tokens extracted from m_trigChains */

    +
    + +
    +
    +~TrigMatcher()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +EL::StatusCode executeMatching(const xAOD::IParticleContainer *inParticles)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_inContainerName = ""
    +

    Input container name.

    +
    + +
    +
    +std::string m_systNames = ""
    +

    Input systematics list container name.

    +
    + +
    +
    +std::string m_trigChains = ""
    +

    Comma-separated list of trigger chains.

    +

    A comma-separated string w/ all the HLT trigger chains for which you want to perform the matching. If left empty (as it is by default), no trigger matching will be attempted at all

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classTruthSelector.html b/api/classTruthSelector.html new file mode 100644 index 0000000000..6ee2811552 --- /dev/null +++ b/api/classTruthSelector.html @@ -0,0 +1,450 @@ + + + + + + + + + + + Class TruthSelector — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TruthSelector

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TruthSelector : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +TruthSelector()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +virtual bool executeSelection(const xAOD::TruthParticleContainer *inTruthParts, float mcEvtWeight, bool count, std::string outContainerName)
    +
    + +
    +
    +virtual int PassCuts(const xAOD::TruthParticle *truthPart)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_useCutFlow = true
    +
    + +
    +
    +std::string m_inContainerName = ""
    +

    input container name

    +
    + +
    +
    +std::string m_outContainerName = ""
    +

    output container name

    +
    + +
    +
    +std::string m_decor = "passSel"
    +

    The decoration key written to passing objects.

    +
    + +
    +
    +bool m_decorateSelectedObjects = true
    +

    decorate selected objects? defaul passSel

    +
    + +
    +
    +bool m_createSelectedContainer = false
    +

    fill using SG::VIEW_ELEMENTS to be light weight

    +
    + +
    +
    +int m_nToProcess = -1
    +

    look at n objects

    +
    + +
    +
    +int m_pass_min = -1
    +

    minimum number of objects passing cuts

    +
    + +
    +
    +int m_pass_max = -1
    +

    maximum number of objects passing cuts

    +
    + +
    +
    +float m_pT_max = 1e8
    +

    require pT < pt_max

    +
    + +
    +
    +float m_pT_min = 1e8
    +

    require pT > pt_min

    +
    + +
    +
    +float m_eta_max = 1e8
    +

    require eta < eta_max

    +
    + +
    +
    +float m_eta_min = 1e8
    +

    require eta > eta_max

    +
    + +
    +
    +float m_mass_max = 1e8
    +

    require mass < mass_max

    +
    + +
    +
    +float m_mass_min = 1e8
    +

    require mass > mass_max

    +
    + +
    +
    +float m_rapidity_max = 1e8
    +

    require rapidity < rapidity_max

    +
    + +
    +
    +float m_rapidity_min = 1e8
    +

    require rapidity > rapidity_min

    +
    + +
    +
    +unsigned int m_type = 1000
    +

    require classifierParticleType == type (defined by TruthClassifier: https://gitlab.cern.ch/atlas/athena/blob/21.2/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifierDefs.h)

    +
    + +
    +
    +std::string m_typeOptions
    +

    require classifierParticleType to match any of the “|” separated type values (e.g. “1|2|3|4”)

    +
    + +
    +
    +unsigned int m_origin = 1000
    +

    require classifierParticleOrigin == origin (defined by TruthClassifier: https://gitlab.cern.ch/atlas/athena/blob/21.2/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifierDefs.h)

    +
    + +
    +
    +std::string m_originOptions
    +

    require classifierParticleOrigin to match any of the “|” separated origin values (e.g. “10|12|13”)

    +
    + +
    +
    +float m_pT_dressed_min = 1e8
    +

    require pt_dressed > pt_dressed_min

    +
    + +
    +
    +float m_eta_dressed_min = 1e8
    +

    require eta_dressed > eta_dressed_min

    +
    + +
    +
    +float m_eta_dressed_max = 1e8
    +

    require eta_dressed > eta_dressed_max

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classWriter.html b/api/classWriter.html new file mode 100644 index 0000000000..302b16c692 --- /dev/null +++ b/api/classWriter.html @@ -0,0 +1,322 @@ + + + + + + + + + + + Class Writer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Writer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Writer : public xAH::Algorithm
    +
    +

    Public Functions

    +
    +
    +Writer()
    +
    + +
    +
    +virtual EL::StatusCode setupJob(EL::Job &job)
    +
    + +
    +
    +virtual EL::StatusCode fileExecute()
    +
    + +
    +
    +virtual EL::StatusCode histInitialize()
    +
    + +
    +
    +virtual EL::StatusCode changeInput(bool firstFile)
    +
    + +
    +
    +virtual EL::StatusCode initialize()
    +
    + +
    +
    +virtual EL::StatusCode execute()
    +
    + +
    +
    +virtual EL::StatusCode postExecute()
    +
    + +
    +
    +virtual EL::StatusCode finalize()
    +
    + +
    +
    +virtual EL::StatusCode histFinalize()
    +
    + +
    +
    +ClassDef (Writer, 1)
    +
    + +
    +
    +

    Public Members

    +
    +
    +TString m_outputLabel = ""
    +
    + +
    +
    +TString m_jetContainerNamesStr = ""
    +
    + +
    +
    +TString m_electronContainerNamesStr = ""
    +
    + +
    +
    +TString m_muonContainerNamesStr = ""
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/class_view_hierarchy.html b/api/class_view_hierarchy.html new file mode 100644 index 0000000000..af1e85e1cb --- /dev/null +++ b/api/class_view_hierarchy.html @@ -0,0 +1,214 @@ + + + + + + + + + + + Class Hierarchy — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Hierarchy

    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Algorithm.html b/api/classxAH_1_1Algorithm.html new file mode 100644 index 0000000000..3cb1fad29e --- /dev/null +++ b/api/classxAH_1_1Algorithm.html @@ -0,0 +1,686 @@ + + + + + + + + + + + Class Algorithm — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Algorithm

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    +
      +
    • public EL::Algorithm

    • +
    +
    +
    +

    Derived Types

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Algorithm : public EL::Algorithm
    +

    This is used by all algorithms within xAODAnaHelpers.

    +

    The main goal of this algorithm class is to standardize how everyone defines an algorithm that plugs into xAODAnaHelpers. A series of common utilities are provided such as m_className which defines the class name so we can manage a registry m_instanceRegistry to keep xAODAnaHelpers as flexible as possible to our users.

    +

    We expect the user to create a new algorithm, such as a selector for jets:

    +
    class JetSelector : public xAH::Algorithm
    +{
    +    // ...
    +};
    +
    +
    +

    The above example is taken from our implementation in JetSelector. Just remember that when you write your initializer, you will be expected to do something like:

    +
    // this is needed to distribute the algorithm to the workers
    +ClassImp(JetSelector)
    +
    +
    +JetSelector :: JetSelector () :
    +    Algorithm("JetSelector"),
    +    ...
    +{
    +    // ...
    +}
    +
    +
    +

    which this class will automatically register all instances of for you. Each instance can have a different algorithm name but will have the same m_className so we can track how many references have been made. This is useful for selectors to deal with cutflows, but can be useful for other algorithms that need to know how many times they’ve been instantiated in a single job.

    +

    +
    +

    Note

    +

    The expectation is that the user does not directly use this class but rather inherits from it.

    +
    +

    Subclassed by BJetEfficiencyCorrector, BasicEventSelection, ClusterHistsAlgo, DebugTool, ElectronCalibrator, ElectronEfficiencyCorrector, ElectronSelector, HLTJetGetter, IParticleHistsAlgo, IsoCloseByCorr, JetCalibrator, JetSelector, METConstructor, MessagePrinterAlgo, MetHistsAlgo, MinixAOD, MuonCalibrator, MuonEfficiencyCorrector, MuonInFatJetCorrector, MuonSelector, OverlapRemover, PhotonCalibrator, PhotonSelector, TauCalibrator, TauEfficiencyCorrector, TauJetMatching, TauSelector, TrackHistsAlgo, TrackSelector, TreeAlgo, TrigMatcher, TruthSelector, Writer

    +
    +

    Public Functions

    +
    +
    +Algorithm(std::string className = "Algorithm")
    +

    Initialization.

    +
    +
    Parameters
    +

    className – This is the name of the class that inherits from :cpp:namespace:~xAH::Algorithm

    +
    +
    +
    + +
    +
    +~Algorithm()
    +
    + +
    +
    +StatusCode algInitialize()
    +

    Run any initializations commmon to all xAH Algorithms (such as registerInstance). Call this inside histInitialize for best results.

    +
    + +
    +
    +StatusCode algFinalize()
    +

    Run any finalizations common to all xAH Algorithms (such as unregisterInstance). Call this inside histFinalize for best results.

    +
    + +
    +
    +StatusCode parseSystValVector()
    +

    Parse string of systematic sigma levels in m_systValVectorString into m_systValVector.

    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_name = "UnnamedAlgorithm"
    +

    All algorithms initialized should have a unique name, to differentiate them at the TObject level.

    +

    Note, GetName() returns a char* while this returns a std::string.

    +
    + +
    +
    +bool m_debug = false
    +

    m_debug is being deprecated

    +
    + +
    +
    +bool m_verbose = false
    +

    m_verbose is being deprecated

    +
    + +
    +
    +MSG::Level m_msgLevel = MSG::INFO
    +

    debug level

    +
    + +
    +
    +std::string m_cutFlowStreamName = "cutflow"
    +
    + +
    +
    +std::string m_systName = ""
    +

    If running systematics, the name of the systematic

    +
    + +
    +
    +float m_systVal = 0.0
    +

    If running systematics, the value to set the systematic to

    +

    +
    +

    Note

    +

    This will set the systematic to the value \(\pm x\).

    +
    +
    + +
    +
    +std::string m_systValVectorString = ""
    +

    If running systematics, you can run multiple points and store them in here. A comma separated list of working points should be given to m_systValVectorString, and then parsed by calling parseSystValVector.

    +
    + +
    +
    +std::vector<float> m_systValVector
    +
    + +
    +
    +std::string m_eventInfoContainerName = "EventInfo"
    +

    If the xAOD has a different EventInfo container name, set it here

    +
    + +
    +
    +std::string m_vertexContainerName = "PrimaryVertices"
    +

    If the xAOD has a different PrimaryVertex container name, set it here

    +
    + +
    +
    +int m_isMC = -1
    +

    This stores the isMC decision, and can also be used to override at the algorithm level to force analyzing MC or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use eventInfo object to determine if data or mc

    0

    Treat the input as data

    1

    Treat the input as MC

    +

    +
    + +
    +
    +int m_isFastSim = -1
    +

    This stores the isFastSim decision, and can also be used to override at the algorithm level to force analyzing FastSim or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use Metadata object to determine if FullSim or FastSim

    0

    Treat the input as FullSim

    1

    Treat the input as FastSim

    +

    +
    + +
    +
    +int m_isAF3 = -1
    +

    This stores the isAF3 decision, and can also be used to override at the algorithm level to force analyzing FastSim with AF3 or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use Metadata object to determine if AF3 FastSim or not

    0

    Treat the input as FullSim or AFII

    1

    Treat the input as FastSim with AF3

    +

    +
    + +
    +
    +bool m_useRun3navigation = false
    +

    Flag to use Run 3 trigger navigation (true), or Run 2 navigation (false)

    +
    + +
    +
    +std::string m_HLTSummary = "HLTNav_Summary_DAODSlimmed"
    +

    String storing the type of HLT navigation info available for Run 3 samples. For AODs or unslimmed DAODs: HLTNav_Summary_AODSlimmed

    +
    + +
    +
    +bool m_forceFastSim = false
    +

    Flags to force a specific data-type, even if it disagrees with your input

    +
    + +
    +
    +bool m_forceFullSim = false
    +
    + +
    +
    +bool m_forceData = false
    +
    + +
    +
    +bool m_setAFII = false
    +

    Backwards compatibility, same as m_forceFastSim

    +
    + +
    +
    +bool m_setAF3 = false
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +bool isMC()
    +

    \verbatim embed:rst:leading-asterisk
    +    Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isMC` can be used
    +
    +
    + to fix the return value. Otherwise the EventInfo object is queried.

    +

    An exception is thrown if the type cannot be determined.

        ============ =======
    +    Return Value Meaning
    +    ============ =======
    +    0            Data
    +    1            MC
    +    ============ =======
    +
    +
    +

    +
    + +
    +
    +bool isFastSim()
    +

    \verbatim embed:rst:leading-asterisk
    +    Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isFastSim` can be used
    +
    +
    + to fix the return value. Otherwise the metadata is queried.

    +

    An exception is thrown if the type cannot be determined.

        ============ =======
    +    Return Value Meaning
    +    ============ =======
    +    0            FullSim (or Data)
    +    1            FastSim
    +    ============ =======
    +
    +
    +

    +
    + +
    +
    +bool isAF3()
    +

    If the name includes ATLFASTII or ATLFAST3 then set to AFII or AF3, if deemed fullSim then FS else leave as empty string and complain

    +
    + +
    +
    +bool isPHYS()
    +

    Determines if using DAOD_PHYS or not.

    +
    + +
    +
    +void registerInstance()
    +

    Register the given instance under the moniker xAH::Algorithm::m_className

    +

    This will increase the reference count by 1.

    +

    +
    + +
    +
    +int numInstances()
    +

    Return number of instances registered under the moniker xAH::Algorithm::m_className

    +

    This will return the reference count.

    +

    +
    +

    Warning

    +

    If for some reason the instance wasn’t registered, we spit out a warning.

    +
    +
    + +
    +
    +void unregisterInstance()
    +

    Unregister the given instance under the moniker xAH::Algorithm::m_className

    +

    This will decrease the reference count by 1.

    +

    +
    +

    Warning

    +

    If for some reason the instance wasn’t registered, we spit out a warning.

    +
    +
    + +
    +
    +template<typename T>
    inline StatusCode checkToolStore(const std::string &tool_name)
    +

    \verbatim embed:rst:leading-asterisk
    +    Check whether the input CP tool already exists with *this* name in the asg::ToolStore
    +
    +
    + Depending on the outcome, the content of the map :cpp:member:xAH::Algorithm::m_toolAlreadyUsed wll be set accordingly.
    
    +
    +
    +

    +
    + +
    +
    +inline bool isToolAlreadyUsed(const std::string &tool_name)
    +

    Check whether the input CP tool has been already used by any xAH::Algorithm in the current job by scanning xAH::Algorithm::m_toolAlreadyUsed.

    +
    + +
    +
    +template<typename T>
    inline void setToolName(__attribute__((unused)) asg::AnaToolHandle<T> &handle, __attribute__((unused)) const std::string &name = "") const
    +

    +
    +

    Sets the name of a tool. If no name is needed, the tool will use the name of the algorithm plus a unique identifier (xAH::Algorithm::getAddress()) appended to ensure the tool is unique and effectively private.

    +

    The tool will not be guaranteed unique if two tools of the same type are created without a name passed in. But this is, at this point, up to the user and a more complex scenario than what this function tries to simplify on its own.

    +

    +
    + +
    +
    +inline std::string getAddress() const
    +

    Return a std::string representation of this

    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +std::string m_className = "Algorithm"
    +

    The moniker by which all instances are tracked in xAH::Algorithm::m_instanceRegistry

    +
    + +
    +
    +xAOD::TEvent *m_event = nullptr
    +

    The TEvent object

    +
    + +
    +
    +xAOD::TStore *m_store = nullptr
    +

    The TStore object

    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Cluster.html b/api/classxAH_1_1Cluster.html new file mode 100644 index 0000000000..add6d24863 --- /dev/null +++ b/api/classxAH_1_1Cluster.html @@ -0,0 +1,241 @@ + + + + + + + + + + + Class Cluster — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Cluster

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Cluster : public xAH::Particle
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1ClusterContainer.html b/api/classxAH_1_1ClusterContainer.html new file mode 100644 index 0000000000..c692633103 --- /dev/null +++ b/api/classxAH_1_1ClusterContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class ClusterContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ClusterContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ClusterContainer : public xAH::ParticleContainer<Cluster, HelperClasses::ClusterInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +ClusterContainer(const std::string &name = "clus", const std::string &detailStr = "", float units = 1e3, bool mc = false)
    +
    + +
    +
    +virtual ~ClusterContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillCluster(const xAOD::CaloCluster *cluster)
    +
    + +
    +
    +virtual void FillCluster(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, Cluster &cluster)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Electron.html b/api/classxAH_1_1Electron.html new file mode 100644 index 0000000000..2fc4ce857b --- /dev/null +++ b/api/classxAH_1_1Electron.html @@ -0,0 +1,569 @@ + + + + + + + + + + + Class Electron — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Electron

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Electron : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +float caloCluster_eta
    +
    + +
    +
    +float charge
    +
    + +
    +
    +int isTrigMatched
    +
    + +
    +
    +std::vector<int> isTrigMatchedToChain
    +
    + +
    +
    +std::vector<std::string> listTrigChains
    +
    + +
    +
    +std::map<std::string, int> isIsolated
    +
    + +
    +
    +float etcone20
    +
    + +
    +
    +float ptcone20
    +
    + +
    +
    +float ptcone30
    +
    + +
    +
    +float ptcone40
    +
    + +
    +
    +float ptvarcone20
    +
    + +
    +
    +float ptvarcone30
    +
    + +
    +
    +float ptvarcone40
    +
    + +
    +
    +float topoetcone20
    +
    + +
    +
    +float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500
    +
    + +
    +
    +float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
    +
    + +
    +
    +float topoetcone30
    +
    + +
    +
    +float topoetcone40
    +
    + +
    +
    +float neflowisol20
    +
    + +
    +
    +float topoetcone20_CloseByCorr
    +
    + +
    +
    +float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr
    +
    + +
    +
    +std::map<std::string, int> PID
    +
    + +
    +
    +std::vector<float> RecoEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> PIDEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> IsoEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TrigEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TrigMCEff
    +
    + +
    +
    +int author
    +
    + +
    +
    +int OQ
    +
    + +
    +
    +float trkd0
    +
    + +
    +
    +float trkd0sig
    +
    + +
    +
    +float trkz0
    +
    + +
    +
    +float trkz0sintheta
    +
    + +
    +
    +float trkphi0
    +
    + +
    +
    +float trktheta
    +
    + +
    +
    +float trkcharge
    +
    + +
    +
    +float trkqOverP
    +
    + +
    +
    +int trknSiHits
    +
    + +
    +
    +int trknPixHits
    +
    + +
    +
    +int trknPixHoles
    +
    + +
    +
    +int trknSCTHits
    +
    + +
    +
    +int trknSCTHoles
    +
    + +
    +
    +int trknTRTHits
    +
    + +
    +
    +int trknTRTHoles
    +
    + +
    +
    +int trknBLayerHits
    +
    + +
    +
    +int trknInnermostPixLayHits
    +
    + +
    +
    +float trkPixdEdX
    +
    + +
    +
    +float PromptLeptonInput_DL1mu
    +
    + +
    +
    +float PromptLeptonInput_DRlj
    +
    + +
    +
    +float PromptLeptonInput_LepJetPtFrac
    +
    + +
    +
    +float PromptLeptonInput_PtFrac
    +
    + +
    +
    +float PromptLeptonInput_PtRel
    +
    + +
    +
    +int PromptLeptonInput_TrackJetNTrack
    +
    + +
    +
    +float PromptLeptonInput_ip2
    +
    + +
    +
    +float PromptLeptonInput_ip3
    +
    + +
    +
    +float PromptLeptonInput_rnnip
    +
    + +
    +
    +int PromptLeptonInput_sv1_jf_ntrkv
    +
    + +
    +
    +float PromptLeptonIso
    +
    + +
    +
    +float PromptLeptonVeto
    +
    + +
    +
    +char passSel
    +
    + +
    +
    +char passOR
    +
    + +
    +
    +char isLRT
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1ElectronContainer.html b/api/classxAH_1_1ElectronContainer.html new file mode 100644 index 0000000000..089f6e8939 --- /dev/null +++ b/api/classxAH_1_1ElectronContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class ElectronContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class ElectronContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class ElectronContainer : public xAH::ParticleContainer<Electron, HelperClasses::ElectronInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +ElectronContainer(const std::string &name = "el", const std::string &detailStr = "", float units = 1e3, bool mc = false, bool storeSystSFs = true)
    +
    + +
    +
    +virtual ~ElectronContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillElectron(const xAOD::Electron *elec, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +virtual void FillElectron(const xAOD::IParticle *particle, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, Electron &elec)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1EventInfo.html b/api/classxAH_1_1EventInfo.html new file mode 100644 index 0000000000..50be83c7f0 --- /dev/null +++ b/api/classxAH_1_1EventInfo.html @@ -0,0 +1,553 @@ + + + + + + + + + + + Class EventInfo — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class EventInfo

    + +
    +

    Class Documentation

    +
    +
    +class EventInfo
    +
    +

    Public Functions

    +
    +
    +EventInfo(const std::string &detailStr = "", float units = 1e3, bool mc = false, bool storeSyst = true)
    +
    + +
    +
    +~EventInfo()
    +
    + +
    +
    +void setTree(TTree *tree)
    +
    + +
    +
    +void setBranches(TTree *tree)
    +
    + +
    +
    +void clear()
    +
    + +
    +
    +void FillEvent(const xAOD::EventInfo *eventInfo, xAOD::TEvent *event = nullptr, const xAOD::VertexContainer *vertices = nullptr)
    +
    + +
    +
    +template<typename T_BR>
    void connectBranch(TTree *tree, std::string name, T_BR *variable)
    +
    + +
    +
    +

    Public Members

    +
    +
    +HelperClasses::EventInfoSwitch m_infoSwitch
    +
    + +
    +
    +bool m_mc
    +
    + +
    +
    +bool m_debug
    +
    + +
    +
    +bool m_storeSyst
    +
    + +
    +
    +float m_units
    +
    + +
    +
    +int m_runNumber
    +
    + +
    +
    +Long64_t m_eventNumber
    +
    + +
    +
    +int m_lumiBlock
    +
    + +
    +
    +uint32_t m_coreFlags
    +
    + +
    +
    +uint32_t m_timeStamp
    +
    + +
    +
    +uint32_t m_timeStampNSOffset
    +
    + +
    +
    +bool m_TileError
    +
    + +
    +
    +bool m_LArError
    +
    + +
    +
    +bool m_SCTError
    +
    + +
    +
    +uint32_t m_TileFlags
    +
    + +
    +
    +uint32_t m_LArFlags
    +
    + +
    +
    +uint32_t m_SCTFlags
    +
    + +
    +
    +bool m_eventClean_LooseBad
    +
    + +
    +
    +bool m_eventClean_TightBad
    +
    + +
    +
    +int m_mcEventNumber
    +
    + +
    +
    +int m_mcChannelNumber
    +
    + +
    +
    +float m_mcEventWeight
    +
    + +
    +
    +std::vector<float> m_mcEventWeights
    +
    + +
    +
    +float m_weight_pileup
    +
    + +
    +
    +float m_weight_pileup_up
    +
    + +
    +
    +float m_weight_pileup_down
    +
    + +
    +
    +float m_correctedAvgMu
    +
    + +
    +
    +float m_correctedAndScaledAvgMu
    +
    + +
    +
    +float m_correctedMu
    +
    + +
    +
    +float m_correctedAndScaledMu
    +
    + +
    +
    +int m_rand_run_nr
    +
    + +
    +
    +int m_rand_lumiblock_nr
    +
    + +
    +
    +int m_bcid
    +
    + +
    +
    +int m_DistEmptyBCID
    +
    + +
    +
    +int m_DistLastUnpairedBCID
    +
    + +
    +
    +int m_DistNextUnpairedBCID
    +
    + +
    +
    +int m_npv
    +
    + +
    +
    +float m_actualMu
    +
    + +
    +
    +float m_averageMu
    +
    + +
    +
    +double m_rhoEM
    +
    + +
    +
    +double m_rhoEMPFLOW
    +
    + +
    +
    +double m_rhoLC
    +
    + +
    +
    +float m_beamspotweight
    +
    + +
    +
    +int m_pdgId1
    +
    + +
    +
    +int m_pdgId2
    +
    + +
    +
    +int m_pdfId1
    +
    + +
    +
    +int m_pdfId2
    +
    + +
    +
    +float m_x1
    +
    + +
    +
    +float m_x2
    +
    + +
    +
    +float m_q
    +
    + +
    +
    +float m_xf1
    +
    + +
    +
    +float m_xf2
    +
    + +
    +
    +std::vector<float> m_caloCluster_pt
    +
    + +
    +
    +std::vector<float> m_caloCluster_eta
    +
    + +
    +
    +std::vector<float> m_caloCluster_phi
    +
    + +
    +
    +std::vector<float> m_caloCluster_e
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1FatJet.html b/api/classxAH_1_1FatJet.html new file mode 100644 index 0000000000..3f5d0938ef --- /dev/null +++ b/api/classxAH_1_1FatJet.html @@ -0,0 +1,514 @@ + + + + + + + + + + + Class FatJet — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class FatJet

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class FatJet : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +float JetConstitScaleMomentum_eta
    +
    + +
    +
    +float JetConstitScaleMomentum_phi
    +
    + +
    +
    +float JetConstitScaleMomentum_m
    +
    + +
    +
    +float JetConstitScaleMomentum_pt
    +
    + +
    +
    +float JetEMScaleMomentum_eta
    +
    + +
    +
    +float JetEMScaleMomentum_phi
    +
    + +
    +
    +float JetEMScaleMomentum_m
    +
    + +
    +
    +float JetEMScaleMomentum_pt
    +
    + +
    +
    +float GhostArea
    +
    + +
    +
    +float ActiveArea
    +
    + +
    +
    +float VoronoiArea
    +
    + +
    +
    +float ActiveArea4vec_pt
    +
    + +
    +
    +float ActiveArea4vec_eta
    +
    + +
    +
    +float ActiveArea4vec_phi
    +
    + +
    +
    +float ActiveArea4vec_m
    +
    + +
    +
    +float Split12
    +
    + +
    +
    +float Split23
    +
    + +
    +
    +float Split34
    +
    + +
    +
    +float tau1_wta
    +
    + +
    +
    +float tau2_wta
    +
    + +
    +
    +float tau3_wta
    +
    + +
    +
    +float tau21_wta
    +
    + +
    +
    +float tau32_wta
    +
    + +
    +
    +float ECF1
    +
    + +
    +
    +float ECF2
    +
    + +
    +
    +float ECF3
    +
    + +
    +
    +float C2
    +
    + +
    +
    +float D2
    +
    + +
    +
    +float NTrimSubjets
    +
    + +
    +
    +int NClusters
    +
    + +
    +
    +int nTracks
    +
    + +
    +
    +int ungrtrk500
    +
    + +
    +
    +float EMFrac
    +
    + +
    +
    +int nChargedParticles
    +
    + +
    +
    +int numConstituents
    +
    + +
    +
    +std::vector<float> constituentWeights
    +
    + +
    +
    +std::vector<float> constituent_pt
    +
    + +
    +
    +std::vector<float> constituent_eta
    +
    + +
    +
    +std::vector<float> constituent_phi
    +
    + +
    +
    +std::vector<float> constituent_e
    +
    + +
    +
    +TLorentzVector truth_p4
    +
    + +
    +
    +int nTQuarks
    +
    + +
    +
    +int nHBosons
    +
    + +
    +
    +int nWBosons
    +
    + +
    +
    +int nZBosons
    +
    + +
    +
    +int Wtag_medium
    +
    + +
    +
    +int Ztag_medium
    +
    + +
    +
    +int Wtag_tight
    +
    + +
    +
    +int Ztag_tight
    +
    + +
    +
    +std::unordered_map<std::string, std::vector<xAH::Jet>> trkJets
    +
    + +
    +
    +float muonCorrected_pt
    +
    + +
    +
    +float muonCorrected_eta
    +
    + +
    +
    +float muonCorrected_phi
    +
    + +
    +
    +float muonCorrected_m
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1FatJetContainer.html b/api/classxAH_1_1FatJetContainer.html new file mode 100644 index 0000000000..d844458c84 --- /dev/null +++ b/api/classxAH_1_1FatJetContainer.html @@ -0,0 +1,305 @@ + + + + + + + + + + + Class FatJetContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class FatJetContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class FatJetContainer : public xAH::ParticleContainer<FatJet, HelperClasses::JetInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +FatJetContainer(const std::string &name = "fatjet", const std::string &detailStr = "", const std::string &subjetDetailStr = "kinematic", const std::string &suffix = "", float units = 1e3, bool mc = false)
    +
    + +
    +
    +virtual ~FatJetContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillFatJet(const xAOD::Jet *jet, int pvLocation = 0)
    +
    + +
    +
    +virtual void FillFatJet(const xAOD::IParticle *particle, int pvLocation = 0)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Public Members

    +
    +
    +float m_trackJetPtCut = 10e3
    +
    + +
    +
    +float m_trackJetEtaCut = 2.5
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, FatJet &jet)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Jet.html b/api/classxAH_1_1Jet.html new file mode 100644 index 0000000000..4c093950f6 --- /dev/null +++ b/api/classxAH_1_1Jet.html @@ -0,0 +1,1706 @@ + + + + + + + + + + + Class Jet — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Jet

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Jet : public xAH::Particle
    +
    +

    Public Types

    +
    +
    +enum BTaggerOP
    +

    Values:

    +
    +
    +enumerator None
    +
    + +
    +
    +enumerator DL1r_FixedCutBEff_60
    +
    + +
    +
    +enumerator DL1r_FixedCutBEff_70
    +
    + +
    +
    +enumerator DL1r_FixedCutBEff_77
    +
    + +
    +
    +enumerator DL1r_FixedCutBEff_85
    +
    + +
    +
    +enumerator DL1dv00_FixedCutBEff_60
    +
    + +
    +
    +enumerator DL1dv00_FixedCutBEff_70
    +
    + +
    +
    +enumerator DL1dv00_FixedCutBEff_77
    +
    + +
    +
    +enumerator DL1dv00_FixedCutBEff_85
    +
    + +
    +
    +enumerator DL1dv01_FixedCutBEff_60
    +
    + +
    +
    +enumerator DL1dv01_FixedCutBEff_70
    +
    + +
    +
    +enumerator DL1dv01_FixedCutBEff_77
    +
    + +
    +
    +enumerator DL1dv01_FixedCutBEff_85
    +
    + +
    +
    +enumerator GN120220509_FixedCutBEff_60
    +
    + +
    +
    +enumerator GN120220509_FixedCutBEff_70
    +
    + +
    +
    +enumerator GN120220509_FixedCutBEff_77
    +
    + +
    +
    +enumerator GN120220509_FixedCutBEff_85
    +
    + +
    +
    +enumerator DL1dv00_Continuous
    +
    + +
    +
    +enumerator DL1r_Continuous
    +
    + +
    +
    +enumerator DL1dv01_Continuous
    +
    + +
    +
    +enumerator GN120220509_Continuous
    +
    + +
    +
    +enumerator GN2v00LegacyWP_FixedCutBEff_60
    +
    + +
    +
    +enumerator GN2v00LegacyWP_FixedCutBEff_70
    +
    + +
    +
    +enumerator GN2v00LegacyWP_FixedCutBEff_77
    +
    + +
    +
    +enumerator GN2v00LegacyWP_FixedCutBEff_85
    +
    + +
    +
    +enumerator GN2v00NewAliasWP_FixedCutBEff_60
    +
    + +
    +
    +enumerator GN2v00NewAliasWP_FixedCutBEff_70
    +
    + +
    +
    +enumerator GN2v00NewAliasWP_FixedCutBEff_77
    +
    + +
    +
    +enumerator GN2v00NewAliasWP_FixedCutBEff_85
    +
    + +
    +
    +enumerator GN2v01_FixedCutBEff_65
    +
    + +
    +
    +enumerator GN2v01_FixedCutBEff_70
    +
    + +
    +
    +enumerator GN2v01_FixedCutBEff_77
    +
    + +
    +
    +enumerator GN2v01_FixedCutBEff_85
    +
    + +
    +
    +enumerator GN2v01_FixedCutBEff_90
    +
    + +
    +
    +enumerator GN2v01_Continuous
    +
    + +
    + +
    +
    +

    Public Functions

    +
    +
    +int is_btag(BTaggerOP op) const
    +
    + +
    +
    +const std::vector<float> &SF_btag(BTaggerOP op) const
    +
    + +
    +
    +void muonInJetCorrection(const xAH::MuonContainer *muons)
    +
    + +
    +
    +

    Public Members

    +
    +
    +float rapidity
    +
    + +
    +
    +int isTrigMatched
    +
    + +
    +
    +std::vector<int> isTrigMatchedToChain
    +
    + +
    +
    +std::string listTrigChains
    +
    + +
    +
    +float Timing
    +
    + +
    +
    +float LArQuality
    +
    + +
    +
    +float HECQuality
    +
    + +
    +
    +float NegativeE
    +
    + +
    +
    +float AverageLArQF
    +
    + +
    +
    +float BchCorrCell
    +
    + +
    +
    +float N90Constituents
    +
    + +
    +
    +float LArBadHVEFrac
    +
    + +
    +
    +int LArBadHVNCell
    +
    + +
    +
    +float ChargedFraction
    +
    + +
    +
    +float OotFracClusters5
    +
    + +
    +
    +float OotFracClusters10
    +
    + +
    +
    +float LeadingClusterPt
    +
    + +
    +
    +float LeadingClusterSecondLambda
    +
    + +
    +
    +float LeadingClusterCenterLambda
    +
    + +
    +
    +float LeadingClusterSecondR
    +
    + +
    +
    +int clean_passLooseBad
    +
    + +
    +
    +int clean_passLooseBadLLP
    +
    + +
    +
    +int clean_passLooseBadTrigger
    +
    + +
    +
    +int clean_passLooseBadTriggerUgly
    +
    + +
    +
    +int clean_passLooseBadUgly
    +
    + +
    +
    +int clean_passTightBad
    +
    + +
    +
    +int clean_passTightBadUgly
    +
    + +
    +
    +float HECFrac
    +
    + +
    +
    +float EMFrac
    +
    + +
    +
    +float CentroidR
    +
    + +
    +
    +float FracSamplingMax
    +
    + +
    +
    +float FracSamplingMaxIndex
    +
    + +
    +
    +float LowEtConstituentsFrac
    +
    + +
    +
    +float GhostMuonSegmentCount
    +
    + +
    +
    +float Width
    +
    + +
    +
    +float NumTrkPt1000PV
    +
    + +
    +
    +float SumPtTrkPt1000PV
    +
    + +
    +
    +float TrackWidthPt1000PV
    +
    + +
    +
    +float NumTrkPt500PV
    +
    + +
    +
    +float SumPtTrkPt500PV
    +
    + +
    +
    +float TrackWidthPt500PV
    +
    + +
    +
    +float JVFPV
    +
    + +
    +
    +float Jvt
    +
    + +
    +
    +float JvtJvfcorr
    +
    + +
    +
    +float JvtRpt
    +
    + +
    +
    +float SumPtChargedPFOPt500PV
    +
    + +
    +
    +float fCharged
    +
    + +
    +
    +float JVC
    +
    + +
    +
    +float SV0
    +
    + +
    +
    +float SV1
    +
    + +
    +
    +float IP3D
    +
    + +
    +
    +float SV1IP3D
    +
    + +
    +
    +float COMBx
    +
    + +
    +
    +float DL1r
    +
    + +
    +
    +float DL1r_pu
    +
    + +
    +
    +float DL1r_pc
    +
    + +
    +
    +float DL1r_pb
    +
    + +
    +
    +float DL1dv00
    +
    + +
    +
    +float DL1dv00_pu
    +
    + +
    +
    +float DL1dv00_pc
    +
    + +
    +
    +float DL1dv00_pb
    +
    + +
    +
    +float DL1dv01
    +
    + +
    +
    +float DL1dv01_pu
    +
    + +
    +
    +float DL1dv01_pc
    +
    + +
    +
    +float DL1dv01_pb
    +
    + +
    +
    +float fastDIPS
    +
    + +
    +
    +float fastDIPS_pu
    +
    + +
    +
    +float fastDIPS_pc
    +
    + +
    +
    +float fastDIPS_pb
    +
    + +
    +
    +float GN1
    +
    + +
    +
    +float GN1_pu
    +
    + +
    +
    +float GN1_pc
    +
    + +
    +
    +float GN1_pb
    +
    + +
    +
    +float GN2v00LegacyWP
    +
    + +
    +
    +float GN2v00LegacyWP_pu
    +
    + +
    +
    +float GN2v00LegacyWP_pc
    +
    + +
    +
    +float GN2v00LegacyWP_pb
    +
    + +
    +
    +float GN2v00NewAliasWP
    +
    + +
    +
    +float GN2v00NewAliasWP_pu
    +
    + +
    +
    +float GN2v00NewAliasWP_pc
    +
    + +
    +
    +float GN2v00NewAliasWP_pb
    +
    + +
    +
    +float GN2v01
    +
    + +
    +
    +float GN2v01_pu
    +
    + +
    +
    +float GN2v01_pc
    +
    + +
    +
    +float GN2v01_pb
    +
    + +
    +
    +float GN2v01_ptau
    +
    + +
    +
    +int HadronConeExclTruthLabelID
    +
    + +
    +
    +int HadronConeExclExtendedTruthLabelID
    +
    + +
    +
    +float vtxOnlineValid
    +
    + +
    +
    +float vtxHadDummy
    +
    + +
    +
    +float bs_online_vx
    +
    + +
    +
    +float bs_online_vy
    +
    + +
    +
    +float bs_online_vz
    +
    + +
    +
    +float vtx_offline_x0
    +
    + +
    +
    +float vtx_offline_y0
    +
    + +
    +
    +float vtx_offline_z0
    +
    + +
    +
    +float vtx_online_x0
    +
    + +
    +
    +float vtx_online_y0
    +
    + +
    +
    +float vtx_online_z0
    +
    + +
    +
    +float vtx_online_bkg_x0
    +
    + +
    +
    +float vtx_online_bkg_y0
    +
    + +
    +
    +float vtx_online_bkg_z0
    +
    + +
    +
    +float JetFitter_nVTX
    +
    + +
    +
    +float JetFitter_nSingleTracks
    +
    + +
    +
    +float JetFitter_nTracksAtVtx
    +
    + +
    +
    +float JetFitter_mass
    +
    + +
    +
    +float JetFitter_energyFraction
    +
    + +
    +
    +float JetFitter_significance3d
    +
    + +
    +
    +float JetFitter_deltaeta
    +
    + +
    +
    +float JetFitter_deltaphi
    +
    + +
    +
    +float JetFitter_N2Tpar
    +
    + +
    +
    +float sv0_NGTinSvx
    +
    + +
    +
    +float sv0_N2Tpair
    +
    + +
    +
    +float sv0_massvx
    +
    + +
    +
    +float sv0_efracsvx
    +
    + +
    +
    +float sv0_normdist
    +
    + +
    +
    +float sv1_pu
    +
    + +
    +
    +float sv1_pb
    +
    + +
    +
    +float sv1_pc
    +
    + +
    +
    +float sv1_c
    +
    + +
    +
    +float sv1_cu
    +
    + +
    +
    +float sv1_NGTinSvx
    +
    + +
    +
    +float sv1_N2Tpair
    +
    + +
    +
    +float sv1_massvx
    +
    + +
    +
    +float sv1_efracsvx
    +
    + +
    +
    +float sv1_normdist
    +
    + +
    +
    +float sv1_Lxy
    +
    + +
    +
    +float sv1_sig3d
    +
    + +
    +
    +float sv1_L3d
    +
    + +
    +
    +float sv1_distmatlay
    +
    + +
    +
    +float sv1_dR
    +
    + +
    +
    +float IP2D_pu
    +
    + +
    +
    +float IP2D_pb
    +
    + +
    +
    +float IP2D_pc
    +
    + +
    +
    +float IP2D
    +
    + +
    +
    +float IP2D_c
    +
    + +
    +
    +float IP2D_cu
    +
    + +
    +
    +float nIP2DTracks
    +
    + +
    +
    +std::vector<float> IP2D_gradeOfTracks
    +
    + +
    +
    +std::vector<float> IP2D_flagFromV0ofTracks
    +
    + +
    +
    +std::vector<float> IP2D_valD0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP2D_sigD0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP2D_weightBofTracks
    +
    + +
    +
    +std::vector<float> IP2D_weightCofTracks
    +
    + +
    +
    +std::vector<float> IP2D_weightUofTracks
    +
    + +
    +
    +float IP3D_pu
    +
    + +
    +
    +float IP3D_pb
    +
    + +
    +
    +float IP3D_pc
    +
    + +
    +
    +float IP3D_c
    +
    + +
    +
    +float IP3D_cu
    +
    + +
    +
    +float nIP3DTracks
    +
    + +
    +
    +std::vector<float> IP3D_gradeOfTracks
    +
    + +
    +
    +std::vector<float> IP3D_flagFromV0ofTracks
    +
    + +
    +
    +std::vector<float> IP3D_valD0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP3D_sigD0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP3D_valZ0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP3D_sigZ0wrtPVofTracks
    +
    + +
    +
    +std::vector<float> IP3D_weightBofTracks
    +
    + +
    +
    +std::vector<float> IP3D_weightCofTracks
    +
    + +
    +
    +std::vector<float> IP3D_weightUofTracks
    +
    + +
    +
    +int is_DL1r_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_DL1r_FixedCutBEff_60
    +
    + +
    +
    +int is_DL1r_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_DL1r_FixedCutBEff_70
    +
    + +
    +
    +int is_DL1r_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_DL1r_FixedCutBEff_77
    +
    + +
    +
    +int is_DL1r_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_DL1r_FixedCutBEff_85
    +
    + +
    +
    +int is_DL1dv00_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_DL1dv00_FixedCutBEff_60
    +
    + +
    +
    +int is_DL1dv00_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_DL1dv00_FixedCutBEff_70
    +
    + +
    +
    +int is_DL1dv00_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_DL1dv00_FixedCutBEff_77
    +
    + +
    +
    +int is_DL1dv00_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_DL1dv00_FixedCutBEff_85
    +
    + +
    +
    +int is_DL1dv01_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_DL1dv01_FixedCutBEff_60
    +
    + +
    +
    +int is_DL1dv01_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_DL1dv01_FixedCutBEff_70
    +
    + +
    +
    +int is_DL1dv01_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_DL1dv01_FixedCutBEff_77
    +
    + +
    +
    +int is_DL1dv01_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_DL1dv01_FixedCutBEff_85
    +
    + +
    +
    +int is_GN120220509_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_GN120220509_FixedCutBEff_60
    +
    + +
    +
    +int is_GN120220509_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_GN120220509_FixedCutBEff_70
    +
    + +
    +
    +int is_GN120220509_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_GN120220509_FixedCutBEff_77
    +
    + +
    +
    +int is_GN120220509_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_GN120220509_FixedCutBEff_85
    +
    + +
    +
    +int is_GN2v00LegacyWP_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_60
    +
    + +
    +
    +int is_GN2v00LegacyWP_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_70
    +
    + +
    +
    +int is_GN2v00LegacyWP_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_77
    +
    + +
    +
    +int is_GN2v00LegacyWP_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_85
    +
    + +
    +
    +int is_GN2v00NewAliasWP_FixedCutBEff_60
    +
    + +
    +
    +std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_60
    +
    + +
    +
    +int is_GN2v00NewAliasWP_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_70
    +
    + +
    +
    +int is_GN2v00NewAliasWP_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_77
    +
    + +
    +
    +int is_GN2v00NewAliasWP_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_85
    +
    + +
    +
    +int is_GN2v01_FixedCutBEff_65
    +
    + +
    +
    +std::vector<float> SF_GN2v01_FixedCutBEff_65
    +
    + +
    +
    +int is_GN2v01_FixedCutBEff_70
    +
    + +
    +
    +std::vector<float> SF_GN2v01_FixedCutBEff_70
    +
    + +
    +
    +int is_GN2v01_FixedCutBEff_77
    +
    + +
    +
    +std::vector<float> SF_GN2v01_FixedCutBEff_77
    +
    + +
    +
    +int is_GN2v01_FixedCutBEff_85
    +
    + +
    +
    +std::vector<float> SF_GN2v01_FixedCutBEff_85
    +
    + +
    +
    +int is_GN2v01_FixedCutBEff_90
    +
    + +
    +
    +std::vector<float> SF_GN2v01_FixedCutBEff_90
    +
    + +
    +
    +int is_DL1r_Continuous
    +
    + +
    +
    +std::vector<float> SF_DL1r_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_DL1r_Continuous
    +
    + +
    +
    +int is_DL1dv00_Continuous
    +
    + +
    +
    +std::vector<float> SF_DL1dv00_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_DL1dv00_Continuous
    +
    + +
    +
    +int is_DL1dv01_Continuous
    +
    + +
    +
    +std::vector<float> SF_DL1dv01_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_DL1dv01_Continuous
    +
    + +
    +
    +int is_GN120220509_Continuous
    +
    + +
    +
    +std::vector<float> SF_GN120220509_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_GN120220509_Continuous
    +
    + +
    +
    +int is_GN2v00LegacyWP_Continuous
    +
    + +
    +
    +std::vector<float> SF_GN2v00LegacyWP_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_GN2v00LegacyWP_Continuous
    +
    + +
    +
    +int is_GN2v00NewAliasWP_Continuous
    +
    + +
    +
    +std::vector<float> SF_GN2v00NewAliasWP_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_GN2v00NewAliasWP_Continuous
    +
    + +
    +
    +int is_GN2v01_Continuous
    +
    + +
    +
    +std::vector<float> SF_GN2v01_Continuous
    +
    + +
    +
    +std::vector<float> inEffSF_GN2v01_Continuous
    +
    + +
    +
    +int ConeTruthLabelID
    +
    + +
    +
    +int TruthCount
    +
    + +
    +
    +float TruthLabelDeltaR_B
    +
    + +
    +
    +float TruthLabelDeltaR_C
    +
    + +
    +
    +float TruthLabelDeltaR_T
    +
    + +
    +
    +int PartonTruthLabelID
    +
    + +
    +
    +float GhostTruthAssociationFraction
    +
    + +
    +
    +TLorentzVector truth_p4
    +
    + +
    +
    +double charge
    +
    + +
    +
    +char passSel
    +
    + +
    +
    +char passOR
    +
    + +
    +
    +const Muon *matchedMuon = nullptr
    +
    + +
    +
    +const Jet *matchedJet = nullptr
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1JetContainer.html b/api/classxAH_1_1JetContainer.html new file mode 100644 index 0000000000..e29ff25e50 --- /dev/null +++ b/api/classxAH_1_1JetContainer.html @@ -0,0 +1,293 @@ + + + + + + + + + + + Class JetContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class JetContainer

    + +
    +

    Nested Relationships

    + +
    +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class JetContainer : public xAH::ParticleContainer<Jet, HelperClasses::JetInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +JetContainer(const std::string &name = "jet", const std::string &detailStr = "", float units = 1e3, bool mc = false)
    +
    + +
    +
    +virtual ~JetContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillJet(const xAOD::Jet *jet, const xAOD::Vertex *pv, int pvLocation)
    +
    + +
    +
    +virtual void FillJet(const xAOD::IParticle *particle, const xAOD::Vertex *pv, int pvLocation)
    +
    + +
    +
    +virtual void updateParticle(uint idx, Jet &jet)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1L1JetContainer.html b/api/classxAH_1_1L1JetContainer.html new file mode 100644 index 0000000000..c5ef4370e4 --- /dev/null +++ b/api/classxAH_1_1L1JetContainer.html @@ -0,0 +1,284 @@ + + + + + + + + + + + Class L1JetContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class L1JetContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class L1JetContainer : public xAH::ParticleContainer<Jet, HelperClasses::JetInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +L1JetContainer(const std::string &name = "L1Jet", float units = 1e3, bool mc = false)
    +
    + +
    +
    +virtual ~L1JetContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillLegacyL1Jets(const xAOD::JetRoIContainer *jets, bool sort)
    +
    + +
    +
    +virtual void updateParticle(uint idx, Jet &jet)
    +
    + +
    +
    +template<typename T>
    inline void FillPhase1L1Jets(T *&jets, bool sort)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1MetContainer.html b/api/classxAH_1_1MetContainer.html new file mode 100644 index 0000000000..9be803c2a0 --- /dev/null +++ b/api/classxAH_1_1MetContainer.html @@ -0,0 +1,538 @@ + + + + + + + + + + + Class MetContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MetContainer

    + +
    +

    Class Documentation

    +
    +
    +class MetContainer
    +
    +

    Public Functions

    +
    +
    +MetContainer(const std::string &name = "met", const std::string &detailStr = "", float units = 1e3)
    +
    + +
    +
    +~MetContainer()
    +
    + +
    +
    +void setTree(TTree *tree)
    +
    + +
    +
    +void setBranches(TTree *tree)
    +
    + +
    +
    +void clear()
    +
    + +
    +
    +void FillMET(const xAOD::MissingETContainer *met)
    +
    + +
    +
    +template<typename T_BR>
    void connectBranch(TTree *tree, std::string name, T_BR *variable)
    +
    + +
    +
    +template<typename T_BR>
    void setBranch(TTree *tree, std::string name, T_BR *variable, std::string type)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_name
    +
    + +
    +
    +HelperClasses::METInfoSwitch m_infoSwitch
    +
    + +
    +
    +bool m_debug
    +
    + +
    +
    +float m_units
    +
    + +
    +
    +float m_metFinalClus
    +
    + +
    +
    +float m_metFinalClusPx
    +
    + +
    +
    +float m_metFinalClusPy
    +
    + +
    +
    +float m_metFinalClusPhi
    +
    + +
    +
    +float m_metFinalClusSumEt
    +
    + +
    +
    +float m_metFinalClusOverSqrtSumEt
    +
    + +
    +
    +float m_metFinalClusOverSqrtHt
    +
    + +
    +
    +float m_metFinalClusSignificance
    +
    + +
    +
    +float m_metFinalClusSigDirectional
    +
    + +
    +
    +float m_metFinalClusRho
    +
    + +
    +
    +float m_metFinalClusVarL
    +
    + +
    +
    +float m_metFinalClusVarT
    +
    + +
    +
    +float m_metFinalTrk
    +
    + +
    +
    +float m_metFinalTrkPx
    +
    + +
    +
    +float m_metFinalTrkPy
    +
    + +
    +
    +float m_metFinalTrkPhi
    +
    + +
    +
    +float m_metFinalTrkSumEt
    +
    + +
    +
    +float m_metFinalTrkOverSqrtSumEt
    +
    + +
    +
    +float m_metFinalTrkOverSqrtHt
    +
    + +
    +
    +float m_metFinalTrkSignificance
    +
    + +
    +
    +float m_metFinalTrkSigDirectional
    +
    + +
    +
    +float m_metFinalTrkRho
    +
    + +
    +
    +float m_metFinalTrkVarL
    +
    + +
    +
    +float m_metFinalTrkVarT
    +
    + +
    +
    +float m_metEle
    +
    + +
    +
    +float m_metEleSumEt
    +
    + +
    +
    +float m_metElePhi
    +
    + +
    +
    +float m_metGamma
    +
    + +
    +
    +float m_metGammaSumEt
    +
    + +
    +
    +float m_metGammaPhi
    +
    + +
    +
    +float m_metTau
    +
    + +
    +
    +float m_metTauSumEt
    +
    + +
    +
    +float m_metTauPhi
    +
    + +
    +
    +float m_metMuons
    +
    + +
    +
    +float m_metMuonsSumEt
    +
    + +
    +
    +float m_metMuonsPhi
    +
    + +
    +
    +float m_metJet
    +
    + +
    +
    +float m_metJetSumEt
    +
    + +
    +
    +float m_metJetPhi
    +
    + +
    +
    +float m_metJetTrk
    +
    + +
    +
    +float m_metJetTrkSumEt
    +
    + +
    +
    +float m_metJetTrkPhi
    +
    + +
    +
    +float m_metSoftClus
    +
    + +
    +
    +float m_metSoftClusSumEt
    +
    + +
    +
    +float m_metSoftClusPhi
    +
    + +
    +
    +float m_metSoftTrk
    +
    + +
    +
    +float m_metSoftTrkSumEt
    +
    + +
    +
    +float m_metSoftTrkPhi
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Muon.html b/api/classxAH_1_1Muon.html new file mode 100644 index 0000000000..7b8ffafab1 --- /dev/null +++ b/api/classxAH_1_1Muon.html @@ -0,0 +1,607 @@ + + + + + + + + + + + Class Muon — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Muon

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Muon : public xAH::Particle
    +
    +

    Public Functions

    +
    +
    +inline TLorentzVector vec_eLoss() const
    +
    + +
    +
    +

    Public Members

    +
    +
    +float charge
    +
    + +
    +
    +int isTrigMatched
    +
    + +
    +
    +std::vector<int> isTrigMatchedToChain
    +
    + +
    +
    +std::vector<std::string> listTrigChains
    +
    + +
    +
    +std::map<std::string, int> isIsolated
    +
    + +
    +
    +float ptcone20
    +
    + +
    +
    +float ptcone30
    +
    + +
    +
    +float ptcone40
    +
    + +
    +
    +float ptvarcone20
    +
    + +
    +
    +float ptvarcone30
    +
    + +
    +
    +float ptvarcone40
    +
    + +
    +
    +float topoetcone20
    +
    + +
    +
    +float topoetcone30
    +
    + +
    +
    +float topoetcone40
    +
    + +
    +
    +float neflowisol20
    +
    + +
    +
    +float ptcone20_Nonprompt_All_MaxWeightTTVA_pt500
    +
    + +
    +
    +float ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000
    +
    + +
    +
    +float topoetcone20_CloseByCorr
    +
    + +
    +
    +float neflowisol20_CloseByCorr
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr
    +
    + +
    +
    +float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr
    +
    + +
    +
    +std::map<std::string, int> quality
    +
    + +
    +
    +std::map<std::string, std::vector<float>> RecoEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> IsoEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TrigEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TrigMCEff
    +
    + +
    +
    +std::vector<float> TTVAEff_SF
    +
    + +
    +
    +float trkd0
    +
    + +
    +
    +float trkd0sig
    +
    + +
    +
    +float trkz0
    +
    + +
    +
    +float trkz0sintheta
    +
    + +
    +
    +float trkphi0
    +
    + +
    +
    +float trktheta
    +
    + +
    +
    +float trkcharge
    +
    + +
    +
    +float trkqOverP
    +
    + +
    +
    +int trknSiHits
    +
    + +
    +
    +int trknPixHits
    +
    + +
    +
    +int trknPixHoles
    +
    + +
    +
    +int trknSCTHits
    +
    + +
    +
    +int trknSCTHoles
    +
    + +
    +
    +int trknTRTHits
    +
    + +
    +
    +int trknTRTHoles
    +
    + +
    +
    +int trknBLayerHits
    +
    + +
    +
    +int trknInnermostPixLayHits
    +
    + +
    +
    +float trkPixdEdX
    +
    + +
    +
    +float EnergyLoss
    +
    + +
    +
    +float EnergyLossSigma
    +
    + +
    +
    +unsigned char energyLossType
    +
    + +
    +
    +float MeasEnergyLoss
    +
    + +
    +
    +float MeasEnergyLossSigma
    +
    + +
    +
    +float ParamEnergyLoss
    +
    + +
    +
    +float ParamEnergyLossSigmaMinus
    +
    + +
    +
    +float ParamEnergyLossSigmaPlus
    +
    + +
    +
    +float PromptLeptonInput_DL1mu
    +
    + +
    +
    +float PromptLeptonInput_DRlj
    +
    + +
    +
    +float PromptLeptonInput_LepJetPtFrac
    +
    + +
    +
    +float PromptLeptonInput_PtFrac
    +
    + +
    +
    +float PromptLeptonInput_PtRel
    +
    + +
    +
    +int PromptLeptonInput_TrackJetNTrack
    +
    + +
    +
    +float PromptLeptonInput_ip2
    +
    + +
    +
    +float PromptLeptonInput_ip3
    +
    + +
    +
    +float PromptLeptonInput_rnnip
    +
    + +
    +
    +int PromptLeptonInput_sv1_jf_ntrkv
    +
    + +
    +
    +float PromptLeptonIso
    +
    + +
    +
    +float PromptLeptonVeto
    +
    + +
    +
    +char isLRT
    +
    + +
    +
    +char passIDcuts
    +
    + +
    +
    +char passSel
    +
    + +
    +
    +char passOR
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1MuonContainer.html b/api/classxAH_1_1MuonContainer.html new file mode 100644 index 0000000000..74638c9a2c --- /dev/null +++ b/api/classxAH_1_1MuonContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class MuonContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class MuonContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class MuonContainer : public xAH::ParticleContainer<Muon, HelperClasses::MuonInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +MuonContainer(const std::string &name = "muon", const std::string &detailStr = "", float units = 1e3, bool mc = false, bool storeSystSFs = true)
    +
    + +
    +
    +virtual ~MuonContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillMuon(const xAOD::Muon *muon, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +virtual void FillMuon(const xAOD::IParticle *particle, const xAOD::Vertex *primaryVertex)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, Muon &muon)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1OnlineBeamSpotTool.html b/api/classxAH_1_1OnlineBeamSpotTool.html new file mode 100644 index 0000000000..ab45d597e6 --- /dev/null +++ b/api/classxAH_1_1OnlineBeamSpotTool.html @@ -0,0 +1,293 @@ + + + + + + + + + + + Class OnlineBeamSpotTool — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class OnlineBeamSpotTool

    + +
    +

    Nested Relationships

    + +
    +
    +

    Class Documentation

    +
    +
    +class OnlineBeamSpotTool
    +
    +

    Public Types

    +
    +
    +enum BSData
    +

    Values:

    +
    +
    +enumerator BSx
    +
    + +
    +
    +enumerator BSy
    +
    + +
    +
    +enumerator BSz
    +
    + +
    + +
    +
    +

    Public Functions

    +
    +
    +OnlineBeamSpotTool()
    +
    + +
    +
    +~OnlineBeamSpotTool()
    +
    + +
    +
    +float getOnlineBSInfo(const xAOD::EventInfo *eventInfo, BSData datakey)
    +
    + +
    +
    +float getOnlineBSInfo(const xAH::EventInfo *eventInfo, BSData datakey)
    +
    + +
    +
    +float getOnlineBSInfo(int runNumber, int lumiBlock, bool isMC, BSData datakey)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Particle.html b/api/classxAH_1_1Particle.html new file mode 100644 index 0000000000..40e3e87cf6 --- /dev/null +++ b/api/classxAH_1_1Particle.html @@ -0,0 +1,266 @@ + + + + + + + + + + + Class Particle — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Particle

    + +
    +

    Inheritance Relationships

    +
    +

    Derived Types

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Particle
    +

    Subclassed by xAH::Cluster, xAH::Electron, xAH::FatJet, xAH::Jet, xAH::Muon, xAH::Photon, xAH::Tau, xAH::TrackPart, xAH::TruthPart

    +
    +

    Public Functions

    +
    +
    +inline virtual ~Particle()
    +
    + +
    +
    +

    Public Members

    +
    +
    +TLorentzVector p4
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1ParticleContainer.html b/api/classxAH_1_1ParticleContainer.html new file mode 100644 index 0000000000..e92cdf42b0 --- /dev/null +++ b/api/classxAH_1_1ParticleContainer.html @@ -0,0 +1,379 @@ + + + + + + + + + + + Template Class ParticleContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Class ParticleContainer

    + +
    +

    Class Documentation

    +
    +
    +template<class T_PARTICLE, class T_INFOSWITCH>
    class ParticleContainer
    +
    +

    Public Functions

    +
    +
    +inline ParticleContainer(const std::string &name, const std::string &detailStr = "", float units = 1e3, bool mc = false, bool useMass = false, bool storeSystSFs = true, const std::string &suffix = "")
    +
    + +
    +
    +inline virtual ~ParticleContainer()
    +
    + +
    +
    +inline virtual void setTree(TTree *tree)
    +
    + +
    +
    +inline virtual void setBranches(TTree *tree)
    +
    + +
    +
    +inline virtual void clear()
    +
    + +
    +
    +inline virtual void FillParticle(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void updateEntry()
    +
    + +
    +
    +inline std::vector<T_PARTICLE> &particles()
    +
    + +
    +
    +inline T_PARTICLE &at_nonConst(uint idx)
    +
    + +
    +
    +inline const T_PARTICLE &at(uint idx) const
    +
    + +
    +
    +inline const T_PARTICLE &operator[](uint idx) const
    +
    + +
    +
    +inline uint size() const
    +
    + +
    +
    +

    Public Members

    +
    +
    +T_INFOSWITCH m_infoSwitch
    +
    + +
    +
    +bool m_mc
    +
    + +
    +
    +bool m_debug
    +
    + +
    +
    +float m_units
    +
    + +
    +
    +bool m_storeSystSFs
    +
    + +
    +
    +int m_n
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +inline std::string branchName(const std::string &varName)
    +
    + +
    +
    +template<typename T_BR>
    inline void connectBranch(TTree *tree, const std::string &branch, std::vector<T_BR> **variable)
    +
    + +
    +
    +template<typename T>
    inline void setBranch(TTree *tree, std::string varName, std::vector<T> *localVectorPtr)
    +
    + +
    +
    +template<typename T, typename U, typename V>
    inline void safeFill(const V *xAODObj, SG::AuxElement::ConstAccessor<T> &accessor, std::vector<U> *destination, U defaultValue, int units = 1)
    +
    + +
    +
    +template<typename T, typename U, typename V>
    inline void safeVecFill(const V *xAODObj, SG::AuxElement::ConstAccessor<std::vector<T>> &accessor, std::vector<std::vector<U>> *destination, int units = 1)
    +
    + +
    +
    +template<typename T, typename V>
    inline void safeSFVecFill(const V *xAODObj, SG::AuxElement::ConstAccessor<std::vector<T>> &accessor, std::vector<std::vector<T>> *destination, const std::vector<T> &defaultValue)
    +
    + +
    +
    +inline virtual void updateParticle(uint idx, T_PARTICLE &particle)
    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +std::string m_name
    +
    + +
    +
    +std::vector<T_PARTICLE> m_particles
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Photon.html b/api/classxAH_1_1Photon.html new file mode 100644 index 0000000000..72825d996d --- /dev/null +++ b/api/classxAH_1_1Photon.html @@ -0,0 +1,404 @@ + + + + + + + + + + + Class Photon — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Photon

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Photon : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +int isIsolated_Cone40CaloOnly
    +
    + +
    +
    +int isIsolated_Cone40
    +
    + +
    +
    +int isIsolated_Cone20
    +
    + +
    +
    +float ptcone20
    +
    + +
    +
    +float ptcone30
    +
    + +
    +
    +float ptcone40
    +
    + +
    +
    +float ptvarcone20
    +
    + +
    +
    +float ptvarcone30
    +
    + +
    +
    +float ptvarcone40
    +
    + +
    +
    +float topoetcone20
    +
    + +
    +
    +float topoetcone30
    +
    + +
    +
    +float topoetcone40
    +
    + +
    +
    +int IsLoose
    +
    + +
    +
    +int IsMedium
    +
    + +
    +
    +int IsTight
    +
    + +
    +
    +float radhad1
    +
    + +
    +
    +float radhad
    +
    + +
    +
    +float e277
    +
    + +
    +
    +float reta
    +
    + +
    +
    +float rphi
    +
    + +
    +
    +float weta2
    +
    + +
    +
    +float f1
    +
    + +
    +
    +float wtot
    +
    + +
    +
    +float deltae
    +
    + +
    +
    +float eratio
    +
    + +
    +
    +float LooseEffSF
    +
    + +
    +
    +float MediumEffSF
    +
    + +
    +
    +float TightEffSF
    +
    + +
    +
    +float LooseEffSF_Error
    +
    + +
    +
    +float MediumEffSF_Error
    +
    + +
    +
    +float TightEffSF_Error
    +
    + +
    +
    +std::vector<std::string> trigMatched
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1PhotonContainer.html b/api/classxAH_1_1PhotonContainer.html new file mode 100644 index 0000000000..a376a1671b --- /dev/null +++ b/api/classxAH_1_1PhotonContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class PhotonContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class PhotonContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class PhotonContainer : public xAH::ParticleContainer<Photon, HelperClasses::PhotonInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +PhotonContainer(const std::string &name = "ph", const std::string &detailStr = "", float units = 1e3, bool mc = false)
    +
    + +
    +
    +virtual ~PhotonContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillPhoton(const xAOD::Photon *photon)
    +
    + +
    +
    +virtual void FillPhoton(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, Photon &photon)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1Tau.html b/api/classxAH_1_1Tau.html new file mode 100644 index 0000000000..ed84b2e06f --- /dev/null +++ b/api/classxAH_1_1Tau.html @@ -0,0 +1,399 @@ + + + + + + + + + + + Class Tau — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class Tau

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class Tau : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +int isTrigMatched
    +
    + +
    +
    +std::vector<int> isTrigMatchedToChain
    +
    + +
    +
    +std::string listTrigChains
    +
    + +
    +
    +int ntrk
    +
    + +
    +
    +float charge
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TauEff_SF
    +
    + +
    +
    +std::map<std::string, std::vector<float>> TauTrigEff_SF
    +
    + +
    +
    +int isJetRNNSigVeryLoose
    +
    + +
    +
    +int isJetRNNSigLoose
    +
    + +
    +
    +int isJetRNNSigMedium
    +
    + +
    +
    +int isJetRNNSigTight
    +
    + +
    +
    +float JetRNNScore
    +
    + +
    +
    +float JetRNNScoreSigTrans
    +
    + +
    +
    +int isEleRNNLoose
    +
    + +
    +
    +int isEleRNNMedium
    +
    + +
    +
    +int isEleRNNTight
    +
    + +
    +
    +float EleRNNScore
    +
    + +
    +
    +int passEleOLR
    +
    + +
    +
    +float matchedJetWidth
    +
    + +
    +
    +float matchedJetJvt
    +
    + +
    +
    +std::vector<float> tracks_pt
    +
    + +
    +
    +std::vector<float> tracks_eta
    +
    + +
    +
    +std::vector<float> tracks_phi
    +
    + +
    +
    +std::vector<int> tracks_isCore
    +
    + +
    +
    +std::vector<int> tracks_isWide
    +
    + +
    +
    +std::vector<int> tracks_failTrackFilter
    +
    + +
    +
    +std::vector<int> tracks_passTrkSel
    +
    + +
    +
    +std::vector<int> tracks_isClCharged
    +
    + +
    +
    +std::vector<int> tracks_isClIso
    +
    + +
    +
    +std::vector<int> tracks_isClConv
    +
    + +
    +
    +std::vector<int> tracks_isClFake
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1TauContainer.html b/api/classxAH_1_1TauContainer.html new file mode 100644 index 0000000000..1a647e7ab9 --- /dev/null +++ b/api/classxAH_1_1TauContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class TauContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TauContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TauContainer : public xAH::ParticleContainer<Tau, HelperClasses::TauInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +TauContainer(const std::string &name = "tau", const std::string &detailStr = "", float units = 1e3, bool mc = false, bool storeSystSFs = true)
    +
    + +
    +
    +virtual ~TauContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillTau(const xAOD::TauJet *tau)
    +
    + +
    +
    +virtual void FillTau(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, Tau &tau)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1TrackContainer.html b/api/classxAH_1_1TrackContainer.html new file mode 100644 index 0000000000..09c23bd8b0 --- /dev/null +++ b/api/classxAH_1_1TrackContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class TrackContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrackContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrackContainer : public xAH::ParticleContainer<TrackPart, HelperClasses::TrackInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +TrackContainer(const std::string &name = "track", const std::string &detailStr = "", float units = 1e3)
    +
    + +
    +
    +virtual ~TrackContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillTrack(const xAOD::TrackParticle *track)
    +
    + +
    +
    +virtual void FillTrack(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, TrackPart &track)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1TrackPart.html b/api/classxAH_1_1TrackPart.html new file mode 100644 index 0000000000..8ca3fac0ce --- /dev/null +++ b/api/classxAH_1_1TrackPart.html @@ -0,0 +1,394 @@ + + + + + + + + + + + Class TrackPart — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TrackPart

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TrackPart : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +float chiSquared
    +
    + +
    +
    +float d0
    +
    + +
    +
    +std::vector<float> definingParametersCovMatrix
    +
    + +
    +
    +char expectInnermostPixelLayerHit
    +
    + +
    +
    +char expectNextToInnermostPixelLayerHit
    +
    + +
    +
    +float numberDoF
    +
    + +
    +
    +char numberOfInnermostPixelLayerHits
    +
    + +
    +
    +char numberOfNextToInnermostPixelLayerHits
    +
    + +
    +
    +char numberOfPhiHoleLayers
    +
    + +
    +
    +char numberOfPhiLayers
    +
    + +
    +
    +char numberOfPixelDeadSensors
    +
    + +
    +
    +char numberOfPixelHits
    +
    + +
    +
    +char numberOfPixelHoles
    +
    + +
    +
    +char numberOfPixelSharedHits
    +
    + +
    +
    +char numberOfPrecisionHoleLayers
    +
    + +
    +
    +char numberOfPrecisionLayers
    +
    + +
    +
    +char numberOfSCTDeadSensors
    +
    + +
    +
    +char numberOfSCTHits
    +
    + +
    +
    +char numberOfSCTHoles
    +
    + +
    +
    +char numberOfSCTSharedHits
    +
    + +
    +
    +char numberOfTRTHits
    +
    + +
    +
    +char numberOfTRTOutliers
    +
    + +
    +
    +float phi
    +
    + +
    +
    +float qOverP
    +
    + +
    +
    +float theta
    +
    + +
    +
    +Int_t vertexLink
    +
    + +
    + +
    + +
    + +
    + +
    +
    +float vz
    +
    + +
    +
    +float z0
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1TruthContainer.html b/api/classxAH_1_1TruthContainer.html new file mode 100644 index 0000000000..d05208750f --- /dev/null +++ b/api/classxAH_1_1TruthContainer.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Class TruthContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TruthContainer

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TruthContainer : public xAH::ParticleContainer<TruthPart, HelperClasses::TruthInfoSwitch>
    +
    +

    Public Functions

    +
    +
    +TruthContainer(const std::string &name = "truth", const std::string &detailStr = "", float units = 1e3)
    +
    + +
    +
    +virtual ~TruthContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillTruth(const xAOD::TruthParticle *truth)
    +
    + +
    +
    +virtual void FillTruth(const xAOD::IParticle *particle)
    +
    + +
    +
    +inline void setTree(TTree *tree)
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual void updateParticle(uint idx, TruthPart &truth)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1TruthPart.html b/api/classxAH_1_1TruthPart.html new file mode 100644 index 0000000000..725b8584bf --- /dev/null +++ b/api/classxAH_1_1TruthPart.html @@ -0,0 +1,354 @@ + + + + + + + + + + + Class TruthPart — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class TruthPart

    + +
    +

    Inheritance Relationships

    +
    +

    Base Type

    + +
    +
    +
    +

    Class Documentation

    +
    +
    +class TruthPart : public xAH::Particle
    +
    +

    Public Members

    +
    +
    +int pdgId
    +
    + +
    +
    +int status
    +
    + +
    +
    +int barcode
    +
    + +
    +
    +bool is_higgs
    +
    + +
    +
    +bool is_bhad
    +
    + +
    +
    +float Bdecay_x
    +
    + +
    +
    +float Bdecay_y
    +
    + +
    +
    +float Bdecay_z
    +
    + +
    +
    +int nParents
    +
    + +
    +
    +std::vector<int> parent_pdgId
    +
    + +
    +
    +std::vector<int> parent_barcode
    +
    + +
    +
    +std::vector<int> parent_status
    +
    + +
    +
    +int nChildren
    +
    + +
    +
    +std::vector<int> child_pdgId
    +
    + +
    +
    +std::vector<int> child_barcode
    +
    + +
    +
    +std::vector<int> child_status
    +
    + +
    +
    +float pt_dressed
    +
    + +
    +
    +float eta_dressed
    +
    + +
    +
    +float phi_dressed
    +
    + +
    +
    +float e_dressed
    +
    + +
    +
    +unsigned int origin
    +
    + +
    +
    +unsigned int type
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classxAH_1_1VertexContainer.html b/api/classxAH_1_1VertexContainer.html new file mode 100644 index 0000000000..110f865801 --- /dev/null +++ b/api/classxAH_1_1VertexContainer.html @@ -0,0 +1,293 @@ + + + + + + + + + + + Class VertexContainer — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Class VertexContainer

    + +
    +

    Class Documentation

    +
    +
    +class VertexContainer
    +
    +

    Public Functions

    +
    +
    +VertexContainer(const std::string &detailStr, const std::string &name = "vertex")
    +
    + +
    +
    +virtual ~VertexContainer()
    +
    + +
    +
    +virtual void setTree(TTree *tree)
    +
    + +
    +
    +virtual void setBranches(TTree *tree)
    +
    + +
    +
    +virtual void clear()
    +
    + +
    +
    +virtual void FillVertices(const xAOD::VertexContainer *vertices)
    +
    + +
    +
    +virtual void FillTruthVertices(const xAOD::TruthVertexContainer *truthVertices)
    +
    + +
    +
    +inline std::string branchName(const std::string &varName)
    +
    + +
    +
    +template<typename T_BR>
    inline void connectBranch(TTree *tree, const std::string &branch, std::vector<T_BR> **variable)
    +
    + +
    +
    +template<typename T>
    inline void setBranch(TTree *tree, std::string varName, std::vector<T> *localVectorPtr)
    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_name
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.html b/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.html new file mode 100644 index 0000000000..6fc089247c --- /dev/null +++ b/api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Define EL_RETURN_CHECK — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Define EL_RETURN_CHECK

    + +
    +

    Define Documentation

    +
    +
    +EL_RETURN_CHECK(CONTEXT, EXP)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.html b/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.html new file mode 100644 index 0000000000..8ecc77f4a5 --- /dev/null +++ b/api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Define RETURN_CHECK — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Define RETURN_CHECK

    + +
    +

    Define Documentation

    +
    +
    +RETURN_CHECK(CONTEXT, EXP, INFO)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/dir_Root.html b/api/dir_Root.html new file mode 100644 index 0000000000..d61c89ad49 --- /dev/null +++ b/api/dir_Root.html @@ -0,0 +1,284 @@ + + + + + + + + + + + Directory Root — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Directory Root

    +

    Directory path: Root

    +
    +

    Files

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/dir_xAODAnaHelpers.html b/api/dir_xAODAnaHelpers.html new file mode 100644 index 0000000000..db12882897 --- /dev/null +++ b/api/dir_xAODAnaHelpers.html @@ -0,0 +1,299 @@ + + + + + + + + + + + Directory xAODAnaHelpers — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Directory xAODAnaHelpers

    +

    Directory path: xAODAnaHelpers

    +
    +

    Subdirectories

    + +
    +
    +

    Files

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/dir_xAODAnaHelpers_tools.html b/api/dir_xAODAnaHelpers_tools.html new file mode 100644 index 0000000000..3af149c18c --- /dev/null +++ b/api/dir_xAODAnaHelpers_tools.html @@ -0,0 +1,217 @@ + + + + + + + + + + + Directory tools — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Directory tools

    +

    Parent directory (xAODAnaHelpers)

    +

    Directory path: xAODAnaHelpers/tools

    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.html b/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.html new file mode 100644 index 0000000000..e7858d032c --- /dev/null +++ b/api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.html @@ -0,0 +1,278 @@ + + + + + + + + + + + Enum ToolName — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Enum ToolName

    + +
    +

    Enum Documentation

    +
    +
    +enum class HelperClasses::ToolName
    +

    Values:

    +
    +
    +enumerator MUONSELECTOR
    +
    + +
    +
    +enumerator ELECTRONSELECTOR
    +
    + +
    +
    +enumerator PHOTONSELECTOR
    +
    + +
    +
    +enumerator JETSELECTOR
    +
    + +
    +
    +enumerator BJETSELECTOR
    +
    + +
    +
    +enumerator CALIBRATOR
    +
    + +
    +
    +enumerator CORRECTOR
    +
    + +
    +
    +enumerator SELECTOR
    +
    + +
    +
    +enumerator DEFAULT
    +
    + +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.html b/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.html new file mode 100644 index 0000000000..49ec65f7d4 --- /dev/null +++ b/api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.html @@ -0,0 +1,248 @@ + + + + + + + + + + + Enum ContainerType — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Enum ContainerType

    + +
    +

    Enum Documentation

    +
    +
    +enum class HelperClasses::ContainerType
    +

    Values:

    +
    +
    +enumerator UNKNOWN
    +
    + +
    +
    +enumerator CONSTDV
    +
    + +
    +
    +enumerator CONSTCONT
    +
    + +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.html b/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.html new file mode 100644 index 0000000000..8581495427 --- /dev/null +++ b/api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.html @@ -0,0 +1,294 @@ + + + + + + + + + + + Enum ShowerType — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Enum ShowerType

    + +
    +

    Enum Documentation

    +
    +
    +enum HelperFunctions::ShowerType
    +

    The different supported shower types.

    +

    Values:

    +
    +
    +enumerator Unknown
    +
    + +
    +
    +enumerator Pythia8
    +
    + +
    +
    +enumerator Herwig7p1
    +
    + +
    +
    +enumerator Herwig7p2
    +
    + +
    +
    +enumerator Sherpa221
    +
    + +
    +
    +enumerator Sherpa2210
    +
    + +
    +
    +enumerator Sherpa2212
    +
    + +
    +
    +enumerator AmcPy8
    +
    + +
    +
    +enumerator AmcH7
    +
    + +
    +
    +enumerator Pythia8_517
    +
    + +
    +
    +enumerator Sherpa2214
    +
    + +
    +
    +enumerator Sherpa_Unknown
    +
    + +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_Algorithm.cxx.html b/api/file_Root_Algorithm.cxx.html new file mode 100644 index 0000000000..b0774fab3f --- /dev/null +++ b/api/file_Root_Algorithm.cxx.html @@ -0,0 +1,241 @@ + + + + + + + + + + + File Algorithm.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Algorithm.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/Algorithm.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_BJetEfficiencyCorrector.cxx.html b/api/file_Root_BJetEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..55cf68973a --- /dev/null +++ b/api/file_Root_BJetEfficiencyCorrector.cxx.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File BJetEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File BJetEfficiencyCorrector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/BJetEfficiencyCorrector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PathResolver/PathResolver.h

    • +
    • SampleHandler/MetaFields.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/BJetEfficiencyCorrector.h (File BJetEfficiencyCorrector.h)

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODBTaggingEfficiency/BTaggingEfficiencyTool.h

    • +
    • xAODBTaggingEfficiency/BTaggingSelectionTool.h

    • +
    • xAODJet/JetAuxContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_BasicEventSelection.cxx.html b/api/file_Root_BasicEventSelection.cxx.html new file mode 100644 index 0000000000..91ef16d8a2 --- /dev/null +++ b/api/file_Root_BasicEventSelection.cxx.html @@ -0,0 +1,257 @@ + + + + + + + + + + + File BasicEventSelection.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File BasicEventSelection.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/BasicEventSelection.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AsgMetadataTool.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/OutputStream.h

    • +
    • EventLoop/Worker.h

    • +
    • GoodRunsLists/GoodRunsListSelectionTool.h

    • +
    • PATInterfaces/CorrectionCode.h

    • +
    • PileupReweighting/PileupReweightingTool.h

    • +
    • TFile.h

    • +
    • TSystem.h

    • +
    • TTree.h

    • +
    • TTreeFormula.h

    • +
    • TrigConfxAOD/xAODConfigTool.h

    • +
    • xAODAnaHelpers/BasicEventSelection.h (File BasicEventSelection.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODCore/tools/IOStats.h

    • +
    • xAODCore/tools/ReadStats.h

    • +
    • xAODCutFlow/CutBookkeeper.h

    • +
    • xAODCutFlow/CutBookkeeperContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODMetaData/FileMetaData.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ClusterContainer.cxx.html b/api/file_Root_ClusterContainer.cxx.html new file mode 100644 index 0000000000..a1f066ee9b --- /dev/null +++ b/api/file_Root_ClusterContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File ClusterContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ClusterContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ClusterHists.cxx.html b/api/file_Root_ClusterHists.cxx.html new file mode 100644 index 0000000000..45336a7e74 --- /dev/null +++ b/api/file_Root_ClusterHists.cxx.html @@ -0,0 +1,238 @@ + + + + + + + + + + + File ClusterHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ClusterHists.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ClusterHistsAlgo.cxx.html b/api/file_Root_ClusterHistsAlgo.cxx.html new file mode 100644 index 0000000000..b5a1d7d6ec --- /dev/null +++ b/api/file_Root_ClusterHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File ClusterHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ClusterHistsAlgo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/ClusterHistsAlgo.h (File ClusterHistsAlgo.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_DebugTool.cxx.html b/api/file_Root_DebugTool.cxx.html new file mode 100644 index 0000000000..5c6e859166 --- /dev/null +++ b/api/file_Root_DebugTool.cxx.html @@ -0,0 +1,246 @@ + + + + + + + + + + + File DebugTool.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File DebugTool.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/DebugTool.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronCalibrator.cxx.html b/api/file_Root_ElectronCalibrator.cxx.html new file mode 100644 index 0000000000..b3ea82e65e --- /dev/null +++ b/api/file_Root_ElectronCalibrator.cxx.html @@ -0,0 +1,252 @@ + + + + + + + + + + + File ElectronCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronCalibrator.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronCalibrator.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/ElectronCalibrator.h (File ElectronCalibrator.h)

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/Electron.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronContainer.cxx.html b/api/file_Root_ElectronContainer.cxx.html new file mode 100644 index 0000000000..0a8ab254d0 --- /dev/null +++ b/api/file_Root_ElectronContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File ElectronContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronEfficiencyCorrector.cxx.html b/api/file_Root_ElectronEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..6916f4b3a2 --- /dev/null +++ b/api/file_Root_ElectronEfficiencyCorrector.cxx.html @@ -0,0 +1,253 @@ + + + + + + + + + + + File ElectronEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronEfficiencyCorrector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronEfficiencyCorrector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • iostream

    • +
    • memory

    • +
    • xAODAnaHelpers/ElectronEfficiencyCorrector.h (File ElectronEfficiencyCorrector.h)

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODEgamma/Electron.h

    • +
    • xAODEgamma/ElectronAuxContainer.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronHists.cxx.html b/api/file_Root_ElectronHists.cxx.html new file mode 100644 index 0000000000..3e430f697e --- /dev/null +++ b/api/file_Root_ElectronHists.cxx.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File ElectronHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronHists.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronHistsAlgo.cxx.html b/api/file_Root_ElectronHistsAlgo.cxx.html new file mode 100644 index 0000000000..6e89b40777 --- /dev/null +++ b/api/file_Root_ElectronHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File ElectronHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronHistsAlgo.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ElectronSelector.cxx.html b/api/file_Root_ElectronSelector.cxx.html new file mode 100644 index 0000000000..997ba5547f --- /dev/null +++ b/api/file_Root_ElectronSelector.cxx.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File ElectronSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ElectronSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h

    • +
    • ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • IsolationSelection/IsolationSelectionTool.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/MatchFromCompositeTool.h

    • +
    • TriggerMatchingTool/MatchingTool.h

    • +
    • iostream

    • +
    • sstream

    • +
    • tuple

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/ElectronSelector.h (File ElectronSelector.h)

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODEgamma/EgammaDefs.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTracking/TrackParticlexAODHelpers.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_EventInfo.cxx.html b/api/file_Root_EventInfo.cxx.html new file mode 100644 index 0000000000..2737e83131 --- /dev/null +++ b/api/file_Root_EventInfo.cxx.html @@ -0,0 +1,235 @@ + + + + + + + + + + + File EventInfo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File EventInfo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/EventInfo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • iostream

    • +
    • xAODAnaHelpers/EventInfo.h (File EventInfo.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODCaloEvent/CaloClusterContainer.h

    • +
    • xAODEventShape/EventShape.h

    • +
    • xAODTruth/TruthEventContainer.h

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_FatJetContainer.cxx.html b/api/file_Root_FatJetContainer.cxx.html new file mode 100644 index 0000000000..1a56947e63 --- /dev/null +++ b/api/file_Root_FatJetContainer.cxx.html @@ -0,0 +1,233 @@ + + + + + + + + + + + File FatJetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File FatJetContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/FatJetContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HLTJetGetter.cxx.html b/api/file_Root_HLTJetGetter.cxx.html new file mode 100644 index 0000000000..0364fbe606 --- /dev/null +++ b/api/file_Root_HLTJetGetter.cxx.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File HLTJetGetter.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HLTJetGetter.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HLTJetGetter.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • TrigConfxAOD/xAODConfigTool.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • iostream

    • +
    • vector

    • +
    • xAODAnaHelpers/HLTJetGetter.h (File HLTJetGetter.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetAuxContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HLTJetRoIBuilder.cxx.html b/api/file_Root_HLTJetRoIBuilder.cxx.html new file mode 100644 index 0000000000..278d4413f4 --- /dev/null +++ b/api/file_Root_HLTJetRoIBuilder.cxx.html @@ -0,0 +1,223 @@ + + + + + + + + + + + File HLTJetRoIBuilder.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HLTJetRoIBuilder.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HLTJetRoIBuilder.cxx)

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HelpTreeBase.cxx.html b/api/file_Root_HelpTreeBase.cxx.html new file mode 100644 index 0000000000..2fcb3e5e6b --- /dev/null +++ b/api/file_Root_HelpTreeBase.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File HelpTreeBase.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelpTreeBase.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HelpTreeBase.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • AsgMessaging/StatusCode.h

    • +
    • TrigConfxAOD/xAODConfigTool.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • exception

    • +
    • iostream

    • +
    • sstream

    • +
    • xAODAnaHelpers/HelpTreeBase.h (File HelpTreeBase.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODBTagging/BTagging.h

    • +
    • xAODJet/JetConstituentVector.h

    • +
    • xAODPrimitives/IsolationType.h

    • +
    • xAODTracking/TrackParticle.h

    • +
    • xAODTracking/TrackSummaryAccessors_v1.h

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HelperClasses.cxx.html b/api/file_Root_HelperClasses.cxx.html new file mode 100644 index 0000000000..9e0f61fa89 --- /dev/null +++ b/api/file_Root_HelperClasses.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File HelperClasses.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelperClasses.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HelperClasses.cxx)

    + +
    +
    +

    Includes

    +
      +
    • ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h

    • +
    • ElectronPhotonSelectorTools/LikelihoodEnums.h

    • +
    • ElectronPhotonSelectorTools/egammaPIDdefs.h

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODMuon/Muon.h

    • +
    • xAODPrimitives/IsolationType.h

    • +
    • xAODTau/TauDefs.h

    • +
    +
    +
    +

    Namespaces

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HelperFunctions.cxx.html b/api/file_Root_HelperFunctions.cxx.html new file mode 100644 index 0000000000..c958de47b5 --- /dev/null +++ b/api/file_Root_HelperFunctions.cxx.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File HelperFunctions.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelperFunctions.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HelperFunctions.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • JetEDM/JetConstituentFiller.h

    • +
    • SampleHandler/MetaFields.h

    • +
    • SampleHandler/MetaObject.h

    • +
    • SampleHandler/SampleGrid.h

    • +
    • fastjet/ClusterSequence.hh

    • +
    • fastjet/PseudoJet.hh

    • +
    • fastjet/tools/Filter.hh

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODBase/IParticleContainer.h

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_HistogramManager.cxx.html b/api/file_Root_HistogramManager.cxx.html new file mode 100644 index 0000000000..7a24ba491d --- /dev/null +++ b/api/file_Root_HistogramManager.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File HistogramManager.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HistogramManager.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/HistogramManager.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_IParticleHists.cxx.html b/api/file_Root_IParticleHists.cxx.html new file mode 100644 index 0000000000..9fe69efd5a --- /dev/null +++ b/api/file_Root_IParticleHists.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File IParticleHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IParticleHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/IParticleHists.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_IParticleHistsAlgo.cxx.html b/api/file_Root_IParticleHistsAlgo.cxx.html new file mode 100644 index 0000000000..4084ce9070 --- /dev/null +++ b/api/file_Root_IParticleHistsAlgo.cxx.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File IParticleHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IParticleHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/IParticleHistsAlgo.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_IsoCloseByCorr.cxx.html b/api/file_Root_IsoCloseByCorr.cxx.html new file mode 100644 index 0000000000..bacde88a4a --- /dev/null +++ b/api/file_Root_IsoCloseByCorr.cxx.html @@ -0,0 +1,252 @@ + + + + + + + + + + + File IsoCloseByCorr.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IsoCloseByCorr.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/IsoCloseByCorr.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • iostream

    • +
    • sstream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/IsoCloseByCorr.h (File IsoCloseByCorr.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/Electron.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/Photon.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODMuon/Muon.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_Jet.cxx.html b/api/file_Root_Jet.cxx.html new file mode 100644 index 0000000000..c4b178c366 --- /dev/null +++ b/api/file_Root_Jet.cxx.html @@ -0,0 +1,230 @@ + + + + + + + + + + + File Jet.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Jet.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/Jet.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_JetCalibrator.cxx.html b/api/file_Root_JetCalibrator.cxx.html new file mode 100644 index 0000000000..ed7bfd5eaf --- /dev/null +++ b/api/file_Root_JetCalibrator.cxx.html @@ -0,0 +1,256 @@ + + + + + + + + + + + File JetCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetCalibrator.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/JetCalibrator.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • JetCalibTools/JetCalibrationTool.h

    • +
    • JetSelectorTools/JetCleaningTool.h

    • +
    • JetUncertainties/JetUncertaintiesTool.h

    • +
    • METUtilities/METHelpers.h

    • +
    • TSystem.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/JetCalibrator.h (File JetCalibrator.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_JetContainer.cxx.html b/api/file_Root_JetContainer.cxx.html new file mode 100644 index 0000000000..2afabcacbf --- /dev/null +++ b/api/file_Root_JetContainer.cxx.html @@ -0,0 +1,235 @@ + + + + + + + + + + + File JetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/JetContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_JetHists.cxx.html b/api/file_Root_JetHists.cxx.html new file mode 100644 index 0000000000..f1c5427196 --- /dev/null +++ b/api/file_Root_JetHists.cxx.html @@ -0,0 +1,233 @@ + + + + + + + + + + + File JetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/JetHists.cxx)

    + +
    +
    +

    Includes

    +
      +
    • math.h

    • +
    • sstream

    • +
    • xAODAnaHelpers/JetHists.h (File JetHists.h)

    • +
    • xAODBTagging/BTaggingUtilities.h

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_JetHistsAlgo.cxx.html b/api/file_Root_JetHistsAlgo.cxx.html new file mode 100644 index 0000000000..f860899d51 --- /dev/null +++ b/api/file_Root_JetHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File JetHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/JetHistsAlgo.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_JetSelector.cxx.html b/api/file_Root_JetSelector.cxx.html new file mode 100644 index 0000000000..fb597dd0f1 --- /dev/null +++ b/api/file_Root_JetSelector.cxx.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File JetSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/JetSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • JetMomentTools/JetForwardJvtTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • TriggerMatchingTool/MatchFromCompositeTool.h

    • +
    • TriggerMatchingTool/MatchingTool.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/JetSelector.h (File JetSelector.h)

    • +
    • xAODBTaggingEfficiency/BTaggingSelectionTool.h

    • +
    • xAODCore/AuxContainerBase.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/JetAuxContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_L1JetContainer.cxx.html b/api/file_Root_L1JetContainer.cxx.html new file mode 100644 index 0000000000..a31c439aae --- /dev/null +++ b/api/file_Root_L1JetContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File L1JetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File L1JetContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/L1JetContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_LinkDef.h.html b/api/file_Root_LinkDef.h.html new file mode 100644 index 0000000000..a4e26a629f --- /dev/null +++ b/api/file_Root_LinkDef.h.html @@ -0,0 +1,268 @@ + + + + + + + + + + + File LinkDef.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File LinkDef.h

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/LinkDef.h)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_METConstructor.cxx.html b/api/file_Root_METConstructor.cxx.html new file mode 100644 index 0000000000..2e4c33b38b --- /dev/null +++ b/api/file_Root_METConstructor.cxx.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File METConstructor.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File METConstructor.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/METConstructor.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • METUtilities/CutsMETMaker.h

    • +
    • METUtilities/METHelpers.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • TEnv.h

    • +
    • TSystem.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/METConstructor.h (File METConstructor.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMissingET/MissingETAssociationMap.h

    • +
    • xAODMissingET/MissingETAuxContainer.h

    • +
    • xAODMissingET/MissingETComposition.h

    • +
    • xAODMissingET/MissingETContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MessagePrinterAlgo.cxx.html b/api/file_Root_MessagePrinterAlgo.cxx.html new file mode 100644 index 0000000000..98614bff4e --- /dev/null +++ b/api/file_Root_MessagePrinterAlgo.cxx.html @@ -0,0 +1,240 @@ + + + + + + + + + + + File MessagePrinterAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MessagePrinterAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MessagePrinterAlgo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/OutputStream.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/MessagePrinterAlgo.h (File MessagePrinterAlgo.h)

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MetContainer.cxx.html b/api/file_Root_MetContainer.cxx.html new file mode 100644 index 0000000000..0219823075 --- /dev/null +++ b/api/file_Root_MetContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File MetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MetContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MetHists.cxx.html b/api/file_Root_MetHists.cxx.html new file mode 100644 index 0000000000..edeb1fb865 --- /dev/null +++ b/api/file_Root_MetHists.cxx.html @@ -0,0 +1,232 @@ + + + + + + + + + + + File MetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MetHists.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • sstream

    • +
    • xAODAnaHelpers/MetHists.h (File MetHists.h)

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MetHistsAlgo.cxx.html b/api/file_Root_MetHistsAlgo.cxx.html new file mode 100644 index 0000000000..cdbccce3d5 --- /dev/null +++ b/api/file_Root_MetHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File MetHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MetHistsAlgo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MetHistsAlgo.h (File MetHistsAlgo.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MinixAOD.cxx.html b/api/file_Root_MinixAOD.cxx.html new file mode 100644 index 0000000000..a33eddadc6 --- /dev/null +++ b/api/file_Root_MinixAOD.cxx.html @@ -0,0 +1,266 @@ + + + + + + + + + + + File MinixAOD.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MinixAOD.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MinixAOD.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/OutputStream.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MinixAOD.h (File MinixAOD.h)

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODCore/AuxContainerBase.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/ElectronAuxContainer.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/Photon.h

    • +
    • xAODEgamma/PhotonAuxContainer.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetAuxContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMissingET/MissingET.h

    • +
    • xAODMissingET/MissingETAuxContainer.h

    • +
    • xAODMissingET/MissingETContainer.h

    • +
    • xAODMuon/Muon.h

    • +
    • xAODMuon/MuonAuxContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetAuxContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonCalibrator.cxx.html b/api/file_Root_MuonCalibrator.cxx.html new file mode 100644 index 0000000000..f2ec8d5da6 --- /dev/null +++ b/api/file_Root_MuonCalibrator.cxx.html @@ -0,0 +1,253 @@ + + + + + + + + + + + File MuonCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonCalibrator.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonCalibrator.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PATInterfaces/CorrectionCode.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MuonCalibrator.h (File MuonCalibrator.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODMuon/Muon.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonContainer.cxx.html b/api/file_Root_MuonContainer.cxx.html new file mode 100644 index 0000000000..3d693fbdcd --- /dev/null +++ b/api/file_Root_MuonContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File MuonContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonEfficiencyCorrector.cxx.html b/api/file_Root_MuonEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..d85f446cda --- /dev/null +++ b/api/file_Root_MuonEfficiencyCorrector.cxx.html @@ -0,0 +1,257 @@ + + + + + + + + + + + File MuonEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonEfficiencyCorrector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonEfficiencyCorrector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • MuonEfficiencyCorrections/MuonEfficiencyScaleFactors.h

    • +
    • MuonEfficiencyCorrections/MuonTriggerScaleFactors.h

    • +
    • algorithm

    • +
    • iostream

    • +
    • map

    • +
    • random

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MuonEfficiencyCorrector.h (File MuonEfficiencyCorrector.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODMuon/Muon.h

    • +
    • xAODMuon/MuonAuxContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonHists.cxx.html b/api/file_Root_MuonHists.cxx.html new file mode 100644 index 0000000000..a8a61bc8e2 --- /dev/null +++ b/api/file_Root_MuonHists.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File MuonHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonHists.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonHistsAlgo.cxx.html b/api/file_Root_MuonHistsAlgo.cxx.html new file mode 100644 index 0000000000..91943e7624 --- /dev/null +++ b/api/file_Root_MuonHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File MuonHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonHistsAlgo.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonInFatJetCorrector.cxx.html b/api/file_Root_MuonInFatJetCorrector.cxx.html new file mode 100644 index 0000000000..4f4b69c312 --- /dev/null +++ b/api/file_Root_MuonInFatJetCorrector.cxx.html @@ -0,0 +1,248 @@ + + + + + + + + + + + File MuonInFatJetCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonInFatJetCorrector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonInFatJetCorrector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Algorithm.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/Worker.h

    • +
    • MuonSelectorTools/MuonSelectionTool.h

    • +
    • iostream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MuonInFatJetCorrector.h (File MuonInFatJetCorrector.h)

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTruth/TruthParticleContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_MuonSelector.cxx.html b/api/file_Root_MuonSelector.cxx.html new file mode 100644 index 0000000000..3fd02f5011 --- /dev/null +++ b/api/file_Root_MuonSelector.cxx.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File MuonSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/MuonSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • IsolationSelection/IsolationSelectionTool.h

    • +
    • MuonSelectorTools/MuonSelectionTool.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • TrigConfxAOD/xAODConfigTool.h

    • +
    • TriggerMatchingTool/MatchFromCompositeTool.h

    • +
    • TriggerMatchingTool/MatchingTool.h

    • +
    • iostream

    • +
    • tuple

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/MuonSelector.h (File MuonSelector.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTracking/TrackParticlexAODHelpers.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_OnlineBeamSpotTool.cxx.html b/api/file_Root_OnlineBeamSpotTool.cxx.html new file mode 100644 index 0000000000..16e9d58bbe --- /dev/null +++ b/api/file_Root_OnlineBeamSpotTool.cxx.html @@ -0,0 +1,235 @@ + + + + + + + + + + + File OnlineBeamSpotTool.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File OnlineBeamSpotTool.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/OnlineBeamSpotTool.cxx)

    + +
    +
    +

    Includes

    +
      +
    • PathResolver/PathResolver.h

    • +
    • TFile.h

    • +
    • TSystem.h

    • +
    • TTree.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/OnlineBeamSpotTool.h (File OnlineBeamSpotTool.h)

    • +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_OverlapRemover.cxx.html b/api/file_Root_OverlapRemover.cxx.html new file mode 100644 index 0000000000..d28c332fd8 --- /dev/null +++ b/api/file_Root_OverlapRemover.cxx.html @@ -0,0 +1,256 @@ + + + + + + + + + + + File OverlapRemover.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File OverlapRemover.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/OverlapRemover.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • iostream

    • +
    • sstream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/OverlapRemover.h (File OverlapRemover.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/Electron.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/Photon.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMuon/Muon.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_ParticlePIDManager.cxx.html b/api/file_Root_ParticlePIDManager.cxx.html new file mode 100644 index 0000000000..35e298d51c --- /dev/null +++ b/api/file_Root_ParticlePIDManager.cxx.html @@ -0,0 +1,237 @@ + + + + + + + + + + + File ParticlePIDManager.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ParticlePIDManager.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/ParticlePIDManager.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_PhotonCalibrator.cxx.html b/api/file_Root_PhotonCalibrator.cxx.html new file mode 100644 index 0000000000..97fda2f342 --- /dev/null +++ b/api/file_Root_PhotonCalibrator.cxx.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File PhotonCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonCalibrator.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/PhotonCalibrator.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EGammaVariableCorrection/ElectronPhotonVariableCorrectionTool.h

    • +
    • ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h

    • +
    • ElectronPhotonSelectorTools/AsgPhotonIsEMSelector.h

    • +
    • ElectronPhotonSelectorTools/egammaPIDdefs.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PATCore/PATCoreEnums.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/PhotonCalibrator.h (File PhotonCalibrator.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEgamma/EgammaDefs.h

    • +
    • xAODEgamma/EgammaxAODHelpers.h

    • +
    • xAODEgamma/Photon.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_PhotonContainer.cxx.html b/api/file_Root_PhotonContainer.cxx.html new file mode 100644 index 0000000000..44402fa37c --- /dev/null +++ b/api/file_Root_PhotonContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File PhotonContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/PhotonContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_PhotonHists.cxx.html b/api/file_Root_PhotonHists.cxx.html new file mode 100644 index 0000000000..ac70d0340c --- /dev/null +++ b/api/file_Root_PhotonHists.cxx.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File PhotonHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/PhotonHists.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_PhotonHistsAlgo.cxx.html b/api/file_Root_PhotonHistsAlgo.cxx.html new file mode 100644 index 0000000000..a8bd805c8c --- /dev/null +++ b/api/file_Root_PhotonHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + File PhotonHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/PhotonHistsAlgo.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_PhotonSelector.cxx.html b/api/file_Root_PhotonSelector.cxx.html new file mode 100644 index 0000000000..e1abc99002 --- /dev/null +++ b/api/file_Root_PhotonSelector.cxx.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File PhotonSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/PhotonSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • IsolationSelection/IsolationSelectionTool.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/PhotonSelector.h (File PhotonSelector.h)

    • +
    • xAODEgamma/EgammaDefs.h

    • +
    • xAODEgamma/EgammaxAODHelpers.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TauCalibrator.cxx.html b/api/file_Root_TauCalibrator.cxx.html new file mode 100644 index 0000000000..216d149e50 --- /dev/null +++ b/api/file_Root_TauCalibrator.cxx.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File TauCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauCalibrator.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TauCalibrator.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PATInterfaces/CorrectionCode.h

    • +
    • iostream

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TauCalibrator.h (File TauCalibrator.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    • xAODTau/TauxAODHelpers.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TauContainer.cxx.html b/api/file_Root_TauContainer.cxx.html new file mode 100644 index 0000000000..18dffd6577 --- /dev/null +++ b/api/file_Root_TauContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File TauContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TauContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TauEfficiencyCorrector.cxx.html b/api/file_Root_TauEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..7654dfd0eb --- /dev/null +++ b/api/file_Root_TauEfficiencyCorrector.cxx.html @@ -0,0 +1,255 @@ + + + + + + + + + + + File TauEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauEfficiencyCorrector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TauEfficiencyCorrector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/DataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • algorithm

    • +
    • iostream

    • +
    • map

    • +
    • random

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TauEfficiencyCorrector.h (File TauEfficiencyCorrector.h)

    • +
    • xAODBase/IParticle.h

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetAuxContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TauJetMatching.cxx.html b/api/file_Root_TauJetMatching.cxx.html new file mode 100644 index 0000000000..fe2999256a --- /dev/null +++ b/api/file_Root_TauJetMatching.cxx.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File TauJetMatching.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauJetMatching.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TauJetMatching.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • TLorentzVector.h

    • +
    • iostream

    • +
    • map

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TauJetMatching.h (File TauJetMatching.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TauSelector.cxx.html b/api/file_Root_TauSelector.cxx.html new file mode 100644 index 0000000000..9ac5299e64 --- /dev/null +++ b/api/file_Root_TauSelector.cxx.html @@ -0,0 +1,255 @@ + + + + + + + + + + + File TauSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TauSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • TauAnalysisTools/TauSelectionTool.h

    • +
    • TriggerMatchingTool/MatchFromCompositeTool.h

    • +
    • TriggerMatchingTool/MatchingTool.h

    • +
    • iostream

    • +
    • map

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TauSelector.h (File TauSelector.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TrackContainer.cxx.html b/api/file_Root_TrackContainer.cxx.html new file mode 100644 index 0000000000..b572f37234 --- /dev/null +++ b/api/file_Root_TrackContainer.cxx.html @@ -0,0 +1,233 @@ + + + + + + + + + + + File TrackContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TrackContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TrackHists.cxx.html b/api/file_Root_TrackHists.cxx.html new file mode 100644 index 0000000000..ef42325df8 --- /dev/null +++ b/api/file_Root_TrackHists.cxx.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File TrackHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TrackHists.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TrackHistsAlgo.cxx.html b/api/file_Root_TrackHistsAlgo.cxx.html new file mode 100644 index 0000000000..599a97e417 --- /dev/null +++ b/api/file_Root_TrackHistsAlgo.cxx.html @@ -0,0 +1,244 @@ + + + + + + + + + + + File TrackHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackHistsAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TrackHistsAlgo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TrackHistsAlgo.h (File TrackHistsAlgo.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TrackSelector.cxx.html b/api/file_Root_TrackSelector.cxx.html new file mode 100644 index 0000000000..9a924c6ba6 --- /dev/null +++ b/api/file_Root_TrackSelector.cxx.html @@ -0,0 +1,248 @@ + + + + + + + + + + + File TrackSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TrackSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/Worker.h

    • +
    • InDetTrackSelectionTool/InDetTrackSelectionTool.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TrackSelector.h (File TrackSelector.h)

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TracksInJetHists.cxx.html b/api/file_Root_TracksInJetHists.cxx.html new file mode 100644 index 0000000000..fec3d8803c --- /dev/null +++ b/api/file_Root_TracksInJetHists.cxx.html @@ -0,0 +1,240 @@ + + + + + + + + + + + File TracksInJetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TracksInJetHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TracksInJetHists.cxx)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TreeAlgo.cxx.html b/api/file_Root_TreeAlgo.cxx.html new file mode 100644 index 0000000000..c53b2809ae --- /dev/null +++ b/api/file_Root_TreeAlgo.cxx.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File TreeAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TreeAlgo.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TreeAlgo.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/OutputStream.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TreeAlgo.h (File TreeAlgo.h)

    • +
    • xAODCaloEvent/CaloClusterContainer.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TrigMatcher.cxx.html b/api/file_Root_TrigMatcher.cxx.html new file mode 100644 index 0000000000..866b73378a --- /dev/null +++ b/api/file_Root_TrigMatcher.cxx.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File TrigMatcher.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrigMatcher.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TrigMatcher.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • TriggerMatchingTool/MatchFromCompositeTool.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TrigMatcher.h (File TrigMatcher.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TruthContainer.cxx.html b/api/file_Root_TruthContainer.cxx.html new file mode 100644 index 0000000000..0ec602ca74 --- /dev/null +++ b/api/file_Root_TruthContainer.cxx.html @@ -0,0 +1,234 @@ + + + + + + + + + + + File TruthContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TruthContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TruthContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_TruthSelector.cxx.html b/api/file_Root_TruthSelector.cxx.html new file mode 100644 index 0000000000..40a2297d43 --- /dev/null +++ b/api/file_Root_TruthSelector.cxx.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File TruthSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TruthSelector.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/TruthSelector.cxx)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • EventLoop/Job.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • TFile.h

    • +
    • TObjArray.h

    • +
    • TObjString.h

    • +
    • iostream

    • +
    • sstream

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/TruthSelector.h (File TruthSelector.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTruth/TruthParticleContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_VertexContainer.cxx.html b/api/file_Root_VertexContainer.cxx.html new file mode 100644 index 0000000000..b3e589e8ec --- /dev/null +++ b/api/file_Root_VertexContainer.cxx.html @@ -0,0 +1,231 @@ + + + + + + + + + + + File VertexContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File VertexContainer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/VertexContainer.cxx)

    + +
    +
    +

    Includes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_VtxHists.cxx.html b/api/file_Root_VtxHists.cxx.html new file mode 100644 index 0000000000..5e26bdc6c6 --- /dev/null +++ b/api/file_Root_VtxHists.cxx.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File VtxHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File VtxHists.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/VtxHists.cxx)

    + +
    +
    +

    Includes

    +
      +
    • math.h

    • +
    • xAODAnaHelpers/VtxHists.h (File VtxHists.h)

    • +
    • xAODTracking/TrackParticle.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_Root_Writer.cxx.html b/api/file_Root_Writer.cxx.html new file mode 100644 index 0000000000..e0c84022e7 --- /dev/null +++ b/api/file_Root_Writer.cxx.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File Writer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Writer.cxx

    +

    Parent directory (Root)

    + +
    +

    Definition (Root/Writer.cxx)

    + +
    +
    +

    Includes

    +
      +
    • EventLoop/Job.h

    • +
    • EventLoop/OutputStream.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/Writer.h (File Writer.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    • xAODJet/JetAuxContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    +
    +
    +

    Functions

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_view_hierarchy.html b/api/file_view_hierarchy.html new file mode 100644 index 0000000000..5f41c659ee --- /dev/null +++ b/api/file_view_hierarchy.html @@ -0,0 +1,214 @@ + + + + + + + + + + + File Hierarchy — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Hierarchy

    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Algorithm.h.html b/api/file_xAODAnaHelpers_Algorithm.h.html new file mode 100644 index 0000000000..a9a60cacad --- /dev/null +++ b/api/file_xAODAnaHelpers_Algorithm.h.html @@ -0,0 +1,300 @@ + + + + + + + + + + + File Algorithm.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Algorithm.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Algorithm.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • AsgMessaging/MsgStream.h

    • +
    • AsgMessaging/MsgStreamMacros.h

    • +
    • AsgMessaging/StatusCode.h

    • +
    • AsgTools/AnaToolHandle.h

    • +
    • AsgTools/ToolStore.h

    • +
    • EventLoop/Algorithm.h

    • +
    • EventLoop/StatusCode.h

    • +
    • EventLoop/Worker.h

    • +
    • PathResolver/PathResolver.h

    • +
    • string

    • +
    • xAODMetaData/FileMetaData.h

    • +
    • xAODRootAccess/Init.h

    • +
    • xAODRootAccess/TEvent.h

    • +
    • xAODRootAccess/TStore.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html b/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html new file mode 100644 index 0000000000..1771833d19 --- /dev/null +++ b/api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File BJetEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File BJetEfficiencyCorrector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/BJetEfficiencyCorrector.h)

    + +
    +
    +

    Includes

    +
      +
    • FTagAnalysisInterfaces/IBTaggingEfficiencyTool.h

    • +
    • FTagAnalysisInterfaces/IBTaggingSelectionTool.h

    • +
    • PATInterfaces/ISystematicsTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODJet/JetContainer.h

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_BasicEventSelection.h.html b/api/file_xAODAnaHelpers_BasicEventSelection.h.html new file mode 100644 index 0000000000..bf9f133092 --- /dev/null +++ b/api/file_xAODAnaHelpers_BasicEventSelection.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + File BasicEventSelection.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File BasicEventSelection.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Algorithm performing general basic cuts for an analysis (GRL, Event Cleaning, Min nr. Tracks for PV candidate).

    + +
    +

    Definition (xAODAnaHelpers/BasicEventSelection.h)

    + +
    +
    +

    Detailed Description

    +

    Gabriel Facini gabriel.facini@cern.ch

    +

    Marco Milesi marco.milesi@cern.ch

    +

    Jeff Dandoy jeff.dandoy@cern.ch

    +

    John Alison john.alison@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgAnalysisInterfaces/IGoodRunsListSelectionTool.h

    • +
    • AsgAnalysisInterfaces/IPileupReweightingTool.h

    • +
    • AsgTools/AnaToolHandle.h

    • +
    • PATInterfaces/IWeightTool.h

    • +
    • TH1D.h

    • +
    • TrigConfInterfaces/ITrigConfigTool.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Cluster.h.html b/api/file_xAODAnaHelpers_Cluster.h.html new file mode 100644 index 0000000000..3cb01b9a0f --- /dev/null +++ b/api/file_xAODAnaHelpers_Cluster.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File Cluster.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Cluster.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Cluster.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ClusterContainer.h.html b/api/file_xAODAnaHelpers_ClusterContainer.h.html new file mode 100644 index 0000000000..a1efdf6ba8 --- /dev/null +++ b/api/file_xAODAnaHelpers_ClusterContainer.h.html @@ -0,0 +1,266 @@ + + + + + + + + + + + File ClusterContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ClusterContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    +

    Typedefs

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ClusterHists.h.html b/api/file_xAODAnaHelpers_ClusterHists.h.html new file mode 100644 index 0000000000..e4bf0a12cc --- /dev/null +++ b/api/file_xAODAnaHelpers_ClusterHists.h.html @@ -0,0 +1,239 @@ + + + + + + + + + + + File ClusterHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ClusterHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.html b/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.html new file mode 100644 index 0000000000..30df31c252 --- /dev/null +++ b/api/file_xAODAnaHelpers_ClusterHistsAlgo.h.html @@ -0,0 +1,246 @@ + + + + + + + + + + + File ClusterHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ClusterHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ClusterHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_DebugTool.h.html b/api/file_xAODAnaHelpers_DebugTool.h.html new file mode 100644 index 0000000000..4b152c5ac3 --- /dev/null +++ b/api/file_xAODAnaHelpers_DebugTool.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File DebugTool.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File DebugTool.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/DebugTool.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Electron.h.html b/api/file_xAODAnaHelpers_Electron.h.html new file mode 100644 index 0000000000..9d0020e23d --- /dev/null +++ b/api/file_xAODAnaHelpers_Electron.h.html @@ -0,0 +1,252 @@ + + + + + + + + + + + File Electron.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Electron.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Electron.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronCalibrator.h.html b/api/file_xAODAnaHelpers_ElectronCalibrator.h.html new file mode 100644 index 0000000000..6b346b088f --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronCalibrator.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File ElectronCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronCalibrator.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ElectronCalibrator.h)

    + +
    +
    +

    Includes

    +
      +
    • ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h

    • +
    • IsolationCorrections/IsolationCorrectionTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronContainer.h.html b/api/file_xAODAnaHelpers_ElectronContainer.h.html new file mode 100644 index 0000000000..1fd1bd15e6 --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronContainer.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File ElectronContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ElectronContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html b/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html new file mode 100644 index 0000000000..1f250979a2 --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html @@ -0,0 +1,257 @@ + + + + + + + + + + + File ElectronEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronEfficiencyCorrector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Interface to the tools of the ElectronEfficiencyCorrection package.

    + +
    +

    Definition (xAODAnaHelpers/ElectronEfficiencyCorrector.h)

    + +
    +
    +

    Detailed Description

    +

    Marco Milesi marco.milesi@cern.ch

    +
    +
    +

    Includes

    +
      +
    • ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronHists.h.html b/api/file_xAODAnaHelpers_ElectronHists.h.html new file mode 100644 index 0000000000..4068fd856c --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronHists.h.html @@ -0,0 +1,242 @@ + + + + + + + + + + + File ElectronHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ElectronHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.html b/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.html new file mode 100644 index 0000000000..7f549cc232 --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File ElectronHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ElectronHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ElectronSelector.h.html b/api/file_xAODAnaHelpers_ElectronSelector.h.html new file mode 100644 index 0000000000..54f892a992 --- /dev/null +++ b/api/file_xAODAnaHelpers_ElectronSelector.h.html @@ -0,0 +1,268 @@ + + + + + + + + + + + File ElectronSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ElectronSelector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Interface to the tools of the ElectronPhotonSelectorTools package.

    + +
    +

    Definition (xAODAnaHelpers/ElectronSelector.h)

    + +
    +
    +

    Detailed Description

    +

    Marco Milesi marco.milesi@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • EgammaAnalysisInterfaces/IAsgDeadHVCellRemovalTool.h

    • +
    • IsolationSelection/IIsolationSelectionTool.h

    • +
    • TH1D.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/IMatchScoringTool.h

    • +
    • TriggerMatchingTool/IMatchingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODAnaHelpers/ParticlePIDManager.h (File ParticlePIDManager.h)

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODTracking/Vertex.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_EventInfo.h.html b/api/file_xAODAnaHelpers_EventInfo.h.html new file mode 100644 index 0000000000..99c63515b4 --- /dev/null +++ b/api/file_xAODAnaHelpers_EventInfo.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + File EventInfo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File EventInfo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/EventInfo.h)

    + +
    +
    +

    Includes

    +
      +
    • TTree.h

    • +
    • string

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_FatJet.h.html b/api/file_xAODAnaHelpers_FatJet.h.html new file mode 100644 index 0000000000..f9351aecab --- /dev/null +++ b/api/file_xAODAnaHelpers_FatJet.h.html @@ -0,0 +1,252 @@ + + + + + + + + + + + File FatJet.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File FatJet.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/FatJet.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_FatJetContainer.h.html b/api/file_xAODAnaHelpers_FatJetContainer.h.html new file mode 100644 index 0000000000..8c267f1bed --- /dev/null +++ b/api/file_xAODAnaHelpers_FatJetContainer.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + File FatJetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File FatJetContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/FatJetContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HLTJetGetter.h.html b/api/file_xAODAnaHelpers_HLTJetGetter.h.html new file mode 100644 index 0000000000..b8d94b2274 --- /dev/null +++ b/api/file_xAODAnaHelpers_HLTJetGetter.h.html @@ -0,0 +1,253 @@ + + + + + + + + + + + File HLTJetGetter.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HLTJetGetter.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/HLTJetGetter.h)

    + +
    +
    +

    Includes

    + +
    + + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.html b/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.html new file mode 100644 index 0000000000..962901d20b --- /dev/null +++ b/api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.html @@ -0,0 +1,236 @@ + + + + + + + + + + + File HLTJetRoIBuilder.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HLTJetRoIBuilder.h

    +

    Parent directory (xAODAnaHelpers)

    +

    This class builds HLT jets and thier associated objects.

    + +
    +

    Definition (xAODAnaHelpers/HLTJetRoIBuilder.h)

    + +
    +
    +

    Detailed Description

    +

    John Alison john.alison@cern.ch

    +
    +
    +

    Included By

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HelpTreeBase.h.html b/api/file_xAODAnaHelpers_HelpTreeBase.h.html new file mode 100644 index 0000000000..1400a76ee6 --- /dev/null +++ b/api/file_xAODAnaHelpers_HelpTreeBase.h.html @@ -0,0 +1,289 @@ + + + + + + + + + + + File HelpTreeBase.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelpTreeBase.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/HelpTreeBase.h)

    + +
    +
    +

    Includes

    + +
    + + +
    +

    Classes

    + +
    +
    +

    Typedefs

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HelperClasses.h.html b/api/file_xAODAnaHelpers_HelperClasses.h.html new file mode 100644 index 0000000000..1023b2e38c --- /dev/null +++ b/api/file_xAODAnaHelpers_HelperClasses.h.html @@ -0,0 +1,323 @@ + + + + + + + + + + + File HelperClasses.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelperClasses.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/HelperClasses.h)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/ConstDataVector.h

    • +
    • RootCoreUtils/ThrowMsg.h

    • +
    • TString.h

    • +
    • iostream

    • +
    • map

    • +
    • sstream

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODRootAccess/TEvent.h

    • +
    • xAODRootAccess/TStore.h

    • +
    +
    + +
    +

    Namespaces

    + +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HelperFunctions.h.html b/api/file_xAODAnaHelpers_HelperFunctions.h.html new file mode 100644 index 0000000000..bac7b04e61 --- /dev/null +++ b/api/file_xAODAnaHelpers_HelperFunctions.h.html @@ -0,0 +1,393 @@ + + + + + + + + + + + File HelperFunctions.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HelperFunctions.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/HelperFunctions.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • AsgMessaging/MsgStream.h

    • +
    • AsgMessaging/StatusCode.h

    • +
    • AthContainers/ConstDataVector.h

    • +
    • AthContainers/normalizedTypeinfoName.h

    • +
    • PATInterfaces/ISystematicsTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • SampleHandler/SampleHandler.h

    • +
    • TBranch.h

    • +
    • TFile.h

    • +
    • TH1D.h

    • +
    • TObjArray.h

    • +
    • TTree.h

    • +
    • cxxabi.h

    • +
    • fastjet/JetDefinition.hh

    • +
    • typeinfo

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + + +
    +

    Classes

    + +
    +
    +

    Enums

    + +
    +
    +

    Functions

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_HistogramManager.h.html b/api/file_xAODAnaHelpers_HistogramManager.h.html new file mode 100644 index 0000000000..8ee916fddb --- /dev/null +++ b/api/file_xAODAnaHelpers_HistogramManager.h.html @@ -0,0 +1,266 @@ + + + + + + + + + + + File HistogramManager.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File HistogramManager.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Manage your histograms.

    + +
    +

    Definition (xAODAnaHelpers/HistogramManager.h)

    + +
    +
    +

    Detailed Description

    +

    See AUTHORS.md

    +

    BugNo known bugs

    +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • AsgMessaging/StatusCode.h

    • +
    • EventLoop/IWorker.h

    • +
    • TH1.h

    • +
    • TH1F.h

    • +
    • TH2F.h

    • +
    • TH3F.h

    • +
    • TProfile.h

    • +
    • ctype.h

    • +
    • xAODRootAccess/TEvent.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_IParticleHists.h.html b/api/file_xAODAnaHelpers_IParticleHists.h.html new file mode 100644 index 0000000000..87842392f9 --- /dev/null +++ b/api/file_xAODAnaHelpers_IParticleHists.h.html @@ -0,0 +1,248 @@ + + + + + + + + + + + File IParticleHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IParticleHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/IParticleHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.html b/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.html new file mode 100644 index 0000000000..dc7e247370 --- /dev/null +++ b/api/file_xAODAnaHelpers_IParticleHistsAlgo.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File IParticleHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IParticleHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/IParticleHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_IsoCloseByCorr.h.html b/api/file_xAODAnaHelpers_IsoCloseByCorr.h.html new file mode 100644 index 0000000000..e80f375789 --- /dev/null +++ b/api/file_xAODAnaHelpers_IsoCloseByCorr.h.html @@ -0,0 +1,258 @@ + + + + + + + + + + + File IsoCloseByCorr.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File IsoCloseByCorr.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/IsoCloseByCorr.h)

    + +
    +
    +

    Includes

    +
      +
    • AssociationUtils/OverlapRemovalInit.h

    • +
    • AssociationUtils/OverlapRemovalTool.h

    • +
    • AssociationUtils/ToolBox.h

    • +
    • InDetTrackSelectionTool/InDetTrackSelectionTool.h

    • +
    • IsolationSelection/IsolationCloseByCorrectionTool.h

    • +
    • IsolationSelection/IsolationSelectionTool.h

    • +
    • TH1D.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    +
    +

    Included By

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Jet.h.html b/api/file_xAODAnaHelpers_Jet.h.html new file mode 100644 index 0000000000..022d183d91 --- /dev/null +++ b/api/file_xAODAnaHelpers_Jet.h.html @@ -0,0 +1,257 @@ + + + + + + + + + + + File Jet.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Jet.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Jet.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_JetCalibrator.h.html b/api/file_xAODAnaHelpers_JetCalibrator.h.html new file mode 100644 index 0000000000..9b97262385 --- /dev/null +++ b/api/file_xAODAnaHelpers_JetCalibrator.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File JetCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetCalibrator.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/JetCalibrator.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • JetCPInterfaces/ICPJetUncertaintiesTool.h

    • +
    • JetCPInterfaces/IJetTileCorrectionTool.h

    • +
    • JetCalibTools/IJetCalibrationTool.h

    • +
    • JetInterface/IJetSelector.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODCore/ShallowCopy.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_JetContainer.h.html b/api/file_xAODAnaHelpers_JetContainer.h.html new file mode 100644 index 0000000000..947ad195f5 --- /dev/null +++ b/api/file_xAODAnaHelpers_JetContainer.h.html @@ -0,0 +1,263 @@ + + + + + + + + + + + File JetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/JetContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_JetHists.h.html b/api/file_xAODAnaHelpers_JetHists.h.html new file mode 100644 index 0000000000..69c6194002 --- /dev/null +++ b/api/file_xAODAnaHelpers_JetHists.h.html @@ -0,0 +1,244 @@ + + + + + + + + + + + File JetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/JetHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_JetHistsAlgo.h.html b/api/file_xAODAnaHelpers_JetHistsAlgo.h.html new file mode 100644 index 0000000000..a0c78f4fd2 --- /dev/null +++ b/api/file_xAODAnaHelpers_JetHistsAlgo.h.html @@ -0,0 +1,246 @@ + + + + + + + + + + + File JetHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/JetHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_JetSelector.h.html b/api/file_xAODAnaHelpers_JetSelector.h.html new file mode 100644 index 0000000000..f3c09a9e62 --- /dev/null +++ b/api/file_xAODAnaHelpers_JetSelector.h.html @@ -0,0 +1,267 @@ + + + + + + + + + + + File JetSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File JetSelector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Select jets and apply JVT corrections.

    + +
    +

    Definition (xAODAnaHelpers/JetSelector.h)

    + +
    +
    +

    Detailed Description

    +

    Gabriel Facini gabriel.facini@cern.ch

    +

    Jeff Dandoy jeff.dandoy@cern.ch

    +

    Marco Milesi marco.milesi@cern.ch

    +

    John Alison john.alison@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • FTagAnalysisInterfaces/IBTaggingSelectionTool.h

    • +
    • JetAnalysisInterfaces/IJvtEfficiencyTool.h

    • +
    • JetInterface/IJetModifier.h

    • +
    • JetMomentTools/JetVertexNNTagger.h

    • +
    • PATCore/IAsgSelectionTool.h

    • +
    • ParticleJetTools/JetPileupLabelingTool.h

    • +
    • TH1D.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/IMatchScoringTool.h

    • +
    • TriggerMatchingTool/IMatchingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetContainer.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_L1JetContainer.h.html b/api/file_xAODAnaHelpers_L1JetContainer.h.html new file mode 100644 index 0000000000..eeb4dac56c --- /dev/null +++ b/api/file_xAODAnaHelpers_L1JetContainer.h.html @@ -0,0 +1,263 @@ + + + + + + + + + + + File L1JetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File L1JetContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/L1JetContainer.h)

    + +
    +
    +

    Includes

    +
      +
    • TLorentzVector.h

    • +
    • TTree.h

    • +
    • string

    • +
    • vector

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODAnaHelpers/Jet.h (File Jet.h)

    • +
    • xAODAnaHelpers/ParticleContainer.h (File ParticleContainer.h)

    • +
    • xAODTrigger/JetRoIContainer.h

    • +
    • xAODTrigger/gFexJetRoIContainer.h

    • +
    • xAODTrigger/jFexLRJetRoIContainer.h

    • +
    • xAODTrigger/jFexSRJetRoIContainer.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_METConstructor.h.html b/api/file_xAODAnaHelpers_METConstructor.h.html new file mode 100644 index 0000000000..a229b98156 --- /dev/null +++ b/api/file_xAODAnaHelpers_METConstructor.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File METConstructor.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File METConstructor.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/METConstructor.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • METInterface/IMETMaker.h

    • +
    • METInterface/IMETSignificance.h

    • +
    • METInterface/IMETSystematicsTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • TauAnalysisTools/ITauSelectionTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODRootAccess/Init.h

    • +
    • xAODRootAccess/TEvent.h

    • +
    • xAODRootAccess/TStore.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.html b/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.html new file mode 100644 index 0000000000..7e96b8af47 --- /dev/null +++ b/api/file_xAODAnaHelpers_MessagePrinterAlgo.h.html @@ -0,0 +1,248 @@ + + + + + + + + + + + File MessagePrinterAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MessagePrinterAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MessagePrinterAlgo.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessagePrinter.h

    • +
    • AsgMessaging/MessagePrinterOverlay.h

    • +
    • memory

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MetContainer.h.html b/api/file_xAODAnaHelpers_MetContainer.h.html new file mode 100644 index 0000000000..e56ada4df6 --- /dev/null +++ b/api/file_xAODAnaHelpers_MetContainer.h.html @@ -0,0 +1,255 @@ + + + + + + + + + + + File MetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MetContainer.h)

    + +
    +
    +

    Includes

    +
      +
    • TTree.h

    • +
    • string

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODMissingET/MissingETContainer.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MetHists.h.html b/api/file_xAODAnaHelpers_MetHists.h.html new file mode 100644 index 0000000000..280f666c45 --- /dev/null +++ b/api/file_xAODAnaHelpers_MetHists.h.html @@ -0,0 +1,247 @@ + + + + + + + + + + + File MetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MetHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MetHistsAlgo.h.html b/api/file_xAODAnaHelpers_MetHistsAlgo.h.html new file mode 100644 index 0000000000..4a116265b4 --- /dev/null +++ b/api/file_xAODAnaHelpers_MetHistsAlgo.h.html @@ -0,0 +1,246 @@ + + + + + + + + + + + File MetHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MetHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MetHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MinixAOD.h.html b/api/file_xAODAnaHelpers_MinixAOD.h.html new file mode 100644 index 0000000000..4307d8dd12 --- /dev/null +++ b/api/file_xAODAnaHelpers_MinixAOD.h.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File MinixAOD.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MinixAOD.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MinixAOD.h)

    + +
    +
    +

    Includes

    +
      +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODCutFlow/CutBookkeeper.h

    • +
    • xAODCutFlow/CutBookkeeperAuxContainer.h

    • +
    • xAODCutFlow/CutBookkeeperContainer.h

    • +
    • xAODMetaDataCnv/FileMetaDataTool.h

    • +
    +
    +
    +

    Included By

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Muon.h.html b/api/file_xAODAnaHelpers_Muon.h.html new file mode 100644 index 0000000000..02a54743ac --- /dev/null +++ b/api/file_xAODAnaHelpers_Muon.h.html @@ -0,0 +1,252 @@ + + + + + + + + + + + File Muon.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Muon.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Muon.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonCalibrator.h.html b/api/file_xAODAnaHelpers_MuonCalibrator.h.html new file mode 100644 index 0000000000..0081b52023 --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonCalibrator.h.html @@ -0,0 +1,248 @@ + + + + + + + + + + + File MuonCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonCalibrator.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MuonCalibrator.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgAnalysisInterfaces/IPileupReweightingTool.h

    • +
    • AsgTools/AnaToolHandle.h

    • +
    • MuonMomentumCorrections/MuonCalibTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonContainer.h.html b/api/file_xAODAnaHelpers_MuonContainer.h.html new file mode 100644 index 0000000000..d9df1d5859 --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonContainer.h.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File MuonContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MuonContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html b/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html new file mode 100644 index 0000000000..1df2f3927e --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html @@ -0,0 +1,267 @@ + + + + + + + + + + + File MuonEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonEfficiencyCorrector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Interface to the tools of the MuonEfficiencyCorrections package.

    + +
    +

    Definition (xAODAnaHelpers/MuonEfficiencyCorrector.h)

    + +
    +
    +

    Detailed Description

    +

    Marco Milesi marco.milesi@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • MuonAnalysisInterfaces/IMuonEfficiencyScaleFactors.h

    • +
    • MuonAnalysisInterfaces/IMuonTriggerScaleFactors.h

    • +
    • PATInterfaces/ISystematicsTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • PileupReweighting/PileupReweightingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + +
    +

    Namespaces

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonHists.h.html b/api/file_xAODAnaHelpers_MuonHists.h.html new file mode 100644 index 0000000000..f646de6c5d --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonHists.h.html @@ -0,0 +1,241 @@ + + + + + + + + + + + File MuonHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MuonHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonHistsAlgo.h.html b/api/file_xAODAnaHelpers_MuonHistsAlgo.h.html new file mode 100644 index 0000000000..06d22304d2 --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File MuonHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MuonHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.html b/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.html new file mode 100644 index 0000000000..80982b75a3 --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File MuonInFatJetCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonInFatJetCorrector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/MuonInFatJetCorrector.h)

    + +
    +
    +

    Includes

    + +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_MuonSelector.h.html b/api/file_xAODAnaHelpers_MuonSelector.h.html new file mode 100644 index 0000000000..f0a7ac4ec5 --- /dev/null +++ b/api/file_xAODAnaHelpers_MuonSelector.h.html @@ -0,0 +1,267 @@ + + + + + + + + + + + File MuonSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File MuonSelector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Interface to the tools of the MuonSelectorTools package.

    + +
    +

    Definition (xAODAnaHelpers/MuonSelector.h)

    + +
    +
    +

    Detailed Description

    +

    Marco Milesi marco.milesi@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • IsolationSelection/IIsolationSelectionTool.h

    • +
    • MuonAnalysisInterfaces/IMuonSelectionTool.h

    • +
    • TH1D.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/IMatchScoringTool.h

    • +
    • TriggerMatchingTool/IMatchingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTracking/Vertex.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.html b/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.html new file mode 100644 index 0000000000..30033dae02 --- /dev/null +++ b/api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.html @@ -0,0 +1,256 @@ + + + + + + + + + + + File OnlineBeamSpotTool.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File OnlineBeamSpotTool.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/OnlineBeamSpotTool.h)

    + +
    +
    +

    Includes

    +
      +
    • map

    • +
    • vector

    • +
    • xAODAnaHelpers/EventInfo.h (File EventInfo.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    +

    Namespaces

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_OverlapRemover.h.html b/api/file_xAODAnaHelpers_OverlapRemover.h.html new file mode 100644 index 0000000000..b1437e55ea --- /dev/null +++ b/api/file_xAODAnaHelpers_OverlapRemover.h.html @@ -0,0 +1,263 @@ + + + + + + + + + + + File OverlapRemover.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File OverlapRemover.h

    +

    Parent directory (xAODAnaHelpers)

    +

    xAODAnaHelpers algorithm to perform overlap removal between reconstructed physics objects.

    + +
    +

    Definition (xAODAnaHelpers/OverlapRemover.h)

    + +
    +
    +

    Detailed Description

    +

    Marco Milesi marco.milesi@cern.ch

    +

    Jeff Dandoy

    +
    +
    +

    Includes

    +
      +
    • AssociationUtils/OverlapRemovalInit.h

    • +
    • AssociationUtils/OverlapRemovalTool.h

    • +
    • AssociationUtils/ToolBox.h

    • +
    • TH1D.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODBase/IParticleContainer.h

    • +
    • xAODBase/IParticleHelpers.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODMuon/MuonContainer.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Particle.h.html b/api/file_xAODAnaHelpers_Particle.h.html new file mode 100644 index 0000000000..5858e3f437 --- /dev/null +++ b/api/file_xAODAnaHelpers_Particle.h.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File Particle.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Particle.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Particle.h)

    + +
    +
    +

    Includes

    +
      +
    • TLorentzVector.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ParticleContainer.h.html b/api/file_xAODAnaHelpers_ParticleContainer.h.html new file mode 100644 index 0000000000..0064f3d57e --- /dev/null +++ b/api/file_xAODAnaHelpers_ParticleContainer.h.html @@ -0,0 +1,268 @@ + + + + + + + + + + + File ParticleContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ParticleContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ParticleContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_ParticlePIDManager.h.html b/api/file_xAODAnaHelpers_ParticlePIDManager.h.html new file mode 100644 index 0000000000..c704abcf27 --- /dev/null +++ b/api/file_xAODAnaHelpers_ParticlePIDManager.h.html @@ -0,0 +1,263 @@ + + + + + + + + + + + File ParticlePIDManager.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ParticlePIDManager.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/ParticlePIDManager.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    • AsgMessaging/StatusCode.h

    • +
    • ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h

    • +
    • ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h

    • +
    • ElectronPhotonSelectorTools/LikelihoodEnums.h

    • +
    • ElectronPhotonSelectorTools/egammaPIDdefs.h

    • +
    • TObject.h

    • +
    • string

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODEgamma/Electron.h

    • +
    • xAODEgamma/ElectronContainer.h

    • +
    +
    + + +
    +

    Functions

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Photon.h.html b/api/file_xAODAnaHelpers_Photon.h.html new file mode 100644 index 0000000000..7e93de45c6 --- /dev/null +++ b/api/file_xAODAnaHelpers_Photon.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File Photon.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Photon.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Photon.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_PhotonCalibrator.h.html b/api/file_xAODAnaHelpers_PhotonCalibrator.h.html new file mode 100644 index 0000000000..75ca630369 --- /dev/null +++ b/api/file_xAODAnaHelpers_PhotonCalibrator.h.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File PhotonCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonCalibrator.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/PhotonCalibrator.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • EgammaAnalysisInterfaces/IAsgPhotonEfficiencyCorrectionTool.h

    • +
    • IsolationCorrections/IIsolationCorrectionTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_PhotonContainer.h.html b/api/file_xAODAnaHelpers_PhotonContainer.h.html new file mode 100644 index 0000000000..4883ab71e7 --- /dev/null +++ b/api/file_xAODAnaHelpers_PhotonContainer.h.html @@ -0,0 +1,266 @@ + + + + + + + + + + + File PhotonContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/PhotonContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    +

    Typedefs

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_PhotonHists.h.html b/api/file_xAODAnaHelpers_PhotonHists.h.html new file mode 100644 index 0000000000..62a82cdafc --- /dev/null +++ b/api/file_xAODAnaHelpers_PhotonHists.h.html @@ -0,0 +1,240 @@ + + + + + + + + + + + File PhotonHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/PhotonHists.h)

    + +
    +
    +

    Includes

    +
      +
    • AthContainers/DataVector.h

    • +
    • xAODAnaHelpers/IParticleHists.h (File IParticleHists.h)

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.html b/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.html new file mode 100644 index 0000000000..4ec4341eff --- /dev/null +++ b/api/file_xAODAnaHelpers_PhotonHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File PhotonHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/PhotonHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_PhotonSelector.h.html b/api/file_xAODAnaHelpers_PhotonSelector.h.html new file mode 100644 index 0000000000..cab220721c --- /dev/null +++ b/api/file_xAODAnaHelpers_PhotonSelector.h.html @@ -0,0 +1,255 @@ + + + + + + + + + + + File PhotonSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File PhotonSelector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/PhotonSelector.h)

    + +
    +
    +

    Includes

    +
      +
    • TH1D.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODEgamma/PhotonContainer.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Tau.h.html b/api/file_xAODAnaHelpers_Tau.h.html new file mode 100644 index 0000000000..ee48189265 --- /dev/null +++ b/api/file_xAODAnaHelpers_Tau.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File Tau.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Tau.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Tau.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TauCalibrator.h.html b/api/file_xAODAnaHelpers_TauCalibrator.h.html new file mode 100644 index 0000000000..7abe1ae1e8 --- /dev/null +++ b/api/file_xAODAnaHelpers_TauCalibrator.h.html @@ -0,0 +1,247 @@ + + + + + + + + + + + File TauCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauCalibrator.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TauCalibrator.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • TauAnalysisTools/ITauSmearingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TauContainer.h.html b/api/file_xAODAnaHelpers_TauContainer.h.html new file mode 100644 index 0000000000..d4c48ee575 --- /dev/null +++ b/api/file_xAODAnaHelpers_TauContainer.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File TauContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TauContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.html b/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.html new file mode 100644 index 0000000000..cd95be8ad6 --- /dev/null +++ b/api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + File TauEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauEfficiencyCorrector.h

    +

    Parent directory (xAODAnaHelpers)

    +

    Interface to the tools of the TauEfficiencyCorrections package.

    + +
    +

    Definition (xAODAnaHelpers/TauEfficiencyCorrector.h)

    + +
    +
    +

    Detailed Description

    +

    Federico Scutti federico.scutti@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • PATInterfaces/ISystematicsTool.h

    • +
    • PATInterfaces/SystematicRegistry.h

    • +
    • PATInterfaces/SystematicSet.h

    • +
    • PATInterfaces/SystematicVariation.h

    • +
    • PATInterfaces/SystematicsUtil.h

    • +
    • PileupReweighting/PileupReweightingTool.h

    • +
    • TauAnalysisTools/ITauEfficiencyCorrectionsTool.h

    • +
    • TauAnalysisTools/ITauSelectionTool.h

    • +
    • TauAnalysisTools/TauEfficiencyCorrectionsTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TauJetMatching.h.html b/api/file_xAODAnaHelpers_TauJetMatching.h.html new file mode 100644 index 0000000000..c72e65e67f --- /dev/null +++ b/api/file_xAODAnaHelpers_TauJetMatching.h.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File TauJetMatching.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauJetMatching.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TauJetMatching.h)

    + +
    +
    +

    Includes

    +
      +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODJet/Jet.h

    • +
    • xAODJet/JetContainer.h

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TauSelector.h.html b/api/file_xAODAnaHelpers_TauSelector.h.html new file mode 100644 index 0000000000..973837d4d7 --- /dev/null +++ b/api/file_xAODAnaHelpers_TauSelector.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + File TauSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TauSelector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TauSelector.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • TH1D.h

    • +
    • TauAnalysisTools/ITauSelectionTool.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/IMatchScoringTool.h

    • +
    • TriggerMatchingTool/IMatchingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODTau/TauJet.h

    • +
    • xAODTau/TauJetContainer.h

    • +
    • xAODTau/TauTrack.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrackContainer.h.html b/api/file_xAODAnaHelpers_TrackContainer.h.html new file mode 100644 index 0000000000..e827550086 --- /dev/null +++ b/api/file_xAODAnaHelpers_TrackContainer.h.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File TrackContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TrackContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrackHists.h.html b/api/file_xAODAnaHelpers_TrackHists.h.html new file mode 100644 index 0000000000..3a11ff1faf --- /dev/null +++ b/api/file_xAODAnaHelpers_TrackHists.h.html @@ -0,0 +1,242 @@ + + + + + + + + + + + File TrackHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TrackHists.h)

    + +
    +
    +

    Includes

    +
      +
    • xAODAnaHelpers/HistogramManager.h (File HistogramManager.h)

    • +
    • xAODEventInfo/EventInfo.h

    • +
    • xAODTracking/TrackParticleContainer.h

    • +
    • xAODTracking/Vertex.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrackHistsAlgo.h.html b/api/file_xAODAnaHelpers_TrackHistsAlgo.h.html new file mode 100644 index 0000000000..614695c7a2 --- /dev/null +++ b/api/file_xAODAnaHelpers_TrackHistsAlgo.h.html @@ -0,0 +1,246 @@ + + + + + + + + + + + File TrackHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackHistsAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TrackHistsAlgo.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrackPart.h.html b/api/file_xAODAnaHelpers_TrackPart.h.html new file mode 100644 index 0000000000..8fd43782c7 --- /dev/null +++ b/api/file_xAODAnaHelpers_TrackPart.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File TrackPart.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackPart.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TrackPart.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrackSelector.h.html b/api/file_xAODAnaHelpers_TrackSelector.h.html new file mode 100644 index 0000000000..4e00ffadd7 --- /dev/null +++ b/api/file_xAODAnaHelpers_TrackSelector.h.html @@ -0,0 +1,250 @@ + + + + + + + + + + + File TrackSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrackSelector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TrackSelector.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • InDetTrackSelectionTool/IInDetTrackSelectionTool.h

    • +
    • TH1D.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODTracking/TrackParticleContainer.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TracksInJetHists.h.html b/api/file_xAODAnaHelpers_TracksInJetHists.h.html new file mode 100644 index 0000000000..5b941ac24c --- /dev/null +++ b/api/file_xAODAnaHelpers_TracksInJetHists.h.html @@ -0,0 +1,240 @@ + + + + + + + + + + + File TracksInJetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TracksInJetHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TracksInJetHists.h)

    + +
    +
    +

    Includes

    + +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TreeAlgo.h.html b/api/file_xAODAnaHelpers_TreeAlgo.h.html new file mode 100644 index 0000000000..b9309a1c18 --- /dev/null +++ b/api/file_xAODAnaHelpers_TreeAlgo.h.html @@ -0,0 +1,247 @@ + + + + + + + + + + + File TreeAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TreeAlgo.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TreeAlgo.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TrigMatcher.h.html b/api/file_xAODAnaHelpers_TrigMatcher.h.html new file mode 100644 index 0000000000..dd7e2c0657 --- /dev/null +++ b/api/file_xAODAnaHelpers_TrigMatcher.h.html @@ -0,0 +1,256 @@ + + + + + + + + + + + File TrigMatcher.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TrigMatcher.h

    +

    Parent directory (xAODAnaHelpers)

    +

    xAODAnaHelpers algorithm to match reconstructed physics objects to trigger objects using the Trig::MatchingTool.

    + +
    +

    Definition (xAODAnaHelpers/TrigMatcher.h)

    + +
    +
    +

    Detailed Description

    +

    Karol Krizka kkrizka@cern.ch

    +
    +
    +

    Includes

    +
      +
    • AsgTools/AnaToolHandle.h

    • +
    • TH1D.h

    • +
    • TrigDecisionTool/TrigDecisionTool.h

    • +
    • TriggerMatchingTool/IMatchScoringTool.h

    • +
    • TriggerMatchingTool/IMatchingTool.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TruthContainer.h.html b/api/file_xAODAnaHelpers_TruthContainer.h.html new file mode 100644 index 0000000000..9892cb26bb --- /dev/null +++ b/api/file_xAODAnaHelpers_TruthContainer.h.html @@ -0,0 +1,260 @@ + + + + + + + + + + + File TruthContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TruthContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TruthContainer.h)

    + +
    +
    +

    Includes

    + +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TruthPart.h.html b/api/file_xAODAnaHelpers_TruthPart.h.html new file mode 100644 index 0000000000..410a54bb85 --- /dev/null +++ b/api/file_xAODAnaHelpers_TruthPart.h.html @@ -0,0 +1,251 @@ + + + + + + + + + + + File TruthPart.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TruthPart.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TruthPart.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_TruthSelector.h.html b/api/file_xAODAnaHelpers_TruthSelector.h.html new file mode 100644 index 0000000000..9e0c29ef12 --- /dev/null +++ b/api/file_xAODAnaHelpers_TruthSelector.h.html @@ -0,0 +1,249 @@ + + + + + + + + + + + File TruthSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File TruthSelector.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/TruthSelector.h)

    + +
    +
    +

    Includes

    +
      +
    • TH1D.h

    • +
    • xAODAnaHelpers/Algorithm.h (File Algorithm.h)

    • +
    • xAODBTaggingEfficiency/BTaggingSelectionTool.h

    • +
    • xAODTruth/TruthParticle.h

    • +
    • xAODTruth/TruthParticleContainer.h

    • +
    +
    + +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_VertexContainer.h.html b/api/file_xAODAnaHelpers_VertexContainer.h.html new file mode 100644 index 0000000000..63e73822e4 --- /dev/null +++ b/api/file_xAODAnaHelpers_VertexContainer.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + File VertexContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File VertexContainer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/VertexContainer.h)

    + +
    +
    +

    Includes

    +
      +
    • TLorentzVector.h

    • +
    • TTree.h

    • +
    • string

    • +
    • vector

    • +
    • xAODAnaHelpers/HelperClasses.h (File HelperClasses.h)

    • +
    • xAODAnaHelpers/HelperFunctions.h (File HelperFunctions.h)

    • +
    • xAODTracking/VertexContainer.h

    • +
    • xAODTruth/TruthVertexContainer.h

    • +
    +
    + +
    +

    Namespaces

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_VtxHists.h.html b/api/file_xAODAnaHelpers_VtxHists.h.html new file mode 100644 index 0000000000..d9708ad531 --- /dev/null +++ b/api/file_xAODAnaHelpers_VtxHists.h.html @@ -0,0 +1,241 @@ + + + + + + + + + + + File VtxHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File VtxHists.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/VtxHists.h)

    + +
    +
    +

    Includes

    +
      +
    • xAODAnaHelpers/HistogramManager.h (File HistogramManager.h)

    • +
    • xAODTracking/TrackParticle.h

    • +
    • xAODTracking/TrackParticleContainer.h

    • +
    • xAODTracking/Vertex.h

    • +
    • xAODTracking/VertexContainer.h

    • +
    +
    +
    +

    Included By

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_Writer.h.html b/api/file_xAODAnaHelpers_Writer.h.html new file mode 100644 index 0000000000..8bc6befc7c --- /dev/null +++ b/api/file_xAODAnaHelpers_Writer.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + File Writer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File Writer.h

    +

    Parent directory (xAODAnaHelpers)

    + +
    +

    Definition (xAODAnaHelpers/Writer.h)

    + +
    +
    +

    Includes

    + +
    +
    +

    Included By

    + +
    +
    +

    Classes

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_tools_ReturnCheck.h.html b/api/file_xAODAnaHelpers_tools_ReturnCheck.h.html new file mode 100644 index 0000000000..0b3ca37625 --- /dev/null +++ b/api/file_xAODAnaHelpers_tools_ReturnCheck.h.html @@ -0,0 +1,238 @@ + + + + + + + + + + + File ReturnCheck.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ReturnCheck.h

    +

    Parent directory (xAODAnaHelpers/tools)

    + +
    +

    Definition (xAODAnaHelpers/tools/ReturnCheck.h)

    + +
    +
    +

    Includes

    +
      +
    • AsgMessaging/MessageCheck.h

    • +
    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html b/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html new file mode 100644 index 0000000000..34131db7f4 --- /dev/null +++ b/api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html @@ -0,0 +1,244 @@ + + + + + + + + + + + File ReturnCheckConfig.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    File ReturnCheckConfig.h

    +

    Parent directory (xAODAnaHelpers/tools)

    + +
    +

    Definition (xAODAnaHelpers/tools/ReturnCheckConfig.h)

    + +
    +
    +

    Includes

    +
      +
    • int fSuccess = gSystem-

    • +
    +
    +
    +

    Functions

    + +
    +
    +

    Variables

    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.html b/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.html new file mode 100644 index 0000000000..0d9fb5331d --- /dev/null +++ b/api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(xAH::Algorithm) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(xAH::Algorithm)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(xAH::Algorithm)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.html b/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.html new file mode 100644 index 0000000000..3035443dd3 --- /dev/null +++ b/api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(BJetEfficiencyCorrector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(BJetEfficiencyCorrector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(BJetEfficiencyCorrector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.html b/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.html new file mode 100644 index 0000000000..c7e02c5fae --- /dev/null +++ b/api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(BasicEventSelection) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(BasicEventSelection)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(BasicEventSelection)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.html b/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.html new file mode 100644 index 0000000000..f53335d542 --- /dev/null +++ b/api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(ClusterHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(ClusterHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(ClusterHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.html b/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.html new file mode 100644 index 0000000000..b2923c33e7 --- /dev/null +++ b/api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgClusterHists, “ClusterHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgClusterHists, “ClusterHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgClusterHists, “ClusterHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 18] + (msgClusterHists, “ClusterHists”) + ——————^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.html b/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.html new file mode 100644 index 0000000000..f93bcb80de --- /dev/null +++ b/api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(DebugTool) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(DebugTool)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(DebugTool)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.html b/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.html new file mode 100644 index 0000000000..9bb90f8404 --- /dev/null +++ b/api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(ElectronCalibrator) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(ElectronCalibrator)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(ElectronCalibrator)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.html b/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.html new file mode 100644 index 0000000000..c2c417007e --- /dev/null +++ b/api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(ElectronEfficiencyCorrector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(ElectronEfficiencyCorrector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(ElectronEfficiencyCorrector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.html b/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.html new file mode 100644 index 0000000000..e5e78e33cf --- /dev/null +++ b/api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(ElectronHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(ElectronHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(ElectronHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.html b/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.html new file mode 100644 index 0000000000..2e9ef877fc --- /dev/null +++ b/api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgElectronHists, “ElectronHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgElectronHists, “ElectronHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgElectronHists, “ElectronHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 19] + (msgElectronHists, “ElectronHists”) + ——————-^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.html b/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.html new file mode 100644 index 0000000000..da69bd23ab --- /dev/null +++ b/api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(ElectronSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(ElectronSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(ElectronSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.html b/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.html new file mode 100644 index 0000000000..bd7596aeb2 --- /dev/null +++ b/api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(HLTJetGetter) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(HLTJetGetter)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(HLTJetGetter)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.html b/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.html new file mode 100644 index 0000000000..cd69592aca --- /dev/null +++ b/api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.html @@ -0,0 +1,257 @@ + + + + + + + + + + + Template Function HelperFunctions::makeDeepCopy — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::makeDeepCopy

    + +
    +

    Function Documentation

    +
    +
    +template<typename T1, typename T2, typename T3>
    StatusCode HelperFunctions::makeDeepCopy(xAOD::TStore *m_store, std::string containerName, const T1 *cont)
    +

    Make a deep copy of a container and put it in the TStore.

    +

    This is a very powerful templating function. The point is to remove the triviality of making deep copies by specifying all that is needed. The best way is to demonstrate via example:

    +
    const xAOD::JetContainer  selected_jets(nullptr);
    +ANA_CHECK( m_event->retrieve( selected_jets, "SelectedJets" ));
    +ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::JetContainer, xAOD::JetAuxContainer, xAOD::Jet>(m_store, "BaselineJets", selected_jets)));
    +
    +
    +

    +

    +
    +
    Template Parameters
    +
      +
    • T1 – The type of the container you’re going to deep copy into

    • +
    • T2 – The type of the aux container you’re going to deep copy into

    • +
    • T3 – The type of the object inside the container you’re going to deep copy

    • +
    +
    +
    Parameters
    +
      +
    • m_store – A pointer to the TStore object

    • +
    • containerName – The name of the container to create as output in the TStore

    • +
    • cont – The container to deep copy, it should be a container of pointers (IParticleContainer or ConstDataVector)

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.html b/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.html new file mode 100644 index 0000000000..5127379019 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::getPrimaryVertexZ — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getPrimaryVertexZ

    + +
    +

    Function Documentation

    +
    +
    +float HelperFunctions::getPrimaryVertexZ(const xAOD::Vertex *pvx)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.html b/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.html new file mode 100644 index 0000000000..9c3eaec4a6 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *)

    + +
    +

    Function Documentation

    +
    +
    +inline const xAOD::Vertex *HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *vertexContainer)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.html b/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.html new file mode 100644 index 0000000000..1e35b3c116 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.html @@ -0,0 +1,242 @@ + + + + + + + + + + + Function xAH::addRucio — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function xAH::addRucio

    + +
    +

    Function Documentation

    +
    +
    +void xAH::addRucio(SH::SampleHandler &sh, const std::string &name, const std::string &dslist)
    +

    Directly add a SampleGrid to a SamplerHandler listing several datasets.

    +
    +
    Parameters
    +
      +
    • sh – SampleHander to which the sample will be added to

    • +
    • name – Name of the sample

    • +
    • list – List of datasets to be included in the sample

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.html b/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.html new file mode 100644 index 0000000000..07b0d4d9d2 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *, MsgStream&) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *, MsgStream&)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *, MsgStream&)

    + +
    +

    Function Documentation

    +
    +
    +int HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *vertexContainer, MsgStream &msg)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.html b/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.html new file mode 100644 index 0000000000..a1cb69668c --- /dev/null +++ b/api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    bool HelperFunctions::isAvailable(std::string name, xAOD::TEvent *event, xAOD::TStore *store)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.html b/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.html new file mode 100644 index 0000000000..1ffa63fabd --- /dev/null +++ b/api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::dPhi — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::dPhi

    + +
    +

    Function Documentation

    +
    +
    +float HelperFunctions::dPhi(float phi1, float phi2)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.html b/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.html new file mode 100644 index 0000000000..be56fd6e01 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Template Function HelperFunctions::__attribute__ — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::__attribute__

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “HelperFunctions::__attribute__” with arguments “((deprecated(“retrieve<T>(…, bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882”)))”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 1] + ((deprecated(“retrieve<T>(…, bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882”))) + -^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.html b/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.html new file mode 100644 index 0000000000..250ca50c87 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::passPrimaryVertexSelection — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::passPrimaryVertexSelection

    + +
    +

    Function Documentation

    +
    +
    +bool HelperFunctions::passPrimaryVertexSelection(const xAOD::VertexContainer *vertexContainer, int Ntracks = 2)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.html b/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.html new file mode 100644 index 0000000000..b242f5550b --- /dev/null +++ b/api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::sort_container_pt(const T *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::sort_container_pt(const T *)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    const T HelperFunctions::sort_container_pt(const T *inCont)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.html b/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.html new file mode 100644 index 0000000000..106b87f1a0 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.html @@ -0,0 +1,256 @@ + + + + + + + + + + + Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    bool HelperFunctions::isAvailable(std::string name, xAOD::TEvent *event, xAOD::TStore *store, MsgStream &msg)
    +

    Return true if an arbitrary object from TStore / TEvent is available.

    +

    This tries to make your life simple by providing a one-stop container check shop for all types

    +

    Example Usage:

    +
    const xAOD::JetContainer  jets(0);
    +// look for "AntiKt10LCTopoJets" in both TEvent and TStore
    +HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", m_event, m_store)
    +// look for "AntiKt10LCTopoJets" in only TStore
    +HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", 0, m_store)
    +// look for "AntiKt10LCTopoJets" in only TEvent, enable verbose output
    +HelperFunctions::isAvailable<xAOD::JetContainer>("AntiKt10LCTopoJets", m_event, 0, MSG::VERBOSE)
    +
    +
    +

    +

    +
    +
    Parameters
    +
      +
    • name – the name of the object to look up

    • +
    • event – the TEvent, usually wk()->xaodEvent(). Set to 0 to not search TEvent.

    • +
    • store – the TStore, usually wk()->xaodStore(). Set to 0 to not search TStore.

    • +
    • msg – the MsgStream object with appropriate level for debugging

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.html b/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.html new file mode 100644 index 0000000000..380bce74b4 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::sort_pt — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::sort_pt

    + +
    +

    Function Documentation

    +
    +
    +bool HelperFunctions::sort_pt(const xAOD::IParticle *partA, const xAOD::IParticle *partB)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.html b/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.html new file mode 100644 index 0000000000..ca92262b89 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::jetReclustering — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::jetReclustering

    + +
    +

    Function Documentation

    +
    +
    +std::vector<TLorentzVector> HelperFunctions::jetReclustering(const xAOD::JetContainer *jets, double radius = 1.0, double fcut = 0.05, fastjet::JetAlgorithm rc_alg = fastjet::antikt_algorithm)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.html b/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.html new file mode 100644 index 0000000000..d5c0b9f1f1 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::connectBranch — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::connectBranch

    + +
    +

    Function Documentation

    +
    +
    +template<typename T_BR>
    void HelperFunctions::connectBranch(std::string name, TTree *tree, const std::string &branch, std::vector<T_BR> **variable)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.html b/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.html new file mode 100644 index 0000000000..8fd625c752 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::type_name — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::type_name

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    std::string HelperFunctions::type_name(bool useXAOD = true)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.html b/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.html new file mode 100644 index 0000000000..b353d00d1b --- /dev/null +++ b/api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    StatusCode HelperFunctions::retrieve(T *&cont, std::string name, xAOD::TEvent *event, xAOD::TStore *store)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.html b/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.html new file mode 100644 index 0000000000..289b5dba4e --- /dev/null +++ b/api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::found_non_dummy_sys — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::found_non_dummy_sys

    + +
    +

    Function Documentation

    +
    +
    +inline bool HelperFunctions::found_non_dummy_sys(std::vector<std::string> *sys_list)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.html b/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.html new file mode 100644 index 0000000000..1062d807d7 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.html @@ -0,0 +1,233 @@ + + + + + + + + + + + Template Function HelperFunctions::getLink — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + + + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.html b/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.html new file mode 100644 index 0000000000..8f5192ffeb --- /dev/null +++ b/api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, const std::string&, HelperClasses::ToolName) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, const std::string&, HelperClasses::ToolName)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, const std::string&, HelperClasses::ToolName)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T1, typename T2>
    StatusCode HelperFunctions::makeSubsetCont(T1 *&intCont, T2 *&outCont, const std::string &flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.html b/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.html new file mode 100644 index 0000000000..8c168ebda4 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.html @@ -0,0 +1,243 @@ + + + + + + + + + + + Function HelperFunctions::getListofSystematics — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getListofSystematics

    + +
    +

    Function Documentation

    +
    +
    +std::vector<CP::SystematicSet> HelperFunctions::getListofSystematics(const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream &msg)
    +

    Get a list of systematics.

    +
    +
    Parameters
    +
      +
    • inSysts – systematics set retrieved from the tool

    • +
    • systNames – comma separated list of wanted systematics names, use “Nominal” for nominal and “All” for all systematics

    • +
    • systVal – continuous systematics sigma value

    • +
    • msg – the MsgStream object with appropriate level for debugging

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.html b/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.html new file mode 100644 index 0000000000..3723a71148 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::jetTrimming(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Function HelperFunctions::jetTrimming(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::jetTrimming(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm)

    + +
    +

    Function Documentation

    +
    +
    +std::vector<TLorentzVector> HelperFunctions::jetTrimming(const xAOD::JetContainer *jets, double radius = 0.3, double fcut = 0.05, fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.html b/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.html new file mode 100644 index 0000000000..72be4264ec --- /dev/null +++ b/api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::applyPrimaryVertexSelection — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::applyPrimaryVertexSelection

    + +
    +

    Function Documentation

    +
    +
    +bool HelperFunctions::applyPrimaryVertexSelection(const xAOD::JetContainer *jets, const xAOD::VertexContainer *vertices)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.html b/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.html new file mode 100644 index 0000000000..65d1657316 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::replaceString — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::replaceString

    + +
    +

    Function Documentation

    +
    +
    +std::string HelperFunctions::replaceString(std::string subjet, const std::string &search, const std::string &replace)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.html b/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.html new file mode 100644 index 0000000000..4f01934860 --- /dev/null +++ b/api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::isAvailableMetaData — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::isAvailableMetaData

    + +
    +

    Function Documentation

    +
    +
    +StatusCode HelperFunctions::isAvailableMetaData(TTree *metaData)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.html b/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.html new file mode 100644 index 0000000000..d1267a1653 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.html @@ -0,0 +1,248 @@ + + + + + + + + + + + Function HelperFunctions::getMCShowerType — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getMCShowerType

    + +
    +

    Function Documentation

    +
    +
    +ShowerType HelperFunctions::getMCShowerType(const std::string &sample_name, const std::string &m_taggerName)
    +

    Determines the type of generator used for the shower from the sample name.

    +

    The name of the generator is determined using some common definitions in the ATLAS MC dataset naming scheme. The +case independent strings that are searched for are:

    +
    +

    PYTHIA8EVTGEN or Py8EG or PYTHIA : Pythia8 +HERWIG : Herwig7 +SHERPA_CT : Sherpa21 +SHERPA : Sherpa22 (if not Sherpa 21)

    +
    +

    +

    +
    +
    Parameters
    +

    sample_name – The name of the sample, usualy the dataset name

    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.html b/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.html new file mode 100644 index 0000000000..0a4612e4f9 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.html @@ -0,0 +1,249 @@ + + + + + + + + + + + Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, MsgStream&, const std::string&, HelperClasses::ToolName) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, MsgStream&, const std::string&, HelperClasses::ToolName)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, MsgStream&, const std::string&, HelperClasses::ToolName)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T1, typename T2>
    StatusCode HelperFunctions::makeSubsetCont(T1 *&intCont, T2 *&outCont, MsgStream &msg, const std::string &flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT)
    +

    Function to copy a subset of a generic input xAOD container into a generic output xAOD container.

    +

    +If the optional parameters aren’t specified, the function will just make a full copy of the input container into the output one.

    +
    Author

    Marco Milesi (marco.milesi@cern.ch)

    +
    +
    +

    +
    +
    Parameters
    +
      +
    • intCont[in] input container

    • +
    • outCont[inout] output container

    • +
    • flagSelect[in] (optional) the name of the decoration for objects passing a certain selection (e.g. “passSel”, “overlaps” …). When explicitly specified, it must not be empty.

    • +
    • tool_name[in] (optional) an enum specifying the tool type which is calling this function (definition in HelperClasses::ToolName)

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.html b/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.html new file mode 100644 index 0000000000..a0b96c521c --- /dev/null +++ b/api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.html @@ -0,0 +1,233 @@ + + + + + + + + + + + Function HelperFunctions::msg — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::msg

    + +
    +

    Function Documentation

    +
    +
    +MsgStream &HelperFunctions::msg(MSG::Level lvl = MSG::INFO)
    +

    Static object that provides athena-based message logging functionality

    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.html b/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.html new file mode 100644 index 0000000000..56da9674de --- /dev/null +++ b/api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::writeSystematicsListHist — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::writeSystematicsListHist

    + +
    +

    Function Documentation

    +
    +
    +void HelperFunctions::writeSystematicsListHist(const std::vector<CP::SystematicSet> &systs, std::string histName, TFile *file)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.html b/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.html new file mode 100644 index 0000000000..208e2fda12 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::sort_container_pt(T *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::sort_container_pt(T *)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    T HelperFunctions::sort_container_pt(T *inCont)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.html b/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.html new file mode 100644 index 0000000000..2249a2d35b --- /dev/null +++ b/api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::countPrimaryVertices — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::countPrimaryVertices

    + +
    +

    Function Documentation

    +
    +
    +int HelperFunctions::countPrimaryVertices(const xAOD::VertexContainer *vertexContainer, int Ntracks = 2)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.html b/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.html new file mode 100644 index 0000000000..4fc708b342 --- /dev/null +++ b/api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Template Function HelperFunctions::remove_duplicates — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::remove_duplicates

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    void HelperFunctions::remove_duplicates(std::vector<T> &vec)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.html b/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.html new file mode 100644 index 0000000000..391d964587 --- /dev/null +++ b/api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::SplitString — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::SplitString

    + +
    +

    Function Documentation

    +
    +
    +std::vector<TString> HelperFunctions::SplitString(TString &orig, const char separator)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.html b/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.html new file mode 100644 index 0000000000..3eeea7ac99 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.html @@ -0,0 +1,234 @@ + + + + + + + + + + + Function HelperFunctions::string_pos — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::string_pos

    + +
    +

    Function Documentation

    +
    +
    +std::size_t HelperFunctions::string_pos(const std::string &haystack, const std::string &needle, unsigned int N)
    +

    Function which returns the position of the n-th occurence of a character in a string searching backwards. Returns -1 if no occurencies are found.

    +

    Source: http://stackoverflow.com/questions/18972258/index-of-nth-occurrence-of-the-string

    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.html b/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.html new file mode 100644 index 0000000000..11da473380 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::isFilePrimaryxAOD — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::isFilePrimaryxAOD

    + +
    +

    Function Documentation

    +
    +
    +bool HelperFunctions::isFilePrimaryxAOD(TFile *inputFile)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.html b/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.html new file mode 100644 index 0000000000..7481d61dac --- /dev/null +++ b/api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.html @@ -0,0 +1,282 @@ + + + + + + + + + + + Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)

    + +
    +

    Function Documentation

    +
    +
    +template<typename T>
    StatusCode HelperFunctions::retrieve(T *&cont, std::string name, xAOD::TEvent *event, xAOD::TStore *store, MsgStream &msg)
    +

    Retrieve an arbitrary object from TStore / TEvent.

    +

    This tries to make your life simple by providing a one-stop container retrieval shop for all types.

    +

    Example Usage:

    +
    const xAOD::JetContainer  jets(0);
    +// look for "AntiKt10LCTopoJets" in both TEvent and TStore
    +ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", m_event, m_store) );
    +// look for "AntiKt10LCTopoJets" in only TStore
    +ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", 0, m_store) );
    +// look for "AntiKt10LCTopoJets" in only TEvent, enable verbose output
    +ANA_CHECK( HelperFunctions::retrieve(jets, "AntiKt10LCTopoJets", m_event, 0, msg()) );
    +
    +
    +

    Checking Order:

    +
      +
    • start by checking TStore

      +
        +
      • check if store contains ‘xAOD::JetContainer’ named ‘name’

        +
          +
        • attempt to retrieve from store

        • +
        • return if failure

        • +
        +
      • +
      +
    • +
    • next check TEvent

      +
        +
      • check if event contains ‘xAOD::JetContainer’ named ‘name’

        +
          +
        • attempt to retrieve from event

        • +
        • return if failure

        • +
        +
      • +
      • return FAILURE

      • +
      +
    • +
    • return SUCCESS (should never reach this last line)

    • +
    +

    +

    +
    +
    Parameters
    +
      +
    • cont – pass in a pointer to the object to store the retrieved container in

    • +
    • name – the name of the object to look up

    • +
    • event – the TEvent, usually wk()->xaodEvent(). Set to 0 to not search TEvent.

    • +
    • store – the TStore, usually wk()->xaodStore(). Set to 0 to not search TStore.

    • +
    • msg – the MsgStream object with appropriate level for debugging

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.html b/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.html new file mode 100644 index 0000000000..dd0a8fac79 --- /dev/null +++ b/api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *, MsgStream&) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *, MsgStream&)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *, MsgStream&)

    + +
    +

    Function Documentation

    +
    +
    +const xAOD::Vertex *HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *vertexContainer, MsgStream &msg)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.html b/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.html new file mode 100644 index 0000000000..3c1475eb34 --- /dev/null +++ b/api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::jetTrimming(const xAOD::Jet *, double, double, fastjet::JetAlgorithm) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Doxygen API »
    • + +
    • Function HelperFunctions::jetTrimming(const xAOD::Jet *, double, double, fastjet::JetAlgorithm)
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::jetTrimming(const xAOD::Jet *, double, double, fastjet::JetAlgorithm)

    + +
    +

    Function Documentation

    +
    +
    +TLorentzVector HelperFunctions::jetTrimming(const xAOD::Jet *jet, double radius = 0.3, double fcut = 0.05, fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.html b/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.html new file mode 100644 index 0000000000..2699475db4 --- /dev/null +++ b/api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Template Function HelperFunctions::recordOutput — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Template Function HelperFunctions::recordOutput

    + +
    +

    Function Documentation

    +
    +
    +template<typename T1, typename T2>
    StatusCode HelperFunctions::recordOutput(xAOD::TEvent *m_event, xAOD::TStore *m_store, std::string containerName)
    +

    Copy a container from the TStore to be recorded in the TEvent (eg: to an output)

    +

    If you have a container in the TStore, this function will record it into the output for you without an issue. As an example:

    +
    ANA_CHECK( HelperFunctions::recordOutput<xAOD::JetContainer, xAOD::JetAuxContainer>(m_event, m_store, "BaselineJets"));
    +
    +
    +

    where we build off the previous example of making a deep copy (see HelperFunctions::makeDeepCopy()).

    +

    +

    +
    +
    Template Parameters
    +
      +
    • T1 – The type of the container you’re going to record

    • +
    • T2 – The type of the aux container you’re going to record

    • +
    +
    +
    Parameters
    +
      +
    • m_event – A pointer to the TEvent object

    • +
    • m_store – A pointer to the TStore object

    • +
    • containerName – The name of the container in the TStore to record to TEvent

    • +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.html b/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.html new file mode 100644 index 0000000000..15641065b9 --- /dev/null +++ b/api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::has_exact — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::has_exact

    + +
    +

    Function Documentation

    +
    +
    +bool HelperFunctions::has_exact(const std::string input, const std::string flag)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.html b/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.html new file mode 100644 index 0000000000..f44244f924 --- /dev/null +++ b/api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *)

    + +
    +

    Function Documentation

    +
    +
    +inline int HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *vertexContainer)
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.html b/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.html new file mode 100644 index 0000000000..2b0a33e3bc --- /dev/null +++ b/api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(IParticleHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(IParticleHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(IParticleHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.html b/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.html new file mode 100644 index 0000000000..f8c7f56270 --- /dev/null +++ b/api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(IsoCloseByCorr) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(IsoCloseByCorr)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(IsoCloseByCorr)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.html b/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.html new file mode 100644 index 0000000000..7b2695d4da --- /dev/null +++ b/api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(JetCalibrator) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(JetCalibrator)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(JetCalibrator)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.html b/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.html new file mode 100644 index 0000000000..e9def02734 --- /dev/null +++ b/api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(JetHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(JetHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(JetHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.html b/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.html new file mode 100644 index 0000000000..87c7132259 --- /dev/null +++ b/api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(JetSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(JetSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(JetSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.html b/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.html new file mode 100644 index 0000000000..ac0ee9c9a1 --- /dev/null +++ b/api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(METConstructor) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(METConstructor)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(METConstructor)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.html b/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.html new file mode 100644 index 0000000000..4d54142ac5 --- /dev/null +++ b/api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MessagePrinterAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MessagePrinterAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MessagePrinterAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.html b/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.html new file mode 100644 index 0000000000..fcdc9a5194 --- /dev/null +++ b/api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MetHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MetHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MetHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.html b/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.html new file mode 100644 index 0000000000..59b4bfa341 --- /dev/null +++ b/api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MinixAOD) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MinixAOD)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MinixAOD)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.html b/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.html new file mode 100644 index 0000000000..cc8217ef88 --- /dev/null +++ b/api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MuonCalibrator) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MuonCalibrator)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MuonCalibrator)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.html b/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.html new file mode 100644 index 0000000000..1faad01bb7 --- /dev/null +++ b/api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MuonEfficiencyCorrector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MuonEfficiencyCorrector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MuonEfficiencyCorrector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.html b/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.html new file mode 100644 index 0000000000..3be8025a03 --- /dev/null +++ b/api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MuonHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MuonHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MuonHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.html b/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.html new file mode 100644 index 0000000000..af7f4c28f8 --- /dev/null +++ b/api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MuonInFatJetCorrector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MuonInFatJetCorrector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MuonInFatJetCorrector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.html b/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.html new file mode 100644 index 0000000000..d3af32170d --- /dev/null +++ b/api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(MuonSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(MuonSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(MuonSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.html b/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.html new file mode 100644 index 0000000000..573552a55a --- /dev/null +++ b/api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(OverlapRemover) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(OverlapRemover)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(OverlapRemover)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.html b/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.html new file mode 100644 index 0000000000..d9afa0d0ca --- /dev/null +++ b/api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgPIDManager, “PIDManager”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgPIDManager, “PIDManager”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgPIDManager, “PIDManager”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 16] + (msgPIDManager, “PIDManager”) + —————-^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.html b/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.html new file mode 100644 index 0000000000..686c2088a4 --- /dev/null +++ b/api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ANA_MSG_HEADER — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_HEADER

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_HEADER” with arguments “(msgPIDManager)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 31] + ANA_MSG_HEADER (msgPIDManager) class ElectronLHPIDManager + ——————————-^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 15] + ANA_MSG_HEADER (msgPIDManager) class ElectronLHPIDManager + —————^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 29] + ANA_MSG_HEADER (msgPIDManager) class ElectronLHPIDManager + —————————–^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 29] + ANA_MSG_HEADER (msgPIDManager) class ElectronLHPIDManager + —————————–^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.html b/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.html new file mode 100644 index 0000000000..b8f2742444 --- /dev/null +++ b/api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(PhotonCalibrator) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(PhotonCalibrator)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(PhotonCalibrator)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.html b/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.html new file mode 100644 index 0000000000..0de8b961fd --- /dev/null +++ b/api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(PhotonHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(PhotonHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(PhotonHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.html b/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.html new file mode 100644 index 0000000000..2e3695c51b --- /dev/null +++ b/api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgPhotonHists, “PhotonHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgPhotonHists, “PhotonHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgPhotonHists, “PhotonHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 17] + (msgPhotonHists, “PhotonHists”) + —————–^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.html b/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.html new file mode 100644 index 0000000000..2c2e9929c4 --- /dev/null +++ b/api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(PhotonSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(PhotonSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(PhotonSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.html b/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.html new file mode 100644 index 0000000000..9694e9d820 --- /dev/null +++ b/api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_ERROR — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_ERROR

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_ERROR” with arguments “(“Could not find the ” “configuration file:”<<CONFIG.)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 1] + (“Could not find the ” “configuration file:”<<CONFIG.) + -^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c.html b/api/function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c.html new file mode 100644 index 0000000000..e5543f36af --- /dev/null +++ b/api/function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TauCalibrator) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TauCalibrator)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TauCalibrator)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c.html b/api/function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c.html new file mode 100644 index 0000000000..9f66c45449 --- /dev/null +++ b/api/function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TauEfficiencyCorrector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TauEfficiencyCorrector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TauEfficiencyCorrector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37.html b/api/function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37.html new file mode 100644 index 0000000000..e5ae99b121 --- /dev/null +++ b/api/function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TauJetMatching) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TauJetMatching)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TauJetMatching)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7.html b/api/function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7.html new file mode 100644 index 0000000000..404209104e --- /dev/null +++ b/api/function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TauSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TauSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TauSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9.html b/api/function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9.html new file mode 100644 index 0000000000..ac484a5ee1 --- /dev/null +++ b/api/function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TrackHistsAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TrackHistsAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TrackHistsAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f.html b/api/function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f.html new file mode 100644 index 0000000000..941977a036 --- /dev/null +++ b/api/function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgTrackHists, “TrackHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgTrackHists, “TrackHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgTrackHists, “TrackHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 16] + (msgTrackHists, “TrackHists”) + —————-^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6.html b/api/function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6.html new file mode 100644 index 0000000000..f95e44885b --- /dev/null +++ b/api/function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TrackSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TrackSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TrackSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c.html b/api/function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c.html new file mode 100644 index 0000000000..c3b9bfe96d --- /dev/null +++ b/api/function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgTracksInJetHists, “TracksInJetHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgTracksInJetHists, “TracksInJetHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgTracksInJetHists, “TracksInJetHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 22] + (msgTracksInJetHists, “TracksInJetHists”) + ———————-^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb.html b/api/function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb.html new file mode 100644 index 0000000000..8d11a04098 --- /dev/null +++ b/api/function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TreeAlgo) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TreeAlgo)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TreeAlgo)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988.html b/api/function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988.html new file mode 100644 index 0000000000..34b93a27be --- /dev/null +++ b/api/function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TrigMatcher) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TrigMatcher)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TrigMatcher)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0.html b/api/function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0.html new file mode 100644 index 0000000000..edb473fc64 --- /dev/null +++ b/api/function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(TruthSelector) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(TruthSelector)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(TruthSelector)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427.html b/api/function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427.html new file mode 100644 index 0000000000..8b6028d163 --- /dev/null +++ b/api/function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427.html @@ -0,0 +1,235 @@ + + + + + + + + + + + Function ANA_MSG_SOURCE(msgVtxHists, “VtxHists”) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ANA_MSG_SOURCE(msgVtxHists, “VtxHists”)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ANA_MSG_SOURCE” with arguments “(msgVtxHists, “VtxHists”)”. +Could not parse arguments. Parsing eror is +Invalid C++ declaration: Expected identifier in nested name. [error at 14] + (msgVtxHists, “VtxHists”) + ————–^

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc.html b/api/function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc.html new file mode 100644 index 0000000000..85de5c9d18 --- /dev/null +++ b/api/function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Function ClassImp(Writer) — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Function ClassImp(Writer)

    + +
    +

    Function Documentation

    +
    +

    Warning

    +

    doxygenfunction: Unable to resolve function “ClassImp” with arguments “(Writer)”. +Candidate function could not be parsed. Parsing error is +Error when parsing function declaration. +If the function has no return type: + Invalid C++ declaration: Expected end of definition or ;. [error at 26] + ClassImp (xAH::Algorithm) xAH + ————————–^ +If the function has a return type: + Error in declarator + If declarator-id with parameters-and-qualifiers: + Invalid C++ declaration: Expected identifier in nested name. [error at 9] + ClassImp (xAH::Algorithm) xAH + ———^ + If parenthesis in noptr-declarator: + Error in declarator or parameters-and-qualifiers + If pointer to member declarator: + Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ + If declarator-id: + Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 24] + ClassImp (xAH::Algorithm) xAH + ————————^ +

    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/library_root.html b/api/library_root.html new file mode 100644 index 0000000000..97d6da1b8f --- /dev/null +++ b/api/library_root.html @@ -0,0 +1,2316 @@ + + + + + + + + + + + Doxygen API — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Doxygen API

    +
    +

    Page Hierarchy

    +
    +
    +

    Class Hierarchy

    +
    +
    +

    File Hierarchy

    +
    +
    +

    Full API

    + +
    +

    Classes and Structs

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +

    Functions

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_CP.html b/api/namespace_CP.html new file mode 100644 index 0000000000..df2700541d --- /dev/null +++ b/api/namespace_CP.html @@ -0,0 +1,221 @@ + + + + + + + + + + + Namespace CP — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Namespace CP

    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_EL.html b/api/namespace_EL.html new file mode 100644 index 0000000000..82c6f337d5 --- /dev/null +++ b/api/namespace_EL.html @@ -0,0 +1,221 @@ + + + + + + + + + + + Namespace EL — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Namespace EL

    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_HelperClasses.html b/api/namespace_HelperClasses.html new file mode 100644 index 0000000000..f391e4e0f7 --- /dev/null +++ b/api/namespace_HelperClasses.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Namespace HelperClasses — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    + + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_HelperFunctions.html b/api/namespace_HelperFunctions.html new file mode 100644 index 0000000000..8c7d4633b4 --- /dev/null +++ b/api/namespace_HelperFunctions.html @@ -0,0 +1,295 @@ + + + + + + + + + + + Namespace HelperFunctions — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Namespace HelperFunctions

    +
    +

    Contents

    + +
    +
    +

    Classes

    + +
    +
    +

    Enums

    + +
    +
    +

    Functions

    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_Trig.html b/api/namespace_Trig.html new file mode 100644 index 0000000000..53aa1a037e --- /dev/null +++ b/api/namespace_Trig.html @@ -0,0 +1,221 @@ + + + + + + + + + + + Namespace Trig — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Namespace Trig

    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_TrigConf.html b/api/namespace_TrigConf.html new file mode 100644 index 0000000000..c2a1f51715 --- /dev/null +++ b/api/namespace_TrigConf.html @@ -0,0 +1,221 @@ + + + + + + + + + + + Namespace TrigConf — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Namespace TrigConf

    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/namespace_xAH.html b/api/namespace_xAH.html new file mode 100644 index 0000000000..c19bc5ecd1 --- /dev/null +++ b/api/namespace_xAH.html @@ -0,0 +1,267 @@ + + + + + + + + + + + Namespace xAH — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + + + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/page_bug.html b/api/page_bug.html new file mode 100644 index 0000000000..f02af5c9a3 --- /dev/null +++ b/api/page_bug.html @@ -0,0 +1,220 @@ + + + + + + + + + + + Bug List — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Bug List

    +
    +
    +page bug
    +

    +
    +File HistogramManager.h
    +

    No known bugs

    +
    + +

    +
    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/page_view_hierarchy.html b/api/page_view_hierarchy.html new file mode 100644 index 0000000000..473396451e --- /dev/null +++ b/api/page_view_hierarchy.html @@ -0,0 +1,214 @@ + + + + + + + + + + + Page Hierarchy — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Page Hierarchy

    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_Algorithm.cxx.html b/api/program_listing_file_Root_Algorithm.cxx.html new file mode 100644 index 0000000000..08c07facff --- /dev/null +++ b/api/program_listing_file_Root_Algorithm.cxx.html @@ -0,0 +1,404 @@ + + + + + + + + + + + Program Listing for File Algorithm.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Algorithm.cxx

    +

    Return to documentation for file (Root/Algorithm.cxx)

    +
    #include <xAODAnaHelpers/Algorithm.h>
    +
    +// RCU include for throwing an exception+message
    +#include <RootCoreUtils/ThrowMsg.h>
    +
    +//  for isMC()
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include "xAODEventInfo/EventInfo.h"
    +
    +#include <boost/algorithm/string.hpp>
    +
    +std::map<std::string, int> xAH::Algorithm::m_instanceRegistry = {};
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(xAH::Algorithm)
    +
    +xAH::Algorithm::Algorithm(std::string className) :
    +  m_className(className)
    +{
    +}
    +
    +xAH::Algorithm::~Algorithm()
    +{
    +}
    +
    +StatusCode xAH::Algorithm::algInitialize(){
    +    // register an instance of the the class
    +    registerInstance();
    +    // set the name this way as duplicate names are handled automatically
    +    m_name = name();
    +    // names will be BasicEventSelection.baseEventSel for example
    +    msg().setName(m_className + "." + m_name);
    +    // deprecating m_debug, but this is around for backwards compatibility
    +    m_debug = msgLvl(MSG::DEBUG);
    +    // deprecating m_verbose, but this is around for backwards compatibility
    +    m_verbose = msgLvl(MSG::VERBOSE);
    +
    +
    +    //Backwards compatibility
    +    m_forceFastSim = m_forceFastSim || m_setAFII || m_setAF3;
    +
    +    //Return a failure if there's contradictory flags (2 or more are true)
    +    if( m_forceData ? (m_forceFastSim || m_forceFullSim) : (m_forceFastSim && m_forceFullSim) ){
    +      ANA_MSG_ERROR("Multiple input-type flags are set, be sure only one of m_forceData(" << m_forceData << "), m_forceFastSim(" << m_forceFastSim << "), and m_forceFullSim(" << m_forceFullSim << ") are true.");
    +      return StatusCode::FAILURE;
    +    }
    +    return StatusCode::SUCCESS;
    +}
    +
    +StatusCode xAH::Algorithm::algFinalize(){
    +    unregisterInstance();
    +    return StatusCode::SUCCESS;
    +}
    +
    +StatusCode xAH::Algorithm::parseSystValVector(){
    +
    +    std::stringstream ss(m_systValVectorString);
    +    float systVal;
    +    while( ss >> systVal ){
    +      m_systValVector.push_back(systVal);
    +      if (ss.peek() == ',')
    +        ss.ignore();
    +    }
    +    ss.str("");
    +
    +    return StatusCode::SUCCESS;
    +}
    +
    +bool xAH::Algorithm::isMC(){
    +
    +    // If decision is established, return the decision
    +    if(m_isMC == 0 || m_isMC == 1) return m_isMC;
    +
    +    // If overriding decision by boolean flags
    +    if( m_forceData ){
    +      m_isMC = 0;
    +      return m_isMC;
    +    }else if ( m_forceFullSim || m_forceFastSim ){
    +      m_isMC = 1;
    +      return m_isMC;
    +    }
    +
    +    const xAOD::EventInfo* ei(nullptr);
    +    // couldn't retrieve it
    +    if(!HelperFunctions::retrieve(ei, m_eventInfoContainerName, m_event, m_store, msg()).isSuccess()){
    +      RCU_THROW_MSG( "Could not retrieve eventInfo container (" + m_eventInfoContainerName+") for isMC() check.");
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<uint32_t> eventType("eventTypeBitmask");
    +    if(!eventType.isAvailable(*ei)){
    +      RCU_THROW_MSG( "eventType is not available for isMC() check.");
    +    }
    +
    +    // reached here, return True or False since we have all we need
    +    m_isMC = (static_cast<uint32_t>(eventType(*ei)) & xAOD::EventInfo::IS_SIMULATION);
    +    return m_isMC;
    +}
    +
    +bool xAH::Algorithm::isFastSim(){
    +
    +    // If decision is established, return the decision
    +    if(m_isFastSim == 0 || m_isFastSim == 1) return m_isFastSim;
    +
    +    // If overriding decision by boolean flags
    +    if( m_forceData || m_forceFullSim ){
    +      m_isFastSim = 0;
    +      return m_isFastSim;
    +    }else if ( m_forceFastSim ){
    +      m_isFastSim = 1;
    +      return m_isFastSim;
    +    }
    +
    +    std::string SimulationFlavour;
    +    const xAOD::FileMetaData* fmd = nullptr;
    +    ANA_CHECK( wk()->xaodEvent()->retrieveMetaInput(fmd, "FileMetaData") );
    +    fmd->value(xAOD::FileMetaData::simFlavour, SimulationFlavour);
    +
    +    boost::to_upper(SimulationFlavour);
    +    m_isFastSim = SimulationFlavour.find("ATLFAST") != std::string::npos;
    +
    +    return m_isFastSim;
    +}
    +
    +bool xAH::Algorithm::isAF3(){
    +
    +    // If already set return
    +    if (m_isAF3==0 || m_isAF3==1){
    +      return m_isAF3;
    +    }
    +    // If full sim, return empty string (call function first to make sure Force options are considered)
    +    bool isFaS = isFastSim();
    +    if (!isFaS){
    +      m_isAF3 = 0;
    +      return m_isAF3;
    +    }
    +
    +    if (m_setAF3){
    +      m_isAF3 = 1;
    +      return m_isAF3;
    +    }
    +
    +    std::string SimulationFlavour;
    +    const xAOD::FileMetaData* fmd = nullptr;
    +    if( wk()->xaodEvent()->retrieveMetaInput(fmd, "FileMetaData") != StatusCode::SUCCESS){
    +      ANA_MSG_ERROR("Cannot retreve File Metadata to find simulation flavour");
    +      return false;
    +    }
    +    fmd->value(xAOD::FileMetaData::simFlavour, SimulationFlavour);
    +
    +    boost::to_upper(SimulationFlavour);
    +    if(SimulationFlavour.find("ATLFASTII") != std::string::npos){
    +      m_isAF3 = 0;
    +    } else if (SimulationFlavour.find("ATLFAST3") != std::string::npos){
    +      m_isAF3 = 1;
    +    } else {
    +      ANA_MSG_ERROR("Unexpected Simulation type: "<< SimulationFlavour);
    +      return false;
    +    }
    +
    +    return m_isAF3;
    +}
    +
    +bool xAH::Algorithm::isPHYS(){
    +    TTree* metaData = dynamic_cast<TTree*>( wk()->inputFile()->Get("MetaData") );
    +    if(metaData){
    +      metaData->LoadTree(0);
    +      return (metaData->GetBranch("StreamDAOD_PHYS") || metaData->GetBranch("StreamDAOD_LLP1") || metaData->GetBranch("StreamDAOD_PHYSLITE"));
    +    } else {
    +      ANA_MSG_ERROR("MetaData tree missing from input file!");
    +      return 0;
    +    }
    +}
    +
    +void xAH::Algorithm::registerInstance(){
    +    if(m_registered) return;
    +    m_instanceRegistry[m_className]++;
    +    m_registered = true;
    +}
    +
    +int xAH::Algorithm::numInstances(){
    +    if(m_instanceRegistry.find(m_className) == m_instanceRegistry.end()){
    +        ANA_MSG_ERROR("numInstances: we seem to have recorded zero instances of " << m_className << ". This should not happen.");
    +        return 0;
    +    }
    +    return m_instanceRegistry.at(m_className);
    +}
    +
    +void xAH::Algorithm::unregisterInstance(){
    +    if(m_instanceRegistry.find(m_className) == m_instanceRegistry.end()){
    +        ANA_MSG_ERROR("unregisterInstance: we seem to have recorded zero instances of " << m_className << ". This should not happen.");
    +    }
    +    m_instanceRegistry[m_className]--;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.html b/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..d0ba181064 --- /dev/null +++ b/api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.html @@ -0,0 +1,1026 @@ + + + + + + + + + + + Program Listing for File BJetEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File BJetEfficiencyCorrector.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File BJetEfficiencyCorrector.cxx

    +

    Return to documentation for file (Root/BJetEfficiencyCorrector.cxx)

    +
    /**************************************************
    + *
    + * Interface to CP BJet Efficiency Correction Tool.
    + *
    + * John Alison (john.alison@cern.ch)
    + * Gabriel Facini (gabriel.facini@cern.ch)
    + *
    + *
    + **************************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <SampleHandler/MetaFields.h>
    +
    +#include "PathResolver/PathResolver.h"
    +
    +//EDM
    +#include "xAODJet/JetAuxContainer.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/BJetEfficiencyCorrector.h"
    +
    +#include <AsgMessaging/MessageCheck.h>
    +
    +// tools
    +#include "xAODBTaggingEfficiency/BTaggingSelectionTool.h"
    +#include "xAODBTaggingEfficiency/BTaggingEfficiencyTool.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(BJetEfficiencyCorrector)
    +
    +
    +BJetEfficiencyCorrector :: BJetEfficiencyCorrector () :
    +    Algorithm("BJetEfficiencyCorrector")
    +{
    +}
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: setupJob (EL::Job& job)
    +{
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "BJetEfficiencyCorrector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: histInitialize ()
    +{
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  m_corrFileName = PathResolverFindCalibFile(m_corrFileName);
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: fileExecute ()
    +{
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: changeInput (bool /*firstFile*/)
    +{
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode BJetEfficiencyCorrector :: initialize ()
    +{
    +  ANA_MSG_INFO( "Initializing BJetEfficiencyCorrector Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  // several lists of systematics could be configured
    +  // this is the case when MET sys should be added
    +  // to the OR ones
    +
    +  // parse and split by comma
    +  std::string token;
    +  std::istringstream ss(m_inputAlgo);
    +  while (std::getline(ss, token, ',')) {
    +    m_inputAlgoList.push_back(token);
    +  }
    +
    +  m_decorSF = m_decor + "_SF";
    +  m_decorWeight   = m_decor + "_Weight";
    +  m_decorQuantile = m_decor + "_Quantile";
    +
    +  bool opOK(false),taggerOK(false);
    +  m_getScaleFactors = false;
    +  m_useContinuous   = false;
    +  // not calibrated yet
    +  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTagCalib2017
    +  // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/BTaggingBenchmarksRelease21
    +
    +  // All working points are calibrated (but not all taggers, see next check)
    +  if (m_operatingPt == "FixedCutBEff_60" and (m_taggerName != "GN2v01")) { opOK = true; m_getScaleFactors =  true; }
    +  if (m_operatingPt == "FixedCutBEff_65") {
    +    if(m_taggerName == "GN2v01"){
    +        opOK = true; m_getScaleFactors =  true;
    +    }
    +  }
    +  if (m_operatingPt == "FixedCutBEff_70") { opOK = true; m_getScaleFactors =  true; }
    +  if (m_operatingPt == "FixedCutBEff_77") { opOK = true; m_getScaleFactors =  true; }
    +  if (m_operatingPt == "FixedCutBEff_85") { opOK = true; m_getScaleFactors =  true; }
    +  if (m_operatingPt == "FixedCutBEff_90" and (m_taggerName == "GN2v01")) { opOK = true; m_getScaleFactors =  true; }
    +  if (m_operatingPt == "Continuous"     ) { opOK = true; m_getScaleFactors =  true;
    +    m_useContinuous = true;
    +    ANA_MSG_DEBUG(" Using continuous b-tagging"); }
    +
    +  // No official calibrations in rel22 yet
    +  if (m_taggerName == "DL1r")   { taggerOK = true; m_getScaleFactors =  false; }
    +  if (m_taggerName == "DL1dv00")   { taggerOK = true; m_getScaleFactors = false; }
    +  if (m_taggerName == "DL1dv01")   { taggerOK = true; m_getScaleFactors =  true; }
    +  if (m_taggerName == "GN120220509")   { taggerOK = true; m_getScaleFactors =  false; }
    +  if (m_taggerName == "GN2v00LegacyWP")   { taggerOK = true; m_getScaleFactors =  false; }
    +  if (m_taggerName == "GN2v00NewAliasWP")   { taggerOK = true; m_getScaleFactors =  false; }
    +  if (m_taggerName == "GN2v01")   { taggerOK = true; m_getScaleFactors =  true; }
    +
    +  if( !opOK || !taggerOK ) {
    +    ANA_MSG_ERROR( "Requested tagger/operating point is not known to xAH. Arrow v Indian? " << m_taggerName << "/" << m_operatingPt);
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // make unique name
    +  m_decor               += "_" + m_taggerName + "_" + m_operatingPt;
    +  m_decorSF             += "_" + m_taggerName + "_" + m_operatingPt;
    +  m_outputSystName      += "_" + m_taggerName + "_" + m_operatingPt;
    +  m_decorWeight         += "_" + m_taggerName + "_" + m_operatingPt;
    +  m_decorQuantile       += "_" + m_taggerName + "_" + m_operatingPt;
    +
    +  if(!m_useContinuous){
    +    ANA_MSG_INFO( "Decision Decoration Name     : " << m_decor);
    +    ANA_MSG_INFO( "Scale Factor Decoration Name : " << m_decorSF);
    +  } else {
    +    ANA_MSG_INFO( "Weight Decoration Name: "        << m_decorWeight);
    +    ANA_MSG_INFO( "Quantile Decoration Name: "      << m_decorQuantile);
    +    ANA_MSG_INFO( "Scale Factor Decoration Name : " << m_decorSF);
    +  }
    +
    +  // now take this name and convert it to the cut value for the CDI file
    +  // if using the fixed efficiency points
    +  if(m_operatingPtCDI.empty()) m_operatingPtCDI = m_operatingPt;
    +  ANA_MSG_INFO("Using Standard OperatingPoint for CDI BTag Efficiency of " << m_operatingPtCDI);
    +
    +  m_runAllSyst = (m_systName.find("All") != std::string::npos);
    +
    +  if( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( !isMC() && m_getScaleFactors ) {
    +    ANA_MSG_WARNING( "Attempting to run BTagging Jet Scale Factors on data.  Turning off scale factors." );
    +    m_getScaleFactors = false;
    +  }
    +  if ( m_tagDecisionOnly && m_getScaleFactors ) {
    +    ANA_MSG_WARNING( "BTagging scale factors have been manually disabled. This is not recommended!" );
    +    m_getScaleFactors = false;
    +  }
    +
    +  // initialize the BJetSelectionTool
    +  // A few which are not configurable as of yet....
    +  // is there a reason to have this configurable here??...I think no (GF to self)
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("FlvTagCutDefinitionsFileName",m_corrFileName.c_str()));
    +  // configurable parameters
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("TaggerName",          m_taggerName));
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("OperatingPoint",      m_operatingPt));
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("JetAuthor",           m_jetAuthor));
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("MinPt", m_minPt));
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("ErrorOnTagWeightFailure", m_errorOnTagWeightFailure));
    +  ANA_CHECK( m_BJetSelectTool_handle.setProperty("OutputLevel", msg().level() ));
    +  ANA_CHECK( m_BJetSelectTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_BJetSelectTool_handle);
    +
    +  //  Configure the BJetEfficiencyCorrectionTool
    +  if( m_getScaleFactors ) {
    +
    +    // initialize the BJetEfficiencyCorrectionTool
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("TaggerName",          m_taggerName         ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("SystematicsStrategy", m_systematicsStrategy));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("OperatingPoint",      m_operatingPtCDI     ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("JetAuthor",           m_jetAuthor          ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("MinPt", m_minPt            ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("ScaleFactorFileName", m_corrFileName       ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("UseDevelopmentFile",  m_useDevelopmentFile ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("ConeFlavourLabel",    m_coneFlavourLabel   ));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("OutputLevel", msg().level() ));
    +
    +    if(!m_EfficiencyCalibration.empty()){
    +    std::string calibration=m_EfficiencyCalibration;
    +    if(m_EfficiencyCalibration=="auto")
    +      {
    +        std::string gridName=wk()->metaData()->castString(SH::MetaFields::gridName);
    +
    +        HelperFunctions::ShowerType sampleShowerType=HelperFunctions::Unknown;
    +        if(!gridName.empty())
    +          { // Do not trust sample name on the grid, in case there are multiple samples per job
    +        std::stringstream ss(gridName);
    +        std::string sampleName;
    +        while(std::getline(ss,sampleName,','))
    +          {
    +            HelperFunctions::ShowerType mySampleShowerType=HelperFunctions::getMCShowerType(sampleName,m_taggerName);
    +            if(mySampleShowerType!=sampleShowerType && sampleShowerType!=HelperFunctions::Unknown)
    +              ANA_MSG_ERROR("Cannot have different shower types per grid task.");
    +            sampleShowerType=mySampleShowerType;
    +          }
    +          }
    +        else // Use sample name when running locally
    +          {
    +        gridName=wk()->metaData()->castString(SH::MetaFields::sampleName);
    +        sampleShowerType=HelperFunctions::getMCShowerType(gridName,m_taggerName);
    +          }
    +
    +        if(m_taggerName=="DL1dv01"){
    +            if(m_isRun3){
    +                switch(sampleShowerType)
    +                {
    +                    case HelperFunctions::Pythia8:
    +                        calibration="601229";
    +                        break;
    +                    case HelperFunctions::Herwig7p2:
    +                        calibration="601414";
    +                        break;
    +                    case HelperFunctions::Sherpa2212:
    +                        calibration="700660";
    +                        break;
    +                    default:
    +                        if (m_allowCalibrationFallback) {
    +                          ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'.");
    +                          ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                          calibration="default";
    +                          break;
    +                        }
    +                        else {
    +                          ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << ".");
    +                          return EL::StatusCode::FAILURE;
    +                           break;
    +                        }
    +                }
    +            } else {
    +
    +                switch(sampleShowerType)
    +                {
    +                    case HelperFunctions::Pythia8:
    +                        calibration="410470";
    +                        break;
    +                    case HelperFunctions::Herwig7p1:
    +                        calibration="411233";
    +                        break;
    +                    case HelperFunctions::Herwig7p2:
    +                        calibration="600666";
    +                        break;
    +                    case HelperFunctions::Sherpa221:
    +                        calibration="410250";
    +                        break;
    +                    case HelperFunctions::Sherpa2210:
    +                        calibration="700122";
    +                        break;
    +                    case HelperFunctions::Sherpa2212:
    +                        calibration="700660";
    +                        break;
    +                    case HelperFunctions::AmcPy8:
    +                        calibration="410464";
    +                        break;
    +                    case HelperFunctions::AmcH7:
    +                        calibration="412116";
    +                        break;
    +                    default:
    +                        if (m_allowCalibrationFallback) {
    +                          ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'.");
    +                          ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                          calibration="default";
    +                          break;
    +                        }
    +                        else {
    +                          ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << ".");
    +                          return EL::StatusCode::FAILURE;
    +                          break;
    +                        }
    +                }
    +            }
    +        } else if(m_taggerName=="GN2v01"){
    +            if(m_isRun3){
    +                switch(sampleShowerType)
    +                {
    +                    case HelperFunctions::Pythia8_517:
    +                        calibration="601398";
    +                        break;
    +                    case HelperFunctions::Pythia8:
    +                        calibration="601229";
    +                        break;
    +                    case HelperFunctions::Herwig7p2:
    +                        calibration="601414";
    +                        break;
    +                    case HelperFunctions::Sherpa2214:
    +                        calibration="700808";
    +                        break;
    +                    case HelperFunctions::Sherpa_Unknown:
    +                        ANA_MSG_WARNING("Unknown Sherpa version MC shower type for sample " << gridName << ", falling back to MC-MC SFs for Sherpa 2.2.11-2.2.16.");
    +                        ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                        calibration="700808";
    +                        break;
    +                    default:
    +                        if (m_allowCalibrationFallback) {
    +                          ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'.");
    +                          ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                          calibration="default";
    +                          break;
    +                        }
    +                        else {
    +                          ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << ".");
    +                          return EL::StatusCode::FAILURE;
    +                           break;
    +                        }
    +                }
    +            } else {
    +
    +                switch(sampleShowerType)
    +                {
    +                    case HelperFunctions::Pythia8_517:
    +                        calibration="410480";
    +                        break;
    +                    case HelperFunctions::Pythia8:
    +                        calibration="410470";
    +                        break;
    +                    case HelperFunctions::Herwig7p1:
    +                        calibration="411233";
    +                        break;
    +                    case HelperFunctions::Herwig7p2:
    +                        calibration="600666";
    +                        break;
    +                    case HelperFunctions::Sherpa2214:
    +                        calibration="700660";
    +                        break;
    +                    case HelperFunctions::Sherpa_Unknown:
    +                        ANA_MSG_WARNING("Unknown Sherpa version MC shower type for sample " << gridName << ", falling back to MC-MC SFs for Sherpa 2.2.11-2.2.16.");
    +                        ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                        calibration="700660";
    +                        break;
    +                    default:
    +                      if (m_allowCalibrationFallback) {
    +                        ANA_MSG_WARNING("Cannot determine MC shower type for sample " << gridName << ", falling back to 'default'.");
    +                        ANA_MSG_WARNING("Please double-check if this is appropriate for your sample, otherwise you have specify the MC-to-MC calibration manually!");
    +                        calibration="default";
    +                        break;
    +                      }
    +                      else {
    +                        ANA_MSG_ERROR("Cannot determine MC shower type for sample " << gridName << ".");
    +                        return EL::StatusCode::FAILURE;
    +                        break;
    +                     }
    +                }
    +            }
    +        } else {
    +            if (m_allowCalibrationFallback) {
    +                ANA_MSG_WARNING("Cannot determine MC shower type for tagger " << m_taggerName << ", only GN2v01 and DL1dv01 are supported. Falling back to 'default'.");
    +                ANA_MSG_WARNING("Please double-check if this is appropriate for your sample and tagger, otherwise you have specify the MC-to-MC calibration manually!");
    +                calibration="default";
    +            } else {
    +                ANA_MSG_ERROR("Cannot determine MC shower type for tagger " << m_taggerName << ".");
    +                return EL::StatusCode::FAILURE;
    +            }
    +        }
    +      } else { makeMCIndexMap(m_EfficiencyCalibration); }
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyBCalibrations"    ,  calibration));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyCCalibrations"    ,  calibration));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyTCalibrations"    ,  calibration));
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EfficiencyLightCalibrations",  calibration));
    +      }
    +
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionB"        ,  m_EigenvectorReductionB) );
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionC"        ,  m_EigenvectorReductionC) );
    +    ANA_CHECK( m_BJetEffSFTool_handle.setProperty("EigenvectorReductionLight"    ,  m_EigenvectorReductionLight) );
    +
    +    ANA_CHECK( m_BJetEffSFTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_BJetEffSFTool_handle);
    +
    +  } else {
    +    ANA_MSG_WARNING( "Input operating point is not calibrated - no SFs will be obtained");
    +  }
    +
    +  //
    +  // Print out
    +  //
    +  if( !m_systName.empty() && m_getScaleFactors ) {
    +    ANA_MSG_DEBUG("-----------------------------------------------------");
    +    const std::map<CP::SystematicVariation, std::vector<std::string> > allowed_variations = m_BJetEffSFTool_handle->listSystematics();
    +    ANA_MSG_DEBUG("Allowed systematics variations for tool " << m_BJetEffSFTool_handle.typeAndName() << ":");
    +    for (auto var : allowed_variations) {
    +      ANA_MSG_DEBUG(std::setw(40) << std::left << var.first.name() << ":");
    +      for (auto flv : var.second) ANA_MSG_DEBUG("\t" << flv);
    +    }
    +    ANA_MSG_DEBUG("-----------------------------------------------------");
    +  }
    +
    +
    +  // Get a list of affecting systematics
    +  if( m_getScaleFactors ) {
    +    CP::SystematicSet affectSysts = m_BJetEffSFTool_handle->affectingSystematics();
    +    // Convert into a simple list
    +    std::vector<CP::SystematicSet> affectSystList = CP::make_systematics_vector(affectSysts);
    +    if( !m_systName.empty() ) {
    +      for ( const auto& syst_it : affectSystList ){
    +        ANA_MSG_DEBUG(" tool can be affected by systematic: " << syst_it.name());
    +      }
    +    }
    +
    +    if( m_systName.empty() )
    +      ANA_MSG_INFO(" Running w/ nominal configuration!");
    +
    +    // Get a list of recommended systematics
    +    CP::SystematicSet recSyst = m_BJetEffSFTool_handle->recommendedSystematics();
    +    m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +  }
    +
    +  if( m_runAllSyst ){
    +    ANA_MSG_INFO(" Running w/ All systematics");
    +  }
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_outputSystName, fileMD);
    +  }
    +
    +  // Get DSID to Generator map (if needed)
    +  if (m_setMapIndex){
    +    ANA_MSG_DEBUG("Fill DSID->Generator map");
    +    // open input file
    +    std::ifstream file;
    +    std::string fn = PathResolverFindCalibFile(m_DSIDtoGenerator_filename);
    +    //file.open(gSystem->ExpandPathName(m_DSIDtoGenerator_filename.c_str()));
    +    file.open(fn.c_str());
    +    if (!file.good()) {
    +      ANA_MSG_ERROR("Can't open file " << m_DSIDtoGenerator_filename.c_str());
    +      return EL::StatusCode::FAILURE;
    +    }
    +    // process file
    +    while (!file.eof()) {
    +      // read line
    +      std::string lineString;
    +      getline(file, lineString);
    +      // store in map
    +      std::stringstream line(lineString);
    +      int dsid;
    +      std::string gen;
    +      line >> dsid >> gen;
    +      if (m_DSIDtoGenerator.count(dsid) != 0) {
    +        ANA_MSG_WARNING("Skipping duplicated DSID for line " << lineString.c_str());
    +        continue;
    +      }
    +      m_DSIDtoGenerator[dsid] = gen;
    +    }
    +    file.close();
    +  }
    +
    +  ANA_MSG_INFO( "BJetEfficiencyCorrector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode BJetEfficiencyCorrector :: execute ()
    +{
    +  ANA_MSG_DEBUG( "Applying BJetEfficiencyCorrector for " << m_taggerName << " tagger... ");
    +
    +  //
    +  // retrieve event
    +  //
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +  ANA_MSG_DEBUG("\n\n eventNumber: " << eventInfo->eventNumber() << std::endl );
    +
    +  // if m_inputAlgo == "" --> input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  std::vector<std::string>* systNames_ptr(nullptr);
    +  if ( !m_inputAlgo.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputAlgo, 0, m_store, msg()) );
    +
    +  std::vector<std::string> systNames{""};
    +  if (systNames_ptr) systNames = *systNames_ptr;
    +
    +  // loop over systematic sets available
    +  for ( const std::string& systName : systNames ) {
    +
    +    bool doNominal = (systName == "");
    +
    +    // input jets
    +    const xAOD::JetContainer* inJets(nullptr);
    +
    +    // some systematics might have rejected the event
    +    if ( m_store->contains<xAOD::JetContainer>( m_inContainerName+systName ) ) {
    +      // Check the existence of the container
    +      ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName+systName, m_event, m_store, msg()) );
    +
    +      ANA_CHECK( executeEfficiencyCorrection( inJets, eventInfo, doNominal ) );
    +    }
    +
    +  }
    +
    +  ANA_MSG_DEBUG( "Leave Efficency Selection... ");
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: executeEfficiencyCorrection(const xAOD::JetContainer* inJets,
    +                                      const xAOD::EventInfo* eventInfo,
    +                                      bool doNominal)
    +{
    +  ANA_MSG_DEBUG("Applying BJet Cuts and Efficiency Correction (when applicable...) ");
    +
    +  SG::AuxElement::Decorator< char > dec_isBTag( m_decor );
    +  SG::AuxElement::Decorator< std::vector<float> > dec_sfBTag( m_decorSF );
    +
    +  SG::AuxElement::Decorator< char > dec_isBTagOR( m_decor+"OR" );
    +
    +  // for continuous b-tagging only
    +  SG::AuxElement::Decorator< float > dec_Weight( m_decorWeight );
    +  SG::AuxElement::Decorator< int > dec_Quantile( m_decorQuantile );
    +
    +  //
    +  // run the btagging decision or get weight and quantile if running continuous
    +  //
    +  for( const xAOD::Jet* jet_itr : *(inJets)){
    +
    +    if(abs(jet_itr->eta()) > 2.5){
    +      if(!m_useContinuous){
    +        dec_isBTag( *jet_itr ) = 0;
    +        dec_isBTagOR( *jet_itr ) = 0;
    +      }else{
    +        dec_Quantile( *jet_itr ) = -1;
    +      }
    +      if(m_useContinuous || m_alwaysGetTagWeight) dec_Weight( *jet_itr) = 1;
    +      continue;
    +    }
    +
    +    if(!m_useContinuous){
    +      // get tagging decision
    +      ANA_MSG_DEBUG(" Getting tagging decision ");
    +
    +      // Add decorator for decision
    +      if( m_BJetSelectTool_handle->accept( *jet_itr ) )
    +        dec_isBTag( *jet_itr ) = 1;
    +      else
    +        dec_isBTag( *jet_itr ) = 0;
    +
    +      // Add pT-dependent b-tag decision decorator (intended for use in OR)
    +      if ((m_orBJetPtUpperThres < 0 || m_orBJetPtUpperThres > (*jet_itr).pt()/1000.) // passes pT criteria
    +          && m_BJetSelectTool_handle->accept( *jet_itr ) )
    +        dec_isBTagOR( *jet_itr ) = 1;
    +      else
    +        dec_isBTagOR( *jet_itr ) = 0;
    +    }
    +    else{
    +      ANA_MSG_DEBUG(" Getting Quantile");
    +      int quantile = m_BJetSelectTool_handle->getQuantile(*jet_itr);
    +      ANA_MSG_DEBUG( "quantile: " << quantile );
    +      dec_Quantile( *jet_itr ) = quantile;
    +    }
    +    if(m_useContinuous || m_alwaysGetTagWeight){
    +      ANA_MSG_DEBUG(" Getting TaggerWeight");
    +
    +      double tagWeight;
    +      if( m_BJetSelectTool_handle->getTaggerWeight( *jet_itr, tagWeight)!=CP::CorrectionCode::Ok ){
    +        ANA_MSG_ERROR(" Error retrieving b-tagger weight ");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "tagWeight: " << tagWeight );
    +        dec_Weight( *jet_itr)    = tagWeight;
    +    }
    +  }
    +
    +  //
    +  // get the scale factors for all jets
    +  //
    +  if(m_getScaleFactors)
    +    { // loop over available systematics
    +      for(const CP::SystematicSet& syst_it : m_systList)
    +    {
    +      //  If not nominal input jet collection, dont calculate systematics
    +      if ( !doNominal )
    +        {
    +          if( syst_it.name() != "" )
    +        { // if not nominal btag decision
    +          ANA_MSG_DEBUG("Not running B-tag systematics when doing JES systematics");
    +          continue;
    +        }
    +        }
    +
    +      // configure tool with syst variation
    +      if (m_BJetEffSFTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS)
    +        {
    +          ANA_MSG_ERROR( "Failed to configure BJetEfficiencyCorrections for systematic " << syst_it.name());
    +          return EL::StatusCode::FAILURE;
    +        }
    +      ANA_MSG_DEBUG("Successfully configured BJetEfficiencyCorrections for systematic: " << syst_it.name());
    +
    +          for( const xAOD::Jet* jet_itr : *(inJets))
    +        {
    +              if(abs(jet_itr->eta()) > 2.5){
    +                if(!dec_sfBTag.isAvailable( *jet_itr ))
    +                    dec_sfBTag     ( *jet_itr ) = std::vector<float>({1.});
    +                continue;
    +              }
    +              if(m_setMapIndex){ // select an efficiency map for use in MC/MC and inefficiency scale factors, based on user specified selection of efficiency maps
    +                auto FlavLabel = getFlavorLabel(*jet_itr);
    +                auto DSID      = eventInfo->mcChannelNumber();
    +                auto MCindex   = getMCIndex(DSID);
    +                ANA_CHECK( m_BJetEffSFTool_handle->setMapIndex(FlavLabel,MCindex));
    +              }
    +          // get the scale factor
    +          float SF(-1.0);
    +          CP::CorrectionCode BJetEffCode;
    +          // if passes cut take the efficiency scale factor
    +          // if failed cut take the inefficiency scale factor
    +          // for continuous take efficiency, as inefficiency should not be used
    +          if(m_useContinuous)
    +        {
    +          BJetEffCode = m_BJetEffSFTool_handle->getScaleFactor( *jet_itr, SF );
    +        }
    +          else
    +        {
    +          if( dec_isBTag( *jet_itr ) )
    +            BJetEffCode = m_BJetEffSFTool_handle->getScaleFactor( *jet_itr, SF );
    +          else
    +            BJetEffCode = m_BJetEffSFTool_handle->getInefficiencyScaleFactor( *jet_itr, SF );
    +        }
    +
    +          if (BJetEffCode == CP::CorrectionCode::Error)
    +        {
    +          ANA_MSG_ERROR( "Error in getEfficiencyScaleFactor");
    +          return EL::StatusCode::FAILURE;
    +        }
    +          else if (BJetEffCode == CP::CorrectionCode::OutOfValidityRange)
    +        {
    +          ANA_MSG_DEBUG( "Jet is out of validity range");
    +        }
    +
    +          // Save it to the vector
    +          if(                   !dec_sfBTag     .isAvailable( *jet_itr ))
    +        dec_sfBTag     ( *jet_itr ) = std::vector<float>();
    +
    +
    +          dec_sfBTag( *jet_itr ).push_back(SF);
    +      }
    +    }
    +  }
    +  else
    +    {
    +      for( const xAOD::Jet* jet_itr : *(inJets))
    +    {
    +      if(                   !dec_sfBTag     .isAvailable( *jet_itr ))
    +        dec_sfBTag     ( *jet_itr ) = std::vector<float>({1.});
    +    }
    +    }
    +
    +  //
    +  // Store list of available systematics
    +  //
    +  if(doNominal){
    +    auto sysVariationNames = std::make_unique< std::vector< std::string > >();
    +    if(m_getScaleFactors) {
    +      for(const auto& syst_it : m_systList)
    +    sysVariationNames->push_back(syst_it.name());
    +    }
    +    else {
    +      sysVariationNames->push_back("");
    +    }
    +
    +    ANA_MSG_DEBUG("Size is " << sysVariationNames->size());
    +    for(auto sysName : *sysVariationNames) ANA_MSG_DEBUG(sysName);
    +
    +    ANA_CHECK( m_store->record( std::move(sysVariationNames), m_outputSystName));
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: postExecute ()
    +{
    +  ANA_MSG_DEBUG("Calling postExecute");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: finalize ()
    +{
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BJetEfficiencyCorrector :: histFinalize ()
    +{
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +void BJetEfficiencyCorrector :: makeMCIndexMap (std::string effCalib)
    +{
    +  ANA_MSG_DEBUG( "Calling makeMCIndexMap()");
    +
    +  // Interprete m_EfficiencyCalibration string to identify the corresponding indexes
    +  char delim = ';';
    +  std::vector<std::string> samples;
    +  std::stringstream ss(effCalib);
    +  std::string item;
    +  while (std::getline(ss, item, delim)) {
    +    samples.push_back(item);
    +  }
    +
    +  // Find index for Pythia8, Sherpa 2.2, Herwig7 and aMC@NLO+Pythia8
    +  for (unsigned int i = 0; i < samples.size(); ++i){
    +    if (samples.at(i) == "410470") m_MCIndexes["Pythia8"]    = i;
    +    if (samples.at(i) == "700122") m_MCIndexes["Sherpa2210"] = i;
    +    if (samples.at(i) == "410250") m_MCIndexes["Sherpa22"]   = i;
    +    if (samples.at(i) == "600666") m_MCIndexes["Herwig721"]  = i;
    +    if (samples.at(i) == "410558") m_MCIndexes["Herwig7"]    = i;
    +    if (samples.at(i) == "410464") m_MCIndexes["aMC@NLO"]    = i;
    +  }
    +
    +}
    +
    +unsigned int BJetEfficiencyCorrector :: getMCIndex (int dsid)
    +{
    +  ANA_MSG_DEBUG( "Calling getMCIndex");
    +
    +  auto name = m_DSIDtoGenerator[dsid];
    +
    +  if(m_EfficiencyCalibration=="auto") {
    +    return 0; // there is only one index when m_EfficiencyCalibration == 'auto'
    +  } else {
    +    // Pythia 8
    +    if ((name.find("Pythia8_") != std::string::npos) ||
    +        (name.find("Pythia8B_") != std::string::npos) ||
    +        (name.find("MGPy8EG_") != std::string::npos) ||
    +        (name.find("MadGraphPythia8_") != std::string::npos) ||
    +        (name.find("MadGraphPythia8EvtGen_") != std::string::npos) ||
    +        (name.find("PowhegPythia8EvtGen_CT10_") != std::string::npos) ||
    +        (name.find("PowhegPythia8EvtGen_") != std::string::npos) ||
    +        (name.find("Pythia8EvtGen_") != std::string::npos) ||
    +        (name.find("Pythia8EG_") != std::string::npos) ||
    +        (name.find("PwPy8EG_CT10_") != std::string::npos) ||
    +        (name.find("PowhegPythia8_") != std::string::npos) ||
    +        (name.find("PowhegPythia8EG_") != std::string::npos) ||
    +        (name.find("PhPy8EG_CT10_") != std::string::npos) ||
    +        (name.find("Py8EG_") != std::string::npos) ||
    +        (name.find("Py8") != std::string::npos)) { return m_MCIndexes["Pythia8"]; }
    +
    +    // Sherpa 2.2.10
    +    if ((name.find("Sh_2210") != std::string::npos)){ return m_MCIndexes["Sherpa2210"]; }
    +
    +    // Sherpa 2.2.11
    +    if ((name.find("Sh_2211") != std::string::npos)){ return m_MCIndexes["Sherpa2210"]; } // MC-MC SFs from Sherpa 2.2.10 is the best we can use for Sherpa 2.2.11 (for now)
    +
    +    // Sherpa 2.2
    +    if ((name.find("Sh_22") != std::string::npos) ||
    +        (name.find("Sherpa_NNPDF30NNLO") != std::string::npos) ||
    +        (name.find("Sherpa_221_NNPDF30NNLO") != std::string::npos)){ return m_MCIndexes["Sherpa22"]; }
    +
    +    // Herwig 7.2.1
    +    if ( (name.find("Herwig721") != std::string::npos) ){ return m_MCIndexes["Herwig721"]; }
    +
    +    // Herwig 7
    +    if ( (name.find("Herwig") != std::string::npos) ){ return m_MCIndexes["Herwig"]; }
    +
    +    // aMC@NLO+Pythia8
    +    if ( (name.find("aMC@NLO+Pythia8") != std::string::npos) ){ return m_MCIndexes["aMC@NLO"]; }
    +
    +    // for all other samples, use the default map (pythia8).
    +    ANA_MSG_WARNING( "MC index not recognized, using default (0)." );
    +    return 0;
    +  }
    +}
    +
    +std::string BJetEfficiencyCorrector :: getFlavorLabel (const xAOD::Jet &jet) const
    +{
    +  int label;
    +  bool status = jet.getAttribute<int>( "HadronConeExclTruthLabelID", label );
    +  if(status){
    +    if ((label == 5) || (label == -5)){          return "B";
    +    } else if ((label == 4) || (label == -4)){   return "C";
    +    } else if ((label == 15) || (label == -15)){ return "T";
    +    } else { return "Light";}
    +  } else {
    +    ANA_MSG_WARNING( "HadronConeExclTruthLabelID was not found, using Light as jet flavour for retrieving b-tagging SF." );
    +    return "Light";
    +  }
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_BasicEventSelection.cxx.html b/api/program_listing_file_Root_BasicEventSelection.cxx.html new file mode 100644 index 0000000000..c67f98c513 --- /dev/null +++ b/api/program_listing_file_Root_BasicEventSelection.cxx.html @@ -0,0 +1,1675 @@ + + + + + + + + + + + Program Listing for File BasicEventSelection.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File BasicEventSelection.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File BasicEventSelection.cxx

    +

    Return to documentation for file (Root/BasicEventSelection.cxx)

    +
    // EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/Worker.h>
    +#include "EventLoop/OutputStream.h"
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODCutFlow/CutBookkeeper.h"
    +#include "xAODCutFlow/CutBookkeeperContainer.h"
    +
    +// package include(s):
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/BasicEventSelection.h>
    +
    +#include "PATInterfaces/CorrectionCode.h"
    +//#include "AsgMessaging/StatusCode.h"
    +
    +// tools
    +#include "GoodRunsLists/GoodRunsListSelectionTool.h"
    +#include "PileupReweighting/PileupReweightingTool.h"
    +#include "TrigConfxAOD/xAODConfigTool.h"
    +//#include "PMGTools/PMGSherpa22VJetsWeightTool.h"
    +
    +// For reading metadata
    +#include "AsgTools/AsgMetadataTool.h"
    +#include "xAODMetaData/FileMetaData.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TTree.h"
    +#include "TTreeFormula.h"
    +#include "TSystem.h"
    +#include "xAODCore/tools/IOStats.h"
    +#include "xAODCore/tools/ReadStats.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(BasicEventSelection)
    +
    +BasicEventSelection :: BasicEventSelection () :
    +    Algorithm("BasicEventSelection")
    +{
    +}
    +
    +
    +EL::StatusCode BasicEventSelection :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +  //
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD();
    +  // let's initialize the algorithm to use the xAODRootAccess package
    +  xAOD::Init("BasicEventSelection").ignore(); // call before opening first file
    +
    +  EL::OutputStream outForCFlow(m_cutFlowStreamName);
    +  if(!job.outputHas(m_cutFlowStreamName) ){ job.outputAdd ( outForCFlow ); }
    +
    +  EL::OutputStream outForMetadata(m_metaDataStreamName);
    +  if(!job.outputHas(m_metaDataStreamName) ){ job.outputAdd ( outForMetadata ); }
    +
    +  EL::OutputStream outForDuplicates(m_duplicatesStreamName);
    +  if(!job.outputHas(m_duplicatesStreamName) ){ job.outputAdd ( outForDuplicates ); }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BasicEventSelection :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  // write the metadata hist to this file so algos downstream can pick up the pointer
    +  TFile *fileMD = wk()->getOutputFile (m_metaDataStreamName);
    +  fileMD->cd();
    +
    +  // event counts from meta data
    +  if ( !m_histEventCount ) {
    +    m_histEventCount = new TH1D("MetaData_EventCount", "MetaData_EventCount", 6, 0.5, 6.5);
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(1, "nEvents initial");
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(2, "nEvents selected");
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(3, "sumOfWeights initial");
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(4, "sumOfWeights selected");
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(5, "sumOfWeightsSquared initial");
    +    m_histEventCount -> GetXaxis() -> SetBinLabel(6, "sumOfWeightsSquared selected");
    +  }
    +
    +  TFile *fileSumW = wk()->getOutputFile (m_metaDataStreamName);
    +  fileSumW->cd();
    +
    +  // event counts from meta data
    +  if ( !m_histSumW ) {
    +    m_histSumW = new TH1D("MetaData_SumW", "MetaData_SumW", 1, -0.5, 0.5);
    +    m_histSumW->SetCanExtend(TH1::kAllAxes);
    +  }
    +
    +  ANA_MSG_INFO( "Creating histograms");
    +
    +  // write the cutflows to this file so algos downstream can pick up the pointer
    +  //
    +  TFile *fileCF = wk()->getOutputFile (m_cutFlowStreamName);
    +  fileCF->cd();
    +
    +  // Note: the following code is needed for anyone developing/running in ROOT 6.04.10+
    +  // Bin extension is not done anymore via TH1::SetBit(TH1::kCanRebin), but with TH1::SetCanExtend(TH1::kAllAxes)
    +
    +  //initialise event cutflow, which will be picked ALSO by the algos downstream where an event selection is applied (or at least can be applied)
    +  //
    +  // use 1,1,2 so Fill(bin) and GetBinContent(bin) refer to the same bin
    +  //
    +  m_cutflowHist  = new TH1D("cutflow", "cutflow", 1, 1, 2);
    +  m_cutflowHist->SetCanExtend(TH1::kAllAxes);
    +  // use 1,1,2 so Fill(bin) and GetBinContent(bin) refer to the same bin
    +  //
    +  m_cutflowHistW = new TH1D("cutflow_weighted", "cutflow_weighted", 1, 1, 2);
    +  m_cutflowHistW->SetCanExtend(TH1::kAllAxes);
    +
    +  // initialise object cutflows, which will be picked by the object selector algos downstream and filled.
    +  //
    +  m_el_cutflowHist_1     = new TH1D("cutflow_electrons_1", "cutflow_electrons_1", 1, 1, 2);
    +  m_el_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_el_cutflowHist_2     = new TH1D("cutflow_electrons_2", "cutflow_electrons_2", 1, 1, 2);
    +  m_el_cutflowHist_2->SetCanExtend(TH1::kAllAxes);
    +  m_mu_cutflowHist_1     = new TH1D("cutflow_muons_1", "cutflow_muons_1", 1, 1, 2);
    +  m_mu_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_mu_cutflowHist_2     = new TH1D("cutflow_muons_2", "cutflow_muons_2", 1, 1, 2);
    +  m_mu_cutflowHist_2->SetCanExtend(TH1::kAllAxes);
    +  m_ph_cutflowHist_1     = new TH1D("cutflow_photons_1", "cutflow_photons_1", 1, 1, 2);
    +  m_ph_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_tau_cutflowHist_1     = new TH1D("cutflow_taus_1", "cutflow_taus_1", 1, 1, 2);
    +  m_tau_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_tau_cutflowHist_2     = new TH1D("cutflow_taus_2", "cutflow_taus_2", 1, 1, 2);
    +  m_tau_cutflowHist_2->SetCanExtend(TH1::kAllAxes);
    +  m_jet_cutflowHist_1    = new TH1D("cutflow_jets_1", "cutflow_jets_1", 1, 1, 2);
    +  m_jet_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_trk_cutflowHist_1    = new TH1D("cutflow_trks_1", "cutflow_trks_1", 1, 1, 2);
    +  m_trk_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +  m_truth_cutflowHist_1  = new TH1D("cutflow_truths_1", "cutflow_truths_1", 1, 1, 2);
    +  m_truth_cutflowHist_1->SetCanExtend(TH1::kAllAxes);
    +
    +  // start labelling the bins for the event cutflow
    +  //
    +  m_cutflow_all  = m_cutflowHist->GetXaxis()->FindBin("all");
    +  m_cutflowHistW->GetXaxis()->FindBin("all");
    +
    +  m_cutflow_init  = m_cutflowHist->GetXaxis()->FindBin("init");
    +  m_cutflowHistW->GetXaxis()->FindBin("init");
    +
    +  // extra cutflows
    +  // create histograms when m_doRunByRunCutflows is set to true
    +  // later check if !isMC() for filling so that these only get
    +  // filled when running on data
    +  if (m_doRunByRunCutflows) {
    +    m_runByrun_beforeCuts  = new TH1D("runByrun_cutflow_beforeCuts", "Run-by-Run cutflow before cuts", 1, 1, 2);
    +    m_runByrun_beforeCuts->SetCanExtend(TH1::kAllAxes);
    +
    +    m_runByrun_afterCuts  = new TH1D("runByrun_cutflow_afterCuts", "Run-by-Run cutflow after cuts", 1, 1, 2);
    +    m_runByrun_afterCuts->SetCanExtend(TH1::kAllAxes);
    +  }
    +
    +  ANA_MSG_INFO( "Finished creating histograms");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode BasicEventSelection :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  // get TEvent and TStore - must be done here b/c we need to retrieve CutBookkeepers container from TEvent!
    +  //
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  // get the MetaData tree once a new file is opened, with
    +  //
    +  TTree* MetaData = dynamic_cast<TTree*>( wk()->inputFile()->Get("MetaData") );
    +  if ( !MetaData ) {
    +    ANA_MSG_ERROR( "MetaData tree not found! Exiting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +  MetaData->LoadTree(0);
    +
    +  //---------------------------
    +  // Meta data - CutBookkepers
    +  //---------------------------
    +  //
    +  // Metadata for intial N (weighted) events are used to correctly normalise MC
    +  // if running on a MC DAOD which had some skimming applied at the derivation stage
    +
    +  //check if file is from a DxAOD
    +  bool m_isDerivation = !MetaData->GetBranch("StreamAOD");
    +
    +  if (  m_useMetaData ) {
    +
    +      // Check for potential file corruption
    +      //
    +      // If there are some Incomplete CBK, throw a WARNING,
    +      // unless ALL of them have inputStream == "unknownStream"
    +      //
    +      const xAOD::CutBookkeeperContainer* incompleteCBC(nullptr);
    +      if ( !m_event->retrieveMetaInput(incompleteCBC, "IncompleteCutBookkeepers").isSuccess() ) {
    +      ANA_MSG_ERROR("Failed to retrieve IncompleteCutBookkeepers from MetaData! Exiting.");
    +      return EL::StatusCode::FAILURE;
    +      }
    +      bool allFromUnknownStream(true);
    +      if ( incompleteCBC->size() != 0 ) {
    +
    +      std::string stream("");
    +      for ( auto cbk : *incompleteCBC ) {
    +          ANA_MSG_INFO("Incomplete cbk name: " << cbk->name() << " - stream: " << cbk->inputStream());
    +          if ( cbk->inputStream() != "unknownStream" ) {
    +          allFromUnknownStream = false;
    +          stream = cbk->inputStream();
    +          break;
    +          }
    +      }
    +      if ( !allFromUnknownStream ) { ANA_MSG_WARNING("Found incomplete CBK from stream: " << stream << ". This is not necessarily a sign of file corruption (incomplete CBK appear when 'maxevents' is set in the AOD jo, for instance), but you may still want to check input file for potential corruption..." ); }
    +
    +      }
    +
    +      // Now, let's find the actual information
    +      //
    +      const xAOD::CutBookkeeperContainer* completeCBC(nullptr);
    +      if ( !m_event->retrieveMetaInput(completeCBC, "CutBookkeepers").isSuccess() ) {
    +      ANA_MSG_ERROR("Failed to retrieve CutBookkeepers from MetaData! Exiting.");
    +      return EL::StatusCode::FAILURE;
    +      }
    +
    +      // Find the smallest cycle number, the original first processing step/cycle
    +      int minCycle(10000);
    +      for ( auto cbk : *completeCBC ) {
    +      if ( !( cbk->name().empty() )  && ( minCycle > cbk->cycle() ) ){ minCycle = cbk->cycle(); }
    +      }
    +
    +      // Now, let's actually find the right one that contains all the needed info...
    +      const xAOD::CutBookkeeper* allEventsCBK(nullptr);
    +      const xAOD::CutBookkeeper* DxAODEventsCBK(nullptr);
    +
    +      if ( m_isDerivation ) {
    +    if(m_derivationName != ""){
    +      ANA_MSG_INFO("Override auto config to look at DAOD made by Derivation Algorithm: " << m_derivationName);
    +    }else{
    +      ANA_MSG_INFO("Will autoconfig to look at DAOD made by Derivation Algorithm.");
    +    }
    +      }
    +
    +      int maxCycle(-1);
    +      for ( const xAOD::CutBookkeeper* cbk: *completeCBC )
    +    {
    +      // Find initial book keeper
    +      ANA_MSG_INFO("Complete cbk name: " << cbk->name() << " - stream: " << cbk->inputStream() );
    +      if( cbk->cycle() > maxCycle && cbk->name() == "AllExecutedEvents" && cbk->inputStream() == "StreamAOD" )
    +        {
    +          allEventsCBK = cbk;
    +          maxCycle = cbk->cycle();
    +        }
    +
    +      // Find derivation book keeper
    +      if ( m_isDerivation )
    +        {
    +
    +          if(m_derivationName != "")
    +        {
    +          if ( cbk->name() == m_derivationName )
    +            DxAODEventsCBK = cbk;
    +        }
    +          else if( cbk->name().find("Kernel") != std::string::npos )
    +        {
    +          ANA_MSG_INFO("Auto config found DAOD made by Derivation Algorithm: " << cbk->name());
    +          DxAODEventsCBK = cbk;
    +        }
    +        } // is derivation
    +
    +      // Find and record AOD-level sumW information for all alternate weights
    +      //  The nominal AllExecutedEvents will be filled later, due to posibility of multiple CBK entries
    +      if(cbk->name().substr(0,37) == "AllExecutedEvents_NonNominalMCWeight_" && cbk->name().length()!=17 && cbk->inputStream() == "StreamAOD")
    +        {
    +          // Extract weight index from name
    +          int32_t idx=std::stoi(cbk->name().substr(37));
    +
    +          // Fill histogram, making sure that there is space
    +          // Note will fill bin index = idx+1
    +          while(idx>=m_histSumW->GetNbinsX())
    +        m_histSumW->LabelsInflate("X");
    +          m_histSumW->Fill(idx, cbk->sumOfEventWeights());
    +        }
    +    }
    +
    +      if(allEventsCBK == nullptr) {
    +        ANA_MSG_WARNING("No allEventsCBK found (this is expected for DataScouting, otherwise not). Event numbers set to 0.");
    +        m_MD_initialNevents     = 0;
    +        m_MD_initialSumW        = 0;
    +        m_MD_initialSumWSquared = 0;
    +      }
    +      else {
    +        m_MD_initialNevents     = allEventsCBK->nAcceptedEvents();
    +        m_MD_initialSumW        = allEventsCBK->sumOfEventWeights();
    +        m_MD_initialSumWSquared = allEventsCBK->sumOfEventWeightsSquared();
    +      }
    +
    +      if ( m_isDerivation && !DxAODEventsCBK ) {
    +        ANA_MSG_ERROR( "No CutBookkeeper corresponds to the selected Derivation Framework algorithm name. Check it with your DF experts! Aborting.");
    +        return EL::StatusCode::FAILURE;
    +      }
    +
    +      m_MD_finalNevents       = ( m_isDerivation ) ? DxAODEventsCBK->nAcceptedEvents() : m_MD_initialNevents;
    +      m_MD_finalSumW          = ( m_isDerivation ) ? DxAODEventsCBK->sumOfEventWeights() : m_MD_initialSumW;
    +      m_MD_finalSumWSquared   = ( m_isDerivation ) ? DxAODEventsCBK->sumOfEventWeightsSquared() : m_MD_initialSumWSquared;
    +
    +      // Write metadata event bookkeepers to histogram
    +      //
    +      ANA_MSG_INFO( "Meta data from this file:");
    +      ANA_MSG_INFO( "Initial  events  = "                << static_cast<unsigned int>(m_MD_initialNevents) );
    +      ANA_MSG_INFO( "Selected events  = "                << static_cast<unsigned int>(m_MD_finalNevents) );
    +      ANA_MSG_INFO( "Initial  sum of weights = "         << m_MD_initialSumW);
    +      ANA_MSG_INFO( "Selected sum of weights = "         << m_MD_finalSumW);
    +      ANA_MSG_INFO( "Initial  sum of weights squared = " << m_MD_initialSumWSquared);
    +      ANA_MSG_INFO( "Selected sum of weights squared = " << m_MD_finalSumWSquared);
    +
    +      m_cutflowHist ->Fill(m_cutflow_all, m_MD_initialNevents);
    +      m_cutflowHistW->Fill(m_cutflow_all, m_MD_initialSumW);
    +
    +      m_histSumW->Fill(0., m_MD_initialSumW);
    +
    +      m_histEventCount -> Fill(1, m_MD_initialNevents);
    +      m_histEventCount -> Fill(2, m_MD_finalNevents);
    +      m_histEventCount -> Fill(3, m_MD_initialSumW);
    +      m_histEventCount -> Fill(4, m_MD_finalSumW);
    +      m_histEventCount -> Fill(5, m_MD_initialSumWSquared);
    +      m_histEventCount -> Fill(6, m_MD_finalSumWSquared);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode BasicEventSelection :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BasicEventSelection :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing BasicEventSelection... ");
    +
    +  // if truth level make sure parameters are set properly
    +  if( m_truthLevelOnly ) {
    +    ANA_MSG_INFO( "Truth only! Turn off trigger stuff");
    +    m_triggerSelection      = "";
    +    m_extraTriggerSelection = "";
    +    m_applyTriggerCut = m_storeTrigDecisions = m_storePassL1 = m_storePassHLT = m_storeTrigKeys = false;
    +    ANA_MSG_INFO( "Truth only! Turn off GRL");
    +    m_applyGRLCut = false;
    +    ANA_MSG_INFO( "Truth only! Turn off Pile-up Reweight");
    +    m_doPUreweighting = false;
    +    m_doPUreweightingSys = false;
    +  }
    +
    +  // get TEvent and TStore
    +  //
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  ANA_MSG_DEBUG( "Is MC? " << isMC() );
    +
    +  //Protection in case GRL does not apply to this run
    +  //
    +  if ( m_applyGRLCut ) {
    +    std::string runNumString = std::to_string(eventInfo->runNumber());
    +    if ( m_GRLExcludeList.find( runNumString ) != std::string::npos ) {
    +      ANA_MSG_INFO( "RunNumber is in GRLExclusion list, setting applyGRL to false");
    +      m_applyGRLCut = false;
    +    }
    +  }
    +
    +  m_cleanPowheg = false;
    +  if ( eventInfo->runNumber() == 426005 ) { // Powheg+Pythia J5
    +    m_cleanPowheg = true;
    +    ANA_MSG_INFO( "This is J5 Powheg - cleaning that nasty huge weight event");
    +  }
    +
    +
    +  // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#Sherpa_v2_2_0_V_jets_NJet_reweig
    +  //m_reweightSherpa22 = false;
    +  //if( isMC() &&
    +  //    ( (eventInfo->mcChannelNumber() >= 363331 && eventInfo->mcChannelNumber() <= 363483 ) ||
    +  //      (eventInfo->mcChannelNumber() >= 363102 && eventInfo->mcChannelNumber() <= 363122 ) ||
    +  //      (eventInfo->mcChannelNumber() >= 363361 && eventInfo->mcChannelNumber() <= 363435 ) ) ){
    +  //  ANA_MSG_INFO( "This is Sherpa 2.2 dataset and should be reweighted.  An extra weight will be saved to EventInfo called \"weight_Sherpa22\".");
    +  //  m_reweightSherpa22 = true;
    +
    +  //  //Choose Jet Truth container, WZ has more information and is favored by the tool
    +  //  std::string pmg_TruthJetContainer = "";
    +  //  if( m_event->contains<xAOD::JetContainer>("AntiKt4TruthWZJets") ){
    +  //    pmg_TruthJetContainer = "AntiKt4TruthWZJets";
    +  //  } else if( m_event->contains<xAOD::JetContainer>("AntiKt4TruthJets") ){
    +  //    pmg_TruthJetContainer = "AntiKt4TruthJets";
    +  //  } else {
    +  //    ANA_MSG_WARNING( "No Truth Jet Container found for Sherpa 22 reweighting, weight_Sherpa22 will not be set.");
    +  //    m_reweightSherpa22 = false;
    +  //  }
    +
    +  //  //Initialize Tool
    +  //  if( m_reweightSherpa22 ){
    +
    +  //    ANA_CHECK( m_reweightSherpa22_tool_handle.setProperty( "TruthJetContainer", pmg_TruthJetContainer ));
    +  //    ANA_CHECK( m_reweightSherpa22_tool_handle.setProperty( "OutputLevel", msg().level() ));
    +  //    ANA_CHECK( m_reweightSherpa22_tool_handle.retrieve());
    +  //    ANA_MSG_DEBUG("Retrieved tool: " << m_reweightSherpa22_tool_handle);
    +
    +  //  }
    +  //}//if isMC and a Sherpa 2.2 sample
    +
    +  ANA_MSG_INFO( "Setting up histograms based on isMC()");
    +
    +  if ( ( !isMC() && m_checkDuplicatesData ) || ( isMC() && m_checkDuplicatesMC ) ) {
    +    m_cutflow_duplicates  = m_cutflowHist->GetXaxis()->FindBin("Duplicates");
    +    m_cutflowHistW->GetXaxis()->FindBin("Duplicates");
    +  }
    +
    +  if ( !isMC() ) {
    +    if ( m_applyGRLCut ) {
    +      m_cutflow_grl  = m_cutflowHist->GetXaxis()->FindBin("GRL");
    +      m_cutflowHistW->GetXaxis()->FindBin("GRL");
    +    }
    +    m_cutflow_lar  = m_cutflowHist->GetXaxis()->FindBin("LAr");
    +    m_cutflowHistW->GetXaxis()->FindBin("LAr");
    +    m_cutflow_tile = m_cutflowHist->GetXaxis()->FindBin("tile");
    +    m_cutflowHistW->GetXaxis()->FindBin("tile");
    +    m_cutflow_SCT = m_cutflowHist->GetXaxis()->FindBin("SCT");
    +    m_cutflowHistW->GetXaxis()->FindBin("SCT");
    +    m_cutflow_core = m_cutflowHist->GetXaxis()->FindBin("core");
    +    m_cutflowHistW->GetXaxis()->FindBin("core");
    +  }
    +  if ( m_applyJetCleaningEventFlag ) {
    +    m_cutflow_jetcleaning = m_cutflowHist->GetXaxis()->FindBin("JetCleaning");
    +    m_cutflowHistW->GetXaxis()->FindBin("JetCleaning");
    +  }
    +  if ( !isMC() ) {
    +    if ( m_applyIsBadBatmanFlag ) {
    +      m_cutflow_isbadbatman =  m_cutflowHist->GetXaxis()->FindBin("IsBadBatman");
    +      m_cutflowHistW->GetXaxis()->FindBin("IsBadBatman");
    +    }
    +  }
    +  m_cutflow_npv  = m_cutflowHist->GetXaxis()->FindBin("NPV");
    +  m_cutflowHistW->GetXaxis()->FindBin("NPV");
    +  if ( !m_triggerSelection.empty() && m_applyTriggerCut ) {
    +    m_cutflow_trigger  = m_cutflowHist->GetXaxis()->FindBin("Trigger");
    +    m_cutflowHistW->GetXaxis()->FindBin("Trigger");
    +  }
    +
    +  ANA_MSG_INFO( "Histograms set up!");
    +
    +  // -------------------------------------------------------------------------------------------------
    +
    +  // Create TTree for bookeeeping duplicated events
    +  //
    +  TFile *fileDPL = wk()->getOutputFile (m_duplicatesStreamName);
    +  fileDPL->cd();
    +
    +  m_duplicatesTree = new TTree("duplicates","Info on duplicated events");
    +  m_duplicatesTree->Branch("runNumber",    &m_duplRunNumber,      "runNumber/I");
    +  m_duplicatesTree->Branch("eventNumber",  &m_duplEventNumber,    "eventNumber/L");
    +
    +  // -------------------------------------------------------------------------------------------------
    +
    +  ANA_MSG_INFO( "Setting Up Tools");
    +
    +  // 1.
    +  // initialize the GoodRunsListSelectionTool
    +  //
    +
    +  if(m_applyGRLCut){
    +    std::vector<std::string> vecStringGRL;
    +
    +    std::string grl;
    +    std::istringstream ss(m_GRLxml);
    +    while ( std::getline(ss, grl, ',') ) {
    +        std::string file = PathResolverFindCalibFile(grl);
    +        ANA_MSG_DEBUG("Found GRL: " << file);
    +        vecStringGRL.push_back(file);
    +    }
    +
    +    ANA_CHECK( m_grl_handle.setProperty("GoodRunsListVec", vecStringGRL));
    +    ANA_CHECK( m_grl_handle.setProperty("PassThrough", false));
    +    ANA_CHECK( m_grl_handle.setProperty("OutputLevel", msg().level()));
    +    ANA_CHECK( m_grl_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_grl_handle);
    +  }
    +
    +  // 2.
    +  // initialize the Trig::TrigDecisionTool
    +  //
    +  if( !m_triggerSelection.empty() || !m_extraTriggerSelection.empty() ||
    +      m_applyTriggerCut || m_storeTrigDecisions || m_storePassL1 || m_storePassHLT || m_storeTrigKeys ) {
    +
    +    ANA_CHECK( m_trigConfTool_handle.setProperty("OutputLevel", msg().level()));
    +    ANA_CHECK( m_trigConfTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_trigConfTool_handle);
    +
    +    ANA_CHECK( m_trigDecTool_handle.setProperty( "ConfigTool", m_trigConfTool_handle ));
    +    ANA_CHECK( m_trigDecTool_handle.setProperty( "TrigDecisionKey", "xTrigDecision" ));
    +    ANA_CHECK( m_trigDecTool_handle.setProperty( "OutputLevel", msg().level() ));
    +
    +    if ( m_useRun3navigation )
    +    {
    +      ANA_CHECK( m_trigDecTool_handle.setProperty( "NavigationFormat", "TrigComposite") );
    +      ANA_CHECK( m_trigDecTool_handle.setProperty( "HLTSummary", m_HLTSummary) );
    +    } else {
    +      ANA_CHECK( m_trigDecTool_handle.setProperty( "NavigationFormat", "TriggerElement") );
    +    }
    +    ANA_CHECK( m_trigDecTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +
    +    // parse extra triggers list and split by comma
    +    std::string token;
    +    std::istringstream ss(m_extraTriggerSelection);
    +    while (std::getline(ss, token, ',')) {
    +      m_extraTriggerSelectionList.push_back(token);
    +    }
    +  }//end trigger configuration
    +
    +  // 3.
    +  // initialize the CP::PileupReweightingTool
    +  //
    +
    +  if ( m_doPUreweighting ) {
    +
    +    std::vector<std::string> PRWFiles;
    +    std::vector<std::string> lumiCalcFiles;
    +
    +    std::string tmp_lumiCalcFileNames = m_lumiCalcFileNames;
    +    std::string tmp_PRWFileNames      = m_PRWFileNames;
    +
    +    // Parse all comma seperated files
    +    //
    +    while ( tmp_PRWFileNames.size() > 0) {
    +      size_t pos = tmp_PRWFileNames.find_first_of(',');
    +      if ( pos == std::string::npos ) {
    +        pos = tmp_PRWFileNames.size();
    +        PRWFiles.push_back(tmp_PRWFileNames.substr(0, pos));
    +        tmp_PRWFileNames.erase(0, pos);
    +      } else {
    +        PRWFiles.push_back(tmp_PRWFileNames.substr(0, pos));
    +        tmp_PRWFileNames.erase(0, pos+1);
    +      }
    +    }
    +    while ( tmp_lumiCalcFileNames.size() > 0) {
    +      size_t pos = tmp_lumiCalcFileNames.find_first_of(',');
    +      if ( pos == std::string::npos ) {
    +        pos = tmp_lumiCalcFileNames.size();
    +        lumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos));
    +        tmp_lumiCalcFileNames.erase(0, pos);
    +      } else {
    +        lumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos));
    +        tmp_lumiCalcFileNames.erase(0, pos+1);
    +      }
    +    }
    +
    +    // Find trigger specific lumicalc files
    +    if ( !isMC() ) {
    +      for ( const std::string &lumiCalcFile : lumiCalcFiles) {
    +        size_t pos = lumiCalcFile.find_first_of(':');
    +        if ( pos != std::string::npos ) {
    +          m_triggerUnprescaleList.push_back(lumiCalcFile.substr(pos + 1));
    +        }
    +      }
    +
    +      if ( !m_triggerUnprescaleList.empty() ) {
    +        ANA_MSG_INFO("*** Trigger chains used for data unprescaling:");
    +        for ( const std::string &trigger : m_triggerUnprescaleList ) {
    +          ANA_MSG_INFO( "\t " << trigger );
    +        }
    +      }
    +    }
    +
    +    if(m_autoconfigPRW)
    +      { ANA_CHECK( autoconfigurePileupRWTool() ); }
    +    else
    +      {
    +        if ( isMC() ) {
    +          ANA_MSG_INFO( "Adding Pileup files for CP::PileupReweightingTool:");
    +          for( unsigned int i=0; i < PRWFiles.size(); ++i){
    +            ANA_MSG_INFO( "\t- " << PRWFiles.at(i).c_str());
    +          }
    +          ANA_CHECK( m_pileup_tool_handle.setProperty("ConfigFiles", PRWFiles));
    +        }
    +
    +        ANA_MSG_INFO( "Adding LumiCalc files for CP::PileupReweightingTool:");
    +        for( unsigned int i=0; i < lumiCalcFiles.size(); ++i){
    +          ANA_MSG_INFO( "\t- " << lumiCalcFiles.at(i).c_str());
    +        }
    +        ANA_CHECK( m_pileup_tool_handle.setProperty("LumiCalcFiles", lumiCalcFiles));
    +      }
    +    ANA_CHECK( m_pileup_tool_handle.setProperty("UsePeriodConfig", m_periodConfig) );
    +    ANA_CHECK( m_pileup_tool_handle.setProperty("OutputLevel", msg().level() ));
    +    if ( !m_triggerUnprescaleList.empty() ) {
    +      // We need to make an instance of ITrigDecisionTool:
    +      asg::AnaToolHandle<Trig::ITrigDecisionTool> iTrigDecTool_handle {"Trig::TrigDecisionTool/TrigDecisionTool"};
    +      if ( !iTrigDecTool_handle.isUserConfigured() ) {
    +        ANA_MSG_FATAL("A configured " << iTrigDecTool_handle.typeAndName() << " must have been previously created!");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_CHECK( iTrigDecTool_handle.retrieve() );
    +      ANA_CHECK( m_pileup_tool_handle.setProperty("TrigDecisionTool", iTrigDecTool_handle ));
    +    }
    +    ANA_CHECK( m_pileup_tool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle);
    +  }
    +
    +  // As a check, let's see the number of events in our file (long long int)
    +  //
    +  ANA_MSG_INFO( "Number of events in file = " << m_event->getEntries());
    +
    +  // Initialize counter for number of entries
    +  m_eventCounter   = 0;
    +
    +  ANA_MSG_INFO( "BasicEventSelection succesfully initialized!");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BasicEventSelection :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Basic Event Selection");
    +
    +  // Print every 1000 entries, so we know where we are:
    +  //
    +  if ( (m_eventCounter % 1000) == 0 ) {
    +    ANA_MSG_INFO( "Entry number = " << m_eventCounter);
    +    ANA_MSG_VERBOSE( "Store Content:");
    +    if(msgLvl(MSG::VERBOSE)) m_store->print();
    +    ANA_MSG_VERBOSE( "End Content");
    +  }
    +
    +  //-----------------------------------------
    +  // Print triggers used for first entry only
    +  // and fill the trigger expression for
    +  // unprescaling data
    +  //-----------------------------------------
    +
    +  std::string TriggerExpression = "";
    +
    +  if ( !m_triggerSelection.empty() ) {
    +    if (m_eventCounter == 0) {
    +      if (m_eventCounter == 0) ANA_MSG_INFO( "*** Triggers used (in OR) are:\n");
    +      auto printingTriggerChainGroup = m_trigDecTool_handle->getChainGroup(m_triggerSelection);
    +      std::vector<std::string> triggersUsed = printingTriggerChainGroup->getListOfTriggers();
    +      for ( unsigned int iTrigger = 0; iTrigger < triggersUsed.size(); ++iTrigger ) {
    +        if (m_eventCounter == 0) ANA_MSG_INFO("\t" << triggersUsed.at(iTrigger).c_str());
    +        TriggerExpression.append(triggersUsed.at(iTrigger).c_str());
    +        if ( iTrigger != triggersUsed.size() - 1) TriggerExpression.append(" || ");
    +      }
    +    }
    +  }
    +
    +  if ( m_eventCounter == 0 && !m_extraTriggerSelection.empty() ) {
    +    ANA_MSG_INFO( "*** Extra Trigger Info Saved are :\n");
    +    for ( const std::string &trigName : m_extraTriggerSelectionList ) {
    +      ANA_MSG_INFO("\t" << trigName.c_str());
    +
    +      ANA_MSG_INFO("\tEvaluates to:");
    +      auto printingTriggerChainGroup = m_trigDecTool_handle->getChainGroup(trigName);
    +      std::vector<std::string> triggersUsed = printingTriggerChainGroup->getListOfTriggers();
    +      for ( unsigned int iTrigger = 0; iTrigger < triggersUsed.size(); ++iTrigger ) {
    +        ANA_MSG_INFO("\t- "<< triggersUsed.at(iTrigger).c_str());
    +      }
    +    }
    +  }
    +
    +
    +
    +  ++m_eventCounter;
    +
    +  //------------------
    +  // Grab event
    +  //------------------
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  //------------------------------------------------------------------------------------------
    +  // Declare an 'eventInfo' decorator with the MC event weight
    +  //------------------------------------------------------------------------------------------
    +  static SG::AuxElement::Decorator< float > mcEvtWeightDecor("mcEventWeight");
    +  static SG::AuxElement::Accessor< float >  mcEvtWeightAcc("mcEventWeight");
    +
    +  float mcEvtWeight(1.0);
    +
    +  // Check if need to create xAH event weight
    +  //
    +  if ( !mcEvtWeightDecor.isAvailable(*eventInfo) ) {
    +    if ( isMC() ) {
    +      const std::vector< float > weights = eventInfo->mcEventWeights(); // The weight (and systs) of all the MC events used in the simulation
    +      if ( weights.size() > 0 ) mcEvtWeight = weights[0];
    +
    +      //for ( auto& it : weights ) { ANA_MSG_INFO( "event weight: %2f.", it ); }
    +
    +      // kill the powheg event with a huge weight
    +      if( m_cleanPowheg ) {
    +        if( eventInfo->eventNumber() == 1652845 ) {
    +          ANA_MSG_INFO("Dropping huge weight event. Weight should be 352220000");
    +          ANA_MSG_INFO("WEIGHT : " << mcEvtWeight);
    +          wk()->skipEvent();
    +          return EL::StatusCode::SUCCESS; // go to next event
    +        }
    +      }
    +    }
    +    // Decorate event with the *total* MC event weight
    +    //
    +    mcEvtWeightDecor(*eventInfo) = mcEvtWeight;
    +  } else {
    +    mcEvtWeight = mcEvtWeightAcc(*eventInfo);
    +  }
    +
    +  //------------------------------------------------------------------------------------------
    +  // Fill cutflows for run-by-run checks on data before cuts
    +  //------------------------------------------------------------------------------------------
    +  uint32_t runNumberForCutflow = (uint32_t) eventInfo->runNumber();
    +  if (m_doRunByRunCutflows && !isMC()) {
    +    m_runByrun_beforeCuts->Fill(TString(std::to_string(runNumberForCutflow)), 1.);
    +  }
    +
    +  //------------------------------------------------------------------------------------------
    +  // Declare an 'eventInfo' decorator with the Sherpa 2.2 reweight to multijet truth
    +  // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#Sherpa_v2_2_0_V_jets_NJet_reweig
    +  //------------------------------------------------------------------------------------------
    +
    +  //if ( m_reweightSherpa22 ){
    +  //  static SG::AuxElement::Decorator< float > weight_Sherpa22Decor("weight_Sherpa22");
    +  //  // Check if weight needs to be added
    +  //  if ( !weight_Sherpa22Decor.isAvailable(*eventInfo) ) {
    +
    +  //    float weight_Sherpa22 = -999.;
    +  //    weight_Sherpa22 = m_reweightSherpa22_tool_handle->getWeight();
    +  //    weight_Sherpa22Decor( *eventInfo ) = weight_Sherpa22;
    +  //    ANA_MSG_DEBUG("Setting Sherpa 2.2 reweight to " << weight_Sherpa22);
    +
    +  //  } // If not already decorated
    +  //} // if m_reweightSherpa22
    +
    +
    +  //------------------------------------------------------------------------------------------
    +  // Fill initial bin of cutflow
    +  //------------------------------------------------------------------------------------------
    +
    +  if( !m_useMetaData )
    +    {
    +      m_cutflowHist ->Fill( m_cutflow_all, 1 );
    +      m_cutflowHistW->Fill( m_cutflow_all, mcEvtWeight);
    +
    +      m_histEventCount -> Fill(1, 1);
    +      m_histEventCount -> Fill(2, 1);
    +      m_histEventCount -> Fill(3, mcEvtWeight);
    +      m_histEventCount -> Fill(4, mcEvtWeight);
    +      m_histEventCount -> Fill(5, mcEvtWeight*mcEvtWeight);
    +      m_histEventCount -> Fill(6, mcEvtWeight*mcEvtWeight);
    +    }
    +
    +  m_cutflowHist ->Fill( m_cutflow_init, 1 );
    +  m_cutflowHistW->Fill( m_cutflow_init, mcEvtWeight);
    +
    +  //--------------------------------------------------------------------------------------------------------
    +  // Check current event is not a duplicate
    +  // This is done by checking against the std::set of <runNumber,eventNumber> filled for all previous events
    +  //--------------------------------------------------------------------------------------------------------
    +
    +  if ( ( !isMC() && m_checkDuplicatesData ) || ( isMC() && m_checkDuplicatesMC ) ) {
    +
    +    std::pair<uint32_t,uint32_t> thispair = std::make_pair(eventInfo->runNumber(),eventInfo->eventNumber());
    +
    +    if ( m_RunNr_VS_EvtNr.find(thispair) != m_RunNr_VS_EvtNr.end() ) {
    +
    +      ANA_MSG_WARNING("Found duplicated event! runNumber = " << static_cast<uint32_t>(eventInfo->runNumber()) << ", eventNumber = " << static_cast<uint32_t>(eventInfo->eventNumber()) << ". Skipping this event");
    +
    +      // Bookkeep info in duplicates TTree
    +      //
    +      m_duplRunNumber   = eventInfo->runNumber();
    +      m_duplEventNumber = eventInfo->eventNumber();
    +
    +      m_duplicatesTree->Fill();
    +
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS; // go to next event
    +    }
    +
    +    m_RunNr_VS_EvtNr.insert(thispair);
    +
    +    m_cutflowHist ->Fill( m_cutflow_duplicates, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_duplicates, mcEvtWeight);
    +
    +  }
    +
    +  //------------------------------------------------------------------------------------------
    +  // Update Pile-Up Reweighting
    +  //------------------------------------------------------------------------------------------
    +  if ( m_doPUreweighting ) {
    +    m_pileup_tool_handle->applySystematicVariation(CP::SystematicSet()).ignore();
    +    ANA_CHECK(m_pileup_tool_handle->apply( *eventInfo )); // NB: this call automatically decorates eventInfo with:
    +                                                 //  1.) the PU weight ("PileupWeight")
    +                                                 //  2.) the corrected mu ("corrected_averageInteractionsPerCrossing")
    +                                                 //  3.) the random run number ("RandomRunNumber")
    +                                                 //  4.) the random lumiblock number ("RandomLumiBlockNumber")
    +    // static SG::AuxElement::Decorator< float >  correctedAvgMu("corrected_averageInteractionsPerCrossing");
    +    static SG::AuxElement::Decorator< float >  correctedAndScaledAvgMu("correctedScaled_averageInteractionsPerCrossing");
    +    static SG::AuxElement::Decorator< float >  correctedMu("corrected_actualInteractionsPerCrossing");
    +    static SG::AuxElement::Decorator< float >  correctedAndScaledMu("correctedScaled_actualInteractionsPerCrossing");
    +
    +    correctedAndScaledAvgMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedAverageInteractionsPerCrossing( *eventInfo, true );
    +    correctedMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedActualInteractionsPerCrossing( *eventInfo );
    +    correctedAndScaledMu( *eventInfo ) = m_pileup_tool_handle->getCorrectedActualInteractionsPerCrossing( *eventInfo, true );
    +
    +      if ( isMC() && m_doPUreweightingSys ) {
    +        CP::SystematicSet tmpSet;tmpSet.insert(CP::SystematicVariation("PRW_DATASF",1));
    +        m_pileup_tool_handle->applySystematicVariation( tmpSet ).ignore();
    +    eventInfo->auxdecor< float >( "PileupWeight_UP" )= m_pileup_tool_handle->getCombinedWeight( *eventInfo );
    +    tmpSet.clear();tmpSet.insert(CP::SystematicVariation("PRW_DATASF",-1));
    +    m_pileup_tool_handle->applySystematicVariation( tmpSet ).ignore();
    +    eventInfo->auxdecor< float >( "PileupWeight_DOWN")= m_pileup_tool_handle->getCombinedWeight( *eventInfo );
    +      }
    +  }
    +
    +  if ( m_actualMuMin > 0 ) {
    +      // apply minimum pile-up cut
    +      if ( eventInfo->actualInteractionsPerCrossing() < m_actualMuMin ) { // veto event
    +          wk()->skipEvent();
    +          return EL::StatusCode::SUCCESS;
    +      }
    +  }
    +
    +  if ( m_actualMuMax > 0 ) {
    +      // apply maximum pile-up cut
    +      if ( eventInfo->actualInteractionsPerCrossing() > m_actualMuMax ) { // veto event
    +          wk()->skipEvent();
    +          return EL::StatusCode::SUCCESS;
    +      }
    +  }
    +
    +
    +  //------------------------------------------------------
    +  // If data, check if event passes GRL and event cleaning
    +  //------------------------------------------------------
    +  if ( !isMC() ) {
    +
    +    // Get the streams that the event was put in
    +    if (m_checkStreams){
    +      const std::vector<  xAOD::EventInfo::StreamTag > streams = eventInfo->streamTags();
    +
    +      for ( auto& stream : streams ) {
    +        ANA_MSG_DEBUG( "event has fired stream: " << stream.name() );
    +      }
    +    }
    +
    +    // GRL
    +    if ( m_applyGRLCut ) {
    +      if ( !m_grl_handle->passRunLB( *eventInfo ) ) {
    +        wk()->skipEvent();
    +        return EL::StatusCode::SUCCESS; // go to next event
    +      }
    +      m_cutflowHist ->Fill( m_cutflow_grl, 1 );
    +      m_cutflowHistW->Fill( m_cutflow_grl, mcEvtWeight);
    +    }
    +
    +    //------------------------------------------------------------
    +    // Apply event cleaning to remove events due to
    +    // problematic regions of the detector, and incomplete events.
    +    // Apply to data.
    +    //------------------------------------------------------------
    +
    +    if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error ) ) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +    m_cutflowHist ->Fill( m_cutflow_lar, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_lar, mcEvtWeight);
    +
    +    if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::Tile)==xAOD::EventInfo::Error ) ) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +    m_cutflowHist ->Fill( m_cutflow_tile, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_tile, mcEvtWeight);
    +
    +    if ( m_applyEventCleaningCut && (eventInfo->errorState(xAOD::EventInfo::SCT)==xAOD::EventInfo::Error) ) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +    m_cutflowHist ->Fill( m_cutflow_SCT, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_SCT, mcEvtWeight);
    +
    +    if ( m_applyCoreFlagsCut && (eventInfo->isEventFlagBitSet(xAOD::EventInfo::Core, 18) ) ) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +    m_cutflowHist ->Fill( m_cutflow_core, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_core, mcEvtWeight);
    +
    +  }
    +
    +  // more info: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017
    +  if ( m_applyJetCleaningEventFlag && eventInfo->isAvailable<char>("DFCommonJets_eventClean_LooseBad") ) {
    +    if(eventInfo->auxdataConst<char>("DFCommonJets_eventClean_LooseBad")<1) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +      }
    +  }
    +  m_cutflowHist ->Fill( m_cutflow_jetcleaning, 1 );
    +  m_cutflowHistW->Fill( m_cutflow_jetcleaning, mcEvtWeight);
    +
    +  // n.b. this cut should only be applied in 2015+16 data, and not to MC!
    +  // details here: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017#IsBadBatMan_Event_Flag_and_EMEC
    +  if ( m_applyIsBadBatmanFlag && eventInfo->isAvailable<char>("DFCommonJets_isBadBatman") &&  !isMC() ) {
    +    if(eventInfo->auxdataConst<char>("DFCommonJets_isBadBatman")>0) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +  }
    +  m_cutflowHist ->Fill( m_cutflow_isbadbatman, 1 );
    +  m_cutflowHistW->Fill( m_cutflow_isbadbatman, mcEvtWeight);
    +
    +  //-----------------------------
    +  // Primary Vertex 'quality' cut
    +  //-----------------------------
    +
    +  const xAOD::VertexContainer* vertices(nullptr);
    +  if ( !m_truthLevelOnly && m_applyPrimaryVertexCut ) {
    +    ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +
    +    if ( !HelperFunctions::passPrimaryVertexSelection( vertices, m_PVNTrack ) ) {
    +      wk()->skipEvent();
    +      return EL::StatusCode::SUCCESS;
    +    }
    +  }
    +  m_cutflowHist ->Fill( m_cutflow_npv, 1 );
    +  m_cutflowHistW->Fill( m_cutflow_npv, mcEvtWeight);
    +
    +  //---------------------
    +  // Trigger decision cut
    +  //---------------------
    +
    +  if ( !m_triggerSelection.empty() || m_storeTrigDecisions ) {
    +
    +    auto triggerChainGroup = m_trigDecTool_handle->getChainGroup(m_triggerSelection);
    +
    +    if ( m_applyTriggerCut ) {
    +
    +      // additional DEBUG logging to validate conditional logic
    +      ANA_MSG_DEBUG("Applying trigger cut corresponding to chain group " << m_triggerSelection);
    +      ANA_MSG_DEBUG("Is Trigger-Level Analysis (TLA) data = " << int(m_isTLAData));
    +      ANA_MSG_DEBUG("Trigger chain group is passed = " << int(m_isTLAData ? triggerChainGroup->isPassed(TrigDefs::requireDecision) : triggerChainGroup->isPassed()));
    +
    +      // different behaviour for isPassed depending on whether you are running on TLA data or not
    +      // if running on TLA data, we only store the HLT part of the trigger decision i.e. the L1 part
    +      // will always be "false", so we need to use TrigDefs::requireDecision to limit the decision
    +      // to being satisfied by the HLT leg(s) of the trigger chain
    +      // TODO: check performance of this method when using trigger chains with the SAME HLT leg but different L1 seed
    +      // e.g. HLT_j20_pf_ftf_L1J100 vs. HLT_j20_pf_ftf_L1HT190-J15s5pETA21
    +      if ( (m_isTLAData && !triggerChainGroup->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && !triggerChainGroup->isPassed()) ) {
    +      // if (!triggerChainGroup->isPassed(TrigDefs::requireDecision)) {
    +        wk()->skipEvent();
    +        return EL::StatusCode::SUCCESS;
    +      }
    +      m_cutflowHist ->Fill( m_cutflow_trigger, 1 );
    +      m_cutflowHistW->Fill( m_cutflow_trigger, mcEvtWeight);
    +
    +    }
    +
    +    // save passed triggers in eventInfo
    +    //
    +    if ( m_storeTrigDecisions ) {
    +
    +      std::vector<std::string>  passedTriggers;
    +      std::vector<std::string>  disabledTriggers;
    +      std::vector<float>        triggerPrescales;
    +      std::vector<float>        triggerPrescalesLumi;
    +      std::vector<std::string>  isPassedBitsNames;
    +      std::vector<unsigned int> isPassedBits;
    +
    +      // Save info for the triggers used to skim events
    +      //
    +      for ( auto &trigName : triggerChainGroup->getListOfTriggers() ) {
    +        auto trigChain = m_trigDecTool_handle->getChainGroup( trigName );
    +        if ( (m_isTLAData && trigChain->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && trigChain->isPassed()) ) {
    +          passedTriggers.push_back( trigName );
    +          triggerPrescales.push_back( trigChain->getPrescale() );
    +
    +          bool doLumiPrescale = std::find(m_triggerUnprescaleList.begin(), m_triggerUnprescaleList.end(), trigName) != m_triggerUnprescaleList.end();
    +          if ( doLumiPrescale ) {
    +            triggerPrescalesLumi.push_back( m_pileup_tool_handle->getDataWeight( *eventInfo, trigName, true ) );
    +          } else {
    +            triggerPrescalesLumi.push_back( -1 );
    +          }
    +        }
    +        isPassedBitsNames.push_back( trigName );
    +        isPassedBits     .push_back( m_trigDecTool_handle->isPassedBits(trigName) );
    +          if(trigChain->getPrescale()<1) disabledTriggers.push_back( trigName );
    +      }
    +
    +      // Save info for extra triggers
    +      //
    +      if ( !m_extraTriggerSelection.empty() ) {
    +
    +        for ( const std::string &trigName : m_extraTriggerSelectionList ) {
    +          auto trigChain = m_trigDecTool_handle->getChainGroup( trigName );
    +          if ( (m_isTLAData && trigChain->isPassed(TrigDefs::requireDecision)) || (!m_isTLAData && trigChain->isPassed()) ) {
    +            passedTriggers.push_back( trigName );
    +            triggerPrescales.push_back( trigChain->getPrescale() );
    +
    +            bool doLumiPrescale = true;
    +            for ( const std::string &trigPart : trigChain->getListOfTriggers() ) {
    +              if (std::find(m_triggerUnprescaleList.begin(), m_triggerUnprescaleList.end(), trigPart) == m_triggerUnprescaleList.end()) doLumiPrescale = false;
    +            }
    +            if ( doLumiPrescale ) {
    +              triggerPrescalesLumi.push_back( m_pileup_tool_handle->getDataWeight( *eventInfo, trigName, true ) );
    +            } else {
    +              triggerPrescalesLumi.push_back( -1 );
    +            }
    +          }
    +
    +          isPassedBitsNames.push_back( trigName );
    +          isPassedBits     .push_back( m_trigDecTool_handle->isPassedBits(trigName) );
    +          if(trigChain->getPrescale()<1) disabledTriggers.push_back( trigName );
    +        }
    +      }
    +
    +      static SG::AuxElement::Decorator< std::vector< std::string > >  dec_passedTriggers("passedTriggers");
    +      dec_passedTriggers  ( *eventInfo ) = passedTriggers;
    +      static SG::AuxElement::Decorator< std::vector< std::string > >  dec_disabledTriggers("disabledTriggers");
    +      dec_disabledTriggers( *eventInfo ) = disabledTriggers;
    +      static SG::AuxElement::Decorator< std::vector< float > >        dec_triggerPrescales("triggerPrescales");
    +      dec_triggerPrescales( *eventInfo ) = triggerPrescales;
    +      static SG::AuxElement::Decorator< std::vector< float > >        dec_triggerPrescalesLumi("triggerPrescalesLumi");
    +      dec_triggerPrescalesLumi( *eventInfo ) = triggerPrescalesLumi;
    +      static SG::AuxElement::Decorator< std::vector< unsigned int > > dec_isPassedBits("isPassedBits");
    +      dec_isPassedBits( *eventInfo ) = isPassedBits;
    +      static SG::AuxElement::Decorator< std::vector< std::string > >  dec_isPassedBitsNames("isPassedBitsNames");
    +      dec_isPassedBitsNames( *eventInfo ) = isPassedBitsNames;
    +
    +    }
    +
    +    if ( m_storePrescaleWeight ) {
    +      static SG::AuxElement::Decorator< float > weight_prescale("weight_prescale");
    +      weight_prescale(*eventInfo) = triggerChainGroup->getPrescale();
    +    }
    +
    +    if ( m_storePassL1 ) {
    +      static SG::AuxElement::Decorator< int > passL1("passL1");
    +      passL1(*eventInfo)  = ( m_triggerSelection.find("L1_") != std::string::npos )  ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str()) : -1;
    +    }
    +    if ( m_storePassHLT ) {
    +      static SG::AuxElement::Decorator< int > passHLT("passHLT");
    +      if (!m_isTLAData) {
    +        passHLT(*eventInfo) = ( m_triggerSelection.find("HLT_") != std::string::npos ) ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str()) : -1;
    +      } else {
    +        passHLT(*eventInfo) = ( m_triggerSelection.find("HLT_") != std::string::npos ) ? (int)m_trigDecTool_handle->isPassed(m_triggerSelection.c_str(), TrigDefs::requireDecision) : -1;
    +      }
    +    }
    +
    +  } // if giving a specific list of triggers to look at
    +
    +  if ( m_storeTrigKeys ) {
    +    static SG::AuxElement::Decorator< int > masterKey("masterKey");
    +    masterKey(*eventInfo) = m_trigConfTool_handle->masterKey();
    +    static SG::AuxElement::Decorator< int > L1PSKey("L1PSKey");
    +    L1PSKey(*eventInfo) = m_trigConfTool_handle->lvl1PrescaleKey();
    +    static SG::AuxElement::Decorator< int > HLTPSKey("HLTPSKey");
    +    HLTPSKey(*eventInfo) = m_trigConfTool_handle->hltPrescaleKey();
    +  }
    +
    +  // Calculate distance to previous empty BCID and previous unpaired BCID, and save as decorations
    +  if( m_calcBCIDInfo && !isMC() && m_trigConfTool_handle.isInitialized() ){
    +    //Distance to previous empty BCID
    +    for (int i = eventInfo->bcid() - 1; i >= 0; i--){
    +      //get the bunch group pattern for bunch crossing i
    +      uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i];
    +      bool isEmpty = (bgPattern >> 3) & 0x1;
    +      if (isEmpty){
    +        static SG::AuxElement::Decorator< int > DistEmptyBCID("DistEmptyBCID");
    +        DistEmptyBCID(*eventInfo) = eventInfo->bcid()-i;
    +        break;
    +      }
    +    }//for each bcid
    +    //Distance to previous unpaired crossing
    +    for (int i = eventInfo->bcid() - 1; i >= 0; i--){
    +      //get the bunch group pattern for bunch crossing i
    +      uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i];
    +      bool isUnpaired = !((bgPattern >> 1) & 0x1);
    +      if (isUnpaired){
    +        static SG::AuxElement::Decorator< int > DistLastUnpairedBCID("DistLastUnpairedBCID");
    +        DistLastUnpairedBCID(*eventInfo) = eventInfo->bcid()-i;
    +        break;
    +      }
    +    }//for each bcid
    +    //Distance to next unpaired crossing
    +    for (int i = eventInfo->bcid() + 1; i <= 3654; i++){
    +      //get the bunch group pattern for bunch crossing i
    +      uint16_t bgPattern = m_trigConfTool_handle->bunchGroupSet()->bgPattern()[i];
    +      bool isUnpaired = !((bgPattern >> 1) & 0x1);
    +      if (isUnpaired){
    +        static SG::AuxElement::Decorator< int > DistNextUnpairedBCID("DistNextUnpairedBCID");
    +        DistNextUnpairedBCID(*eventInfo) = i-eventInfo->bcid();
    +        break;
    +      }
    +    }//  for each bcid
    +
    +  }//if data
    +
    +  //------------------------------------------------------------------------------------------
    +  // Fill cutflows for run-by-run checks on data after cuts
    +  //------------------------------------------------------------------------------------------
    +  if (m_doRunByRunCutflows && !isMC()) {
    +    m_runByrun_afterCuts->Fill(TString(std::to_string(runNumberForCutflow)), 1.);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +// "Borrowed" from SUSYTools
    +// https://gitlab.cern.ch/atlas/athena/blob/3be30397de7c6cfdc15de38f532fdb4b9f338297/PhysicsAnalysis/SUSYPhys/SUSYTools/Root/SUSYObjDef_xAOD.cxx#L700
    +StatusCode BasicEventSelection::autoconfigurePileupRWTool()
    +{
    +
    +  // Don't do this if we aren't supposed to
    +  if (! (isMC() && m_autoconfigPRW ))
    +    return StatusCode::SUCCESS;
    +
    +  const xAOD::EventInfo* eventInfo = 0;
    +  ANA_CHECK( m_event->retrieve( eventInfo, "EventInfo" ) );
    +
    +  // Determine simulation flavour
    +  std::string SimulationFlavour = isFastSim() ? ( isAF3() ? "AF3" : "AFII" ) : "FS";
    +
    +  // Extract campaign automatically from Run Number
    +  std::string mcCampaignMD = "";
    +
    +  uint32_t runNum = eventInfo->runNumber();
    +
    +  switch(runNum)
    +    {
    +    case 284500 :
    +      mcCampaignMD="mc20a";
    +      break;
    +    case 300000 :
    +      mcCampaignMD="mc20d";
    +      break;
    +    case 310000 :
    +      mcCampaignMD="mc20e";
    +      break;
    +    case 410000 :
    +      mcCampaignMD="mc23a";
    +      break;
    +    case 450000 :
    +      mcCampaignMD="mc23d";
    +      break;
    +    default :
    +      ANA_MSG_ERROR( "Could not determine mc campaign from run number! Impossible to autoconfigure PRW. Aborting." );
    +      return StatusCode::FAILURE;
    +      break;
    +    }
    +
    +  std::string mcCampaignMD_v2 = "";
    +  const xAOD::FileMetaData* fmd(nullptr);
    +  if ( !m_event->retrieveMetaInput(fmd, "FileMetaData").isSuccess() || !fmd->value(xAOD::FileMetaData::mcCampaign, mcCampaignMD_v2) ) {
    +      ANA_MSG_WARNING("Failed to retrieve FileMetaData from MetaData! Using MC campaign from run number. PLEASE DOUBLE-CHECK this is the correct campaign for your samples!");
    +  } else {
    +      fmd->value(xAOD::FileMetaData::mcCampaign, mcCampaignMD_v2);
    +
    +      if(mcCampaignMD!=mcCampaignMD_v2){
    +        std::string MetadataAndRunConflict("");
    +        MetadataAndRunConflict += "autoconfigurePileupRWTool(): access to FileMetaData indicates a " + mcCampaignMD_v2;
    +        MetadataAndRunConflict += " sample, but the run number indiciates " +mcCampaignMD;
    +        MetadataAndRunConflict += ". Prioritizing the value from FileMetaData. This could occur if you are using an MC campaign with outdated pile-up reweighting. PLEASE DOUBLE-CHECK your samples!";
    +        ANA_MSG_WARNING( MetadataAndRunConflict );
    +        mcCampaignMD=mcCampaignMD_v2;
    +      }
    +  }
    +  ANA_MSG_INFO( "Determined MC campaign to be " << mcCampaignMD);
    +
    +  // Extract campaign from user configuration
    +  std::string tmp_mcCampaign = m_mcCampaign;
    +  std::vector<std::string> mcCampaignList;
    +  while ( tmp_mcCampaign.size() > 0) {
    +    size_t pos = tmp_mcCampaign.find_first_of(',');
    +    if ( pos == std::string::npos ) {
    +      pos = tmp_mcCampaign.size();
    +      mcCampaignList.push_back(tmp_mcCampaign.substr(0, pos));
    +      tmp_mcCampaign.erase(0, pos);
    +      }
    +    else {
    +      mcCampaignList.push_back(tmp_mcCampaign.substr(0, pos));
    +      tmp_mcCampaign.erase(0, pos+1);
    +      }
    +  }
    +
    +  // Sanity checks
    +  bool mc2XX_GoodFromProperty = !mcCampaignList.empty();
    +  bool mc2XX_GoodFromMetadata = false;
    +  for(const auto& mcCampaignP : mcCampaignList) mc2XX_GoodFromProperty &= ( mcCampaignP == "mc20a" || mcCampaignP == "mc20d" || mcCampaignP == "mc20e" || mcCampaignP == "mc23a" || mcCampaignP == "mc23c" || mcCampaignP == "mc23d");
    +  if( mcCampaignMD == "mc20a" || mcCampaignMD == "mc20d" || mcCampaignMD == "mc20e" || mcCampaignMD == "mc23a" || mcCampaignMD == "mc23c" || mcCampaignMD == "mc23d") mc2XX_GoodFromMetadata = true;
    +
    +  if( !mc2XX_GoodFromMetadata && !mc2XX_GoodFromProperty ) {
    +    // ::
    +    std::string MetadataAndPropertyBAD("");
    +    MetadataAndPropertyBAD += "autoconfigurePileupRWTool(): access to FileMetaData failed, but don't panic. You can try to manually set the 'mcCampaign' BasicEventSelection property to ";
    +    MetadataAndPropertyBAD += "'mc20a', 'mc20c', 'mc20d', 'mc20e', 'mc20f', 'mc23a', 'mc23c', or 'mc23d' and restart your job. If you set it to any other string, you will still incur in this error.";
    +    ANA_MSG_ERROR( MetadataAndPropertyBAD );
    +    return StatusCode::FAILURE;
    +    // ::
    +  }
    +
    +  if ( mc2XX_GoodFromProperty && mc2XX_GoodFromMetadata) {
    +    bool MDinP=false;
    +    for(const auto& mcCampaignP : mcCampaignList) MDinP |= (mcCampaignMD==mcCampaignP);
    +    if( !MDinP ) {
    +      // ::
    +      std::string MetadataAndPropertyConflict("");
    +      MetadataAndPropertyConflict += "autoconfigurePileupRWTool(): access to FileMetaData indicates a " + mcCampaignMD;
    +      MetadataAndPropertyConflict += " sample, but the 'mcCampaign' property passed to BasicEventSelection is set to '" +m_mcCampaign;
    +      MetadataAndPropertyConflict += "'. Prioritizing the value set by user: PLEASE DOUBLE-CHECK the value you set the 'mcCampaign' property to!";
    +      ANA_MSG_WARNING( MetadataAndPropertyConflict );
    +      // ::
    +    }
    +    else {
    +      // ::
    +      std::string NoMetadataButPropertyOK("");
    +      NoMetadataButPropertyOK += "autoconfigurePileupRWTool(): access to FileMetaData succeeded, but the 'mcCampaign' property is passed to BasicEventSelection as '";
    +      NoMetadataButPropertyOK += m_mcCampaign;
    +      NoMetadataButPropertyOK += "'. Autoconfiguring PRW accordingly.";
    +      ANA_MSG_WARNING( NoMetadataButPropertyOK );
    +      // ::
    +    }
    +  }
    +
    +  // ::
    +  // Retrieve the input file
    +  if(!mc2XX_GoodFromProperty) {
    +    mcCampaignList.clear();
    +    mcCampaignList.push_back(mcCampaignMD);
    +  }
    +  ANA_MSG_INFO( "Setting MC campgains for CP::PileupReweightingTool:");
    +  for(const auto& mcCampaign : mcCampaignList)
    +    ANA_MSG_INFO( "\t" << mcCampaign.c_str() );
    +
    +  //
    +  float dsid = -999;
    +  dsid = eventInfo->mcChannelNumber();
    +  int DSID_INT = (int) dsid;
    +
    +  std::vector<std::string> prwConfigFiles;
    +  for(const auto& mcCampaign : mcCampaignList)
    +    {
    +      std::string prwConfigFile;
    +      // If requested set the PRW file to common PRW file of the processed MC campaign
    +      if (m_useCommonPRWFiles) {
    +        if      (mcCampaign == "mc20a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20a);}
    +        else if (mcCampaign == "mc20d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20d);}
    +        else if (mcCampaign == "mc20e") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20e);}
    +        else if (mcCampaign == "mc23a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23a);}
    +        else if (mcCampaign == "mc23c") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23c);}
    +        else if (mcCampaign == "mc23d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23d);}
    +        else {
    +          ANA_MSG_ERROR("autoconfigurePileupRWTool(): no common PRW file known for MC campaign: " << mcCampaign);
    +          return StatusCode::FAILURE;
    +        }
    +      } else {
    +        prwConfigFile = PathResolverFindCalibFile("dev/PileupReweighting/share/DSID" + std::to_string(DSID_INT/1000) +"xxx/pileup_" + mcCampaign + "_dsid" + std::to_string(DSID_INT) + "_" + SimulationFlavour + ".root");
    +      }
    +      TFile testF(prwConfigFile.data(),"read");
    +      if(testF.IsZombie())
    +        {
    +          ANA_MSG_ERROR("autoconfigurePileupRWTool(): Missing PRW config file for DSID " << std::to_string(DSID_INT) << " in campaign " << mcCampaign);
    +          return StatusCode::FAILURE;
    +        }
    +      else
    +        prwConfigFiles.push_back( prwConfigFile );
    +    }
    +
    +  // Add actualMu config files
    +  for(const auto& mcCampaign : mcCampaignList)
    +    {
    +      if( !m_prwActualMu2016File.empty() && mcCampaign == "mc20a" )
    +        prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2016File));
    +      if( !m_prwActualMu2017File.empty() && (mcCampaign == "mc20c" || mcCampaign=="mc20d") )
    +        prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2017File));
    +      if( !m_prwActualMu2018File.empty() && (mcCampaign == "mc20e" || mcCampaign=="mc20f") )
    +        prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2018File));
    +      if( !m_prwActualMu2022File.empty() && mcCampaign == "mc23a" )
    +        prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2022File));
    +      if( !m_prwActualMu2023File.empty() && (mcCampaign == "mc23c" || mcCampaign=="mc23d") )
    +        prwConfigFiles.push_back(PathResolverFindCalibFile(m_prwActualMu2023File));
    +    }
    +
    +  // also need to handle lumicalc files: only use 2015+2016 with mc20a
    +  // and only use 2017 with mc20d and 2018 data with mc20e
    +  // according to instructions on https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ExtendedPileupReweighting#Tool_Properties
    +
    +  // Parse lumicalc file names
    +  std::vector<std::string> allLumiCalcFiles;
    +  std::string tmp_lumiCalcFileNames = m_lumiCalcFileNames;
    +  while ( tmp_lumiCalcFileNames.size() > 0) {
    +    size_t pos = tmp_lumiCalcFileNames.find_first_of(',');
    +    if ( pos == std::string::npos ) {
    +      pos = tmp_lumiCalcFileNames.size();
    +      allLumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos));
    +      tmp_lumiCalcFileNames.erase(0, pos);
    +    } else {
    +      allLumiCalcFiles.push_back(tmp_lumiCalcFileNames.substr(0, pos));
    +      tmp_lumiCalcFileNames.erase(0, pos+1);
    +    }
    +  }
    +
    +  std::vector<std::string> lumiCalcFiles;
    +  for(const auto& mcCampaign : mcCampaignList)
    +    {
    +      for(const auto& filename : allLumiCalcFiles)
    +    {
    +      // looking for things of format "stuff/data15_13TeV/stuff" etc
    +      size_t pos = filename.find("data");
    +      std::string year = filename.substr(pos+4, 2);
    +
    +      if (mcCampaign == "mc20a") {
    +        if (year == "15" || year == "16") {
    +          lumiCalcFiles.push_back(filename);
    +        }
    +      } else if (mcCampaign == "mc20d") {
    +        if (year == "17") {
    +          lumiCalcFiles.push_back(filename);
    +        }
    +      } else if (mcCampaign == "mc20e") {
    +        if (year == "18") {
    +          lumiCalcFiles.push_back(filename);
    +        }
    +      } else if (mcCampaign == "mc23a") {
    +        if (year == "22") {
    +          lumiCalcFiles.push_back(filename);
    +        }
    +      } else if (mcCampaign == "mc23c" || mcCampaign == "mc23d") {
    +        if (year == "23") {
    +          lumiCalcFiles.push_back(filename);
    +        }
    +      } else {
    +        ANA_MSG_ERROR( "No lumicalc file is suitable for your mc campaign!" );
    +      }
    +    }
    +    }
    +
    +  // Set everything and report on it.
    +  ANA_MSG_INFO( "Adding Pileup files for CP::PileupReweightingTool:");
    +  for( unsigned int i=0; i < prwConfigFiles.size(); ++i) {
    +    ANA_MSG_INFO("\t- " << prwConfigFiles.at(i).c_str());
    +  }
    +  ANA_CHECK( m_pileup_tool_handle.setProperty("ConfigFiles", prwConfigFiles));
    +
    +  ANA_MSG_INFO( "Adding LumiCalc files for CP::PileupReweightingTool:");
    +  for( unsigned int i=0; i < lumiCalcFiles.size(); ++i) {
    +    ANA_MSG_INFO("\t- " << lumiCalcFiles.at(i).c_str());
    +  }
    +  ANA_CHECK( m_pileup_tool_handle.setProperty("LumiCalcFiles", lumiCalcFiles));
    +
    +  // Return gracefully
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode BasicEventSelection :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BasicEventSelection :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Number of processed events \t= " << m_eventCounter);
    +
    +  m_RunNr_VS_EvtNr.clear();
    +
    +  if ( m_trigDecTool_handle.isInitialized() ){
    +    if (asg::ToolStore::contains<Trig::TrigDecisionTool>("ToolSvc.TrigDecisionTool") ){
    +      m_trigDecTool_handle->finalize();
    +      asg::ToolStore::remove("ToolSvc.TrigDecisionTool").ignore();
    +    }
    +  }
    +
    +  //after execution loop
    +  if(m_printBranchList){
    +    xAOD::IOStats::instance().stats().printSmartSlimmingBranchList();
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode BasicEventSelection :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ClusterContainer.cxx.html b/api/program_listing_file_Root_ClusterContainer.cxx.html new file mode 100644 index 0000000000..30676d4c3d --- /dev/null +++ b/api/program_listing_file_Root_ClusterContainer.cxx.html @@ -0,0 +1,265 @@ + + + + + + + + + + + Program Listing for File ClusterContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterContainer.cxx

    +

    Return to documentation for file (Root/ClusterContainer.cxx)

    +
    #include "xAODAnaHelpers/ClusterContainer.h"
    +
    +#include <iostream>
    +
    +using namespace xAH;
    +using std::vector;
    +using std::string;
    +
    +ClusterContainer::ClusterContainer(const std::string& name, const std::string& detailStr, float units, bool mc)
    +  : ParticleContainer(name, detailStr, units, mc, true)
    +{
    +}
    +
    +ClusterContainer::~ClusterContainer()
    +{
    +}
    +
    +void ClusterContainer::setTree(TTree *tree)
    +{
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +  tree->SetBranchStatus  ("nclus" , 1);
    +  tree->SetBranchAddress ("nclus" , &m_n);
    +}
    +
    +void ClusterContainer::updateParticle(uint idx, Cluster& cluster)
    +{
    +  ParticleContainer::updateParticle(idx,cluster);
    +}
    +
    +
    +void ClusterContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +  return;
    +}
    +
    +
    +
    +void ClusterContainer::clear()
    +{
    +  ParticleContainer::clear();
    +}
    +
    +
    +void ClusterContainer::FillCluster( const xAOD::CaloCluster* cluster ){
    +  return FillCluster(static_cast<const xAOD::IParticle*>(cluster));
    +}
    +
    +void ClusterContainer::FillCluster( const xAOD::IParticle* particle )
    +{
    +  ParticleContainer::FillParticle(particle);
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ClusterHists.cxx.html b/api/program_listing_file_Root_ClusterHists.cxx.html new file mode 100644 index 0000000000..d0f1bb8aec --- /dev/null +++ b/api/program_listing_file_Root_ClusterHists.cxx.html @@ -0,0 +1,273 @@ + + + + + + + + + + + Program Listing for File ClusterHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterHists.cxx

    +

    Return to documentation for file (Root/ClusterHists.cxx)

    +
    #include "xAODAnaHelpers/ClusterHists.h"
    +
    +#include <math.h>
    +
    +ANA_MSG_SOURCE(msgClusterHists, "ClusterHists")
    +
    +ClusterHists :: ClusterHists (std::string name, std::string detailStr) :
    +  HistogramManager(name, detailStr)
    +{
    +}
    +
    +ClusterHists :: ~ClusterHists () {}
    +
    +StatusCode ClusterHists::initialize() {
    +
    +  // These plots are always made
    +  m_ccl_n   = book(m_name, "n", "cluster multiplicity", 80, 0, 800);
    +  m_ccl_e   = book(m_name, "e", "cluster e [GeV]", 100, -5, 15);
    +  m_ccl_eta = book(m_name, "eta", "cluster #eta", 80, -4, 4);
    +  m_ccl_phi = book(m_name, "phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi());
    +
    +  // 2D plots
    +  m_ccl_eta_vs_phi = book(m_name, "eta_vs_phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi(), "cluster #eta", 80, -4, 4);
    +  m_ccl_e_vs_eta   = book(m_name, "e_vs_eta", "cluster #eta", 80, -4, 4, "cluster e [GeV]", 100, -5, 15);
    +  m_ccl_e_vs_phi   = book(m_name, "e_vs_phi", "cluster #phi", 120, -TMath::Pi(), TMath::Pi(), "cluster e [GeV]", 100, -5, 15);
    +
    +  // if worker is passed to the class add histograms to the output
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode ClusterHists::execute( const xAOD::CaloClusterContainer* ccls, float eventWeight ) {
    +  using namespace msgClusterHists;
    +  xAOD::CaloClusterContainer::const_iterator ccl_itr = ccls->begin();
    +  xAOD::CaloClusterContainer::const_iterator ccl_end = ccls->end();
    +  for( ; ccl_itr != ccl_end; ++ccl_itr ) {
    +    ANA_CHECK( this->execute( (*ccl_itr), eventWeight ));
    +  }
    +
    +  m_ccl_n -> Fill( ccls->size(), eventWeight );
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode ClusterHists::execute( const xAOD::CaloCluster* ccl, float eventWeight ) {
    +
    +  //basic
    +  float cclE   = ccl->e()/1e3;
    +  float cclEta = ccl->eta();
    +  float cclPhi = ccl->phi();
    +
    +  m_ccl_e          -> Fill( cclE,   eventWeight );
    +  m_ccl_eta        -> Fill( cclEta, eventWeight );
    +  m_ccl_phi        -> Fill( cclPhi, eventWeight );
    +
    +  // 2D plots
    +  m_ccl_eta_vs_phi -> Fill( cclPhi, cclEta,  eventWeight );
    +  m_ccl_e_vs_eta   -> Fill( cclEta, cclE,    eventWeight );
    +  m_ccl_e_vs_phi   -> Fill( cclPhi, cclE,    eventWeight );
    +
    +  return StatusCode::SUCCESS;
    +
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ClusterHistsAlgo.cxx.html b/api/program_listing_file_Root_ClusterHistsAlgo.cxx.html new file mode 100644 index 0000000000..fbdf3c6d37 --- /dev/null +++ b/api/program_listing_file_Root_ClusterHistsAlgo.cxx.html @@ -0,0 +1,297 @@ + + + + + + + + + + + Program Listing for File ClusterHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterHistsAlgo.cxx

    +

    Return to documentation for file (Root/ClusterHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +#include <xAODAnaHelpers/ClusterHistsAlgo.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(ClusterHistsAlgo)
    +
    +ClusterHistsAlgo :: ClusterHistsAlgo () :
    +    Algorithm("ClusterHistsAlgo")
    +{
    +}
    +
    +EL::StatusCode ClusterHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +
    +  // let's initialize the algorithm to use the xAODRootAccess package
    +  xAOD::Init("ClusterHistsAlgo").ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ClusterHistsAlgo :: histInitialize ()
    +{
    +
    +  ANA_MSG_INFO( m_name );
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  // needed here and not in initalize since this is called first
    +  if( m_inContainerName.empty() || m_detailStr.empty() ){
    +    ANA_MSG_ERROR( "One or more required configuration values are empty");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  // declare class and add histograms to output
    +  m_plots = new ClusterHists(m_name, m_detailStr);
    +  ANA_CHECK( m_plots -> initialize());
    +  m_plots -> record( wk() );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ClusterHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode ClusterHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode ClusterHistsAlgo :: initialize ()
    +{
    +  ANA_MSG_INFO( "ClusterHistsAlgo");
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ClusterHistsAlgo :: execute ()
    +{
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +
    +  float eventWeight(1);
    +  if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) {
    +    eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" );
    +  }
    +
    +  const xAOD::CaloClusterContainer* ccls(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(ccls, m_inContainerName, m_event, m_store, msg()) );
    +
    +  ANA_CHECK( m_plots->execute( ccls, eventWeight ));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ClusterHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode ClusterHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode ClusterHistsAlgo :: histFinalize ()
    +{
    +  // clean up memory
    +  if(m_plots) delete m_plots;
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_DebugTool.cxx.html b/api/program_listing_file_Root_DebugTool.cxx.html new file mode 100644 index 0000000000..8a258fae9d --- /dev/null +++ b/api/program_listing_file_Root_DebugTool.cxx.html @@ -0,0 +1,342 @@ + + + + + + + + + + + Program Listing for File DebugTool.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File DebugTool.cxx

    +

    Return to documentation for file (Root/DebugTool.cxx)

    +
    /************************************
    + *
    + * Debug tool
    + *
    + * J.Alison (john.alison@cern.ch)
    + *
    + ************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +//#include "PATInterfaces/SystematicVariation.h"
    +//#include "PATInterfaces/SystematicRegistry.h"
    +//#include "PATInterfaces/SystematicCode.h"
    +
    +// package include(s):
    +//#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/DebugTool.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +// external tools include(s):
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(DebugTool)
    +
    +
    +DebugTool :: DebugTool () :
    +    Algorithm("DebugTool")
    +{
    +}
    +
    +EL::StatusCode DebugTool :: setupJob (EL::Job& job)
    +{
    +  ANA_MSG_INFO( "Calling setupJob");
    +  job.useXAOD ();
    +  xAOD::Init( "DebugTool" ).ignore(); // call before opening first file
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: histInitialize ()
    +{
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: fileExecute ()
    +{
    +  ANA_MSG_INFO( "Calling fileExecute");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: changeInput (bool /*firstFile*/)
    +{
    +  ANA_MSG_INFO( "Calling changeInput");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: initialize ()
    +{
    +  ANA_MSG_INFO( " ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: execute ()
    +{
    +  ANA_MSG_INFO( m_name);
    +
    +  //
    +  // look what we have in TStore
    +  //
    +  if ( m_printStore ) {
    +    m_store->print();
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +EL::StatusCode DebugTool :: postExecute ()
    +{
    +  ANA_MSG_DEBUG("Calling postExecute");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: finalize ()
    +{
    +  ANA_MSG_INFO( m_name );
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode DebugTool :: histFinalize ()
    +{
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronCalibrator.cxx.html b/api/program_listing_file_Root_ElectronCalibrator.cxx.html new file mode 100644 index 0000000000..1597d99e66 --- /dev/null +++ b/api/program_listing_file_Root_ElectronCalibrator.cxx.html @@ -0,0 +1,596 @@ + + + + + + + + + + + Program Listing for File ElectronCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronCalibrator.cxx

    +

    Return to documentation for file (Root/ElectronCalibrator.cxx)

    +
    /*******************************************************
    + *
    + * Interface to CP Electron calibration tool(s).
    + *
    + * The tool applies:
    + *
    + * -) scale corrections for DATA
    + * -) smearing corrections for MC
    + * (data VS. MC check is done by the CP tool internally)
    + *
    + * M. Milesi (marco.milesi@cern.ch)
    + *
    + *******************************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/Electron.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/ElectronCalibrator.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(ElectronCalibrator)
    +
    +
    +ElectronCalibrator :: ElectronCalibrator () :
    +    Algorithm("ElectronCalibrator")
    +{
    +}
    +
    +
    +EL::StatusCode ElectronCalibrator :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "ElectronCalibrator" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing ElectronCalibrator Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +  // shallow copies are made with this output container name
    +  m_outSCContainerName      = m_outContainerName + "ShallowCopy";
    +  m_outSCAuxContainerName   = m_outSCContainerName + "Aux."; // the period is very important!
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +  // initialize the CP::EgammaCalibrationAndSmearingTool
    +  //
    +  if ( asg::ToolStore::contains<CP::EgammaCalibrationAndSmearingTool>("EgammaCalibrationAndSmearingTool") ) {
    +    m_EgammaCalibrationAndSmearingTool = asg::ToolStore::get<CP::EgammaCalibrationAndSmearingTool>("EgammaCalibrationAndSmearingTool");
    +  } else {
    +    m_EgammaCalibrationAndSmearingTool = new CP::EgammaCalibrationAndSmearingTool("EgammaCalibrationAndSmearingTool");
    +  }
    +  m_EgammaCalibrationAndSmearingTool->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("ESModel", m_esModel));
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("decorrelationModel", m_decorrelationModel));
    +
    +  //
    +  // For AFII samples
    +  //
    +  if ( isFastSim() ){
    +    ANA_MSG_INFO( "Setting simulation flavour to Fast Sim");
    +    ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 1));
    +  }
    +  else {
    +    ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 0));
    +  }
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->initialize());
    +
    +  // Get a list of recommended systematics for this tool
    +  //
    +  //const CP::SystematicSet recSyst = CP::SystematicSet();
    +  const CP::SystematicSet& recSyst = m_EgammaCalibrationAndSmearingTool->recommendedSystematics();
    +
    +  ANA_MSG_INFO(" Initializing Electron Calibrator Systematics :");
    +  //
    +  // Make a list of systematics to be used, based on configuration input
    +  // Use HelperFunctions::getListofSystematics() for this!
    +  //
    +  m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +
    +  ANA_MSG_INFO("Will be using EgammaCalibrationAndSmearingTool systematic:");
    +  auto SystElectronsNames = std::make_unique< std::vector< std::string > >();
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( m_systName.empty() ) {
    +      ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +      break;
    +    }
    +    SystElectronsNames->push_back(syst_it.name());
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +  ANA_CHECK(m_store->record(std::move(SystElectronsNames), "ele_Syst"+m_name ));
    +
    +  // ***********************************************************
    +
    +  // initialize the CP::IsolationCorrectionTool
    +  //
    +  if ( m_applyIsolationCorrection ) {
    +    if ( asg::ToolStore::contains<CP::IsolationCorrectionTool>("IsolationCorrectionTool") ) {
    +      m_IsolationCorrectionTool = asg::ToolStore::get<CP::IsolationCorrectionTool>("IsolationCorrectionTool");
    +    } else {
    +      m_IsolationCorrectionTool = new CP::IsolationCorrectionTool("IsolationCorrectionTool");
    +    }
    +    m_IsolationCorrectionTool->msg().setLevel( MSG::INFO ); // DEBUG, VERBOSE, INFO
    +    ANA_CHECK( m_IsolationCorrectionTool->setProperty("IsMC", isMC() ));
    +    ANA_CHECK( m_IsolationCorrectionTool->initialize());
    +    ANA_MSG_INFO( "Applying electron isolation correction" );
    +  }
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD);
    +  }
    +
    +  // ***********************************************************
    +
    +  ANA_MSG_INFO( "ElectronCalibrator Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode ElectronCalibrator :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG("Applying Electron Calibration ... ");
    +
    +  m_numEvent++;
    +
    +  // get the collection from TEvent or TStore
    +  //
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +  const xAOD::ElectronContainer* inElectrons(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName, m_event, m_store, msg()) );
    +
    +  // loop over available systematics - remember syst == EMPTY_STRING --> baseline
    +  // prepare a vector of the names of CDV containers
    +  // must be a pointer to be recorded in TStore
    +  //
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +
    +    // discard photon systematics
    +    //
    +    //if ( (syst_it.name()).find("PH_", 0) != std::string::npos ) { continue; }
    +
    +    std::string outSCContainerName(m_outSCContainerName);
    +    std::string outSCAuxContainerName(m_outSCAuxContainerName);
    +    std::string outContainerName(m_outContainerName);
    +
    +    // always append the name of the variation, including nominal which is an empty string
    +    //
    +    outSCContainerName    += syst_it.name();
    +    outSCAuxContainerName += syst_it.name();
    +    outContainerName      += syst_it.name();
    +    vecOutContainerNames->push_back( syst_it.name() );
    +
    +    // apply syst
    +    //
    +    if ( m_EgammaCalibrationAndSmearingTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR( "Failed to configure EgammaCalibrationAndSmearingTool for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    // create shallow copy for calibration - one per syst
    +    //
    +    std::pair< xAOD::ElectronContainer*, xAOD::ShallowAuxContainer* > calibElectronsSC = xAOD::shallowCopyContainer( *inElectrons );
    +
    +    // create ConstDataVector to be eventually stored in TStore
    +    //
    +    ConstDataVector<xAOD::ElectronContainer>* calibElectronsCDV = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +    calibElectronsCDV->reserve( calibElectronsSC.first->size() );
    +
    +    // now calibrate!
    +    //
    +    unsigned int idx(0);
    +    for ( auto elSC_itr : *(calibElectronsSC.first) ) {
    +
    +      // set smearing seeding if needed - no need for this after Base,2.1.26
    +      // m_EgammaCalibrationAndSmearingTool->setRandomSeed(eventInfo->eventNumber() + 100 * idx);
    +      //
    +      ANA_MSG_DEBUG("Checking electron "<<idx<<", raw pt = "<<elSC_itr->pt()*1e-3<<" GeV ");
    +      if ( elSC_itr->pt() > 7e3 && !(elSC_itr->caloCluster()) ){
    +        ANA_MSG_DEBUG( "electron " << idx << ", raw pt = " << elSC_itr->pt() * 1e-3 << " GeV, does not have caloCluster()! " );
    +      }
    +
    +      // apply calibration (w/ syst) and leakage correction to calo based iso vars
    +      //
    +      if ( elSC_itr->caloCluster() && elSC_itr->trackParticle() ) {  // NB: derivations might remove CC and tracks for low pt electrons
    +        if ( m_EgammaCalibrationAndSmearingTool->applyCorrection( *elSC_itr ) != CP::CorrectionCode::Ok ) {
    +          ANA_MSG_WARNING( "Problem in CP::EgammaCalibrationAndSmearingTool::applyCorrection()");
    +        }
    +
    +        if ( m_applyIsolationCorrection ) {
    +          if ( elSC_itr->pt() > 7e3 && m_IsolationCorrectionTool->CorrectLeakage( *elSC_itr ) != CP::CorrectionCode::Ok ) {
    +            ANA_MSG_WARNING( "Problem in CP::IsolationCorrectionTool::CorrectLeakage()");
    +          }
    +        }
    +      }
    +
    +      ANA_MSG_DEBUG( "Calibrated pt with systematic: " << syst_it.name() <<" , pt = " << elSC_itr->pt() * 1e-3 << " GeV");
    +
    +      ++idx;
    +
    +    } // close calibration loop
    +
    +    if ( !xAOD::setOriginalObjectLink(*inElectrons, *(calibElectronsSC.first)) ) {
    +      ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed.");
    +    }
    +
    +    // save pointers in ConstDataVector with same order
    +    //
    +    ANA_CHECK( HelperFunctions::makeSubsetCont(calibElectronsSC.first, calibElectronsCDV, msg()));
    +
    +    // Sort after copying to CDV.
    +    if ( m_sort ) {
    +      std::sort( calibElectronsCDV->begin(), calibElectronsCDV->end(), HelperFunctions::sort_pt );
    +    }
    +
    +    // add SC container to TStore
    +    //
    +    ANA_CHECK( m_store->record( calibElectronsSC.first,  outSCContainerName  ));
    +    ANA_CHECK( m_store->record( calibElectronsSC.second, outSCAuxContainerName ));
    +    // add ConstDataVector to TStore
    +    //
    +    ANA_CHECK( m_store->record( calibElectronsCDV, outContainerName));
    +
    +  } // close loop on systematics
    +
    +  // add vector<string container_names_syst> to TStore
    +  //
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  // look what we have in TStore
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ElectronCalibrator :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( m_EgammaCalibrationAndSmearingTool ) { delete m_EgammaCalibrationAndSmearingTool; m_EgammaCalibrationAndSmearingTool = nullptr; }
    +  if ( m_IsolationCorrectionTool )          { delete m_IsolationCorrectionTool; m_IsolationCorrectionTool = nullptr; }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronCalibrator :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronContainer.cxx.html b/api/program_listing_file_Root_ElectronContainer.cxx.html new file mode 100644 index 0000000000..23f5735d43 --- /dev/null +++ b/api/program_listing_file_Root_ElectronContainer.cxx.html @@ -0,0 +1,1204 @@ + + + + + + + + + + + Program Listing for File ElectronContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronContainer.cxx

    +

    Return to documentation for file (Root/ElectronContainer.cxx)

    +
    #include "xAODAnaHelpers/ElectronContainer.h"
    +
    +#include <iostream>
    +
    +using namespace xAH;
    +using std::vector;
    +using std::string;
    +
    +ElectronContainer::ElectronContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs)
    +  : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs)
    +{
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_caloCluster_eta = new std::vector<float> ();
    +    m_charge          = new std::vector<float> ();
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    m_isTrigMatched               = new std::vector<int>               ();
    +    m_isTrigMatchedToChain        = new std::vector<std::vector<int> > ();
    +    m_listTrigChains              = new std::vector<std::vector<std::string> > ();
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    m_isIsolated = new std::map< std::string, std::vector< int >* >();
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        (*m_isIsolated)[ isol ] = new std::vector<int>;
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20                           = new std::vector<float> ();
    +    m_neflowisol20                           = new std::vector<float> ();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500            = new std::vector<float> ();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000           = new std::vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500         = new std::vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000        = new std::vector<float> ();
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    m_topoetcone20_CloseByCorr            = new std::vector<float> ();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr              = new std::vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr           = new std::vector<float> ();
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    m_PID = new std::map< std::string, std::vector< int >* >();
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        (*m_PID)[ PID ] = new std::vector<int>;
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +    m_TrigEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_TrigMCEff  = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_PIDEff_SF  = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_IsoEff_SF  = new std::map< std::string, std::vector< std::vector< float > >* >();
    +
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      (*m_PIDEff_SF) [ PID ] = new std::vector< std::vector< float > >;
    +      for (auto& iso : m_infoSwitch.m_isolWPs) {
    +        if(!iso.empty())
    +          (*m_IsoEff_SF) [ PID+iso ] = new std::vector< std::vector< float > >;
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          (*m_TrigEff_SF)[ trig+PID+iso ] = new std::vector< std::vector< float > >;
    +          (*m_TrigMCEff )[ trig+PID+iso ] = new std::vector< std::vector< float > >;
    +        }
    +      }
    +    }
    +
    +
    +    m_RecoEff_SF = new std::vector< std::vector< float > > ();
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    m_author = new std::vector<int> ();
    +    m_OQ     = new std::vector<int> ();
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    m_trkd0           = new std::vector<float> ();
    +    m_trkd0sig        = new std::vector<float> ();
    +    m_trkz0           = new std::vector<float> ();
    +    m_trkz0sintheta   = new std::vector<float> ();
    +    m_trkphi0         = new std::vector<float> ();
    +    m_trktheta        = new std::vector<float> ();
    +    m_trkcharge       = new std::vector<float> ();
    +    m_trkqOverP       = new std::vector<float> ();
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    m_trknSiHits                 = new std::vector<int>   ();
    +    m_trknPixHits                = new std::vector<int>   ();
    +    m_trknPixHoles               = new std::vector<int>   ();
    +    m_trknSCTHits                = new std::vector<int>   ();
    +    m_trknSCTHoles               = new std::vector<int>   ();
    +    m_trknTRTHits                = new std::vector<int>   ();
    +    m_trknTRTHoles               = new std::vector<int>   ();
    +    m_trknBLayerHits             = new std::vector<int>   ();
    +    m_trknInnermostPixLayHits    = new std::vector<int>   ();
    +    m_trkPixdEdX                 = new std::vector<float> ();
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    m_PromptLeptonInput_DL1mu           = new std::vector<float> ();
    +    m_PromptLeptonInput_DRlj            = new std::vector<float> ();
    +    m_PromptLeptonInput_LepJetPtFrac    = new std::vector<float> ();
    +    m_PromptLeptonInput_PtFrac          = new std::vector<float> ();
    +    m_PromptLeptonInput_PtRel           = new std::vector<float> ();
    +    m_PromptLeptonInput_TrackJetNTrack  = new std::vector<int>   ();
    +    m_PromptLeptonInput_ip2             = new std::vector<float> ();
    +    m_PromptLeptonInput_ip3             = new std::vector<float> ();
    +    m_PromptLeptonInput_rnnip           = new std::vector<float> ();
    +    m_PromptLeptonInput_sv1_jf_ntrkv    = new std::vector<int>   ();
    +    m_PromptLeptonIso                   = new std::vector<float> ();
    +    m_PromptLeptonVeto                  = new std::vector<float> ();
    +  }
    +
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    m_passSel = new std::vector<char>();
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    m_passOR = new std::vector<char>();
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ) {
    +    m_isLRT = new std::vector<char>();
    +  }
    +
    +}
    +
    +ElectronContainer::~ElectronContainer()
    +{
    +  if ( m_infoSwitch.m_kinematic ) {
    +    delete m_caloCluster_eta;
    +    delete m_charge;
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    delete m_isTrigMatched       ;
    +    delete m_isTrigMatchedToChain;
    +    delete m_listTrigChains      ;
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        delete (*m_isIsolated)[ isol ];
    +      }
    +    }
    +    delete m_isIsolated;
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    delete m_topoetcone20                           ;
    +    delete m_neflowisol20                           ;
    +    delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500                 ;
    +    delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000                ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500              ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000             ;
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    delete m_topoetcone20_CloseByCorr            ;
    +    delete m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr              ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr           ;
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        delete (*m_PID)[ PID ];
    +      }
    +    }
    +    delete m_PID;
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      delete (*m_PIDEff_SF) [ PID ];
    +      for (auto& iso : m_infoSwitch.m_isolWPs) {
    +        if(!iso.empty())
    +          delete (*m_IsoEff_SF) [ PID+iso ];
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          delete (*m_TrigEff_SF)[ trig+PID+iso ];
    +          delete (*m_TrigMCEff )[ trig+PID+iso ];
    +        }
    +      }
    +    }
    +    delete m_TrigEff_SF ;
    +    delete m_TrigMCEff  ;
    +    delete m_PIDEff_SF  ;
    +    delete m_IsoEff_SF  ;
    +    delete m_RecoEff_SF ;
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    delete m_author   ;
    +    delete m_OQ       ;
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    delete m_trkd0          ;
    +    delete m_trkd0sig       ;
    +    delete m_trkz0          ;
    +    delete m_trkz0sintheta  ;
    +    delete m_trkphi0        ;
    +    delete m_trktheta       ;
    +    delete m_trkcharge      ;
    +    delete m_trkqOverP      ;
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    delete m_trknSiHits              ;
    +    delete m_trknPixHits             ;
    +    delete m_trknPixHoles            ;
    +    delete m_trknSCTHits             ;
    +    delete m_trknSCTHoles            ;
    +    delete m_trknTRTHits             ;
    +    delete m_trknTRTHoles            ;
    +    delete m_trknBLayerHits          ;
    +    delete m_trknInnermostPixLayHits ;
    +    delete m_trkPixdEdX              ;
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    delete m_PromptLeptonInput_DL1mu           ;
    +    delete m_PromptLeptonInput_DRlj            ;
    +    delete m_PromptLeptonInput_LepJetPtFrac    ;
    +    delete m_PromptLeptonInput_PtFrac          ;
    +    delete m_PromptLeptonInput_PtRel           ;
    +    delete m_PromptLeptonInput_TrackJetNTrack  ;
    +    delete m_PromptLeptonInput_ip2             ;
    +    delete m_PromptLeptonInput_ip3             ;
    +    delete m_PromptLeptonInput_rnnip           ;
    +    delete m_PromptLeptonInput_sv1_jf_ntrkv    ;
    +    delete m_PromptLeptonIso                   ;
    +    delete m_PromptLeptonVeto                  ;
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    delete m_passSel;
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    delete m_passOR;
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ) {
    +    delete m_isLRT;
    +  }
    +
    +}
    +
    +void ElectronContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    connectBranch<float>(tree,"caloCluster_eta", &m_caloCluster_eta);
    +    connectBranch<float>(tree,"charge",          &m_charge);
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    connectBranch<int>         (tree,"isTrigMatched",        &m_isTrigMatched);
    +    connectBranch<vector<int> >(tree,"isTrigMatchedToChain", &m_isTrigMatchedToChain);
    +    connectBranch<vector<std::string> > (tree,"listTrigChains",       &m_listTrigChains);
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        tree->SetBranchStatus ( (m_name + "_isIsolated_" + isol).c_str() , 1);
    +        tree->SetBranchAddress( (m_name + "_isIsolated_" + isol).c_str() , & (*m_isIsolated)[ isol ] );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    connectBranch<float>(tree, "topoetcone20",     &m_topoetcone20);
    +    connectBranch<float>(tree, "neflowisol20",     &m_neflowisol20);
    +    connectBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500",     &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500);
    +    connectBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000",    &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000);
    +    connectBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500",  &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500);
    +    connectBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000);
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    connectBranch<float>(tree, "topoetcone20_CloseByCorr",    &m_topoetcone20_CloseByCorr)            ;
    +    connectBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr",    &m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr)              ;
    +    connectBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr",    &m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr)           ;
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        tree->SetBranchStatus ( (m_name + "_" + PID).c_str() , 1);
    +        tree->SetBranchAddress( (m_name + "_" + PID).c_str() , &(*m_PID)[ PID ] );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      tree->SetBranchStatus ( (m_name+"_PIDEff_SF_" + PID).c_str() , 1);
    +      tree->SetBranchAddress( (m_name+"_PIDEff_SF_" + PID).c_str() , & (*m_PIDEff_SF)[ PID ] );
    +
    +      for (auto& isol : m_infoSwitch.m_isolWPs) {
    +        if(!isol.empty()) {
    +          tree->SetBranchStatus ( (m_name+"_IsoEff_SF_" + PID + "_isol" + isol).c_str() , 1);
    +          tree->SetBranchAddress( (m_name+"_IsoEff_SF_" + PID + "_isol" + isol).c_str() , & (*m_IsoEff_SF)[ PID+isol ] );
    +        }
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          tree->SetBranchStatus ( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , 1 );
    +          tree->SetBranchAddress( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , & (*m_TrigEff_SF)[ trig+PID+isol ] );
    +
    +          tree->SetBranchStatus ( (m_name+"_TrigMCEff_"  + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , 1 );
    +          tree->SetBranchAddress( (m_name+"_TrigMCEff_"  + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , & (*m_TrigMCEff) [ trig+PID+isol ] );
    +        }
    +      }
    +    }
    +
    +    connectBranch<std::vector<float> >(tree, "RecoEff_SF"  ,                &m_RecoEff_SF  );
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    connectBranch<int>(tree, "author",   &m_author);
    +    connectBranch<int>(tree, "OQ",       &m_OQ);
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    connectBranch<float>(tree, "trkd0",          &m_trkd0);
    +    connectBranch<float>(tree, "trkd0sig",       &m_trkd0sig);
    +    connectBranch<float>(tree, "trkz0",          &m_trkz0);
    +    connectBranch<float>(tree, "trkz0sintheta",  &m_trkz0sintheta);
    +    connectBranch<float>(tree, "trkphi0",        &m_trkphi0);
    +    connectBranch<float>(tree, "trktheta",       &m_trktheta);
    +    connectBranch<float>(tree, "trkcharge",      &m_trkcharge);
    +    connectBranch<float>(tree, "trkqOverP",      &m_trkqOverP);
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    connectBranch<int>(tree, "trknSiHits",    &m_trknSiHits);
    +    connectBranch<int>(tree, "trknPixHits",   &m_trknPixHits);
    +    connectBranch<int>(tree, "trknPixHoles",  &m_trknPixHoles);
    +    connectBranch<int>(tree, "trknSCTHits",   &m_trknSCTHits);
    +    connectBranch<int>(tree, "trknSCTHoles",  &m_trknSCTHoles);
    +    connectBranch<int>(tree, "trknTRTHits",   &m_trknTRTHits);
    +    connectBranch<int>(tree, "trknTRTHoles",  &m_trknTRTHoles);
    +    connectBranch<int>(tree, "trknBLayerHits",&m_trknBLayerHits);
    +    connectBranch<int>(tree, "trknInnermostPixLayHits",  &m_trknInnermostPixLayHits);
    +    connectBranch<float>(tree, "trkPixdEdX",    &m_trkPixdEdX);
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    connectBranch<float>(tree, "PromptLeptonInput_DL1mu",          &m_PromptLeptonInput_DL1mu);
    +    connectBranch<float>(tree, "PromptLeptonInput_DRlj",           &m_PromptLeptonInput_DRlj);
    +    connectBranch<float>(tree, "PromptLeptonInput_LepJetPtFrac",   &m_PromptLeptonInput_LepJetPtFrac);
    +    connectBranch<float>(tree, "PromptLeptonInput_PtFrac",         &m_PromptLeptonInput_PtFrac);
    +    connectBranch<float>(tree, "PromptLeptonInput_PtRel",          &m_PromptLeptonInput_PtRel);
    +    connectBranch<int>  (tree, "PromptLeptonInput_TrackJetNTrack", &m_PromptLeptonInput_TrackJetNTrack);
    +    connectBranch<float>(tree, "PromptLeptonInput_ip2",            &m_PromptLeptonInput_ip2);
    +    connectBranch<float>(tree, "PromptLeptonInput_ip3",            &m_PromptLeptonInput_ip3);
    +    connectBranch<float>(tree, "PromptLeptonInput_rnnip",          &m_PromptLeptonInput_rnnip);
    +    connectBranch<int>  (tree, "PromptLeptonInput_sv1_jf_ntrkv",   &m_PromptLeptonInput_sv1_jf_ntrkv);
    +    connectBranch<float>(tree, "PromptLeptonIso",                  &m_PromptLeptonIso);
    +    connectBranch<float>(tree, "PromptLeptonVeto",                 &m_PromptLeptonVeto);
    +  }
    +
    +  if(m_infoSwitch.m_passSel) connectBranch<char>(tree,"passSel",&m_passSel);
    +  if(m_infoSwitch.m_passOR) connectBranch<char>(tree,"passOR",&m_passOR);
    +
    +  if(m_infoSwitch.m_doLRT) connectBranch<char>(tree,"isLRT",&m_isLRT);
    +
    +}
    +
    +void ElectronContainer::updateParticle(uint idx, Electron& elec)
    +{
    +  ParticleContainer::updateParticle(idx,elec);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    elec.caloCluster_eta = m_caloCluster_eta -> at(idx);
    +    elec.charge          = m_charge          -> at(idx);
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    elec.isTrigMatched         =     m_isTrigMatched         ->at(idx);
    +    elec.isTrigMatchedToChain  =     m_isTrigMatchedToChain  ->at(idx);
    +    elec.listTrigChains        =     m_listTrigChains        ->at(idx);
    +  }
    +
    +  // isolation
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        elec.isIsolated[isol] = (*m_isIsolated)[ isol ]->at(idx);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    elec.topoetcone20                             =     m_topoetcone20                               ->at(idx);
    +    elec.neflowisol20                             =     m_neflowisol20                               ->at(idx);
    +    elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500             =     m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500         ->at(idx);
    +    elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000            =     m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000        ->at(idx);
    +    elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500          =     m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500      ->at(idx);
    +    elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000         =     m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000     ->at(idx);
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    elec.topoetcone20_CloseByCorr                            = m_topoetcone20_CloseByCorr            ->at(idx);
    +    elec.ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr          = m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr              ->at(idx);
    +    elec.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr       = m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr           ->at(idx);
    +  }
    +
    +  // quality
    +  if ( m_infoSwitch.m_PID ) {
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        elec.PID[PID] = (*m_PID)[ PID ]->at(idx);
    +      }
    +    }
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      elec.PIDEff_SF[ PID ] = (*m_PIDEff_SF) [ PID ]->at(idx);
    +      for (auto& iso : m_infoSwitch.m_isolWPs) {
    +        if(!iso.empty())
    +          elec.IsoEff_SF[ PID+iso ] =  (*m_IsoEff_SF) [ PID+iso ]->at(idx);
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          elec.TrigEff_SF[ trig+PID+iso ] = (*m_TrigEff_SF)[ trig+PID+iso ]->at(idx);
    +          elec.TrigMCEff [ trig+PID+iso ] = (*m_TrigMCEff )[ trig+PID+iso ]->at(idx);
    +        }
    +      }
    +    }
    +
    +    elec.RecoEff_SF                               = m_RecoEff_SF                              ->at(idx);
    +
    +  }
    +
    +  // reco parameters
    +  if ( m_infoSwitch.m_recoparams ) {
    +    elec.author      = m_author     ->at(idx);
    +    elec.OQ          = m_OQ         ->at(idx);
    +  }
    +
    +  // track parameters
    +  if ( m_infoSwitch.m_trackparams ) {
    +    elec.trkd0             = m_trkd0            ->at(idx);
    +    elec.trkd0sig          = m_trkd0sig         ->at(idx);
    +    elec.trkz0             = m_trkz0            ->at(idx);
    +    elec.trkz0sintheta     = m_trkz0sintheta    ->at(idx);
    +    elec.trkphi0           = m_trkphi0          ->at(idx);
    +    elec.trktheta          = m_trktheta         ->at(idx);
    +    elec.trkcharge         = m_trkcharge        ->at(idx);
    +    elec.trkqOverP         = m_trkqOverP        ->at(idx);
    +  }
    +
    +  // track hit content
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    elec.trknSiHits                 = m_trknSiHits                ->at(idx);
    +    elec.trknPixHits                = m_trknPixHits               ->at(idx);
    +    elec.trknPixHoles               = m_trknPixHoles              ->at(idx);
    +    elec.trknSCTHits                = m_trknSCTHits               ->at(idx);
    +    elec.trknSCTHoles               = m_trknSCTHoles              ->at(idx);
    +    elec.trknTRTHits                = m_trknTRTHits               ->at(idx);
    +    elec.trknTRTHoles               = m_trknTRTHoles              ->at(idx);
    +    elec.trknBLayerHits             = m_trknBLayerHits            ->at(idx);
    +    elec.trknInnermostPixLayHits    = m_trknInnermostPixLayHits   ->at(idx);         // not available in DC14
    +    elec.trkPixdEdX                 = m_trkPixdEdX                ->at(idx);         // not available in DC14
    +  }
    +
    +  // prompt lepton
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    elec.PromptLeptonInput_DL1mu           = m_PromptLeptonInput_DL1mu           ->at(idx);
    +    elec.PromptLeptonInput_DRlj            = m_PromptLeptonInput_DRlj            ->at(idx);
    +    elec.PromptLeptonInput_LepJetPtFrac    = m_PromptLeptonInput_LepJetPtFrac    ->at(idx);
    +    elec.PromptLeptonInput_PtFrac          = m_PromptLeptonInput_PtFrac          ->at(idx);
    +    elec.PromptLeptonInput_PtRel           = m_PromptLeptonInput_PtRel           ->at(idx);
    +    elec.PromptLeptonInput_TrackJetNTrack  = m_PromptLeptonInput_TrackJetNTrack  ->at(idx);
    +    elec.PromptLeptonInput_ip2             = m_PromptLeptonInput_ip2             ->at(idx);
    +    elec.PromptLeptonInput_ip3             = m_PromptLeptonInput_ip3             ->at(idx);
    +    elec.PromptLeptonInput_rnnip           = m_PromptLeptonInput_rnnip           ->at(idx);
    +    elec.PromptLeptonInput_sv1_jf_ntrkv    = m_PromptLeptonInput_sv1_jf_ntrkv    ->at(idx);
    +    elec.PromptLeptonIso                   = m_PromptLeptonIso                   ->at(idx);
    +    elec.PromptLeptonVeto                  = m_PromptLeptonVeto                  ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) elec.passSel = m_passSel->at(idx);
    +  if ( m_infoSwitch.m_passOR ) elec.passOR = m_passOR->at(idx);
    +
    +  if ( m_infoSwitch.m_doLRT ) elec.isLRT = m_isLRT->at(idx);
    +
    +}
    +
    +
    +void ElectronContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    setBranch<float>(tree,"caloCluster_eta", m_caloCluster_eta);
    +    setBranch<float>(tree,"charge",          m_charge);
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    setBranch<int>         (tree,"isTrigMatched",        m_isTrigMatched);
    +    setBranch<vector<int> >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain);
    +    setBranch<vector<std::string> > (tree,"listTrigChains",       m_listTrigChains);
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        setBranch<int>(tree, "isIsolated_" + isol, (*m_isIsolated)[isol]);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    setBranch<float>(tree, "topoetcone20",     m_topoetcone20);
    +    setBranch<float>(tree, "neflowisol20",     m_neflowisol20);
    +    setBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500",     m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500);
    +    setBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000",    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000);
    +    setBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500",  m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500);
    +    setBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000);
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    setBranch<float>(tree, "topoetcone20_CloseByCorr",                            m_topoetcone20_CloseByCorr            );
    +    setBranch<float>(tree, "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr",          m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr              );
    +    setBranch<float>(tree, "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr",       m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr           );
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        setBranch<int>(tree, PID, (*m_PID)[PID]);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      tree->Branch( (m_name+"_PIDEff_SF_"  + PID).c_str() , (*m_PIDEff_SF)[ PID ] );
    +      for (auto& isol : m_infoSwitch.m_isolWPs) {
    +        if(!isol.empty())
    +          tree->Branch( (m_name+"_IsoEff_SF_"  + PID + "_isol" + isol).c_str() , (*m_IsoEff_SF)[ PID+isol ] );
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          tree->Branch( (m_name+"_TrigEff_SF_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , (*m_TrigEff_SF)[ trig+PID+isol ] );
    +          tree->Branch( (m_name+"_TrigMCEff_"  + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "")).c_str() , (*m_TrigMCEff) [ trig+PID+isol ] );
    +        }
    +      }
    +    }
    +
    +    setBranch<vector<float> >(tree, "RecoEff_SF"  ,                m_RecoEff_SF  );
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    setBranch<int>(tree, "author",   m_author);
    +    setBranch<int>(tree, "OQ",       m_OQ);
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    setBranch<float>(tree, "trkd0",          m_trkd0);
    +    setBranch<float>(tree, "trkd0sig",       m_trkd0sig);
    +    setBranch<float>(tree, "trkz0",          m_trkz0);
    +    setBranch<float>(tree, "trkz0sintheta",  m_trkz0sintheta);
    +    setBranch<float>(tree, "trkphi0",        m_trkphi0);
    +    setBranch<float>(tree, "trktheta",       m_trktheta);
    +    setBranch<float>(tree, "trkcharge",      m_trkcharge);
    +    setBranch<float>(tree, "trkqOverP",      m_trkqOverP);
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    setBranch<int>(tree, "trknSiHits",    m_trknSiHits);
    +    setBranch<int>(tree, "trknPixHits",   m_trknPixHits);
    +    setBranch<int>(tree, "trknPixHoles",  m_trknPixHoles);
    +    setBranch<int>(tree, "trknSCTHits",   m_trknSCTHits);
    +    setBranch<int>(tree, "trknSCTHoles",  m_trknSCTHoles);
    +    setBranch<int>(tree, "trknTRTHits",   m_trknTRTHits);
    +    setBranch<int>(tree, "trknTRTHoles",  m_trknTRTHoles);
    +    setBranch<int>(tree, "trknBLayerHits",m_trknBLayerHits);
    +    setBranch<int>(tree, "trknInnermostPixLayHits",  m_trknInnermostPixLayHits);
    +    setBranch<float>(tree, "trkPixdEdX",    m_trkPixdEdX);
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    setBranch<float>(tree, "PromptLeptonInput_DL1mu",           m_PromptLeptonInput_DL1mu);
    +    setBranch<float>(tree, "PromptLeptonInput_DRlj",            m_PromptLeptonInput_DRlj);
    +    setBranch<float>(tree, "PromptLeptonInput_LepJetPtFrac",    m_PromptLeptonInput_LepJetPtFrac);
    +    setBranch<float>(tree, "PromptLeptonInput_PtFrac",          m_PromptLeptonInput_PtFrac);
    +    setBranch<float>(tree, "PromptLeptonInput_PtRel",           m_PromptLeptonInput_PtRel);
    +    setBranch<int>  (tree, "PromptLeptonInput_TrackJetNTrack",  m_PromptLeptonInput_TrackJetNTrack);
    +    setBranch<float>(tree, "PromptLeptonInput_ip2",             m_PromptLeptonInput_ip2);
    +    setBranch<float>(tree, "PromptLeptonInput_ip3",             m_PromptLeptonInput_ip3);
    +    setBranch<float>(tree, "PromptLeptonInput_rnnip",           m_PromptLeptonInput_rnnip);
    +    setBranch<int>  (tree, "PromptLeptonInput_sv1_jf_ntrkv",    m_PromptLeptonInput_sv1_jf_ntrkv);
    +    setBranch<float>(tree, "PromptLeptonIso",                   m_PromptLeptonIso);
    +    setBranch<float>(tree, "PromptLeptonVeto",                  m_PromptLeptonVeto);
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    setBranch<char>(tree,"passSel",m_passSel);
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    setBranch<char>(tree,"passOR",m_passOR);
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ) {
    +    setBranch<char>(tree,"isLRT",m_isLRT);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    +void ElectronContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_caloCluster_eta ->clear();
    +    m_charge          ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    m_isTrigMatched               ->clear();
    +    m_isTrigMatchedToChain        ->clear();
    +    m_listTrigChains              ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      (*m_isIsolated)[ isol ]->clear();
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20                           ->clear();
    +    m_neflowisol20                           ->clear();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500        ->clear();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000       ->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500     ->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000    ->clear();
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    m_topoetcone20_CloseByCorr                            ->clear();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr          ->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr       ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      (*m_PID)[ PID ]->clear();
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      (*m_PIDEff_SF)[ PID ]->clear();
    +      for (auto& isol : m_infoSwitch.m_isolWPs) {
    +        if(!isol.empty())
    +          (*m_IsoEff_SF)[ PID+isol ]->clear();
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +          (*m_TrigEff_SF)[ trig+PID+isol ]->clear();
    +          (*m_TrigMCEff)[ trig+PID+isol ]->clear();
    +        }
    +      }
    +    }
    +
    +    m_RecoEff_SF->clear();
    +
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    m_author    -> clear();
    +    m_OQ        -> clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    m_trkd0           -> clear();
    +    m_trkd0sig        -> clear();
    +    m_trkz0           -> clear();
    +    m_trkz0sintheta   -> clear();
    +    m_trkphi0         -> clear();
    +    m_trktheta        -> clear();
    +    m_trkcharge       -> clear();
    +    m_trkqOverP       -> clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    m_trknSiHits                 -> clear();
    +    m_trknPixHits                -> clear();
    +    m_trknPixHoles               -> clear();
    +    m_trknSCTHits                -> clear();
    +    m_trknSCTHoles               -> clear();
    +    m_trknTRTHits                -> clear();
    +    m_trknTRTHoles               -> clear();
    +    m_trknBLayerHits             -> clear();
    +    m_trknInnermostPixLayHits    -> clear();
    +    m_trkPixdEdX                 -> clear();
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    m_PromptLeptonInput_DL1mu            -> clear();
    +    m_PromptLeptonInput_DRlj             -> clear();
    +    m_PromptLeptonInput_LepJetPtFrac     -> clear();
    +    m_PromptLeptonInput_PtFrac           -> clear();
    +    m_PromptLeptonInput_PtRel            -> clear();
    +    m_PromptLeptonInput_TrackJetNTrack   -> clear();
    +    m_PromptLeptonInput_ip2              -> clear();
    +    m_PromptLeptonInput_ip3              -> clear();
    +    m_PromptLeptonInput_rnnip            -> clear();
    +    m_PromptLeptonInput_sv1_jf_ntrkv     -> clear();
    +    m_PromptLeptonIso                    -> clear();
    +    m_PromptLeptonVeto                   -> clear();
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ){
    +    m_passSel->clear();
    +  }
    +  if ( m_infoSwitch.m_passOR ){
    +    m_passOR->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ) {
    +    m_isLRT->clear();
    +  }
    +
    +}
    +
    +
    +void ElectronContainer::FillElectron( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex ){
    +  return FillElectron(static_cast<const xAOD::IParticle*>(elec), primaryVertex);
    +}
    +
    +void ElectronContainer::FillElectron( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex )
    +{
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::Electron* elec=dynamic_cast<const xAOD::Electron*>(particle);
    +
    +  const xAOD::TrackParticle* trk = elec->trackParticle();
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    float calo_eta   = ( elec->caloCluster() ) ? elec->caloCluster()->etaBE(2) : -999.0;
    +    m_caloCluster_eta->push_back( calo_eta );
    +
    +    m_charge->push_back( elec->charge() );
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +
    +    // retrieve map<string,char> w/ <chain,isMatched>
    +    //
    +    static SG::AuxElement::Accessor< std::map<std::string,char> > isTrigMatchedMapElAcc("isTrigMatchedMapEl");
    +
    +    std::vector<int> matches;
    +    std::vector<string> trigChains;
    +
    +    if ( isTrigMatchedMapElAcc.isAvailable( *elec ) ) {
    +      // loop over map and fill branches
    +      //
    +      for ( auto const &it : (isTrigMatchedMapElAcc( *elec )) ) {
    +        matches.push_back( static_cast<int>(it.second) );
    +        trigChains.push_back( static_cast<string>(it.first) );
    +      }
    +    } else {
    +      matches.push_back( -1 );
    +      trigChains.push_back("NONE");
    +    }
    +
    +    m_isTrigMatchedToChain->push_back(matches);
    +    m_listTrigChains->push_back(trigChains);
    +
    +    // if at least one match among the chains is found, say this electron is trigger matched
    +    if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); }
    +    else { m_isTrigMatched->push_back(0); }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accIsol;
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        std::string isolWP = "isIsolated_" + isol;
    +        accIsol.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( isol , SG::AuxElement::Accessor<char>( isolWP ) ) );
    +        safeFill<char, int, xAOD::Electron>( elec, accIsol.at( isol ), m_isIsolated->at( isol ), -1 );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20->push_back( elec->isolation( xAOD::Iso::topoetcone20 )/m_units );
    +    m_neflowisol20->push_back(m_infoSwitch.m_doLRT ? -1. : elec->isolation( xAOD::Iso::neflowisol20 )/m_units );
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500    ->push_back( elec->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 )    /m_units );
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000   ->push_back( elec->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 )   /m_units );
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ->push_back( elec->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ) /m_units );
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000->push_back( elec->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000 )/m_units );
    +  }
    +  if ( m_infoSwitch.m_closeByCorr ) {
    +    SG::AuxElement::Accessor<float> acc_topoetcone20_CloseByCorr ("topoetcone20_CloseByCorr");
    +    SG::AuxElement::Accessor<float> acc_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr");
    +    SG::AuxElement::Accessor<float> acc_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr");
    +    safeFill<float, float, xAOD::Electron>(elec, acc_topoetcone20_CloseByCorr, m_topoetcone20_CloseByCorr, -1, m_units);
    +    safeFill<float, float, xAOD::Electron>(elec, acc_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, -1, m_units);
    +    safeFill<float, float, xAOD::Electron>(elec, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr, -1, m_units);
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accPID;
    +    static SG::AuxElement::Accessor<bool> accBLayer( "bLayerPass" );
    +
    +    for (auto& PID : m_infoSwitch.m_PIDWPs) {
    +      if (!PID.empty()) {
    +        accPID.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( PID , SG::AuxElement::Accessor<char>( PID ) ) );
    +        safeFill<char, int, xAOD::Electron>( elec, accPID.at( PID ), m_PID->at( PID ), -1 );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_recoparams ) {
    +    m_author -> push_back(elec->author());
    +    m_OQ     -> push_back(elec->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON));
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    if ( trk ) {
    +
    +      //
    +      // NB.:
    +      // All track parameters are calculated at the perigee, i.e., the point of closest approach to the origin of some r.f. (which in RunII is NOT the ATLAS detector r.f!).
    +      // The reference  frame is chosen to be a system centered in the beamspot position, with z axis parallel to the beam line.
    +      // Remember that the beamspot size ( of O(10 micrometers) in the transverse plane) is << average vertex transverse position resolution ( O(60-80 micrometers) )
    +      // The coordinates of this r.f. wrt. the ATLAS system origin are returned by means of vx(), vy(), vz()
    +      //
    +      m_trkd0->push_back( trk->d0() );
    +
    +      static SG::AuxElement::Accessor<float> d0SigAcc ("d0sig");
    +      float d0_significance =  ( d0SigAcc.isAvailable( *elec ) ) ? d0SigAcc( *elec ) : -1.0;
    +      m_trkd0sig->push_back( d0_significance );
    +      if (primaryVertex)
    +        m_trkz0->push_back( trk->z0()  - ( primaryVertex->z() - trk->vz() ) );
    +      else
    +        m_trkz0->push_back( -999.0 );
    +
    +
    +      static SG::AuxElement::Accessor<float> z0sinthetaAcc("z0sintheta");
    +      float z0sintheta =  ( z0sinthetaAcc.isAvailable( *elec ) ) ? z0sinthetaAcc( *elec ) : -999.0;
    +
    +      m_trkz0sintheta->push_back( z0sintheta );
    +      m_trkphi0->push_back( trk->phi0() );
    +      m_trktheta->push_back( trk->theta() );
    +      m_trkcharge->push_back( trk->charge() );
    +      m_trkqOverP->push_back( trk->qOverP() );
    +
    +    } else {
    +
    +      m_trkd0->push_back( -999.0 );
    +      m_trkd0sig->push_back( -999.0 );
    +      m_trkz0->push_back( -999.0 );
    +      m_trkz0sintheta->push_back( -999.0 );
    +      m_trkphi0->push_back( -999.0 );
    +      m_trktheta->push_back( -999.0 );
    +      m_trkcharge->push_back( -999.0 );
    +      m_trkqOverP->push_back( -999.0 );
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    uint8_t nPixHits(-1), nPixHoles(-1), nSCTHits(-1), nSCTHoles(-1), nTRTHits(-1), nTRTHoles(-1), nBLayerHits(-1), nInnermostPixLayHits(-1);
    +    float pixdEdX(-1.0);
    +    if ( trk ) {
    +      trk->summaryValue( nPixHits,  xAOD::numberOfPixelHits );
    +      trk->summaryValue( nPixHoles, xAOD::numberOfPixelHoles );
    +      trk->summaryValue( nSCTHits,  xAOD::numberOfSCTHits );
    +      trk->summaryValue( nSCTHoles, xAOD::numberOfSCTHoles );
    +      trk->summaryValue( nTRTHits,  xAOD::numberOfTRTHits );
    +      trk->summaryValue( nTRTHoles, xAOD::numberOfTRTHoles );
    +      trk->summaryValue( nBLayerHits,  xAOD::numberOfBLayerHits );
    +      trk->summaryValue( nInnermostPixLayHits, xAOD::numberOfInnermostPixelLayerHits );
    +      trk->summaryValue( pixdEdX,   xAOD::pixeldEdx);
    +    }
    +    m_trknSiHits->push_back( nPixHits + nSCTHits );
    +    m_trknPixHits->push_back( nPixHits );
    +    m_trknPixHoles->push_back( nPixHoles );
    +    m_trknSCTHits->push_back( nSCTHits );
    +    m_trknSCTHoles->push_back( nSCTHoles );
    +    m_trknTRTHits->push_back( nTRTHits );
    +    m_trknTRTHoles->push_back( nTRTHoles );
    +    m_trknBLayerHits->push_back( nBLayerHits );
    +    m_trknInnermostPixLayHits->push_back( nInnermostPixLayHits );
    +    m_trkPixdEdX->push_back( pixdEdX );
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    SG::AuxElement::ConstAccessor<float> acc_DL1mu          ("PromptLeptonInput_DL1mu");
    +    SG::AuxElement::ConstAccessor<float> acc_DRlj           ("PromptLeptonInput_DRlj");
    +    SG::AuxElement::ConstAccessor<float> acc_LepJetPtFrac   ("PromptLeptonInput_LepJetPtFrac");
    +    SG::AuxElement::ConstAccessor<float> acc_PtFrac         ("PromptLeptonInput_PtFrac");
    +    SG::AuxElement::ConstAccessor<float> acc_PtRel          ("PromptLeptonInput_PtRel");
    +    SG::AuxElement::ConstAccessor<short> acc_TrackJetNTrack ("PromptLeptonInput_TrackJetNTrack");
    +    SG::AuxElement::ConstAccessor<float> acc_ip2            ("PromptLeptonInput_ip2");
    +    SG::AuxElement::ConstAccessor<float> acc_ip3            ("PromptLeptonInput_ip3");
    +    SG::AuxElement::ConstAccessor<float> acc_rnnip          ("PromptLeptonInput_rnnip");
    +    SG::AuxElement::ConstAccessor<short> acc_sv1_jf_ntrkv   ("PromptLeptonInput_sv1_jf_ntrkv");
    +    SG::AuxElement::ConstAccessor<float> acc_Iso            ("PromptLeptonIso");
    +    SG::AuxElement::ConstAccessor<float> acc_Veto           ("PromptLeptonVeto");
    +
    +    m_PromptLeptonInput_DL1mu          ->push_back( acc_DL1mu          .isAvailable(*elec) ? acc_DL1mu(*elec)          : -100);
    +    m_PromptLeptonInput_DRlj           ->push_back( acc_DRlj           .isAvailable(*elec) ? acc_DRlj(*elec)           : -100);
    +    m_PromptLeptonInput_LepJetPtFrac   ->push_back( acc_LepJetPtFrac   .isAvailable(*elec) ? acc_LepJetPtFrac(*elec)   : -100);
    +    m_PromptLeptonInput_PtFrac         ->push_back( acc_PtFrac         .isAvailable(*elec) ? acc_PtFrac(*elec)         : -100);
    +    m_PromptLeptonInput_PtRel          ->push_back( acc_PtRel          .isAvailable(*elec) ? acc_PtRel(*elec)          : -100);
    +    m_PromptLeptonInput_TrackJetNTrack ->push_back( acc_TrackJetNTrack .isAvailable(*elec) ? acc_TrackJetNTrack(*elec) : -100);
    +    m_PromptLeptonInput_ip2            ->push_back( acc_ip2            .isAvailable(*elec) ? acc_ip2(*elec)            : -100);
    +    m_PromptLeptonInput_ip3            ->push_back( acc_ip3            .isAvailable(*elec) ? acc_ip3(*elec)            : -100);
    +    m_PromptLeptonInput_rnnip          ->push_back( acc_rnnip          .isAvailable(*elec) ? acc_rnnip(*elec)          : -100);
    +    m_PromptLeptonInput_sv1_jf_ntrkv   ->push_back( acc_sv1_jf_ntrkv   .isAvailable(*elec) ? acc_sv1_jf_ntrkv(*elec)   : -100);
    +    m_PromptLeptonIso                  ->push_back( acc_Iso            .isAvailable(*elec) ? acc_Iso(*elec)            : -100);
    +    m_PromptLeptonVeto                 ->push_back( acc_Veto           .isAvailable(*elec) ? acc_Veto(*elec)           : -100);
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    std::vector<float> junkSF(1,-1.0);
    +    std::vector<float> junkEff(1,-1.0);
    +
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accPIDSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accIsoSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigEFF;
    +
    +    for (auto& PID : m_infoSwitch.m_PIDSFWPs) {
    +      std::string PIDSF = "ElPIDEff_SF_syst_" + PID;
    +      accPIDSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( PID , SG::AuxElement::Accessor< std::vector< float > >( PIDSF ) ) );
    +      safeSFVecFill<float, xAOD::Electron>( elec, accPIDSF.at( PID ), m_PIDEff_SF->at( PID ), junkSF );
    +
    +      for (auto& isol : m_infoSwitch.m_isolWPs) {
    +
    +        if(!isol.empty()) {
    +          std::string IsoSF = "ElIsoEff_SF_syst_" + PID + "_isol" + isol;
    +          accIsoSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( PID+isol , SG::AuxElement::Accessor< std::vector< float > >( IsoSF ) ) );
    +          safeSFVecFill<float, xAOD::Electron>( elec, accIsoSF.at( PID+isol ), m_IsoEff_SF->at( PID+isol ), junkSF );
    +        }
    +
    +        for (auto& trig : m_infoSwitch.m_trigWPs) {
    +
    +          std::string TrigSF = "ElTrigEff_SF_syst_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "");
    +          accTrigSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( trig+PID+isol , SG::AuxElement::Accessor< std::vector< float > >( TrigSF ) ) );
    +          safeSFVecFill<float, xAOD::Electron>( elec, accTrigSF.at( trig+PID+isol ), m_TrigEff_SF->at( trig+PID+isol ), junkSF );
    +
    +          std::string TrigEFF = "ElTrigMCEff_syst_" + trig + "_" + PID + (!isol.empty() ? "_isol" + isol : "");
    +          accTrigEFF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( trig+PID+isol , SG::AuxElement::Accessor< std::vector< float > >( TrigEFF ) ) );
    +          safeSFVecFill<float, xAOD::Electron>( elec, accTrigEFF.at( trig+PID+isol ), m_TrigMCEff->at( trig+PID+isol ), junkSF );
    +
    +        }
    +
    +      }
    +    }
    +
    +    static SG::AuxElement::Accessor< std::vector< float > > accRecoSF("ElRecoEff_SF_syst_Reconstruction");
    +    safeSFVecFill<float, xAOD::Electron>( elec, accRecoSF, m_RecoEff_SF, junkSF );
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    static SG::AuxElement::Accessor<char> accElectron_passSel( "passSel" );
    +    safeFill<char, char, xAOD::Electron>(elec, accElectron_passSel, m_passSel, -99);
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    static SG::AuxElement::Accessor<char> accElectron_passOR( "passOR" );
    +    safeFill<char, char, xAOD::Electron>(elec, accElectron_passOR, m_passOR, -99);
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    static SG::AuxElement::Accessor<char> accElectron_isLRT( "isLRT" );
    +    safeFill<char, char, xAOD::Electron>(elec, accElectron_isLRT, m_isLRT, -1);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.html b/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..b108ef870c --- /dev/null +++ b/api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.html @@ -0,0 +1,1201 @@ + + + + + + + + + + + Program Listing for File ElectronEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File ElectronEfficiencyCorrector.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronEfficiencyCorrector.cxx

    +

    Return to documentation for file (Root/ElectronEfficiencyCorrector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <memory>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/ElectronAuxContainer.h"
    +#include "xAODEgamma/Electron.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/ElectronEfficiencyCorrector.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(ElectronEfficiencyCorrector)
    +
    +
    +ElectronEfficiencyCorrector :: ElectronEfficiencyCorrector () :
    +    Algorithm("ElectronEfficiencyCorrector")
    +{
    +}
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "ElectronEfficiencyCorrector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing ElectronEfficiencyCorrector Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +
    +  // *******************************************************
    +
    +  int sim_flav(1); // default for FullSim
    +  if ( isFastSim() ) {
    +    ANA_MSG_INFO( "Setting simulation flavour to AFII");
    +    sim_flav = 3;
    +  }
    +
    +  // 1.
    +  // initialize the AsgElectronEfficiencyCorrectionTool for PID efficiency SF
    +  //
    +  if ( !m_WorkingPointPID.empty() ) {
    +
    +    ANA_MSG_INFO("Electron ID working point: " << m_WorkingPointPID);
    +
    +    m_pidEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_PID_" + m_WorkingPointPID;
    +
    +    ANA_CHECK( checkToolStore<AsgElectronEfficiencyCorrectionTool>(m_pidEffSF_tool_name));
    +
    +    if ( asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_pidEffSF_tool_name) ) {
    +      m_asgElEffCorrTool_elSF_PID = asg::ToolStore::get<AsgElectronEfficiencyCorrectionTool>(m_pidEffSF_tool_name);
    +    } else {
    +      m_asgElEffCorrTool_elSF_PID = new AsgElectronEfficiencyCorrectionTool(m_pidEffSF_tool_name);
    +      m_asgElEffCorrTool_elSF_PID->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +      if ( !m_overrideMapFilePath.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("MapFilePath", m_overrideMapFilePath));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("ForceDataType",sim_flav));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("IdKey", m_WorkingPointPID));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_PID->setProperty("CorrelationModel",m_correlationModel));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_PID->initialize());
    +    }
    +
    +    // Get a list of affecting systematics
    +   //
    +    CP::SystematicSet affectSystsPID = m_asgElEffCorrTool_elSF_PID->affectingSystematics();
    +    //
    +    // Convert into a simple list
    +    //
    +    for ( const auto& syst_it : affectSystsPID ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by PID efficiency systematic: " << syst_it.name()); }
    +
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsPID = m_asgElEffCorrTool_elSF_PID->recommendedSystematics();
    +    m_systListPID = HelperFunctions::getListofSystematics( recSystsPID, m_systNamePID, m_systValPID, msg() );
    +
    +    ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool PID efficiency systematic:");
    +    for ( const auto& syst_it : m_systListPID ) {
    +      if ( m_systNamePID.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    m_outputSystNamesPID = m_outputSystNamesPID + "_" + m_WorkingPointPID;
    +
    +  }
    +
    +  // 2.
    +  // initialize the AsgElectronEfficiencyCorrectionTool for isolation efficiency SF
    +  //
    +  if ( !m_WorkingPointPID.empty() && !m_WorkingPointIso.empty() ) {
    +
    +    ANA_MSG_INFO("Electron isolation working point: " << m_WorkingPointIso);
    +
    +    m_IsoEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_Iso_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso;
    +
    +    ANA_CHECK( checkToolStore<AsgElectronEfficiencyCorrectionTool>(m_IsoEffSF_tool_name));
    +
    +    if ( asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_IsoEffSF_tool_name) ) {
    +      m_asgElEffCorrTool_elSF_Iso = asg::ToolStore::get<AsgElectronEfficiencyCorrectionTool>(m_IsoEffSF_tool_name);
    +    } else {
    +      m_asgElEffCorrTool_elSF_Iso = new AsgElectronEfficiencyCorrectionTool(m_IsoEffSF_tool_name);
    +      m_asgElEffCorrTool_elSF_Iso->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +      if ( !m_overrideMapFilePath.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("MapFilePath", m_overrideMapFilePath));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("ForceDataType",sim_flav));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("IdKey", m_WorkingPointPID));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("IsoKey", m_WorkingPointIso));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->setProperty("CorrelationModel",m_correlationModel));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Iso->initialize());
    +    }
    +
    +
    +    // Get a list of affecting systematics
    +   //
    +    CP::SystematicSet affectSystsIso = m_asgElEffCorrTool_elSF_Iso->affectingSystematics();
    +    //
    +    // Convert into a simple list
    +    //
    +    for ( const auto& syst_it : affectSystsIso ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by Iso efficiency systematic: " << syst_it.name()); }
    +
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsIso = m_asgElEffCorrTool_elSF_Iso->recommendedSystematics();
    +    m_systListIso = HelperFunctions::getListofSystematics( recSystsIso, m_systNameIso, m_systValIso, msg() );
    +
    +    ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool Iso efficiency systematic:");
    +    for ( const auto& syst_it : m_systListIso ) {
    +      if ( m_systNameIso.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    m_outputSystNamesIso = m_outputSystNamesIso + "_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso;
    +
    +  }
    +
    +  // 3.
    +  // initialize the AsgElectronEfficiencyCorrectionTool for Reco Efficiency SF
    +  //
    +  if ( !m_WorkingPointReco.empty() ) {
    +
    +    ANA_MSG_INFO("Electron reconstruction working point: " << m_WorkingPointReco);
    +
    +    m_RecoEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_" + m_WorkingPointReco;
    +
    +    ANA_CHECK( checkToolStore<AsgElectronEfficiencyCorrectionTool>(m_RecoEffSF_tool_name));
    +
    +    if ( asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_RecoEffSF_tool_name) ) {
    +      m_asgElEffCorrTool_elSF_Reco = asg::ToolStore::get<AsgElectronEfficiencyCorrectionTool>(m_RecoEffSF_tool_name);
    +    } else {
    +      m_asgElEffCorrTool_elSF_Reco = new AsgElectronEfficiencyCorrectionTool(m_RecoEffSF_tool_name);
    +      m_asgElEffCorrTool_elSF_Reco->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +      if ( !m_overrideMapFilePath.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("MapFilePath", m_overrideMapFilePath));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("ForceDataType",sim_flav));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("RecoKey", m_WorkingPointReco));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->setProperty("CorrelationModel",m_correlationModel));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Reco->initialize());
    +    }
    +
    +
    +    // Get a list of affecting systematics
    +    //
    +    CP::SystematicSet affectSystsReco = m_asgElEffCorrTool_elSF_Reco->affectingSystematics();
    +    //
    +    // Convert into a simple list
    +    //
    +    for ( const auto& syst_it : affectSystsReco ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by reco efficiency systematic: " << syst_it.name()); }
    +
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsReco = m_asgElEffCorrTool_elSF_Reco->recommendedSystematics();
    +    m_systListReco = HelperFunctions::getListofSystematics( recSystsReco, m_systNameReco, m_systValReco, msg() );
    +
    +    ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool reco efficiency systematic:");
    +    for ( const auto& syst_it : m_systListReco ) {
    +      if ( m_systNameReco.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    m_outputSystNamesReco = m_outputSystNamesReco + "_" + m_WorkingPointReco;
    +
    +  }
    +
    +  // 4.
    +  // Initialise the AsgElectronEfficiencyCorrectionTool for Trigger Efficiency SF and Trigger Efficiencies
    +  //
    +  if ( !m_WorkingPointPID.empty() && !m_WorkingPointTrig.empty() ) {
    +
    +    ANA_MSG_INFO("Electron trigger working point: " << m_WorkingPointTrig);
    +
    +    m_TrigEffSF_tool_name = "ElectronEfficiencyCorrectionTool_effSF_Trig_" + m_WorkingPointTrig + "_" + m_WorkingPointPID;
    +    if ( !m_WorkingPointIso.empty() ) {
    +      m_TrigEffSF_tool_name += ( "_isol" + m_WorkingPointIso );
    +    }
    +    m_TrigMCEff_tool_name = "ElectronEfficiencyCorrectionTool_effSF_TrigMCEff_" + m_WorkingPointTrig + "_" + m_WorkingPointPID;
    +    if ( !m_WorkingPointIso.empty() ) {
    +      m_TrigMCEff_tool_name += ( "_isol" + m_WorkingPointIso );
    +    }
    +
    +    ANA_CHECK( checkToolStore<AsgElectronEfficiencyCorrectionTool>(m_TrigEffSF_tool_name));
    +    ANA_CHECK( checkToolStore<AsgElectronEfficiencyCorrectionTool>(m_TrigMCEff_tool_name));
    +
    +    if ( asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_TrigEffSF_tool_name) ) {
    +      m_asgElEffCorrTool_elSF_Trig = asg::ToolStore::get<AsgElectronEfficiencyCorrectionTool>(m_TrigEffSF_tool_name);
    +    } else {
    +      m_asgElEffCorrTool_elSF_Trig = new AsgElectronEfficiencyCorrectionTool(m_TrigEffSF_tool_name);
    +      m_asgElEffCorrTool_elSF_Trig->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +      if ( !m_overrideMapFilePathTrig.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath for trigger SF only to " << m_overrideMapFilePathTrig );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("MapFilePath", m_overrideMapFilePathTrig));
    +      } else if ( !m_overrideMapFilePath.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("MapFilePath", m_overrideMapFilePath));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("ForceDataType",sim_flav));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("IdKey", m_WorkingPointPID));
    +      if (!m_WorkingPointIso.empty()) {
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("IsoKey", m_WorkingPointIso));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("TriggerKey", m_WorkingPointTrig));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("CorrelationModel",m_correlationModel));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->setProperty("OutputLevel",msg().level()));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_Trig->initialize());
    +    }
    +
    +    if ( asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_TrigMCEff_tool_name) ) {
    +      m_asgElEffCorrTool_elSF_TrigMCEff= asg::ToolStore::get<AsgElectronEfficiencyCorrectionTool>(m_TrigMCEff_tool_name);
    +    } else {
    +      m_asgElEffCorrTool_elSF_TrigMCEff = new AsgElectronEfficiencyCorrectionTool(m_TrigMCEff_tool_name);
    +      m_asgElEffCorrTool_elSF_TrigMCEff->msg().setLevel( MSG::ERROR ); // DEBUG, VERBOSE, INFO
    +      if ( !m_overrideMapFilePathTrig.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath for trigger SF only to " << m_overrideMapFilePathTrig );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("MapFilePath", m_overrideMapFilePathTrig));
    +      } else if ( !m_overrideMapFilePath.empty() ) {
    +        ANA_MSG_WARNING( "Overriding MapFilePath to " << m_overrideMapFilePath );
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("MapFilePath", m_overrideMapFilePath));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("ForceDataType",sim_flav));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("IdKey", m_WorkingPointPID));
    +      if (!m_WorkingPointIso.empty()) {
    +        ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("IsoKey", m_WorkingPointIso));
    +      }
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("TriggerKey", "Eff_" + m_WorkingPointTrig));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("CorrelationModel",m_correlationModel));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->setProperty("OutputLevel",msg().level()));
    +      ANA_CHECK( m_asgElEffCorrTool_elSF_TrigMCEff->initialize());
    +    }
    +
    +    // Get a list of affecting systematics
    +   //
    +    CP::SystematicSet affectSystsTrig = m_asgElEffCorrTool_elSF_Trig->affectingSystematics();
    +    //
    +    // Convert into a simple list
    +    //
    +    for ( const auto& syst_it : affectSystsTrig ) { ANA_MSG_DEBUG("AsgElectronEfficiencyCorrectionTool can be affected by Trig efficiency SF systematic: " << syst_it.name()); }
    +
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsTrig = m_asgElEffCorrTool_elSF_Trig->recommendedSystematics();
    +    m_systListTrig = HelperFunctions::getListofSystematics( recSystsTrig, m_systNameTrig, m_systValTrig, msg() );
    +
    +    ANA_MSG_INFO("Will be using AsgElectronEfficiencyCorrectionTool Trig efficiency SF systematic:");
    +    for ( const auto& syst_it : m_systListTrig ) {
    +      if ( m_systNameTrig.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    //
    +    m_outputSystNamesTrig = m_outputSystNamesTrig + "_" + m_WorkingPointTrig + "_" + m_WorkingPointPID;
    +    if ( !m_WorkingPointIso.empty() ) {
    +      m_outputSystNamesTrig += ( "_isol" + m_WorkingPointIso );
    +    }
    +
    +  }
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systListPID, m_outputSystNamesPID, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListIso, m_outputSystNamesIso, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListReco, m_outputSystNamesReco, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListTrig, m_outputSystNamesTrig, fileMD);
    +  }
    +
    +  // *********************************************************************************
    +
    +  ANA_MSG_INFO( "ElectronEfficiencyCorrector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  m_numEvent++;
    +
    +  if ( !isMC() ) {
    +    if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Electron Efficiency correction... "); }
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  ANA_MSG_DEBUG( "Applying Electron Efficiency Correction... ");
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // if m_inputSystNamesElectrons = "" --> input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  std::vector<std::string>* systNames_ptr(nullptr);
    +  if ( !m_inputSystNamesElectrons.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesElectrons, 0, m_store, msg()) );
    +
    +  std::vector<std::string> systNames{""};
    +  if(systNames_ptr) systNames = *systNames_ptr;
    +
    +  // Declare a write status set to true
    +  // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!)
    +  bool writeSystNames(true);
    +
    +  // loop over systematic sets available
    +  for ( auto systName : systNames ) {
    +
    +    const xAOD::ElectronContainer* inputElectrons(nullptr);
    +
    +    // some systematics might have rejected the event
    +    if ( m_store->contains<xAOD::ElectronContainer>( m_inContainerName+systName ) ) {
    +
    +      // retrieve input electrons
    +      ANA_CHECK( HelperFunctions::retrieve(inputElectrons, m_inContainerName+systName, m_event, m_store, msg()) );
    +
    +      ANA_MSG_DEBUG( "Number of electrons: " << static_cast<int>(inputElectrons->size()) );
    +      ANA_MSG_DEBUG( "Input syst: " << systName );
    +      unsigned int idx(0);
    +      for ( auto el : *(inputElectrons) ) {
    +        ANA_MSG_DEBUG( "Input electron " << idx << ", pt = " << el->pt() * 1e-3 << " GeV " );
    +        ++idx;
    +      }
    +
    +      // decorate electrons w/ SF - there will be a decoration w/ different name for each syst!
    +      ANA_CHECK( this->executeSF( inputElectrons, systName.empty(), writeSystNames ) );
    +
    +      writeSystNames = false;
    +
    +    } // check existence of container
    +
    +  } // close loop on systematic sets available from upstream algo
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( !asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_pidEffSF_tool_name) )  delete m_asgElEffCorrTool_elSF_PID;
    +  if ( !asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_IsoEffSF_tool_name) )  delete m_asgElEffCorrTool_elSF_Iso;
    +  if ( !asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_RecoEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_Reco;
    +  if ( !asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_TrigEffSF_tool_name) ) delete m_asgElEffCorrTool_elSF_Trig;
    +  if ( !asg::ToolStore::contains<AsgElectronEfficiencyCorrectionTool>(m_TrigMCEff_tool_name) ) delete m_asgElEffCorrTool_elSF_TrigMCEff;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ElectronEfficiencyCorrector :: executeSF ( const xAOD::ElectronContainer* inputElectrons, bool nominal, bool writeSystNames )
    +{
    +
    +  // In the following, every electron gets decorated with several vector<double>'s (for various SFs),
    +  //
    +  // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF).
    +  //
    +  // Additionally, we create these vector<string> with the SF syst names, so that we know which component corresponds to.
    +  // ( there's a 1:1 correspondence with the vector<double>'s defined above )
    +  //
    +  // These vector<string> are eventually stored in TStore
    +  //
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesPID       = nullptr;
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesReco      = nullptr;
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesIso       = nullptr;
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesTrig      = nullptr;
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesTrigMCEff = nullptr;
    +
    +  // 1.
    +  // PID efficiency SFs - this is a per-ELECTRON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised
    +  //
    +  if ( !m_WorkingPointPID.empty() && !isToolAlreadyUsed(m_pidEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesPID = std::make_unique< std::vector< std::string > >();
    +
    +    // Create the names of the SF weights to be recorded
    +    std::string sfName = "ElPIDEff_SF_syst_" + m_WorkingPointPID;
    +
    +    for ( const auto& syst_it : m_systListPID ) {
    +
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      ANA_MSG_DEBUG("Electron PID efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name());
    +      if ( writeSystNames ) sysVariationNamesPID->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_asgElEffCorrTool_elSF_PID->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_PID for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_PID->appliedSystematics().name() );
    +
    +      // and now apply PID efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto el_itr : *(inputElectrons) ) {
    +
    +         ANA_MSG_DEBUG( "Applying PID efficiency SF" );
    +
    +       // NB: derivations might remove CC and tracks for low pt electrons: add a safety check!
    +       //
    +       if ( !el_itr->caloCluster() ) {
    +         ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info");
    +         continue;
    +       }
    +
    +         //
    +         // obtain PID efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecPID ( sfName  );
    +         if ( !sfVecPID.isAvailable( *el_itr )  ) {
    +           sfVecPID ( *el_itr ) = std::vector<float>();
    +         }
    +
    +         //
    +         // obtain efficiency SF's for PID
    +         //
    +         double pidEffSF(-1.0); // tool wants a double
    +       CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_PID->getEfficiencyScaleFactor( *el_itr, pidEffSF );
    +         if ( status == CP::CorrectionCode::Error ) {
    +           ANA_MSG_ERROR( "Problem in PID getEfficiencyScaleFactor Tool");
    +         return EL::StatusCode::FAILURE;
    +         } else if ( status == CP::CorrectionCode::OutOfValidityRange ) {
    +         ANA_MSG_DEBUG( "Electron of of PID efficiency validity range");
    +       }
    +         //
    +         // Add it to decoration vector
    +         //
    +         sfVecPID( *el_itr ).push_back( pidEffSF );
    +
    +       ANA_MSG_DEBUG( "===>>>");
    +       ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt()*1e-3 << " GeV ");
    +       ANA_MSG_DEBUG( "PID SF decoration: " << sfName );
    +       ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +       ANA_MSG_DEBUG( "PID efficiency SF:");
    +       ANA_MSG_DEBUG( "\t " << pidEffSF << " (from getEfficiencyScaleFactor())" );
    +       ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         ++idx;
    +
    +      } // close electron loop
    +
    +    }  // close loop on PID efficiency systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesPID ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesPID), m_outputSystNamesPID ));
    +    }
    +
    +  }
    +
    +  // 2.
    +  // Iso efficiency SFs - this is a per-ELECTRON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised
    +  //
    +  if ( !m_WorkingPointPID.empty() && !m_WorkingPointIso.empty() && !isToolAlreadyUsed(m_IsoEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesIso = std::make_unique< std::vector< std::string > >();
    +
    +    // Create the names of the SF weights to be recorded
    +    std::string sfName = "ElIsoEff_SF_syst_" + m_WorkingPointPID + "_isol" + m_WorkingPointIso;
    +
    +    for ( const auto& syst_it : m_systListIso ) {
    +
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      ANA_MSG_DEBUG("Electron Iso efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name());
    +      if ( writeSystNames ) sysVariationNamesIso->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_asgElEffCorrTool_elSF_Iso->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Iso for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Iso->appliedSystematics().name() );
    +
    +      // and now apply Iso efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto el_itr : *(inputElectrons) ) {
    +
    +         ANA_MSG_DEBUG( "Applying Iso efficiency SF" );
    +
    +       // NB: derivations might remove CC and tracks for low pt electrons: add a safety check!
    +       //
    +       if ( !el_itr->caloCluster() ) {
    +         ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info");
    +         continue;
    +       }
    +
    +         //
    +         // obtain Iso efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecIso ( sfName  );
    +         if ( !sfVecIso.isAvailable( *el_itr )  ) {
    +           sfVecIso ( *el_itr ) = std::vector<float>();
    +         }
    +
    +         //
    +         // obtain efficiency SF's for Iso
    +         //
    +         double IsoEffSF(-1.0); // tool wants a double
    +       CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Iso->getEfficiencyScaleFactor( *el_itr, IsoEffSF );
    +         if ( status == CP::CorrectionCode::Error ) {
    +           ANA_MSG_ERROR( "Problem in Iso getEfficiencyScaleFactor Tool");
    +         return EL::StatusCode::FAILURE;
    +         } else if ( status == CP::CorrectionCode::OutOfValidityRange ) {
    +         ANA_MSG_DEBUG( "Electron of of Iso efficiency validity range");
    +       }
    +         //
    +         // Add it to decoration vector
    +         //
    +       sfVecIso( *el_itr ).push_back( IsoEffSF );
    +
    +       ANA_MSG_DEBUG( "===>>>");
    +       ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" );
    +       ANA_MSG_DEBUG( "Iso SF decoration: " << sfName );
    +       ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +       ANA_MSG_DEBUG( "Iso efficiency SF:");
    +       ANA_MSG_DEBUG( "\t " << IsoEffSF << " (from getEfficiencyScaleFactor())" );
    +       ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         ++idx;
    +
    +      } // close electron loop
    +
    +    }  // close loop on Iso efficiency systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesIso ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesIso), m_outputSystNamesIso ));
    +    }
    +
    +  }
    +
    +  // 3.
    +  // Reco efficiency SFs - this is a per-ELECTRON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised
    +  //
    +  if ( !m_WorkingPointReco.empty() && !isToolAlreadyUsed(m_RecoEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesReco = std::make_unique< std::vector< std::string > >();
    +
    +    // Create the names of the SF weights to be recorded
    +    std::string sfName = "ElRecoEff_SF_syst_" + m_WorkingPointReco;
    +
    +    for ( const auto& syst_it : m_systListReco ) {
    +
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      ANA_MSG_DEBUG("Electron Reco efficiency sys name (to be recorded in xAOD::TStore) is: " << syst_it.name());
    +      if ( writeSystNames ) sysVariationNamesReco->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_asgElEffCorrTool_elSF_Reco->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Reco for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Reco->appliedSystematics().name() );
    +
    +      // and now apply Reco efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto el_itr : *(inputElectrons) ) {
    +
    +        ANA_MSG_DEBUG( "Applying Reco efficiency SF" );
    +
    +        // NB: derivations might remove CaloCluster for low pt electrons: add a safety check!
    +        if ( !el_itr->caloCluster() ) {
    +          ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info");
    +          continue;
    +        }
    +
    +        //
    +        // obtain Reco efficiency SF as a float (to be stored away separately)
    +        //
    +        //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron)
    +        //
    +        SG::AuxElement::Decorator< std::vector<float> > sfVecReco ( sfName  );
    +        if ( !sfVecReco.isAvailable( *el_itr )  ) {
    +          sfVecReco ( *el_itr ) = std::vector<float>();
    +        }
    +
    +        //
    +        // obtain efficiency SF's for Reco
    +        //
    +        double recoEffSF(-1.0); // tool wants a double
    +        CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Reco->getEfficiencyScaleFactor( *el_itr, recoEffSF );
    +        if ( status == CP::CorrectionCode::Error ) {
    +          ANA_MSG_ERROR( "Problem in Reco getEfficiencyScaleFactor Tool");
    +          return EL::StatusCode::FAILURE;
    +        } else if ( status == CP::CorrectionCode::OutOfValidityRange ) {
    +          ANA_MSG_DEBUG( "Electron of of Reco efficiency validity range");
    +        }
    +        //
    +        // Add it to decoration vector
    +        //
    +        sfVecReco( *el_itr ).push_back( recoEffSF );
    +
    +        ANA_MSG_DEBUG( "===>>>");
    +        ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" );
    +        ANA_MSG_DEBUG( "Reco SF decoration: " << sfName );
    +        ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +        ANA_MSG_DEBUG( "Reco efficiency SF:");
    +        ANA_MSG_DEBUG( "\t " << recoEffSF << " (from getEfficiencyScaleFactor())" );
    +        ANA_MSG_DEBUG( "--------------------------------------");
    +
    +        ++idx;
    +
    +      } // close electron loop
    +
    +    }  // close loop on Reco efficiency systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesReco ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesReco), m_outputSystNamesReco ));
    +    }
    +
    +  }
    +
    +  // 4.
    +  // Trig efficiency SFs (eff_data/eff_MC) - this is a per-ELECTRON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  // NB: calculation of the event SF is up to the analyzer
    +
    +  // Do it only if a tool with *this* name hasn't already been used, and has been previously initialised
    +  //
    +
    +  if ( !m_WorkingPointPID.empty() && !m_WorkingPointTrig.empty() && !isToolAlreadyUsed(m_TrigEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesTrig = std::make_unique< std::vector< std::string > >();
    +
    +    // Create the names of the SF weights to be recorded
    +    std::string sfName = "ElTrigEff_SF_syst_" + m_WorkingPointTrig + "_" + m_WorkingPointPID;
    +    if ( !m_WorkingPointIso.empty() ) {
    +      sfName += ( "_isol" + m_WorkingPointIso );
    +    }
    +    std::string effName = "ElTrigMCEff_syst_" + m_WorkingPointTrig + "_" + m_WorkingPointPID;
    +    if ( !m_WorkingPointIso.empty() ) {
    +      effName += ( "_isol" + m_WorkingPointIso );
    +    }
    +
    +    for ( const auto& syst_it : m_systListTrig ) {
    +
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      ANA_MSG_DEBUG("Electron Trig efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name());
    +      if ( writeSystNames ) sysVariationNamesTrig->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_asgElEffCorrTool_elSF_Trig->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_Trig for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_Trig->appliedSystematics().name() );
    +
    +      if ( m_asgElEffCorrTool_elSF_TrigMCEff->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR("Failed to configure AsgElectronEfficiencyCorrectionTool_TrigMCEff for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematics: " << m_asgElEffCorrTool_elSF_TrigMCEff->appliedSystematics().name() );
    +
    +      //------------------------------
    +      // Get trigger efficiency SF(s)
    +      //------------------------------
    +      ANA_MSG_DEBUG( "Applying trigger efficiency SF and MC efficiency" );
    +
    +      ANA_MSG_DEBUG( "===>>>");
    +      ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +      ANA_MSG_DEBUG( "Trigger efficiency SF decoration: " << sfName );
    +      ANA_MSG_DEBUG( "Trigger MC efficiency decoration: " << effName );
    +
    +      // and now apply trigger efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      double       totalIneff = 1;
    +      double       totalIneffScaled = 1;
    +      for ( auto el_itr : *(inputElectrons) ) {
    +
    +         ANA_MSG_DEBUG( "Electron " << idx << ", pt = " << el_itr->pt() * 1e-3 << " GeV" );
    +
    +         // NB: derivations might remove CaloCluster and tracks for low pt electrons: add a safety check!
    +         if ( !el_itr->caloCluster() ) {
    +           ANA_MSG_DEBUG( "Apply SF: skipping electron " << idx << ", it has no caloCluster info");
    +           continue;
    +         }
    +
    +         //
    +         // obtain Trigger efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecTrig ( sfName  );
    +         if ( !sfVecTrig.isAvailable( *el_itr )  ) {
    +           sfVecTrig ( *el_itr ) = std::vector<float>();
    +         }
    +
    +         //
    +         // obtain Trigger MC efficiency as a float (to be stored away separately)
    +         //
    +         //  If efficiency decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* electron)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > effVecTrig ( effName );
    +         if ( !effVecTrig.isAvailable( *el_itr )  ) {
    +           effVecTrig ( *el_itr ) = std::vector<float>();
    +         }
    +
    +         //
    +         // obtain efficiency SF for Trig
    +         //
    +         double trigEffSF(-1.0); // tool wants a double
    +         CP::CorrectionCode::ErrorCode status = m_asgElEffCorrTool_elSF_Trig->getEfficiencyScaleFactor( *el_itr, trigEffSF );
    +         if ( status == CP::CorrectionCode::Error ) {
    +           ANA_MSG_ERROR( "Problem in Trig getEfficiencyScaleFactor Tool");
    +           return EL::StatusCode::FAILURE;
    +         } else if ( status == CP::CorrectionCode::OutOfValidityRange ) {
    +           ANA_MSG_DEBUG( "Electron of of Trig efficiency validity range");
    +         }
    +         if(m_usePerElectronTriggerSFs){
    +           // Add them to decoration vectors
    +           sfVecTrig( *el_itr ).push_back( trigEffSF );
    +           ANA_MSG_DEBUG( "Trigger efficiency SF:");
    +           ANA_MSG_DEBUG( "\t " << trigEffSF << "(from getEfficiencyScaleFactor())" );
    +         }
    +
    +         //
    +         // obtain Trig MC efficiency
    +         //
    +         double trigMCEff(-1.0); // tool wants a double
    +         CP::CorrectionCode::ErrorCode statusEff = m_asgElEffCorrTool_elSF_TrigMCEff->getEfficiencyScaleFactor( *el_itr, trigMCEff );
    +         if ( statusEff == CP::CorrectionCode::Error ) {
    +           ANA_MSG_ERROR( "Problem in TrigMCEff getEfficiencyScaleFactor Tool");
    +           return EL::StatusCode::FAILURE;
    +         } else if ( statusEff == CP::CorrectionCode::OutOfValidityRange ) {
    +           ANA_MSG_DEBUG( "Electron of of TrigMCEff efficiency validity range");
    +         }
    +         // Add them to decoration vectors
    +         effVecTrig( *el_itr ).push_back( trigMCEff );
    +
    +         ANA_MSG_DEBUG( "Trigger MC efficiency:");
    +         ANA_MSG_DEBUG( "\t " << trigMCEff << "(from getEfficiencyScaleFactor())" );
    +
    +         ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         // Needed for global trigger efficiency SF
    +         if(!m_usePerElectronTriggerSFs){
    +           totalIneff       *= (1 - trigMCEff);
    +           totalIneffScaled *= (1 - trigMCEff * trigEffSF);
    +     }
    +
    +         ++idx;
    +
    +      } // close electron loop
    +
    +      // obtain global trigger efficiency SF (using all electrons)
    +      if(!m_usePerElectronTriggerSFs){
    +        double trigEffSF = (1 - totalIneffScaled) / (1 - totalIneff);
    +        // Decorate electrons, all with the same global trigger SF
    +        for ( auto el_itr : *(inputElectrons) ) {
    +          SG::AuxElement::Decorator< std::vector<float> > sfVecTrig ( sfName  );
    +          if ( !sfVecTrig.isAvailable( *el_itr )  ) {
    +            sfVecTrig ( *el_itr ) = std::vector<float>();
    +          }
    +          // Add them to decoration vectors
    +          sfVecTrig( *el_itr ).push_back( trigEffSF);
    +        }
    +      }
    +
    +    }  // close loop on Trig efficiency SF systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesTrig ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesTrig), m_outputSystNamesTrig ));
    +    }
    +
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronHists.cxx.html b/api/program_listing_file_Root_ElectronHists.cxx.html new file mode 100644 index 0000000000..c43b2d492f --- /dev/null +++ b/api/program_listing_file_Root_ElectronHists.cxx.html @@ -0,0 +1,396 @@ + + + + + + + + + + + Program Listing for File ElectronHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronHists.cxx

    +

    Return to documentation for file (Root/ElectronHists.cxx)

    +
    #include <xAODAnaHelpers/ElectronHists.h>
    +#include <sstream>
    +
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +ANA_MSG_SOURCE(msgElectronHists, "ElectronHists")
    +
    +ElectronHists :: ElectronHists (std::string name, std::string detailStr) :
    +  IParticleHists(name, detailStr, "electron", "electron"),
    +  m_infoSwitch(new HelperClasses::ElectronInfoSwitch(m_detailStr))
    +{ }
    +
    +ElectronHists :: ~ElectronHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +StatusCode ElectronHists::initialize() {
    +  using namespace msgElectronHists;
    +  ANA_CHECK( IParticleHists::initialize());
    +
    +  // isolation
    +  if( m_infoSwitch->m_isolation ) {
    +    if(m_debug) Info("ElectronHists::initialize()", "adding isolation plots");
    +
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (isol.empty() && isol == "NONE") continue;
    +
    +      m_isIsolated[isol] = book(m_name, "isIsolated_" + isol,   "isIsolated_" + isol, 3, -1.5, 1.5);
    +    }
    +
    +    m_ptcone20     = book(m_name, "ptcone20",     "ptcone20",     101, -0.2, 20);
    +    m_ptcone30     = book(m_name, "ptcone30",     "ptcone30",     101, -0.2, 20);
    +    m_ptcone40     = book(m_name, "ptcone40",     "ptcone40",     101, -0.2, 20);
    +    m_ptvarcone20  = book(m_name, "ptvarcone20",  "ptvarcone20",  101, -0.2, 20);
    +    m_ptvarcone30  = book(m_name, "ptvarcone30",  "ptvarcone30",  101, -0.2, 20);
    +    m_ptvarcone40  = book(m_name, "ptvarcone40",  "ptvarcone40",  101, -0.2, 20);
    +    m_topoetcone20 = book(m_name, "topoetcone20", "topoetcone20", 101, -0.2, 20);
    +    m_topoetcone30 = book(m_name, "topoetcone30", "topoetcone30", 101, -0.2, 20);
    +    m_topoetcone40 = book(m_name, "topoetcone40", "topoetcone40", 101, -0.2, 20);
    +
    +    m_ptcone20_rel     = book(m_name, "ptcone20_rel",     "ptcone20_rel",     110, -0.2, 2);
    +    m_ptcone30_rel     = book(m_name, "ptcone30_rel",     "ptcone30_rel",     110, -0.2, 2);
    +    m_ptcone40_rel     = book(m_name, "ptcone40_rel",     "ptcone40_rel",     110, -0.2, 2);
    +    m_ptvarcone20_rel  = book(m_name, "ptvarcone20_rel",  "ptvarcone20_rel",  110, -0.2, 2);
    +    m_ptvarcone30_rel  = book(m_name, "ptvarcone30_rel",  "ptvarcone30_rel",  110, -0.2, 2);
    +    m_ptvarcone40_rel  = book(m_name, "ptvarcone40_rel",  "ptvarcone40_rel",  110, -0.2, 2);
    +    m_topoetcone20_rel = book(m_name, "topoetcone20_rel", "topoetcone20_rel", 110, -0.2, 2);
    +    m_topoetcone30_rel = book(m_name, "topoetcone30_rel", "topoetcone30_rel", 110, -0.2, 2);
    +    m_topoetcone40_rel = book(m_name, "topoetcone40_rel", "topoetcone40_rel", 110, -0.2, 2);
    +}
    +
    +  // PID
    +  if (m_infoSwitch->m_PID || m_infoSwitch->m_quality) {
    +    for (auto& PID : m_infoSwitch->m_PIDWPs) {
    +      if (PID.empty()) continue;
    +
    +      m_PID[PID] = book(m_name, PID, PID, 3, -1.5, 1.5);
    +    }
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode ElectronHists::execute( const xAOD::Electron* electron, float eventWeight, const xAOD::EventInfo* eventInfo ) {
    +  return execute(static_cast<const xAOD::IParticle*>(electron), eventWeight, eventInfo);
    +}
    +
    +StatusCode ElectronHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) {
    +  using namespace msgElectronHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo));
    +
    +  if(m_debug) std::cout << "ElectronHists: in execute " <<std::endl;
    +
    +  const xAOD::Electron* electron=dynamic_cast<const xAOD::Electron*>(particle);
    +  if(electron==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Electron" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  // isolation
    +  if ( m_infoSwitch->m_isolation ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accIsol;
    +
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        std::string isolWP = "isIsolated_" + isol;
    +        accIsol.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( isol , SG::AuxElement::Accessor<char>( isolWP ) ) );
    +
    +        if (accIsol.at(isol).isAvailable(*electron)) {
    +            m_isIsolated[isol]->Fill(accIsol.at(isol)(*electron), eventWeight);
    +        } else {
    +            m_isIsolated[isol]->Fill(-1 , eventWeight);
    +        }
    +      }
    +    }
    +
    +    m_ptcone20    ->Fill( electron->isolation( xAOD::Iso::ptcone20    ) / 1e3, eventWeight );
    +    m_ptcone30    ->Fill( electron->isolation( xAOD::Iso::ptcone30    ) / 1e3, eventWeight );
    +    m_ptcone40    ->Fill( electron->isolation( xAOD::Iso::ptcone40    ) / 1e3, eventWeight );
    +    m_ptvarcone20 ->Fill( electron->isolation( xAOD::Iso::ptvarcone20 ) / 1e3, eventWeight );
    +    m_ptvarcone30 ->Fill( electron->isolation( xAOD::Iso::ptvarcone30 ) / 1e3, eventWeight );
    +    m_ptvarcone40 ->Fill( electron->isolation( xAOD::Iso::ptvarcone40 ) / 1e3, eventWeight );
    +    m_topoetcone20->Fill( electron->isolation( xAOD::Iso::topoetcone20) / 1e3, eventWeight );
    +    m_topoetcone30->Fill( electron->isolation( xAOD::Iso::topoetcone30) / 1e3, eventWeight );
    +    m_topoetcone40->Fill( electron->isolation( xAOD::Iso::topoetcone40) / 1e3, eventWeight );
    +
    +    float electronPt = electron->pt();
    +    m_ptcone20_rel     ->Fill( electron->isolation( xAOD::Iso::ptcone20 )     / electronPt,  eventWeight );
    +    m_ptcone30_rel     ->Fill( electron->isolation( xAOD::Iso::ptcone30 )     / electronPt,  eventWeight );
    +    m_ptcone40_rel     ->Fill( electron->isolation( xAOD::Iso::ptcone40 )     / electronPt,  eventWeight );
    +    m_ptvarcone20_rel  ->Fill( electron->isolation( xAOD::Iso::ptvarcone20 )  / electronPt,  eventWeight );
    +    m_ptvarcone30_rel  ->Fill( electron->isolation( xAOD::Iso::ptvarcone30 )  / electronPt,  eventWeight );
    +    m_ptvarcone40_rel  ->Fill( electron->isolation( xAOD::Iso::ptvarcone40 )  / electronPt,  eventWeight );
    +    m_topoetcone20_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone20 ) / electronPt,  eventWeight );
    +    m_topoetcone30_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone30 ) / electronPt,  eventWeight );
    +    m_topoetcone40_rel ->Fill( electron->isolation( xAOD::Iso::topoetcone40 ) / electronPt,  eventWeight );
    +
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    +StatusCode ElectronHists::execute( const xAH::Electron* elec, float eventWeight, const xAH::EventInfo* eventInfo ) {
    +  return execute(static_cast<const xAH::Particle*>(elec), eventWeight, eventInfo);
    +}
    +
    +
    +StatusCode ElectronHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/  ) {
    +  using namespace msgElectronHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight));
    +
    +  if(m_debug) std::cout << "ElectronHists: in execute " <<std::endl;
    +
    +  const xAH::Electron* elec=dynamic_cast<const xAH::Electron*>(particle);
    +  if(elec==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Electron" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  // isolation
    +  if ( m_infoSwitch->m_isolation ) {
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (isol.empty() && isol == "NONE") continue;
    +
    +      m_isIsolated[isol]->Fill(elec->isIsolated.at(isol), eventWeight);
    +    }
    +
    +    m_ptcone20    ->Fill( elec->ptcone20    , eventWeight );
    +    m_ptcone30    ->Fill( elec->ptcone30    , eventWeight );
    +    m_ptcone40    ->Fill( elec->ptcone40    , eventWeight );
    +    m_ptvarcone20 ->Fill( elec->ptvarcone20 , eventWeight );
    +    m_ptvarcone30 ->Fill( elec->ptvarcone30 , eventWeight );
    +    m_ptvarcone40 ->Fill( elec->ptvarcone40 , eventWeight );
    +    m_topoetcone20->Fill( elec->topoetcone20, eventWeight );
    +    m_topoetcone30->Fill( elec->topoetcone30, eventWeight );
    +    m_topoetcone40->Fill( elec->topoetcone40, eventWeight );
    +
    +
    +    float elecPt = elec->p4.Pt();
    +    m_ptcone20_rel     ->Fill( elec->ptcone20/elecPt        ,  eventWeight );
    +    m_ptcone30_rel     ->Fill( elec->ptcone30/elecPt        ,  eventWeight );
    +    m_ptcone40_rel     ->Fill( elec->ptcone40/elecPt        ,  eventWeight );
    +    m_ptvarcone20_rel  ->Fill( elec->ptvarcone20 /elecPt    ,  eventWeight );
    +    m_ptvarcone30_rel  ->Fill( elec->ptvarcone30 /elecPt    ,  eventWeight );
    +    m_ptvarcone40_rel  ->Fill( elec->ptvarcone40 /elecPt    ,  eventWeight );
    +    m_topoetcone20_rel ->Fill( elec->topoetcone20/elecPt    ,  eventWeight );
    +    m_topoetcone30_rel ->Fill( elec->topoetcone30/elecPt    ,  eventWeight );
    +    m_topoetcone40_rel ->Fill( elec->topoetcone40/elecPt    ,  eventWeight );
    +  }
    +
    +
    +  if ( m_infoSwitch->m_PID || m_infoSwitch->m_quality ) {
    +    for (auto& PID : m_infoSwitch->m_PIDWPs) {
    +      if (PID.empty()) continue;
    +
    +      m_PID[PID]->Fill(elec->PID.at(PID), eventWeight);
    +    }
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronHistsAlgo.cxx.html b/api/program_listing_file_Root_ElectronHistsAlgo.cxx.html new file mode 100644 index 0000000000..5f8f32687a --- /dev/null +++ b/api/program_listing_file_Root_ElectronHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + Program Listing for File ElectronHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronHistsAlgo.cxx

    +

    Return to documentation for file (Root/ElectronHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <xAODEgamma/ElectronContainer.h>
    +
    +#include <xAODAnaHelpers/ElectronHistsAlgo.h>
    +#include <xAODAnaHelpers/ElectronHists.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(ElectronHistsAlgo)
    +
    +ElectronHistsAlgo :: ElectronHistsAlgo () :
    +IParticleHistsAlgo("ElectronHistsAlgo")
    +{ }
    +
    +EL::StatusCode ElectronHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("ElectronHistsAlgo").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ElectronHistsAlgo::AddHists( std::string name ) {
    +  return IParticleHistsAlgo::AddHists<ElectronHists>(name);
    +}
    +
    +EL::StatusCode ElectronHistsAlgo :: execute () {
    +  return IParticleHistsAlgo::execute<ElectronHists, xAOD::ElectronContainer>();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ElectronSelector.cxx.html b/api/program_listing_file_Root_ElectronSelector.cxx.html new file mode 100644 index 0000000000..abd0362882 --- /dev/null +++ b/api/program_listing_file_Root_ElectronSelector.cxx.html @@ -0,0 +1,1440 @@ + + + + + + + + + + + Program Listing for File ElectronSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronSelector.cxx

    +

    Return to documentation for file (Root/ElectronSelector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +#include <tuple>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/EgammaDefs.h"
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODTracking/TrackParticlexAODHelpers.h"
    +// #include "PATCore/TAccept.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/ElectronSelector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h"
    +#include "ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h"
    +
    +// tools
    +#include "IsolationSelection/IsolationSelectionTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +#include "TriggerMatchingTool/MatchingTool.h"
    +#include "TriggerMatchingTool/MatchFromCompositeTool.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(ElectronSelector)
    +
    +ElectronSelector :: ElectronSelector () :
    +    Algorithm("ElectronSelector")
    +{
    +}
    +
    +ElectronSelector::~ElectronSelector() {}
    +
    +EL::StatusCode ElectronSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "ElectronSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  if ( this->numInstances() > 1 ) { // 1 for this instance
    +    m_isUsedBefore = true;
    +    ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_INFO( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing ElectronSelector Interface... ");
    +
    +  // Let's see if the algorithm has been already used before:
    +  // if yes, will write object cutflow in a different histogram!
    +  //
    +  // This is the case when the selector algorithm is used for
    +  // preselecting objects, and then again for the final selection
    +  //
    +  ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className );
    +
    +  if ( m_useCutFlow ) {
    +
    +    // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_el_cutflowHist_1 = (TH1D*)file->Get("cutflow_electrons_1");
    +
    +    m_el_cutflow_all             = m_el_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_el_cutflow_author_cut      = m_el_cutflowHist_1->GetXaxis()->FindBin("author_cut");
    +    m_el_cutflow_OQ_cut          = m_el_cutflowHist_1->GetXaxis()->FindBin("OQ_cut");
    +    m_el_cutflow_deadHVCell_cut  = m_el_cutflowHist_1->GetXaxis()->FindBin("deadHVCell_cut");
    +    m_el_cutflow_ptmax_cut       = m_el_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut");
    +    m_el_cutflow_ptmin_cut       = m_el_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut");
    +    m_el_cutflow_eta_cut         = m_el_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied
    +    m_el_cutflow_z0sintheta_cut  = m_el_cutflowHist_1->GetXaxis()->FindBin("z0sintheta_cut");
    +    m_el_cutflow_d0_cut          = m_el_cutflowHist_1->GetXaxis()->FindBin("d0_cut");
    +    m_el_cutflow_d0sig_cut       = m_el_cutflowHist_1->GetXaxis()->FindBin("d0sig_cut");
    +    m_el_cutflow_BL_cut          = m_el_cutflowHist_1->GetXaxis()->FindBin("BL_cut");
    +    m_el_cutflow_PID_cut         = m_el_cutflowHist_1->GetXaxis()->FindBin("PID_cut");
    +    m_el_cutflow_iso_cut         = m_el_cutflowHist_1->GetXaxis()->FindBin("iso_cut");
    +
    +    if ( m_isUsedBefore ) {
    +      m_el_cutflowHist_2 = (TH1D*)file->Get("cutflow_electrons_2");
    +
    +      m_el_cutflow_all       = m_el_cutflowHist_2->GetXaxis()->FindBin("all");
    +      m_el_cutflow_author_cut    = m_el_cutflowHist_2->GetXaxis()->FindBin("author_cut");
    +      m_el_cutflow_OQ_cut    = m_el_cutflowHist_2->GetXaxis()->FindBin("OQ_cut");
    +      m_el_cutflow_deadHVCell_cut  = m_el_cutflowHist_2->GetXaxis()->FindBin("deadHVCell_cut");
    +      m_el_cutflow_ptmax_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("ptmax_cut");
    +      m_el_cutflow_ptmin_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("ptmin_cut");
    +      m_el_cutflow_eta_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied
    +      m_el_cutflow_z0sintheta_cut  = m_el_cutflowHist_2->GetXaxis()->FindBin("z0sintheta_cut");
    +      m_el_cutflow_d0_cut    = m_el_cutflowHist_2->GetXaxis()->FindBin("d0_cut");
    +      m_el_cutflow_d0sig_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("d0sig_cut");
    +      m_el_cutflow_BL_cut    = m_el_cutflowHist_2->GetXaxis()->FindBin("BL_cut");
    +      m_el_cutflow_PID_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("PID_cut");
    +      m_el_cutflow_iso_cut     = m_el_cutflowHist_2->GetXaxis()->FindBin("iso_cut");
    +    }
    +
    +  }
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +
    +  // Compatible with Efficiency Nomenclature
    +  if( m_LHOperatingPoint == "LooseAndBLayer" )
    +    m_LHOperatingPoint = "LooseBL";
    +
    +  if ( m_LHOperatingPoint != "VeryLoose"     &&
    +       m_LHOperatingPoint != "Loose"         &&
    +       m_LHOperatingPoint != "LooseBL"       &&
    +       m_LHOperatingPoint != "Medium"        &&
    +       m_LHOperatingPoint != "Tight"         &&
    +       m_LHOperatingPoint != "VeryLooseLLP"  && m_LHOperatingPoint != "VeryLooseNoPix"  &&
    +       m_LHOperatingPoint != "LooseLLP"      && m_LHOperatingPoint != "LooseNoPix"      &&
    +       m_LHOperatingPoint != "MediumLLP"     && m_LHOperatingPoint != "MediumNoPix"     &&
    +       m_LHOperatingPoint != "TightLLP"      && m_LHOperatingPoint != "TightNoPix"   ) {
    +    ANA_MSG_ERROR( "Unknown electron likelihood PID requested " << m_LHOperatingPoint);
    +    return EL::StatusCode::FAILURE;
    +  }
    +  if ( m_CutBasedOperatingPoint != "Loose"  &&
    +       m_CutBasedOperatingPoint != "Medium" &&
    +       m_CutBasedOperatingPoint != "Tight"  ) {
    +    ANA_MSG_ERROR( "Unknown electron cut-based PID requested " << m_CutBasedOperatingPoint);
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // Parse input isolation WP list, split by comma, and put into a vector for later use
    +  // Make sure it's not empty!
    +  //
    +  if ( m_IsoWPList.empty() ) {
    +      ANA_MSG_ERROR("Empty isolation WP list");
    +  }
    +  std::string token;
    +  std::istringstream ss(m_IsoWPList);
    +  while ( std::getline(ss, token, ',') ) {
    +    m_IsoKeys.push_back(token);
    +  }
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +
    +
    +
    +
    +  // ****************************
    +  //
    +  // Initialise Electron ID tools
    +  //
    +  // ****************************
    +
    +  // Assume no local BLayer track quality cut unless doing LooseBL and reading decision from the derivation
    +  m_doBLTrackQualityCut     = false;
    +
    +  // initialise PID tool(s) using classes defined in ParticlePIDManager.h
    +  //
    +  // if not using cut-based PID, make sure all the decorations will be set ... by choosing the loosest WP!
    +  if( m_doCutBasedPID ){
    +    std::string cutbasedWP = ( m_doCutBasedPIDcut ) ? m_CutBasedOperatingPoint : "Loose";
    +    m_el_CutBased_PIDManager = new ElectronCutBasedPIDManager( cutbasedWP, msgLvl(MSG::DEBUG) );
    +
    +    if  ( m_doCutBasedPIDcut ) {
    +      ANA_MSG_INFO( "Cutting on Electron Cut-Based PID! \n ********************" );
    +      ANA_MSG_INFO( "Selected cut-based WP: " << m_el_CutBased_PIDManager->getSelectedWP() );
    +    } else {
    +      ANA_MSG_INFO( "Will decorate each electron with all Electron Cut-Based PID WPs decision (pass/not pass)!" );
    +    }
    +
    +    if ( m_readIDFlagsFromDerivation ) {
    +      ANA_MSG_INFO( "Reading Electron cut-based ID from DAODs ..." );
    +      ANA_CHECK( m_el_CutBased_PIDManager->setupWPs( false ));
    +    } else {
    +      ANA_MSG_INFO( "Reading Electron cut-based ID from CP Tool ..." );
    +      ANA_CHECK( m_el_CutBased_PIDManager->setupWPs( true, this->m_name ));
    +    }
    +  }// if m_doCutBasedPID
    +
    +  if( m_doLHPID ){
    +    // if not using LH PID, make sure all the decorations will be set ... by choosing the loosest WP!
    +    std::string likelihoodWP = ( m_doLHPIDcut ) ? m_LHOperatingPoint : "VeryLoose";
    +    m_el_LH_PIDManager = new ElectronLHPIDManager( likelihoodWP, msgLvl(MSG::DEBUG) );
    +
    +
    +    if  ( m_doLHPIDcut ) {
    +         ANA_MSG_INFO( "Cutting on Electron Likelihood PID! \n ********************" );
    +         ANA_MSG_INFO( "\t Input WP: " << likelihoodWP << " corresponding to actual LikeEnum::Menu WP: " << m_el_LH_PIDManager->getSelectedWP() );
    +    } else {
    +         ANA_MSG_INFO( "Will decorate each electron with all Electron Likelihood PID WPs decision (pass/not pass)!" );
    +    }
    +
    +    if ( m_readIDFlagsFromDerivation ) {
    +      ANA_MSG_INFO( "Reading Electron LH ID from DAODs ..." );
    +      ANA_CHECK( m_el_LH_PIDManager->setupWPs( false ));
    +    } else {
    +      ANA_MSG_INFO( "Reading Electron LH ID from CP Tool ..." );
    +      ANA_CHECK( m_el_LH_PIDManager->setupWPs( true, this->m_name));
    +    }
    +  }// if m_doLHPID
    +
    +  // *************************************
    +  //
    +  // Initialise CP::IsolationSelectionTool
    +  //
    +  // *************************************
    +
    +  // Do this only for the first WP in the list
    +  ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" );
    +  ANA_CHECK( m_isolationSelectionTool_handle.setProperty("ElectronWP", (m_IsoKeys.at(0)).c_str()));
    +  ANA_CHECK( m_isolationSelectionTool_handle.setProperty("OutputLevel", msg().level()));
    +  if (m_isoDecSuffix!="") ANA_CHECK ( m_isolationSelectionTool_handle.setProperty("IsoDecSuffix", m_isoDecSuffix) );
    +  ANA_CHECK( m_isolationSelectionTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_isolationSelectionTool_handle);
    +  m_isolationSelectionTool = dynamic_cast<CP::IsolationSelectionTool*>(m_isolationSelectionTool_handle.get() ); // see header file for why
    +
    +  // Add the remaining input WPs to the tool
    +  // (start from 2nd element)
    +  //
    +  for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) {
    +
    +     ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" );
    +
    +     if ( (*WP_itr).find("UserDefined") != std::string::npos ) {
    +
    +       HelperClasses::EnumParser<xAOD::Iso::IsolationType> isoParser;
    +
    +       std::vector< std::pair<xAOD::Iso::IsolationType, std::string> > myCuts;
    +       myCuts.push_back(std::make_pair<xAOD::Iso::IsolationType, std::string>(isoParser.parseEnum(m_TrackBasedIsoType), m_TrackIsoEff.c_str() ));
    +       myCuts.push_back(std::make_pair<xAOD::Iso::IsolationType, std::string>(isoParser.parseEnum(m_CaloBasedIsoType) , m_CaloIsoEff.c_str()  ));
    +
    +       CP::IsolationSelectionTool::IsoWPType iso_type(CP::IsolationSelectionTool::Efficiency);
    +       if ( (*WP_itr).find("Cut") != std::string::npos ) { iso_type = CP::IsolationSelectionTool::Cut; }
    +
    +       ANA_CHECK(  m_isolationSelectionTool->addUserDefinedWP((*WP_itr).c_str(), xAOD::Type::Electron, myCuts, "", iso_type));
    +
    +     } else {
    +
    +        ANA_CHECK( m_isolationSelectionTool->addElectronWP( (*WP_itr).c_str() ));
    +
    +     }
    +  }
    +
    +  // ***************************************
    +  //
    +  // Initialise Trig::MatchingTool
    +  //
    +  // ***************************************
    +
    +  //
    +  // NB: need to retrieve the TrigDecisionTool from asg::ToolStore to configure the tool!
    +  //     do not initialise if there are no input trigger chains
    +  if(  !( m_singleElTrigChains.empty() && m_diElTrigChains.empty() ) ) {
    +
    +    // grab the TrigDecTool from the ToolStore
    +    if(!m_trigDecTool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_CHECK( m_trigDecTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +
    +    // in AB we need to explicitly retrieve this tool, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/R22TriggerAnalysis
    +    ANA_CHECK( m_scoreTool.retrieve());
    +
    +    // Run3 got a new trigger navigation
    +    if (m_useRun3navigation) {
    +      m_trigElectronMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::R3MatchingTool/TrigR3MatchingTool");
    +      ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +      ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +      ANA_CHECK( m_trigElectronMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigElectronMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle);
    +    }
    +    // otherwise we have to configure the Run2-style navigation
    +    else {
    +      if( !isPHYS() ) {
    +        m_trigElectronMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchingTool/MatchingTool");;
    +        ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +        ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +        ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "OutputLevel", msg().level() ));
    +        ANA_CHECK( m_trigElectronMatchTool_handle.retrieve());
    +        ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle);
    +      }
    +      else { // For DAOD_PHYS samples
    +        m_trigElectronMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchFromCompositeTool/MatchFromCompositeTool");;
    +        ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "OutputLevel", msg().level() ));
    +        if (!m_trigInputPrefix.empty()){
    +          ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "InputPrefix", m_trigInputPrefix ));
    +          ANA_CHECK( m_trigElectronMatchTool_handle.setProperty( "RemapBrokenLinks", true) );
    +        }
    +        ANA_CHECK( m_trigElectronMatchTool_handle.retrieve());
    +        ANA_MSG_DEBUG("Retrieved tool: " << m_trigElectronMatchTool_handle);
    +      }
    +    }
    +  } else {
    +
    +    m_doTrigMatch = false;
    +
    +    ANA_MSG_WARNING("***********************************************************");
    +    ANA_MSG_WARNING( "Will not perform any electron trigger matching at this stage b/c :");
    +    ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore");
    +    ANA_MSG_WARNING("\t AND/OR");
    +    ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty");
    +    ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!");
    +    ANA_MSG_WARNING("***********************************************************");
    +  }
    +
    +  // **********************************************************************************************
    +
    +
    +  // Set up the dead HV Removal Tool
    +  if (m_applyDeadHVCellVeto)
    +    m_deadHVTool.setTypeAndName("AsgDeadHVCellRemovalTool/deadHVTool");
    +    if (m_deadHVTool.retrieve().isFailure()){
    +      ANA_MSG_ERROR("Failed to retrieve DeadHVTool, aborting");
    +      return StatusCode::FAILURE;
    +  }
    +  else {
    +      ANA_MSG_WARNING("Not applying veto of dead HV cells although it's recommended - please double check!");
    +  }
    +
    +
    +  ANA_MSG_INFO( "ElectronSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode ElectronSelector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Electron Selection... ");
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  //
    +  float mcEvtWeight(1.0);
    +  static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +  if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +    ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +    return EL::StatusCode::FAILURE;
    +  }
    +  mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +
    +  m_numEvent++;
    +
    +  // QUESTION: why this must be done in execute(), and does not work in initialize()?
    +  //
    +  if ( m_numEvent == 1 && m_trigElectronMatchTool_handle.isInitialized() ) {
    +
    +    // parse input electron trigger chain list, split by comma and fill vector
    +    //
    +    std::string singleel_trig;
    +    std::istringstream ss_singleel_trig(m_singleElTrigChains);
    +
    +    while ( std::getline(ss_singleel_trig, singleel_trig, ',') ) {
    +      m_singleElTrigChainsList.push_back(singleel_trig);
    +    }
    +
    +    std::string diel_trig;
    +    std::istringstream ss_diel_trig(m_diElTrigChains);
    +
    +    while ( std::getline(ss_diel_trig, diel_trig, ',') ) {
    +      m_diElTrigChainsList.push_back(diel_trig);
    +    }
    +
    +    ANA_MSG_INFO( "Input single electron trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_singleElTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +    ANA_MSG_INFO( "Input di-electron trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_diElTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +  }
    +
    +  // did any collection pass the cuts?
    +  //
    +  bool eventPass(false);
    +  bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal
    +  const xAOD::ElectronContainer* inElectrons(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_inputAlgoSystNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // create output container (if requested)
    +    ConstDataVector<xAOD::ElectronContainer>* selectedElectrons(nullptr);
    +    if ( m_createSelectedContainer ) { selectedElectrons = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS); }
    +
    +    // find the selected electrons, and return if event passes object selection
    +    //
    +    eventPass = executeSelection( inElectrons, mcEvtWeight, countPass, selectedElectrons );
    +
    +    if ( m_createSelectedContainer) {
    +      if ( eventPass ) {
    +        // add ConstDataVector to TStore
    +        ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName ));
    +      } else {
    +        // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it!
    +        delete selectedElectrons; selectedElectrons = nullptr;
    +      }
    +    }
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) );
    +
    +    // prepare a vector of the names of CDV containers for usage by downstream algos
    +    // must be a pointer to be recorded in TStore
    +    //
    +    auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +    ANA_MSG_DEBUG( " input list of syst size: " << static_cast<int>(systNames->size()) );
    +
    +    // loop over systematic sets
    +    //
    +    bool eventPassThisSyst(false);
    +    for ( auto systName : *systNames ) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name: " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName + systName, m_event, m_store, msg()) );
    +
    +      // create output container (if requested) - one for each systematic
    +      //
    +      ConstDataVector<xAOD::ElectronContainer>* selectedElectrons(nullptr);
    +      if ( m_createSelectedContainer ) { selectedElectrons = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS); }
    +
    +      // find the selected electrons, and return if event passes object selection
    +      //
    +      eventPassThisSyst = executeSelection( inElectrons, mcEvtWeight, countPass, selectedElectrons );
    +
    +      if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal)
    +
    +      if ( eventPassThisSyst ) {
    +        // save the string of syst set under question if event is passing the selection
    +        vecOutContainerNames->push_back( systName );
    +      }
    +
    +      // if for at least one syst set the event passes selection, this will remain true!
    +      //
    +      eventPass = ( eventPass || eventPassThisSyst );
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  output container name: " << m_outContainerName+systName );
    +
    +      if ( m_createSelectedContainer ) {
    +        if ( eventPassThisSyst ) {
    +          // add ConstDataVector to TStore
    +          ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName+systName ));
    +        } else {
    +          // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it!
    +          delete selectedElectrons; selectedElectrons = nullptr;
    +        }
    +      }
    +
    +    } // close loop over syst sets
    +
    +    ANA_MSG_DEBUG(" output list of syst size: " << static_cast<int>(vecOutContainerNames->size()) );
    +
    +    // record in TStore the list of systematics names that should be considered down stream
    +    //
    +    ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  }
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if( !eventPass ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool ElectronSelector :: executeSelection ( const xAOD::ElectronContainer* inElectrons, float mcEvtWeight, bool countPass,
    +              ConstDataVector<xAOD::ElectronContainer>* selectedElectrons )
    +{
    +
    +  const xAOD::VertexContainer* vertices(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +  const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg());
    +
    +  int nPass(0); int nObj(0);
    +  static SG::AuxElement::Decorator< char > passSelDecor( "passSel" );
    +
    +  bool passCrackVetoCleaning = true;
    +  const static SG::AuxElement::ConstAccessor<char> acc_CrackVetoCleaning("DFCommonCrackVetoCleaning");
    +
    +  for ( auto el_itr : *inElectrons ) { // duplicated of basic loop
    +
    +    // if only looking at a subset of electrons make sure all are decorated
    +    //
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *el_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    bool passSel = this->passCuts( el_itr, pvx );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *el_itr ) = passSel;
    +    }
    +
    +    if ( passSel ) {
    +
    +      // check DFCommonCrackVetoCleaning flag for topocluster association bugfix
    +      if (m_applyCrackVetoCleaning){
    +        if ( !acc_CrackVetoCleaning( *el_itr ) ) passCrackVetoCleaning = false;
    +      }
    +
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedElectrons->push_back( el_itr );
    +      }
    +    }
    +  }
    +
    +  // Fix to EGamma Crack-Electron topocluster association bug for MET (PFlow)
    +  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJetsR21#Muons_Reconstructed_as_Jets_in_P
    +  if (m_applyCrackVetoCleaning) {
    +    if (!passCrackVetoCleaning) return false; // skip event
    +  }
    +
    +  // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  ANA_MSG_DEBUG( "Initial electrons: " << nObj << " - Selected electrons: " << nPass );
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  //
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    return false;
    +  }
    +
    +  // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ){
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +  // Perform trigger matching on the "good" (selected) electrons
    +  //
    +  // NB: this part will be skipped if:
    +  //
    +  //  1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!)
    +  //  2. there are no selected muons in the event
    +  //
    +  if ( m_doTrigMatch && selectedElectrons ) {
    +
    +    unsigned int nSelectedElectrons = selectedElectrons->size();
    +
    +    static SG::AuxElement::Decorator< std::map<std::string,char> > isTrigMatchedMapElDecor( "isTrigMatchedMapEl" );
    +
    +    if ( nSelectedElectrons > 0 ) {
    +
    +      ANA_MSG_DEBUG( "Doing single electron trigger matching...");
    +
    +      for ( auto const &chain : m_singleElTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        for ( auto const electron : *selectedElectrons ) {
    +
    +          //  For each electron, decorate w/ a map<string,char> with the 'isMatched' info associated
    +          //  to each trigger chain in the input list.
    +          //  If decoration map doesn't exist for this electron yet, create it (will be done only for the 1st iteration on the chain names)
    +          //
    +          if ( !isTrigMatchedMapElDecor.isAvailable( *electron ) ) {
    +            isTrigMatchedMapElDecor( *electron ) = std::map<std::string,char>();
    +          }
    +
    +          char matched = false;
    +          if (!m_merged_electrons){
    +            matched = ( m_trigElectronMatchTool_handle->match( *electron, chain, m_minDeltaR ) );
    +          } else {
    +            static const SG::AuxElement::ConstAccessor<ElementLink<xAOD::ElectronContainer>> originalElectronLink("originalElectronLink");
    +            auto originalElectron = const_cast<xAOD::Electron*>(*originalElectronLink( *electron ));
    +            matched = ( m_trigElectronMatchTool_handle->match(*originalElectron, chain, m_minDeltaR) );
    +          }
    +
    +          ANA_MSG_DEBUG( "\t\t is electron trigger matched? " << matched);
    +
    +          ( isTrigMatchedMapElDecor( *electron ) )[chain] = matched;
    +        }
    +      }
    +    }// if nSelectedElectrons > 0
    +
    +    // If checking dilepton trigger, form lepton pairs and test matching for each one.
    +    // Save a:
    +    //
    +    // multimap< chain, pair< pair<idx_i, idx_j>, ismatched > >
    +    //
    +    // as *event* decoration to store which
    +    // pairs are matched (to a given chain) and which aren't.
    +    // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events.
    +    //
    +    // By retrieving this map later on, user can decide what to do with the event
    +    // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain)
    +
    +    if ( nSelectedElectrons > 1 && !m_diElTrigChains.empty() ) {
    +
    +      ANA_MSG_DEBUG( "Doing di-electron trigger matching...");
    +
    +      const xAOD::EventInfo* eventInfo(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +      typedef std::pair< std::pair<unsigned int,unsigned int>, char>     dielectron_trigmatch_pair;
    +      typedef std::multimap< std::string, dielectron_trigmatch_pair >    dielectron_trigmatch_pair_map;
    +      static SG::AuxElement::Decorator< dielectron_trigmatch_pair_map >  diElectronTrigMatchPairMapDecor( "diElectronTrigMatchPairMap" );
    +
    +      for ( auto const &chain : m_diElTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        //  If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names)
    +        if ( !diElectronTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) {
    +          diElectronTrigMatchPairMapDecor( *eventInfo ) = dielectron_trigmatch_pair_map();
    +        }
    +
    +        std::vector<const xAOD::IParticle*> myElectrons;
    +
    +        for ( unsigned int iel = 0; iel < selectedElectrons->size()-1; ++iel ) {
    +
    +          for ( unsigned int jel = iel+1; jel < selectedElectrons->size(); ++jel ) {
    +
    +            // test a new pair
    +            myElectrons.clear();
    +            myElectrons.push_back( selectedElectrons->at(iel) );
    +            myElectrons.push_back( selectedElectrons->at(jel) );
    +
    +            // check whether the pair is matched
    +            char matched = m_trigElectronMatchTool_handle->match( myElectrons, chain, m_minDeltaR );
    +
    +            ANA_MSG_DEBUG( "\t\t is the electron pair ("<<iel<<","<<jel<<") trigger matched? " << matched);
    +
    +            // set basic matching information
    +            ( isTrigMatchedMapElDecor( *myElectrons[0] ) )[chain] = matched;
    +            ( isTrigMatchedMapElDecor( *myElectrons[1] ) )[chain] = matched;
    +
    +            // set pair decision information
    +            std::pair <unsigned int, unsigned int>  chain_idxs = std::make_pair(iel,jel);
    +            dielectron_trigmatch_pair                   chain_decision = std::make_pair(chain_idxs,matched);
    +            diElectronTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dielectron_trigmatch_pair >(chain,chain_decision) );
    +
    +          }
    +        }
    +      }//for m_diElTrigChainsList
    +    } // if electrons
    +  }// if m_doTrigMatch
    +
    +  return true;
    +
    +}
    +
    +EL::StatusCode ElectronSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( m_el_CutBased_PIDManager ) { delete m_el_CutBased_PIDManager;  m_el_CutBased_PIDManager = nullptr; }
    +  if ( m_el_LH_PIDManager )       { delete m_el_LH_PIDManager;        m_el_LH_PIDManager = nullptr;   }
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_INFO( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode ElectronSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int ElectronSelector :: passCuts( const xAOD::Electron* electron, const xAOD::Vertex *primaryVertex ) {
    +
    +  float et    = electron->pt();
    +
    +  // all the eta cuts are done using the measurement of the cluster position with the 2nd layer cluster,
    +  // as for Egamma CP  recommendation
    +  //
    +  float eta   = ( electron->caloCluster() ) ? electron->caloCluster()->etaBE(2) : -999.0;
    +
    +  // fill cutflow bin 'all' before any cut
    +  if( !m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_all, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_all, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // author cut
    +  //
    +  if ( m_doAuthorCut ) {
    +    if ( !( electron->author(xAOD::EgammaParameters::AuthorElectron) || electron->author(xAOD::EgammaParameters::AuthorAmbiguous) ) ) {
    +      ANA_MSG_DEBUG( "Electron failed author kinematic cut." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_author_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_author_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // Object Quality cut
    +  //
    +  if ( m_doOQCut ) {
    +    if( !electron->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON) ){
    +      ANA_MSG_DEBUG( "Electron failed Object Quality cut BADCLUSELECTRON." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_OQ_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_OQ_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // Dead HV Cell veto (affects only 2016 data)
    +  //
    +  if ( m_applyDeadHVCellVeto ) {
    +    if( !m_deadHVTool->accept(electron) ){
    +      ANA_MSG_DEBUG( "Electron failed dead HV cell veto." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_deadHVCell_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_deadHVCell_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT max cut
    +  //
    +  if ( m_pT_max != 1e8 ) {
    +    if ( et > m_pT_max ) {
    +      ANA_MSG_DEBUG( "Electron failed pT max cut." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_ptmax_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_ptmax_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT min cut
    +  //
    +  if ( m_pT_min != 1e8 ) {
    +    if ( et < m_pT_min ) {
    +      ANA_MSG_DEBUG( "Electron failed pT min cut." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_ptmin_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_ptmin_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // eta cuts
    +  //
    +
    +  // |eta| max cut
    +  //
    +  if ( m_eta_max != 1e8 ) {
    +    if ( fabs(eta) > m_eta_max ) {
    +      ANA_MSG_DEBUG( "Electron failed |eta| max cut." );
    +      return 0;
    +    }
    +  }
    +  // |eta| crack veto
    +  //
    +  if ( m_vetoCrack ) {
    +    if ( fabs( eta ) > 1.37 && fabs( eta ) < 1.52 ) {
    +      ANA_MSG_DEBUG( "Electron failed |eta| crack veto cut." );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_eta_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_eta_cut, 1 ); }
    +
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // Tracking cuts AFTER acceptance, in case of derivation reduction.
    +  //
    +
    +  const xAOD::TrackParticle* tp  = electron->trackParticle();
    +  if ( !tp ) {
    +    ANA_MSG_DEBUG("Electron has no TrackParticle. Won't be selected.");
    +    return 0;
    +  }
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  double d0_significance = xAOD::TrackingHelpers::d0significance( tp, eventInfo->beamPosSigmaX(), eventInfo->beamPosSigmaY(), eventInfo->beamPosSigmaXY() );
    +
    +  // Take distance between z0 and zPV ( after referring the PV z coordinate to the beamspot position, given by vz() ), multiplied by sin(theta)
    +  // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/InDetTrackingDC14 for further reference
    +  //
    +  float z0sintheta = 1e8;
    +  if (primaryVertex) z0sintheta = ( tp->z0() + tp->vz() - primaryVertex->z() ) * sin( tp->theta() );
    +
    +  // z0*sin(theta) cut
    +  //
    +  if ( m_z0sintheta_max != 1e8 ) {
    +    if ( !( fabs(z0sintheta) < m_z0sintheta_max ) ) {
    +      ANA_MSG_DEBUG( "Electron failed z0*sin(theta) cut." );
    +      return 0;
    +    }
    +  }
    +  if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_z0sintheta_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_z0sintheta_cut, 1 ); }
    +
    +  // decorate electron w/ z0*sin(theta) info
    +  static SG::AuxElement::Decorator< float > z0sinthetaDecor("z0sintheta");
    +  z0sinthetaDecor( *electron ) = z0sintheta;
    +
    +  // d0 cut
    +  //
    +  if ( m_d0_max != 1e8 ) {
    +    if ( !( tp->d0() < m_d0_max ) ) {
    +      ANA_MSG_DEBUG( "Electron failed d0 cut.");
    +      return 0;
    +    }
    +  }
    +  if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_d0_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_d0_cut, 1 ); }
    +
    +  // d0sig cut
    +  //
    +  if ( m_d0sig_max != 1e8 ) {
    +    if ( !( fabs(d0_significance) < m_d0sig_max ) ) {
    +      ANA_MSG_DEBUG( "Electron failed d0 significance cut.");
    +      return 0;
    +    }
    +  }
    +  if ( !m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_d0sig_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_d0sig_cut, 1 ); }
    +
    +  // decorate electron w/ d0sig info
    +  static SG::AuxElement::Decorator< float > d0SigDecor("d0sig");
    +  d0SigDecor( *electron ) = static_cast<float>(d0_significance);
    +
    +
    +  // BLayer track quality
    +  static SG::AuxElement::Decorator< bool > bLayerDecor("bLayerPass");
    +
    +  // this is taken from ElectronPhotonSelectorTools/Root/AsgElectronLikelihoodTool.cxx
    +  uint8_t expectBlayer(true);
    +  uint8_t nBlayerHits(0);
    +  uint8_t nBlayerOutliers(0);
    +
    +  tp->summaryValue(expectBlayer,    xAOD::expectBLayerHit);
    +  tp->summaryValue(nBlayerHits,     xAOD::numberOfBLayerHits);
    +  tp->summaryValue(nBlayerOutliers, xAOD::numberOfBLayerOutliers);
    +
    +  bool bLayerPass = expectBlayer && (nBlayerHits+nBlayerOutliers) >= 1;
    +  bLayerDecor( *electron ) = bLayerPass;
    +
    +  if ( m_doBLTrackQualityCut ) {
    +    if ( !bLayerPass ) {
    +      ANA_MSG_DEBUG( "Electron failed BL track quality cut.");
    +      return 0;
    +    }
    +
    +    if ( !m_isUsedBefore && m_useCutFlow ) m_el_cutflowHist_1->Fill( m_el_cutflow_BL_cut, 1 );
    +    if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_BL_cut, 1 ); }
    +  }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // electron PID cuts
    +  //
    +
    +  //
    +  // likelihood PID
    +  //
    +
    +  // set default values for *this* electron decorations
    +  //
    +  if( m_doLHPID ) {
    +    m_el_LH_PIDManager->setDecorations( electron );
    +
    +    if ( m_readIDFlagsFromDerivation ) {
    +
    +      const static SG::AuxElement::ConstAccessor<char> acc_EG_Loose("DFCommonElectronsLHLoose");
    +      const static SG::AuxElement::ConstAccessor<char> acc_EG_Medium("DFCommonElectronsLHMedium");
    +      const static SG::AuxElement::ConstAccessor<char> acc_EG_Tight("DFCommonElectronsLHTight");
    +
    +      if ( m_doLHPIDcut ) {
    +
    +        bool passSelID(false);
    +        SG::AuxElement::ConstAccessor< char > LHDecision( "DFCommonElectronsLH" + m_LHOperatingPoint );
    +        if( LHDecision.isAvailable( *electron ) ){
    +          if (m_doModifiedEleId){
    +            if(m_LHOperatingPoint == "Tight"){
    +              passSelID = acc_EG_Medium( *electron ) && acc_EG_Tight( *electron );
    +            } else if(m_LHOperatingPoint == "Medium"){
    +              passSelID = ( acc_EG_Loose( *electron ) && acc_EG_Medium( *electron ) ) || acc_EG_Tight( *electron );
    +            } else if (m_LHOperatingPoint == "Loose") {
    +              passSelID = acc_EG_Medium( *electron ) || acc_EG_Loose( *electron );
    +            } else { passSelID = LHDecision( *electron ); }
    +          }
    +          else {
    +            passSelID = LHDecision( *electron );
    +          }
    +        }
    +          if ( !passSelID ) {
    +            ANA_MSG_DEBUG( "Electron failed likelihood PID cut w/ operating point " << m_LHOperatingPoint );
    +          return 0;
    +        }
    +      }
    +
    +      const std::set<std::string> myLHWPs = m_el_LH_PIDManager->getValidWPs();
    +      for ( auto it : (myLHWPs) ) {
    +        const std::string decorWP =  "LH"+it;
    +        bool passThisID(false);
    +        SG::AuxElement::ConstAccessor< char > LHDecisionAll( "DFCommonElectrons" + decorWP );
    +
    +        if( LHDecisionAll.isAvailable( *electron ) ){
    +
    +          if (m_doModifiedEleId){
    +            if(decorWP == "LHTight"){
    +              passThisID = acc_EG_Medium( *electron ) && acc_EG_Tight( *electron );
    +            } else if(decorWP == "LHMedium"){
    +              passThisID = ( acc_EG_Loose( *electron ) && acc_EG_Medium( *electron ) ) || acc_EG_Tight( *electron );
    +            } else if (decorWP == "LHLoose") {
    +              passThisID = acc_EG_Medium( *electron ) || acc_EG_Loose( *electron );
    +            } else { passThisID = LHDecisionAll( *electron ); }
    +          }
    +          else {
    +            passThisID = LHDecisionAll( *electron );
    +          }
    +          }
    +
    +        ANA_MSG_DEBUG( "Decorating electron with decision for LH WP : " << decorWP );
    +        ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << passThisID );
    +        electron->auxdecor<char>(decorWP) = static_cast<char>( passThisID );
    +
    +      }
    +
    +    }
    +    else {
    +
    +      // retrieve only tools with WP >= selected WP, cut electrons if not satisfying selected WP, and decorate w/ tool decision all the others
    +      //
    +      typedef std::multimap< std::string, AsgElectronLikelihoodTool* > LHToolsMap;
    +      LHToolsMap myLHTools = m_el_LH_PIDManager->getValidWPTools();
    +
    +      if ( m_doLHPIDcut && !( ( myLHTools.find( m_LHOperatingPoint )->second )->accept( electron ) ) ) {
    +        ANA_MSG_DEBUG( "Electron failed likelihood PID cut w/ operating point " << m_LHOperatingPoint );
    +        return 0;
    +      }
    +
    +      for ( auto it : (myLHTools) ) {
    +
    +        const std::string decorWP =  "LH" + it.first;
    +        ANA_MSG_DEBUG( "Decorating electron with decision for LH WP : " << decorWP );
    +        ANA_MSG_DEBUG( "\t does electron pass " << decorWP << " ? " << static_cast<bool>( it.second->accept( electron ) ) );
    +        electron->auxdecor<char>(decorWP) = static_cast<bool>( it.second->accept( electron ) );
    +
    +      }
    +
    +    }
    +    }// if m_doLHPID
    +
    +  //
    +  // cut-based PID
    +  //
    +
    +  // set default values for *this* electron decorations
    +  //
    +  if( m_doCutBasedPID ) {
    +    m_el_CutBased_PIDManager->setDecorations( electron );
    +
    +    if ( m_readIDFlagsFromDerivation ) {
    +
    +      if ( m_doCutBasedPIDcut ) {
    +
    +        bool passSelID(false);
    +        static SG::AuxElement::ConstAccessor< char > CutDecision( "DFCommonElectronsIsEM" + m_CutBasedOperatingPoint );
    +        if( CutDecision.isAvailable( *electron ) )
    +            passSelID = CutDecision( *electron );
    +
    +        if ( !passSelID ) {
    +          ANA_MSG_DEBUG( "Electron failed cut-based PID cut w/ operating point " << m_CutBasedOperatingPoint );
    +          return 0;
    +        }
    +
    +      }
    +
    +      const std::set<std::string> myCutBasedWPs = m_el_CutBased_PIDManager->getValidWPs();
    +      for ( auto it : (myCutBasedWPs) ) {
    +
    +        const std::string decorWP = "IsEM"+it;
    +
    +        bool passThisID(false);
    +        SG::AuxElement::ConstAccessor< char > CutDecisionAll( "DFCommonElectrons" + decorWP );
    +        if( CutDecisionAll.isAvailable( *electron ) )
    +            passThisID = CutDecisionAll( *electron );
    +
    +        ANA_MSG_DEBUG( "Decorating electron with decision for cut-based WP : " << decorWP );
    +        ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << passThisID );
    +        electron->auxdecor<char>(decorWP) = static_cast<char>( passThisID );
    +
    +      }
    +
    +    } else {
    +
    +      // retrieve only tools with WP >= selected WP, cut electrons if not satisfying selected WP, and decorate w/ tool decision all the others
    +      //
    +      typedef std::multimap< std::string, AsgElectronIsEMSelector* > CutBasedToolsMap;
    +      CutBasedToolsMap myCutBasedTools = m_el_CutBased_PIDManager->getValidWPTools();
    +
    +      if ( m_doCutBasedPIDcut && !( ( myCutBasedTools.find( m_CutBasedOperatingPoint )->second )->accept( electron ) ) ) {
    +        ANA_MSG_DEBUG( "Electron failed cut-based PID cut." );
    +        return 0;
    +      }
    +
    +      for ( auto it : (myCutBasedTools) ) {
    +
    +        const std::string decorWP = "IsEM"+it.second->getOperatingPointName( );
    +
    +        ANA_MSG_DEBUG( "Decorating electron with decision for cut-based WP : " << decorWP );
    +        ANA_MSG_DEBUG( "\t does electron pass " << decorWP << "? " << static_cast<bool>( it.second->accept( electron ) ) );
    +
    +        electron->auxdecor<char>(decorWP) = static_cast<bool>( it.second->accept( electron ) );
    +      }
    +
    +    }
    +  }// if m_doCutBasedPID
    +
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_PID_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_PID_cut, 1 ); }
    +
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // isolation cut
    +  //
    +
    +  // Get the "list" of input WPs with the accept() decision from the tool
    +  //
    +  auto accept_list = m_isolationSelectionTool_handle->accept( *electron );
    +
    +  // Decorate w/ decision for all input WPs
    +  //
    +  std::string base_decor("isIsolated");
    +  for ( auto WP_itr : m_IsoKeys ) {
    +
    +    std::string decorWP = base_decor + "_" + WP_itr;
    +
    +    ANA_MSG_DEBUG( "Decorate electron with " << decorWP << " - accept() ?" << accept_list.getCutResult( WP_itr.c_str()) );
    +    electron->auxdecor<char>(decorWP) = static_cast<bool>( accept_list.getCutResult( WP_itr.c_str() ) );
    +
    +  }
    +
    +  // Apply the cut if needed
    +  //
    +  if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) {
    +    ANA_MSG_DEBUG( "Electron failed isolation cut " << m_MinIsoWPCut );
    +    return 0;
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_el_cutflowHist_1->Fill( m_el_cutflow_iso_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_el_cutflowHist_2->Fill( m_el_cutflow_iso_cut, 1 ); }
    +
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_EventInfo.cxx.html b/api/program_listing_file_Root_EventInfo.cxx.html new file mode 100644 index 0000000000..ccdd089db6 --- /dev/null +++ b/api/program_listing_file_Root_EventInfo.cxx.html @@ -0,0 +1,675 @@ + + + + + + + + + + + Program Listing for File EventInfo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File EventInfo.cxx

    +

    Return to documentation for file (Root/EventInfo.cxx)

    +
    #include "xAODAnaHelpers/EventInfo.h"
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <iostream>
    +#include "xAODTruth/TruthEventContainer.h"
    +#include "xAODEventShape/EventShape.h"
    +#include "xAODCaloEvent/CaloClusterContainer.h"
    +
    +
    +using namespace xAH;
    +
    +EventInfo::EventInfo(const std::string& detailStr, float units, bool mc, bool storeSyst)
    +  : m_infoSwitch(detailStr), m_mc(mc), m_debug(false), m_storeSyst(storeSyst), m_units(units)
    +{
    +}
    +
    +EventInfo::~EventInfo()
    +{
    +  if(m_debug) std::cout << " Deleting EventInfo "  << std::endl;
    +}
    +
    +void EventInfo::setTree(TTree *tree)
    +{
    +
    +  if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to)
    +    connectBranch<int>     (tree, "runNumber",   &m_runNumber);
    +    connectBranch<Long64_t>(tree, "eventNumber", &m_eventNumber);
    +    connectBranch<int>     (tree, "lumiBlock",   &m_lumiBlock);
    +    connectBranch<uint32_t>(tree, "coreFlags",   &m_coreFlags);
    +    connectBranch<int     >(tree, "bcid",                       &m_bcid);
    +  }
    +
    +  if(m_mc){
    +    connectBranch<int     >(tree, "mcEventNumber",              &m_mcEventNumber);
    +    connectBranch<int     >(tree, "mcChannelNumber",            &m_mcChannelNumber);
    +    connectBranch<float   >(tree, "mcEventWeight",              &m_mcEventWeight);
    +    if ( m_infoSwitch.m_weightsSys ) {
    +      connectBranch< std::vector<float> >(tree, "mcEventWeights", &m_mcEventWeights);
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_bcidInfo && !m_mc ){
    +    connectBranch<int     >(tree, "DistEmptyBCID",               &m_DistEmptyBCID);
    +    connectBranch<int     >(tree, "DistLastUnpairedBCID",        &m_DistLastUnpairedBCID);
    +    connectBranch<int     >(tree, "DistNextUnpairedBCID",        &m_DistNextUnpairedBCID);
    +  }
    +
    +  if ( m_infoSwitch.m_eventCleaning ) {
    +    connectBranch<uint32_t>(tree, "timeStamp",                  &m_timeStamp);
    +    connectBranch<uint32_t>(tree, "timeStampNSOffset",          &m_timeStampNSOffset);
    +    connectBranch<bool    >(tree, "TileError",                  &m_TileError);
    +    connectBranch<bool    >(tree, "SCTError",                   &m_SCTError);
    +    connectBranch<bool    >(tree, "LArError",                   &m_LArError);
    +    connectBranch<uint32_t>(tree, "TileFlags",                  &m_TileFlags);
    +    connectBranch<uint32_t>(tree, "SCTFlags",                   &m_SCTFlags);
    +    connectBranch<uint32_t>(tree, "LArFlags",                   &m_LArFlags);
    +    connectBranch<bool    >(tree, "eventClean_LooseBad",        &m_eventClean_LooseBad);
    +    connectBranch<bool    >(tree, "eventClean_TightBad",        &m_eventClean_TightBad);
    +  }
    +
    +  if ( m_infoSwitch.m_pileup ) {
    +    connectBranch<int  >(tree, "NPV",                              &m_npv);
    +    connectBranch<float>(tree, "actualInteractionsPerCrossing",    &m_actualMu);
    +    connectBranch<float>(tree, "averageInteractionsPerCrossing",   &m_averageMu);
    +    connectBranch<float>(tree, "weight_pileup",                    &m_weight_pileup);
    +    connectBranch<float>(tree, "correctedAverageMu",               &m_correctedAvgMu);
    +    connectBranch<float>(tree, "correctedAndScaledAverageMu",      &m_correctedAndScaledAvgMu);
    +    connectBranch<float>(tree, "correctedActualMu",                &m_correctedMu);
    +    connectBranch<float>(tree, "correctedAndScaledActualMu",       &m_correctedAndScaledMu);
    +    if ( m_infoSwitch.m_pileupsys ) {
    +      connectBranch<float>(tree, "weight_pileup_up",               &m_weight_pileup_up);
    +      connectBranch<float>(tree, "weight_pileup_down",             &m_weight_pileup_down);
    +    }
    +    if(m_mc){
    +      connectBranch<int  >(tree, "rand_run_nr",                &m_rand_run_nr);
    +      connectBranch<int  >(tree, "rand_lumiblock_nr",          &m_rand_lumiblock_nr);
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEM ) {
    +    connectBranch<double>(tree, "rhoEM",   &m_rhoEM);
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEMPFLOW ) {
    +    connectBranch<double>(tree, "rhoEMPFLOW",   &m_rhoEMPFLOW);
    +  }
    +
    +  if ( m_infoSwitch.m_shapeLC ) {
    +    connectBranch<double>(tree, "rhoLC",   &m_rhoLC);
    +  }
    +
    +    // truth
    +  if( m_infoSwitch.m_truth && m_mc ) {
    +    connectBranch<int  >(tree, "pdgId1",  &m_pdgId1);
    +    connectBranch<int  >(tree, "pdgId2",  &m_pdgId2);
    +    connectBranch<int  >(tree, "pdfId1",  &m_pdfId1);
    +    connectBranch<int  >(tree, "pdfId2",  &m_pdfId2);
    +    connectBranch<float>(tree, "x1",      &m_x1);
    +    connectBranch<float>(tree, "x2",      &m_x2);
    +    //connectBranch<float>(tree, "scale",   &m_scale);
    +    connectBranch<float>(tree, "q",       &m_q);
    +    //connectBranch<float>(tree, "pdf1",    &m_pdf1);
    +    //connectBranch<float>(tree, "pdf2",    &m_pdf2);
    +    connectBranch<float>(tree, "xf1",     &m_xf1);
    +    connectBranch<float>(tree, "xf2",     &m_xf2);
    +  }
    +
    +  // CaloCluster
    +  if ( m_infoSwitch.m_caloClus ) {
    +    std::vector<float>*  m_caloCluster_pt_addr = &m_caloCluster_pt;
    +    HelperFunctions::connectBranch<float>("caloCluster", tree, "pt",  &m_caloCluster_pt_addr  );
    +
    +    std::vector<float>*  m_caloCluster_eta_addr = &m_caloCluster_eta;
    +    HelperFunctions::connectBranch<float>("caloCluster", tree, "eta", &m_caloCluster_eta_addr );
    +
    +    std::vector<float>*  m_caloCluster_phi_addr = &m_caloCluster_phi;
    +    HelperFunctions::connectBranch<float>("caloCluster", tree, "phi", &m_caloCluster_phi_addr );
    +
    +    std::vector<float>*  m_caloCluster_e_addr = &m_caloCluster_e;
    +    HelperFunctions::connectBranch<float>("caloCluster", tree, "e",   &m_caloCluster_e_addr   );
    +  }
    +
    +  if ( m_infoSwitch.m_beamspotweight ) {
    +    connectBranch<float>(tree, "beamSpotWeight",                    &m_beamspotweight);
    +  }
    +}
    +
    +
    +void EventInfo::setBranches(TTree *tree)
    +{
    +
    +  if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to)
    +    tree->Branch("runNumber",          &m_runNumber,      "runNumber/I");
    +    tree->Branch("eventNumber",        &m_eventNumber,    "eventNumber/L");
    +    tree->Branch("lumiBlock",          &m_lumiBlock,      "lumiBlock/I");
    +    tree->Branch("coreFlags",          &m_coreFlags,      "coreFlags/i");
    +    tree->Branch("bcid",               &m_bcid,           "bcid/I");
    +  }
    +
    +  if( m_mc ) {
    +    tree->Branch("mcEventNumber",      &m_mcEventNumber,  "mcEventNumber/I");
    +    tree->Branch("mcChannelNumber",    &m_mcChannelNumber,"mcChannelNumber/I");
    +    tree->Branch("mcEventWeight",      &m_mcEventWeight,  "mcEventWeight/F");
    +    if ( m_infoSwitch.m_weightsSys ) {
    +      tree->Branch("mcEventWeights",   &m_mcEventWeights);
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_bcidInfo && !m_mc ){
    +    tree->Branch("DistEmptyBCID",             &m_DistEmptyBCID,        "DistEmptyBCID/I");
    +    tree->Branch("DistLastUnpairedBCID",      &m_DistLastUnpairedBCID, "DistLastUnpairedBCID/I");
    +    tree->Branch("DistNextUnpairedBCID",      &m_DistNextUnpairedBCID, "DistNextUnpairedBCID/I");
    +  }
    +
    +  if ( m_infoSwitch.m_eventCleaning ) {
    +    tree->Branch("timeStamp",          &m_timeStamp,          "timeStamp/i");
    +    tree->Branch("timeStampNSOffset",  &m_timeStampNSOffset,  "timeStampNSOffset/i");
    +    tree->Branch("TileError",          &m_TileError,          "TileError/O");
    +    tree->Branch("SCTError",           &m_SCTError,           "SCTError/O");
    +    tree->Branch("LArError",           &m_LArError,           "LArError/O");
    +    tree->Branch("TileFlags",          &m_TileFlags,          "TileFlags/i");
    +    tree->Branch("SCTFlags",           &m_SCTFlags,           "SCTFlags/i");
    +    tree->Branch("LArFlags",           &m_LArFlags,           "LArFlags/i");
    +    tree->Branch("eventClean_LooseBad",&m_eventClean_LooseBad,"eventClean_LooseBad/O");
    +    tree->Branch("eventClean_TightBad",&m_eventClean_TightBad,"eventClean_TightBad/O");
    +  }
    +
    +  if ( m_infoSwitch.m_pileup ) {
    +    tree->Branch("NPV",                &m_npv,            "NPV/I");
    +    tree->Branch("actualInteractionsPerCrossing",  &m_actualMu,  "actualInteractionsPerCrossing/F");
    +    tree->Branch("averageInteractionsPerCrossing", &m_averageMu, "averageInteractionsPerCrossing/F");
    +    tree->Branch("weight_pileup",      &m_weight_pileup,  "weight_pileup/F");
    +    tree->Branch("correctedAverageMu",          &m_correctedAvgMu, "correctedAverageMu/F" );
    +    tree->Branch("correctedAndScaledAverageMu", &m_correctedAndScaledAvgMu, "correctedAndScaledAverageMu/F" );
    +    tree->Branch("correctedActualMu",           &m_correctedMu, "correctedActualMu/F"     );
    +    tree->Branch("correctedAndScaledActualMu",  &m_correctedAndScaledMu, "correctedAndScaledActualMu/F"     );
    +    if ( m_infoSwitch.m_pileupsys ) {
    +      tree->Branch("weight_pileup_up",      &m_weight_pileup_up,  "weight_pileup_up/F");
    +      tree->Branch("weight_pileup_down",    &m_weight_pileup_down,"weight_pileup_down/F");
    +    }
    +    if(m_mc){
    +      tree->Branch("rand_run_nr"      ,          &m_rand_run_nr      ,"rand_run_nr/I"      );
    +      tree->Branch("rand_lumiblock_nr",          &m_rand_lumiblock_nr,"rand_lumiblock_nr/I");
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEM ) {
    +    tree->Branch("rhoEM",                &m_rhoEM,            "rhoEM/D");
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEMPFLOW ) {
    +    tree->Branch("rhoEMPFLOW",           &m_rhoEMPFLOW,       "rhoEMPFLOW/D");
    +  }
    +
    +  if ( m_infoSwitch.m_shapeLC ) {
    +    tree->Branch("rhoLC",                &m_rhoLC,            "rhoLC/D");
    +  }
    +
    +  if( m_infoSwitch.m_truth && m_mc ) {
    +    tree->Branch("pdgId1",            &m_pdgId1,        "pdgId1/I" );
    +    tree->Branch("pdgId2",            &m_pdgId2,        "pdgId2/I" );
    +    tree->Branch("pdfId1",            &m_pdfId1,        "pdfId1/I" );
    +    tree->Branch("pdfId2",            &m_pdfId2,        "pdfId2/I" );
    +    tree->Branch("x1",                &m_x1,            "x1/F"  );
    +    tree->Branch("x2",                &m_x2,            "x2/F"  );
    +    //tree->Branch("scale",             &m_scale,         "scale/F");
    +    tree->Branch("q",                 &m_q,             "q/F");
    +    //tree->Branch("pdf1",              &m_pdf1,          "pdf1/F");
    +    //tree->Branch("pdf2",              &m_pdf2,          "pdf2/F");
    +    tree->Branch("xf1",               &m_xf1,           "xf1/F");
    +    tree->Branch("xf2",               &m_xf2,           "xf2/F");
    +  }
    +
    +  if ( m_infoSwitch.m_caloClus ) {
    +    tree->Branch("caloCluster_pt",  &m_caloCluster_pt);
    +    tree->Branch("caloCluster_phi", &m_caloCluster_phi);
    +    tree->Branch("caloCluster_eta", &m_caloCluster_eta);
    +    tree->Branch("caloCluster_e",   &m_caloCluster_e);
    +  }
    +
    +  if ( m_infoSwitch.m_beamspotweight ) {
    +    tree->Branch("beamSpotWeight",   &m_beamspotweight);
    +  }
    +
    +  return;
    +}
    +
    +
    +void EventInfo::clear()
    +{
    +  m_runNumber = m_eventNumber = m_mcEventNumber = m_mcChannelNumber = m_bcid = m_lumiBlock;
    +  m_coreFlags = 0;
    +  //eventCleaning
    +  m_LArError = false;
    +  m_TileError = false;
    +  m_SCTError = false;
    +  m_LArFlags = 0;
    +  m_TileFlags = 0;
    +  m_SCTFlags = 0;
    +  m_eventClean_LooseBad = false;
    +  m_eventClean_TightBad = false;
    +  m_mcEventWeight = 1.;
    +  m_DistEmptyBCID = -999;
    +  m_DistLastUnpairedBCID = -999;
    +  m_DistNextUnpairedBCID = -999;
    +  m_weight_pileup = 1.;
    +  m_weight_pileup_down = 1.;
    +  m_weight_pileup_up = 1.;
    +  m_timeStamp = -999;
    +  m_timeStampNSOffset = -999;
    +  // pileup
    +  m_npv = -999;
    +  m_actualMu = m_averageMu = -999;
    +  // shapeEM
    +  m_rhoEM = -999;
    +  // shapeEMPFLOW
    +  m_rhoEMPFLOW = -999;
    +  // shapeLC
    +  m_rhoLC = -999;
    +  // truth
    +  m_pdgId1 = m_pdgId2 = m_pdfId1 = m_pdfId2 = -999;
    +  m_x1 = m_x2 = -999;
    +  m_xf1 = m_xf2 = -999;
    +
    +  //m_scale = m_q = m_pdf1 = m_pdf2 = -999;
    +
    +  // mcEventWeights
    +  if ( m_infoSwitch.m_weightsSys ) {
    +    m_mcEventWeights.clear();
    +  }
    +
    +  // CaloCluster
    +  if( m_infoSwitch.m_caloClus){
    +    m_caloCluster_pt.clear();
    +    m_caloCluster_eta.clear();
    +    m_caloCluster_phi.clear();
    +    m_caloCluster_e.clear();
    +  }
    +
    +  if ( m_infoSwitch.m_beamspotweight ) {
    +    m_beamspotweight = 1.;
    +  }
    +
    +  return;
    +}
    +
    +void EventInfo::FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event, const xAOD::VertexContainer* vertices) {
    +
    +  if (!m_infoSwitch.m_noDataInfo){ // saved always (unless specifically requiring not to)
    +    m_runNumber             = eventInfo->runNumber();
    +    m_eventNumber           = eventInfo->eventNumber();
    +    m_lumiBlock             = eventInfo->lumiBlock();
    +    m_coreFlags             = eventInfo->eventFlags(xAOD::EventInfo::Core);
    +    m_bcid                  = eventInfo->bcid();
    +  }
    +
    +  if ( m_mc ) {
    +    m_mcEventNumber         = eventInfo->mcEventNumber();
    +    m_mcChannelNumber       = eventInfo->mcChannelNumber();
    +    m_mcEventWeight         = eventInfo->mcEventWeight();
    +    if ( m_infoSwitch.m_weightsSys ) {
    +      if ( m_storeSyst ) {
    +        m_mcEventWeights      = eventInfo->mcEventWeights();
    +      } else {
    +        m_mcEventWeights      = std::vector<float>{m_mcEventWeight};
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_bcidInfo && !m_mc ){
    +    static SG::AuxElement::ConstAccessor< int > DistEmptyBCID ("DistEmptyBCID");
    +    if ( DistEmptyBCID.isAvailable( *eventInfo ) )   { m_DistEmptyBCID = DistEmptyBCID( *eventInfo ); }     else { m_DistEmptyBCID = -999; }
    +    static SG::AuxElement::ConstAccessor< int > DistLastUnpairedBCID ("DistLastUnpairedBCID");
    +    if ( DistLastUnpairedBCID.isAvailable( *eventInfo ) )   { m_DistLastUnpairedBCID = DistLastUnpairedBCID( *eventInfo ); }     else { m_DistLastUnpairedBCID = -999; }
    +    static SG::AuxElement::ConstAccessor< int > DistNextUnpairedBCID ("DistNextUnpairedBCID");
    +    if ( DistNextUnpairedBCID.isAvailable( *eventInfo ) )   { m_DistNextUnpairedBCID = DistNextUnpairedBCID( *eventInfo ); }     else { m_DistNextUnpairedBCID = -999; }
    +  }
    +
    +  if ( m_infoSwitch.m_eventCleaning ) {
    +
    +    if ( eventInfo->errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error ) m_LArError = true;
    +    else m_LArError = false;
    +    m_LArFlags = eventInfo->eventFlags(xAOD::EventInfo::LAr);
    +
    +    if ( eventInfo->errorState(xAOD::EventInfo::Tile)==xAOD::EventInfo::Error ) m_TileError = true;
    +    else m_TileError = false;
    +    m_TileFlags = eventInfo->eventFlags(xAOD::EventInfo::Tile);
    +
    +    if ( eventInfo->errorState(xAOD::EventInfo::SCT)==xAOD::EventInfo::Error ) m_SCTError = true;
    +    else m_SCTError = false;
    +    m_SCTFlags = eventInfo->eventFlags(xAOD::EventInfo::SCT);
    +
    +    m_timeStamp = eventInfo->timeStamp();
    +    m_timeStampNSOffset = eventInfo->timeStampNSOffset();
    +
    +    static SG::AuxElement::ConstAccessor< char > acc_DFCommonJets_eventClean_LooseBad("DFCommonJets_eventClean_LooseBad");
    +    if ( acc_DFCommonJets_eventClean_LooseBad.isAvailable( *eventInfo ))
    +      m_eventClean_LooseBad = acc_DFCommonJets_eventClean_LooseBad( *eventInfo );
    +    static SG::AuxElement::ConstAccessor< char > acc_DFCommonJets_eventClean_TightBad("DFCommonJets_eventClean_TightBad");
    +    if ( acc_DFCommonJets_eventClean_TightBad.isAvailable( *eventInfo ))
    +      m_eventClean_TightBad = acc_DFCommonJets_eventClean_TightBad( *eventInfo );
    +
    +  }
    +
    +  if ( m_infoSwitch.m_pileup ) {
    +
    +    m_npv = -1;
    +    if(vertices) m_npv = HelperFunctions::countPrimaryVertices(vertices, 2);
    +
    +    m_actualMu  = eventInfo->actualInteractionsPerCrossing();
    +    m_averageMu = eventInfo->averageInteractionsPerCrossing();
    +
    +    static SG::AuxElement::ConstAccessor< float >  correctedAvgMu("corrected_averageInteractionsPerCrossing");
    +    static SG::AuxElement::ConstAccessor< float >  correctedAndScaledAvgMu("correctedScaled_averageInteractionsPerCrossing");
    +    static SG::AuxElement::ConstAccessor< float >  correctedMu("corrected_actualInteractionsPerCrossing");
    +    static SG::AuxElement::ConstAccessor< float >  correctedAndScaledMu("correctedScaled_actualInteractionsPerCrossing");
    +    if ( correctedAvgMu.isAvailable( *eventInfo ) ) {
    +      m_correctedAvgMu = correctedAvgMu( *eventInfo );
    +    }   else {
    +      m_correctedAvgMu = -1.0;
    +    }
    +    if ( correctedAndScaledAvgMu.isAvailable( *eventInfo ) )    {
    +      m_correctedAndScaledAvgMu = correctedAndScaledAvgMu( *eventInfo );
    +    }   else {
    +      m_correctedAndScaledAvgMu = -1.0;
    +    }
    +    if ( correctedMu.isAvailable( *eventInfo ) )    {
    +      m_correctedMu = correctedMu( *eventInfo );
    +    }   else {
    +      m_correctedMu = -1.0;
    +    }
    +    if ( correctedAndScaledMu.isAvailable( *eventInfo ) )   {
    +      m_correctedAndScaledMu = correctedAndScaledMu( *eventInfo );
    +    }   else {
    +      m_correctedAndScaledMu = -1.0;
    +    }
    +
    +    if ( m_mc ) {
    +
    +      static SG::AuxElement::ConstAccessor< float > weight_pileup ("PileupWeight");
    +      static SG::AuxElement::ConstAccessor< unsigned int > rand_run_nr("RandomRunNumber");
    +      static SG::AuxElement::ConstAccessor< unsigned int > rand_lumiblock_nr("RandomLumiBlockNumber");
    +
    +      if ( weight_pileup.isAvailable( *eventInfo ) )     { m_weight_pileup = weight_pileup( *eventInfo ); }     else { m_weight_pileup = 1.0; }
    +      if ( rand_run_nr.isAvailable( *eventInfo ) )   { m_rand_run_nr = rand_run_nr( *eventInfo ); }         else { m_rand_run_nr = 900000; }
    +      if ( rand_lumiblock_nr.isAvailable( *eventInfo ) ) { m_rand_lumiblock_nr = rand_lumiblock_nr( *eventInfo ); } else { m_rand_lumiblock_nr = 0; }
    +
    +      static SG::AuxElement::ConstAccessor< float > weight_pileup_up ("PileupWeight_UP");
    +      static SG::AuxElement::ConstAccessor< float > weight_pileup_down ("PileupWeight_DOWN");
    +      if ( weight_pileup_up.isAvailable( *eventInfo ) )  { m_weight_pileup_up = weight_pileup_up( *eventInfo );}    else { m_weight_pileup_up = 1.0; }
    +      if ( weight_pileup_down.isAvailable( *eventInfo ) ){ m_weight_pileup_down = weight_pileup_down( *eventInfo );}else { m_weight_pileup_down = 1.0; }
    +
    +    }
    +
    +
    +  }
    +
    +  if ( m_infoSwitch.m_shapeLC && event ) {
    +    const xAOD::EventShape* evtShape(nullptr);
    +    HelperFunctions::retrieve( evtShape, "Kt4LCTopoOriginEventShape", event, 0 );
    +    if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoLC ) ) {
    +      Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape");
    +      m_rhoLC = -999;
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEM && event ) {
    +    const xAOD::EventShape* evtShape(nullptr);
    +    HelperFunctions::retrieve( evtShape, "Kt4EMTopoOriginEventShape", event, 0 );
    +    if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoEM ) ) {
    +      Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape");
    +      m_rhoEM = -999;
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_shapeEMPFLOW && event ) {
    +    const xAOD::EventShape* evtShape(nullptr);
    +    HelperFunctions::retrieve( evtShape, "Kt4EMPFlowEventShape", event, 0 );
    +    if ( !evtShape->getDensity( xAOD::EventShape::Density, m_rhoEMPFLOW ) ) {
    +      Info("FillEvent()","Could not retrieve xAOD::EventShape::Density from xAOD::EventShape");
    +      m_rhoEMPFLOW = -999;
    +    }
    +  }
    +
    +  if( m_infoSwitch.m_caloClus && event ) {
    +    const xAOD::CaloClusterContainer* caloClusters = 0;
    +    HelperFunctions::retrieve( caloClusters, "CaloCalTopoClusters", event, 0);
    +    // save the clusters at the EM scale
    +    for( auto clus : * caloClusters ) {
    +      if ( clus->pt ( xAOD::CaloCluster::State::UNCALIBRATED ) < 2000 ) { continue; } // 2 GeV cut
    +      m_caloCluster_pt. push_back( clus->pt ( xAOD::CaloCluster::State::UNCALIBRATED ) / m_units );
    +      m_caloCluster_eta.push_back( clus->eta( xAOD::CaloCluster::State::UNCALIBRATED ) );
    +      m_caloCluster_phi.push_back( clus->phi( xAOD::CaloCluster::State::UNCALIBRATED ) );
    +      m_caloCluster_e.  push_back( clus->e  ( xAOD::CaloCluster::State::UNCALIBRATED ) / m_units );
    +    }
    +  }
    +
    +  if( m_infoSwitch.m_truth && event && m_mc ) {
    +    //MC Truth
    +    const xAOD::TruthEventContainer* truthE = 0;
    +    HelperFunctions::retrieve( truthE, "TruthEvents", event, 0 );
    +    if( truthE ) {
    +      const xAOD::TruthEvent* truthEvent = truthE->at(0);
    +      truthEvent->pdfInfoParameter(m_pdgId1,   xAOD::TruthEvent::PDGID1);
    +      truthEvent->pdfInfoParameter(m_pdgId2,   xAOD::TruthEvent::PDGID2);
    +      truthEvent->pdfInfoParameter(m_pdfId1,   xAOD::TruthEvent::PDFID1);
    +      truthEvent->pdfInfoParameter(m_pdfId2,   xAOD::TruthEvent::PDFID2);
    +      truthEvent->pdfInfoParameter(m_x1,       xAOD::TruthEvent::X1);
    +      truthEvent->pdfInfoParameter(m_x2,       xAOD::TruthEvent::X2);
    +      //truthEvent->pdfInfoParameter(m_scale,    xAOD::TruthEvent::SCALE);
    +      truthEvent->pdfInfoParameter(m_q,        xAOD::TruthEvent::Q);
    +      //truthEvent->pdfInfoParameter(m_pdf1,     xAOD::TruthEvent::PDF1);
    +      //truthEvent->pdfInfoParameter(m_pdf2,     xAOD::TruthEvent::PDF2);
    +      truthEvent->pdfInfoParameter(m_xf1,      xAOD::TruthEvent::XF1);
    +      truthEvent->pdfInfoParameter(m_xf2,      xAOD::TruthEvent::XF2);
    +    }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_beamspotweight ) {
    +    m_beamspotweight = eventInfo->beamSpotWeight();
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_FatJetContainer.cxx.html b/api/program_listing_file_Root_FatJetContainer.cxx.html new file mode 100644 index 0000000000..d09bcb76fc --- /dev/null +++ b/api/program_listing_file_Root_FatJetContainer.cxx.html @@ -0,0 +1,1141 @@ + + + + + + + + + + + Program Listing for File FatJetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File FatJetContainer.cxx

    +

    Return to documentation for file (Root/FatJetContainer.cxx)

    +
    #include "xAODAnaHelpers/FatJetContainer.h"
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <iostream>
    +#include "xAODTruth/TruthEventContainer.h"
    +
    +using namespace xAH;
    +
    +FatJetContainer::FatJetContainer(const std::string& name, const std::string& detailStr, const std::string& subjetDetailStr, const std::string& suffix,
    +                 float units, bool mc)
    +  : ParticleContainer(name,detailStr,units,mc, true, true, suffix)
    +{
    +  if (m_infoSwitch.m_scales) {
    +      m_JetConstitScaleMomentum_eta       = new std::vector<float>();
    +      m_JetConstitScaleMomentum_phi       = new std::vector<float>();
    +      m_JetConstitScaleMomentum_m       = new std::vector<float>();
    +      m_JetConstitScaleMomentum_pt        = new std::vector<float>();
    +
    +      m_JetEMScaleMomentum_eta        = new std::vector<float>();
    +      m_JetEMScaleMomentum_phi        = new std::vector<float>();
    +      m_JetEMScaleMomentum_m        = new std::vector<float>();
    +      m_JetEMScaleMomentum_pt       = new std::vector<float>();
    +  }
    +
    +  if (m_infoSwitch.m_area) {
    +    m_GhostArea = new std::vector<float>();
    +    m_ActiveArea = new std::vector<float>();
    +    m_VoronoiArea = new std::vector<float>();
    +
    +    m_ActiveArea4vec_pt = new std::vector<float>();
    +    m_ActiveArea4vec_eta = new std::vector<float>();
    +    m_ActiveArea4vec_phi = new std::vector<float>();
    +    m_ActiveArea4vec_m = new std::vector<float>();
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    m_Split12           = new std::vector<float>();
    +    m_Split23           = new std::vector<float>();
    +    m_Split34           = new std::vector<float>();
    +    m_tau1_wta          = new std::vector<float>();
    +    m_tau2_wta          = new std::vector<float>();
    +    m_tau3_wta          = new std::vector<float>();
    +    m_tau21_wta         = new std::vector<float>();
    +    m_tau32_wta         = new std::vector<float>();
    +    m_ECF1              = new std::vector<float>();
    +    m_ECF2              = new std::vector<float>();
    +    m_ECF3              = new std::vector<float>();
    +    m_C2                = new std::vector<float>();
    +    m_D2                = new std::vector<float>();
    +    m_NTrimSubjets      = new std::vector<float>();
    +    m_NClusters         = new std::vector<int>  ();
    +    m_nTracks           = new std::vector<int>  ();
    +    m_ungrtrk500    = new std::vector<int>  ();
    +    m_EMFrac        = new std::vector<float>();
    +    m_nChargedParticles = new std::vector<int>();
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ) {
    +    m_NTrimSubjets = new std::vector<float>();
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    m_numConstituents    = new std::vector< int >();
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    m_constituentWeights  = new std::vector< std::vector<float> >();
    +    m_constituent_pt      = new std::vector< std::vector<float> >();
    +    m_constituent_eta     = new std::vector< std::vector<float> >();
    +    m_constituent_phi     = new std::vector< std::vector<float> >();
    +    m_constituent_e       = new std::vector< std::vector<float> >();
    +  }
    +
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    m_truth_m  =new std::vector<float>;
    +    m_truth_pt =new std::vector<float>;
    +    m_truth_phi=new std::vector<float>;
    +    m_truth_eta=new std::vector<float>;
    +  }
    +
    +  if ( m_infoSwitch.m_bosonCount && m_mc) {
    +    m_nTQuarks  = new std::vector< int > ();
    +    m_nHBosons  = new std::vector< int > ();
    +    m_nWBosons  = new std::vector< int > ();
    +    m_nZBosons  = new std::vector< int > ();
    +  }
    +
    +  if (m_infoSwitch.m_muonCorrection) {
    +    m_muonCorrected_pt  = new std::vector<float>();
    +    m_muonCorrected_eta = new std::vector<float>();
    +    m_muonCorrected_phi = new std::vector<float>();
    +    m_muonCorrected_m   = new std::vector<float>();
    +  }
    +
    +  for(const auto& trackJetName : m_infoSwitch.m_trackJetNames)
    +    {
    +      std::string trkJetName = name;
    +      if( !suffix.empty() ){ trkJetName += "_"+suffix; }
    +      trkJetName += "_"+trackJetName;
    +      m_trkJets[trackJetName] = new xAH::JetContainer(trkJetName, subjetDetailStr, m_units, m_mc);
    +
    +      m_trkJetsIdx[trackJetName] = new std::vector<std::vector<unsigned int> > ();
    +    }
    +
    +}
    +
    +FatJetContainer::~FatJetContainer()
    +{
    +  if(m_debug) std::cout << " Deleting FatJetContainer "  << std::endl;
    +
    +  if ( m_infoSwitch.m_scales ) {
    +      delete m_JetConstitScaleMomentum_eta ;
    +      delete m_JetConstitScaleMomentum_phi ;
    +      delete m_JetConstitScaleMomentum_m   ;
    +      delete m_JetConstitScaleMomentum_pt  ;
    +
    +      delete m_JetEMScaleMomentum_eta      ;
    +      delete m_JetEMScaleMomentum_phi      ;
    +      delete m_JetEMScaleMomentum_m        ;
    +      delete m_JetEMScaleMomentum_pt       ;
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    delete m_GhostArea;
    +    delete m_ActiveArea;
    +    delete m_VoronoiArea;
    +
    +    delete m_ActiveArea4vec_pt;
    +    delete m_ActiveArea4vec_eta;
    +    delete m_ActiveArea4vec_phi;
    +    delete m_ActiveArea4vec_m;
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    delete m_Split12     ;
    +    delete m_Split23     ;
    +    delete m_Split34     ;
    +    delete m_tau1_wta    ;
    +    delete m_tau2_wta    ;
    +    delete m_tau3_wta    ;
    +    delete m_tau21_wta   ;
    +    delete m_tau32_wta   ;
    +    delete m_ECF1        ;
    +    delete m_ECF2        ;
    +    delete m_ECF3        ;
    +    delete m_C2          ;
    +    delete m_D2          ;
    +    delete m_NTrimSubjets;
    +    delete m_NClusters   ;
    +    delete m_nTracks   ;
    +    delete m_ungrtrk500     ;
    +    delete m_EMFrac     ;
    +    delete m_nChargedParticles  ;
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){
    +    delete m_NTrimSubjets;
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    delete m_numConstituents;
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    delete m_constituentWeights;
    +    delete m_constituent_pt    ;
    +    delete m_constituent_eta   ;
    +    delete m_constituent_phi   ;
    +    delete m_constituent_e     ;
    +  }
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    delete m_truth_m;
    +    delete m_truth_pt;
    +    delete m_truth_phi;
    +    delete m_truth_eta;
    +  }
    +
    +  if ( m_infoSwitch.m_bosonCount && m_mc) {
    +    delete m_nTQuarks;
    +    delete m_nHBosons;
    +    delete m_nWBosons;
    +    delete m_nZBosons;
    +  }
    +
    +  if ( m_infoSwitch.m_muonCorrection) {
    +    delete m_muonCorrected_pt;
    +    delete m_muonCorrected_eta;
    +    delete m_muonCorrected_phi;
    +    delete m_muonCorrected_m;
    +  }
    +
    +  if( !m_infoSwitch.m_trackJetNames.empty() ){
    +    for(const auto& kv : m_trkJets)
    +      {
    +    delete m_trkJets   [kv.first];
    +    delete m_trkJetsIdx[kv.first];
    +      }
    +    m_trkJets   .clear();
    +    m_trkJetsIdx.clear();
    +  }
    +
    +}
    +
    +void FatJetContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  if( m_infoSwitch.m_scales ) {
    +    connectBranch<float>(tree, "JetConstitScaleMomentum_eta", &m_JetConstitScaleMomentum_eta);
    +    connectBranch<float>(tree, "JetConstitScaleMomentum_phi", &m_JetConstitScaleMomentum_phi);
    +    connectBranch<float>(tree, "JetConstitScaleMomentum_m", &m_JetConstitScaleMomentum_m);
    +    connectBranch<float>(tree, "JetConstitScaleMomentum_pt", &m_JetConstitScaleMomentum_pt);
    +
    +    connectBranch<float>(tree, "JetEMScaleMomentum_eta", &m_JetEMScaleMomentum_eta);
    +    connectBranch<float>(tree, "JetEMScaleMomentum_phi", &m_JetEMScaleMomentum_phi);
    +    connectBranch<float>(tree, "JetEMScaleMomentum_m", &m_JetEMScaleMomentum_m);
    +    connectBranch<float>(tree, "JetEMScaleMomentum_pt", &m_JetEMScaleMomentum_pt);
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    connectBranch<float>(tree, "m_GhostArea", &m_GhostArea);
    +    connectBranch<float>(tree, "m_ActiveArea", &m_ActiveArea);
    +    connectBranch<float>(tree, "m_VoronoiArea", &m_VoronoiArea);
    +
    +    connectBranch<float>(tree, "m_ActiveArea4vec_pt", &m_ActiveArea4vec_pt);
    +    connectBranch<float>(tree, "m_ActiveArea4vec_eta", &m_ActiveArea4vec_eta);
    +    connectBranch<float>(tree, "m_ActiveArea4vec_phi", &m_ActiveArea4vec_phi);
    +    connectBranch<float>(tree, "m_ActiveArea4vec_m", &m_ActiveArea4vec_m);
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    connectBranch<float>(tree, "Split12",      &m_Split12);
    +    connectBranch<float>(tree, "Split23",      &m_Split23);
    +    connectBranch<float>(tree, "Split34",      &m_Split34);
    +    connectBranch<float>(tree, "tau1_wta",     &m_tau1_wta);
    +    connectBranch<float>(tree, "tau2_wta",     &m_tau2_wta);
    +    connectBranch<float>(tree, "tau3_wta",     &m_tau3_wta);
    +    connectBranch<float>(tree, "tau21_wta",    &m_tau21_wta);
    +    connectBranch<float>(tree, "tau32_wta",    &m_tau32_wta);
    +    connectBranch<float>(tree, "ECF1",         &m_ECF1);
    +    connectBranch<float>(tree, "ECF2",         &m_ECF2);
    +    connectBranch<float>(tree, "ECF3",         &m_ECF3);
    +    connectBranch<float>(tree, "C2",           &m_C2);
    +    connectBranch<float>(tree, "D2",           &m_D2);
    +    connectBranch<float>(tree, "NTrimSubjets", &m_NTrimSubjets);
    +    connectBranch<int>  (tree, "Nclusters",    &m_NClusters);
    +    connectBranch<int>  (tree, "nTracks",      &m_nTracks);
    +    connectBranch<int>  (tree, "ungrtrk500",        &m_ungrtrk500);
    +    connectBranch<float>(tree, "EMFrac",        &m_EMFrac);
    +    connectBranch<int>  (tree, "nChargedParticles", &m_nChargedParticles);
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){
    +    connectBranch<float>(tree, "NTrimSubjets", &m_NTrimSubjets);
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    connectBranch<int>  (tree, "numConstituents",    &m_numConstituents);
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    connectBranch< std::vector<float> >(tree, "constituentWeights",  &m_constituentWeights);
    +    connectBranch< std::vector<float> >(tree, "constituent_pt",      &m_constituent_pt);
    +    connectBranch< std::vector<float> >(tree, "constituent_eta",     &m_constituent_eta);
    +    connectBranch< std::vector<float> >(tree, "constituent_phi",     &m_constituent_phi);
    +    connectBranch< std::vector<float> >(tree, "constituent_e",       &m_constituent_e);
    +  }
    +
    +  if(m_infoSwitch.m_truth)
    +    {
    +      connectBranch<float>(tree,"truth_m",   &m_truth_m);
    +      connectBranch<float>(tree,"truth_pt",  &m_truth_pt);
    +      connectBranch<float>(tree,"truth_phi", &m_truth_phi);
    +      connectBranch<float>(tree,"truth_eta", &m_truth_eta);
    +    }
    +
    +  if ( m_infoSwitch.m_bosonCount) {
    +    connectBranch< int >(tree, "nTQuarks",  &m_nTQuarks);
    +    connectBranch< int >(tree, "nHBosons",  &m_nHBosons);
    +    connectBranch< int >(tree, "nWBosons",  &m_nWBosons);
    +    connectBranch< int >(tree, "nZBosons",  &m_nZBosons);
    +  }
    +
    +  if (m_infoSwitch.m_muonCorrection) {
    +    connectBranch< float >(tree, "muonCorrected_pt" , &m_muonCorrected_pt );
    +    connectBranch< float >(tree, "muonCorrected_eta", &m_muonCorrected_eta);
    +    connectBranch< float >(tree, "muonCorrected_phi", &m_muonCorrected_phi);
    +    connectBranch< float >(tree, "muonCorrected_m"  , &m_muonCorrected_m  );
    +
    +  }
    +
    +  for(const std::pair< std::string, std::vector<std::vector<unsigned int>>* >& kv : m_trkJetsIdx)
    +    {
    +      m_trkJets[kv.first]->JetContainer::setTree(tree);
    +      if(tree->GetBranch(branchName("trkJetsIdx").c_str()))
    +    connectBranch< std::vector<unsigned int> >(tree, "trkJetsIdx", &m_trkJetsIdx[kv.first]);
    +      else
    +    connectBranch< std::vector<unsigned int> >(tree, "trkJetsIdx_"+kv.first, &m_trkJetsIdx[kv.first]);
    +    }
    +}
    +
    +void FatJetContainer::updateParticle(uint idx, FatJet& fatjet)
    +{
    +  if(m_debug) std::cout << "in FatJetContainer::updateParticle " << std::endl;
    +  ParticleContainer::updateParticle(idx,fatjet);
    +
    +  if ( m_infoSwitch.m_scales ) {
    +      fatjet.JetConstitScaleMomentum_eta = m_JetConstitScaleMomentum_eta ->at(idx);
    +      fatjet.JetConstitScaleMomentum_phi = m_JetConstitScaleMomentum_phi ->at(idx);
    +      fatjet.JetConstitScaleMomentum_m = m_JetConstitScaleMomentum_m ->at(idx);
    +      fatjet.JetConstitScaleMomentum_pt = m_JetConstitScaleMomentum_pt ->at(idx);
    +
    +      fatjet.JetEMScaleMomentum_eta = m_JetEMScaleMomentum_eta ->at(idx);
    +      fatjet.JetEMScaleMomentum_phi = m_JetEMScaleMomentum_phi ->at(idx);
    +      fatjet.JetEMScaleMomentum_m = m_JetEMScaleMomentum_m ->at(idx);
    +      fatjet.JetEMScaleMomentum_pt = m_JetEMScaleMomentum_pt ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    fatjet.GhostArea = m_GhostArea->at(idx);
    +    fatjet.ActiveArea = m_ActiveArea->at(idx);
    +    fatjet.VoronoiArea = m_VoronoiArea->at(idx);
    +    fatjet.ActiveArea4vec_pt = m_ActiveArea4vec_pt->at(idx);
    +    fatjet.ActiveArea4vec_eta = m_ActiveArea4vec_eta->at(idx);
    +    fatjet.ActiveArea4vec_phi = m_ActiveArea4vec_phi->at(idx);
    +    fatjet.ActiveArea4vec_m = m_ActiveArea4vec_m->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    fatjet.Split12      = m_Split12     ->at(idx);
    +    fatjet.Split23      = m_Split23     ->at(idx);
    +    fatjet.Split34      = m_Split34     ->at(idx);
    +    fatjet.tau1_wta     = m_tau1_wta    ->at(idx);
    +    fatjet.tau2_wta     = m_tau2_wta    ->at(idx);
    +    fatjet.tau3_wta     = m_tau3_wta    ->at(idx);
    +    fatjet.tau21_wta    = m_tau21_wta   ->at(idx);
    +    fatjet.tau32_wta    = m_tau32_wta   ->at(idx);
    +    fatjet.ECF1         = m_ECF1        ->at(idx);
    +    fatjet.ECF2         = m_ECF2        ->at(idx);
    +    fatjet.ECF3         = m_ECF3        ->at(idx);
    +    fatjet.C2           = m_C2          ->at(idx);
    +    fatjet.D2           = m_D2          ->at(idx);
    +    fatjet.NTrimSubjets = m_NTrimSubjets->at(idx);
    +    fatjet.NClusters    = m_NClusters   ->at(idx);
    +    fatjet.nTracks      = m_nTracks     ->at(idx);
    +    fatjet.ungrtrk500       = m_ungrtrk500      ->at(idx);
    +    fatjet.EMFrac       = m_EMFrac      ->at(idx);
    +    fatjet.nChargedParticles    = m_nChargedParticles   ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){
    +    fatjet.NTrimSubjets = m_NTrimSubjets->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    fatjet.numConstituents    = m_numConstituents   ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    fatjet.constituentWeights = m_constituentWeights  ->at(idx);
    +    fatjet.constituent_pt     = m_constituent_pt      ->at(idx);
    +    fatjet.constituent_eta    = m_constituent_eta     ->at(idx);
    +    fatjet.constituent_phi    = m_constituent_phi     ->at(idx);
    +    fatjet.constituent_e      = m_constituent_e       ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_truth)
    +    {
    +      fatjet.truth_p4.SetPtEtaPhiE(m_truth_pt ->at(idx),
    +                   m_truth_eta->at(idx),
    +                   m_truth_phi->at(idx),
    +                   m_truth_m  ->at(idx));
    +    }
    +
    +  if (m_infoSwitch.m_bosonCount) {
    +    fatjet.nTQuarks = m_nTQuarks->at(idx);
    +    fatjet.nHBosons = m_nHBosons->at(idx);
    +    fatjet.nWBosons = m_nWBosons->at(idx);
    +    fatjet.nZBosons = m_nZBosons->at(idx);
    +  }
    +
    +  if (m_infoSwitch.m_muonCorrection) {
    +    fatjet.muonCorrected_pt  = m_muonCorrected_pt ->at(idx);
    +    fatjet.muonCorrected_eta = m_muonCorrected_eta->at(idx);
    +    fatjet.muonCorrected_phi = m_muonCorrected_phi->at(idx);
    +    fatjet.muonCorrected_m   = m_muonCorrected_m  ->at(idx);
    +  }
    +
    +  for(const auto& kv : m_trkJets)
    +    {
    +      fatjet.trkJets[kv.first].clear();
    +      std::vector<std::vector<unsigned int>> *trkJetsIdx=m_trkJetsIdx[kv.first];
    +      for(unsigned int iTrkJet : trkJetsIdx->at(idx))
    +    {
    +      Jet thisTrkJet;
    +      kv.second->updateParticle(iTrkJet, thisTrkJet);
    +      fatjet.trkJets[kv.first].push_back(thisTrkJet);
    +    }
    +    }
    +
    +  if(m_debug) std::cout << "leave FatJetContainer::updateParticle " << std::endl;
    +  return;
    +}
    +
    +
    +
    +void FatJetContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +  if ( m_infoSwitch.m_scales ) {
    +      setBranch<float>(tree, "JetConstitScaleMomentum_eta", m_JetConstitScaleMomentum_eta);
    +      setBranch<float>(tree, "JetConstitScaleMomentum_phi", m_JetConstitScaleMomentum_phi);
    +      setBranch<float>(tree, "JetConstitScaleMomentum_m", m_JetConstitScaleMomentum_m);
    +      setBranch<float>(tree, "JetConstitScaleMomentum_pt", m_JetConstitScaleMomentum_pt);
    +
    +      setBranch<float>(tree, "JetEMScaleMomentum_eta", m_JetEMScaleMomentum_eta);
    +      setBranch<float>(tree, "JetEMScaleMomentum_phi", m_JetEMScaleMomentum_phi);
    +      setBranch<float>(tree, "JetEMScaleMomentum_m", m_JetEMScaleMomentum_m);
    +      setBranch<float>(tree, "JetEMScaleMomentum_pt", m_JetEMScaleMomentum_pt);
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    setBranch<float>(tree, "GhostArea", m_GhostArea);
    +    setBranch<float>(tree, "ActiveArea", m_ActiveArea);
    +    setBranch<float>(tree, "VoronoiArea", m_VoronoiArea);
    +    setBranch<float>(tree, "ActiveArea4vec_pt", m_ActiveArea4vec_pt);
    +    setBranch<float>(tree, "ActiveArea4vec_eta", m_ActiveArea4vec_eta);
    +    setBranch<float>(tree, "ActiveArea4vec_phi", m_ActiveArea4vec_phi);
    +    setBranch<float>(tree, "ActiveArea4vec_m", m_ActiveArea4vec_m);
    +
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    setBranch<float>(tree, "Split12",      m_Split12);
    +    setBranch<float>(tree, "Split23",      m_Split23);
    +    setBranch<float>(tree, "Split34",      m_Split34);
    +    setBranch<float>(tree, "tau1_wta",     m_tau1_wta);
    +    setBranch<float>(tree, "tau2_wta",     m_tau2_wta);
    +    setBranch<float>(tree, "tau3_wta",     m_tau3_wta);
    +    setBranch<float>(tree, "tau21_wta",    m_tau21_wta);
    +    setBranch<float>(tree, "tau32_wta",    m_tau32_wta);
    +    setBranch<float>(tree, "ECF1",         m_ECF1);
    +    setBranch<float>(tree, "ECF2",         m_ECF2);
    +    setBranch<float>(tree, "ECF3",         m_ECF3);
    +    setBranch<float>(tree, "C2",           m_C2);
    +    setBranch<float>(tree, "D2",           m_D2);
    +    setBranch<float>(tree, "NTrimSubjets", m_NTrimSubjets);
    +    setBranch<int>  (tree, "Nclusters",    m_NClusters);
    +    setBranch<int>  (tree, "nTracks",      m_nTracks);
    +    setBranch<int>  (tree, "ungrtrk500",    m_ungrtrk500);
    +    setBranch<float>(tree, "EMFrac",        m_EMFrac);
    +    setBranch<int>  (tree, "nChargedParticles", m_nChargedParticles);
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure){
    +    setBranch<float>(tree, "NTrimSubjets", m_NTrimSubjets);
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    setBranch<int>  (tree, "numConstituents",    m_numConstituents);
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    setBranch< std::vector<float> >(tree, "constituentWeights",  m_constituentWeights);
    +    setBranch< std::vector<float> >(tree, "constituent_pt",      m_constituent_pt);
    +    setBranch< std::vector<float> >(tree, "constituent_eta",     m_constituent_eta);
    +    setBranch< std::vector<float> >(tree, "constituent_phi",     m_constituent_phi);
    +    setBranch< std::vector<float> >(tree, "constituent_e",       m_constituent_e);
    +  }
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    setBranch<float>(tree, "truth_m"  , m_truth_m  );
    +    setBranch<float>(tree, "truth_pt" , m_truth_pt );
    +    setBranch<float>(tree, "truth_phi", m_truth_phi);
    +    setBranch<float>(tree, "truth_eta", m_truth_eta);
    +  }
    +
    +  if ( m_infoSwitch.m_bosonCount && m_mc ) {
    +    setBranch< int >(tree, "nTQuarks",       m_nTQuarks);
    +    setBranch< int >(tree, "nHBosons",       m_nHBosons);
    +    setBranch< int >(tree, "nWBosons",       m_nWBosons);
    +    setBranch< int >(tree, "nZBosons",       m_nZBosons);
    +  }
    +  if (m_infoSwitch.m_muonCorrection) {
    +    setBranch<float> (tree, "muonCorrected_pt" , m_muonCorrected_pt );
    +    setBranch<float> (tree, "muonCorrected_eta", m_muonCorrected_eta);
    +    setBranch<float> (tree, "muonCorrected_phi", m_muonCorrected_phi);
    +    setBranch<float> (tree, "muonCorrected_m"  , m_muonCorrected_m  );
    +  }
    +
    +  for(const auto& kv : m_trkJets)
    +    {
    +      kv.second->setBranches(tree);
    +      setBranch< std::vector<unsigned int> >(tree, "trkJetsIdx_"+kv.first, m_trkJetsIdx[kv.first]);
    +    }
    +
    +  return;
    +}
    +
    +
    +void FatJetContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  if ( m_infoSwitch.m_scales ) {
    +    m_JetConstitScaleMomentum_eta   ->clear();
    +    m_JetConstitScaleMomentum_phi   ->clear();
    +    m_JetConstitScaleMomentum_m     ->clear();
    +    m_JetConstitScaleMomentum_pt    ->clear();
    +
    +    m_JetEMScaleMomentum_eta        ->clear();
    +    m_JetEMScaleMomentum_phi        ->clear();
    +    m_JetEMScaleMomentum_m          ->clear();
    +    m_JetEMScaleMomentum_pt         ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    m_GhostArea->clear();
    +    m_ActiveArea->clear();
    +    m_VoronoiArea->clear();
    +    m_ActiveArea4vec_pt->clear();
    +    m_ActiveArea4vec_eta->clear();
    +    m_ActiveArea4vec_phi->clear();
    +    m_ActiveArea4vec_m->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_substructure ) {
    +    m_Split12     ->clear();
    +    m_Split23     ->clear();
    +    m_Split34     ->clear();
    +    m_tau1_wta    ->clear();
    +    m_tau2_wta    ->clear();
    +    m_tau3_wta    ->clear();
    +    m_tau21_wta   ->clear();
    +    m_tau32_wta   ->clear();
    +    m_ECF1        ->clear();
    +    m_ECF2        ->clear();
    +    m_ECF3        ->clear();
    +    m_C2          ->clear();
    +    m_D2          ->clear();
    +    m_NTrimSubjets->clear();
    +    m_NClusters   ->clear();
    +    m_nTracks     ->clear();
    +    m_ungrtrk500    ->clear();
    +    m_EMFrac        ->clear();
    +    m_nChargedParticles ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){
    +    m_NTrimSubjets->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_constituent) {
    +    m_numConstituents->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll) {
    +    m_constituentWeights->clear();
    +    m_constituent_pt    ->clear();
    +    m_constituent_eta   ->clear();
    +    m_constituent_phi   ->clear();
    +    m_constituent_e     ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    m_truth_m  ->clear();
    +    m_truth_pt ->clear();
    +    m_truth_phi->clear();
    +    m_truth_eta->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_bosonCount && m_mc) {
    +    m_nTQuarks->clear();
    +    m_nHBosons->clear();
    +    m_nWBosons->clear();
    +    m_nZBosons->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_muonCorrection) {
    +    m_muonCorrected_pt ->clear();
    +    m_muonCorrected_eta->clear();
    +    m_muonCorrected_phi->clear();
    +    m_muonCorrected_m  ->clear();
    +  }
    +
    +  for(const std::pair< std::string, std::vector<std::vector<unsigned int>>* >& kv : m_trkJetsIdx)
    +    {
    +      m_trkJets   [kv.first]->clear();
    +      m_trkJetsIdx[kv.first]->clear();
    +    }
    +
    +  return;
    +}
    +
    +void FatJetContainer::FillFatJet( const xAOD::Jet* jet, int pvLocation ){
    +  return FillFatJet(static_cast<const xAOD::IParticle*>(jet), pvLocation);
    +}
    +
    +void FatJetContainer::FillFatJet( const xAOD::IParticle* particle, int pvLocation ){
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::Jet* fatjet=dynamic_cast<const xAOD::Jet*>(particle);
    +
    +  if( m_infoSwitch.m_scales ){
    +    static SG::AuxElement::ConstAccessor<float> acc_JetConstitScaleMomentum_eta("JetConstitScaleMomentum_eta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetConstitScaleMomentum_eta, m_JetConstitScaleMomentum_eta, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetConstitScaleMomentum_phi("JetConstitScaleMomentum_phi");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetConstitScaleMomentum_phi, m_JetConstitScaleMomentum_phi, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetConstitScaleMomentum_m("JetConstitScaleMomentum_m");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetConstitScaleMomentum_m, m_JetConstitScaleMomentum_m, -999, m_units);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetConstitScaleMomentum_pt("JetConstitScaleMomentum_pt");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetConstitScaleMomentum_pt, m_JetConstitScaleMomentum_pt, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_JetEMScaleMomentum_eta("JetEMScaleMomentum_eta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetEMScaleMomentum_eta, m_JetEMScaleMomentum_eta, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetEMScaleMomentum_phi("JetEMScaleMomentum_phi");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetEMScaleMomentum_phi, m_JetEMScaleMomentum_phi, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetEMScaleMomentum_m("JetEMScaleMomentum_m");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetEMScaleMomentum_m, m_JetEMScaleMomentum_m, -999, m_units);
    +    static SG::AuxElement::ConstAccessor<float> acc_JetEMScaleMomentum_pt("JetEMScaleMomentum_pt");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_JetEMScaleMomentum_pt, m_JetEMScaleMomentum_pt, -999, m_units);
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    static SG::AuxElement::ConstAccessor<float> acc_GhostArea("GhostArea");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_GhostArea, m_GhostArea, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_ActiveArea("ActiveArea");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ActiveArea, m_ActiveArea, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_VoronoiArea("VoronoiArea");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_VoronoiArea, m_VoronoiArea, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_ActiveArea4vec_pt("ActiveArea4vec_pt");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ActiveArea4vec_pt, m_ActiveArea4vec_pt, -999, m_units);
    +    static SG::AuxElement::ConstAccessor<float> acc_ActiveArea4vec_eta("ActiveArea4vec_eta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ActiveArea4vec_eta, m_ActiveArea4vec_eta, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_ActiveArea4vec_phi("ActiveArea4vec_phi");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ActiveArea4vec_phi, m_ActiveArea4vec_phi, -999);
    +    static SG::AuxElement::ConstAccessor<float> acc_ActiveArea4vec_m("ActiveArea4vec_m");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ActiveArea4vec_m, m_ActiveArea4vec_m, -999, m_units);
    +  }
    +
    +  if( m_infoSwitch.m_substructure ){
    +    static SG::AuxElement::ConstAccessor<float> acc_Split12("Split12");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_Split12, m_Split12, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_Split23("Split23");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_Split23, m_Split23, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_Split34("Split34");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_Split34, m_Split34, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_tau1_wta ("Tau1_wta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_tau1_wta, m_tau1_wta, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_tau2_wta ("Tau2_wta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_tau2_wta, m_tau2_wta, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_tau3_wta ("Tau3_wta");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_tau3_wta, m_tau3_wta, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_tau21_wta ("Tau21_wta");
    +    if(acc_tau21_wta.isAvailable( *fatjet )){
    +      m_tau21_wta->push_back( acc_tau21_wta( *fatjet ) );
    +    } else if ( acc_tau1_wta.isAvailable( *fatjet ) && acc_tau2_wta.isAvailable( *fatjet ) ) {
    +      m_tau21_wta->push_back( acc_tau2_wta( *fatjet ) / acc_tau1_wta( *fatjet ) );
    +    } else { m_tau21_wta->push_back( -999 ); }
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_tau32_wta ("Tau32_wta");
    +    if(acc_tau32_wta.isAvailable( *fatjet )){
    +      m_tau32_wta->push_back( acc_tau32_wta( *fatjet ) );
    +    } else if ( acc_tau2_wta.isAvailable( *fatjet ) && acc_tau3_wta.isAvailable( *fatjet ) ) {
    +      m_tau32_wta->push_back( acc_tau3_wta( *fatjet ) / acc_tau2_wta( *fatjet ) );
    +    } else { m_tau32_wta->push_back( -999 ); }
    +
    +    static SG::AuxElement::ConstAccessor<int> acc_NClusters ("MyNClusters");
    +    safeFill<int, int, xAOD::Jet>(fatjet, acc_NClusters, m_NClusters, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_ECF1 ("ECF1");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ECF1, m_ECF1, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_ECF2("ECF2");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ECF2, m_ECF2, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_ECF3 ("ECF3");
    +    safeFill<float, float, xAOD::Jet>(fatjet, acc_ECF3, m_ECF3, -999, m_units);
    +
    +    static SG::AuxElement::ConstAccessor<int> NTrimSubjets("NTrimSubjets");
    +    safeFill<int, float, xAOD::Jet>(fatjet, NTrimSubjets, m_NTrimSubjets, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_D2 ("D2");
    +    if( acc_D2.isAvailable( *fatjet ) ) {
    +      m_D2->push_back( acc_D2( *fatjet ));
    +    } else if (acc_ECF1.isAvailable( *fatjet ) && acc_ECF2.isAvailable( *fatjet ) && acc_ECF3.isAvailable( *fatjet )){
    +      float e2=(acc_ECF2( *fatjet )/(acc_ECF1( *fatjet )*acc_ECF1( *fatjet )));
    +      float e3=(acc_ECF3( *fatjet )/(acc_ECF1( *fatjet )*acc_ECF1( *fatjet )*acc_ECF1( *fatjet )));
    +      m_D2->push_back( e3/(e2*e2*e2) );
    +    } else{ m_D2->push_back(-999); }
    +
    +    static SG::AuxElement::ConstAccessor<float> acc_C2("C2");
    +    if(acc_C2.isAvailable(*fatjet)){
    +      m_C2->push_back(acc_C2(*fatjet));
    +    } else if( acc_ECF1.isAvailable(*fatjet) && acc_ECF2.isAvailable(*fatjet) && acc_ECF3.isAvailable(*fatjet)){
    +      m_C2->push_back( acc_ECF3(*fatjet)*acc_ECF1(*fatjet)/pow(acc_ECF2(*fatjet),2.0));
    +    } else{ m_C2->push_back(-999); }
    +
    +    static SG::AuxElement::ConstAccessor<int> acc_GhostTrackCount("GhostTrackCount");
    +    if( acc_GhostTrackCount.isAvailable( *fatjet ) ) {
    +      m_nTracks->push_back( acc_GhostTrackCount( *fatjet ));
    +    } else { m_nTracks->push_back(-999); }
    +
    +    static SG::AuxElement::ConstAccessor<ElementLink<xAOD::JetContainer>> acc_parent("Parent");
    +    if (acc_parent.isAvailable(*fatjet)) {
    +      ElementLink<xAOD::JetContainer> fatjetParentLink = acc_parent(*fatjet);
    +      if (fatjetParentLink.isValid()) {
    +        const xAOD::Jet* fatjetParent {*fatjetParentLink};
    +        static SG::AuxElement::ConstAccessor< std::vector<int> > acc_NumTrkPt500("NumTrkPt500");
    +        if ( acc_NumTrkPt500.isAvailable( *fatjetParent ) ) {
    +          m_ungrtrk500->push_back( acc_NumTrkPt500( *fatjetParent )[pvLocation] );
    +        } else {
    +      //Perhaps the case if we are dealing with reclustered jets
    +      int sumUngrtrk500 = 0;
    +      const xAOD::Jet* subjet(nullptr);
    +      for(auto constit: fatjet->getConstituents()){
    +            subjet = static_cast<const xAOD::Jet*>(constit->rawConstituent());
    +            if (subjet->type() != xAOD::Type::Jet) continue;
    +        if ( acc_NumTrkPt500.isAvailable( *subjet ) ) sumUngrtrk500+=acc_NumTrkPt500( *subjet )[pvLocation];
    +      }
    +          m_ungrtrk500->push_back( sumUngrtrk500 );
    +        }
    +      } else {
    +        m_ungrtrk500->push_back(-999);
    +      }
    +    } else {
    +      m_ungrtrk500->push_back(-999);
    +    }
    +
    +    m_EMFrac->push_back(GetEMFrac (*fatjet));
    +
    +    static SG::AuxElement::ConstAccessor<int> acc_nChargedParticles("nChargedParticles");
    +    if( acc_nChargedParticles.isAvailable( *fatjet ) ) {
    +      m_nChargedParticles->push_back( acc_nChargedParticles( *fatjet ));
    +    } else { m_nChargedParticles->push_back(-999); }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_ntrimsubjets && !m_infoSwitch.m_substructure ){
    +    static SG::AuxElement::ConstAccessor<int> NTrimSubjets("NTrimSubjets");
    +    safeFill<int, float, xAOD::Jet>(fatjet, NTrimSubjets, m_NTrimSubjets, -999);
    +  }
    +
    +  if( m_infoSwitch.m_constituent ){
    +    m_numConstituents->push_back( fatjet->numConstituents() );
    +  }
    +
    +
    +  if( m_infoSwitch.m_constituentAll ){
    +    m_constituentWeights->push_back( fatjet->getAttribute< std::vector<float> >( "constituentWeights" ) );
    +    std::vector<float> pt;
    +    std::vector<float> eta;
    +    std::vector<float> phi;
    +    std::vector<float> e;
    +    xAOD::JetConstituentVector consVec = fatjet->getConstituents();
    +
    +    if( consVec.isValid() ) {
    +
    +      // use the example provided in
    +      // http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Event/xAOD/xAODJet/xAODJet/JetConstituentVector.h
    +      xAOD::JetConstituentVector::iterator constit = consVec.begin();
    +      xAOD::JetConstituentVector::iterator constitE = consVec.end();
    +      for( ; constit != constitE; constit++){
    +    pt. push_back( constit->pt() / m_units );
    +    eta.push_back( constit->eta() );
    +    phi.push_back( constit->phi() );
    +    e.  push_back( constit->e() / m_units  );
    +      }
    +    }
    +    m_constituent_pt ->push_back( pt  );
    +    m_constituent_eta->push_back( eta );
    +    m_constituent_phi->push_back( phi );
    +    m_constituent_e  ->push_back( e   );
    +  }
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    const xAOD::Jet* truthJet = HelperFunctions::getLink<xAOD::Jet>( fatjet, "GhostTruthAssociationLink" );
    +    if(truthJet) {
    +      m_truth_pt->push_back ( truthJet->pt() / m_units );
    +      m_truth_eta->push_back( truthJet->eta() );
    +      m_truth_phi->push_back( truthJet->phi() );
    +      m_truth_m->push_back  ( truthJet->m() / m_units );
    +    } else {
    +      m_truth_pt->push_back ( -999 );
    +      m_truth_eta->push_back( -999 );
    +      m_truth_phi->push_back( -999 );
    +      m_truth_m->push_back  ( -999 );
    +    }
    +
    +  }
    +
    +  if(m_infoSwitch.m_bosonCount && m_mc){
    +
    +    const xAOD::Jet* fatjet_parent = fatjet; // Trimmed jet area will be used for leading calo-jet if parent link fails
    +
    +    try
    +      {
    +    auto el = fatjet->auxdata<ElementLink<xAOD::JetContainer> >("Parent");
    +    if(el.isValid())
    +      fatjet_parent = (*el);
    +    else
    +      Warning("execute()", "Invalid link to \"Parent\" from leading calo-jet");
    +      }
    +    catch(...)
    +      {
    +    Warning("execute()", "Unable to fetch \"Parent\" link from leading calo-jet");
    +      }
    +
    +    static SG::AuxElement::ConstAccessor< int > truthfatjet_TQuarks("GhostTQuarksFinalCount");
    +    safeFill<int, int, xAOD::Jet>(fatjet_parent, truthfatjet_TQuarks, m_nTQuarks, -999);
    +
    +    static SG::AuxElement::ConstAccessor< int > truthfatjet_WBosons("GhostWBosonsCount");
    +    safeFill<int, int, xAOD::Jet>(fatjet_parent, truthfatjet_WBosons, m_nWBosons, -999);
    +
    +    static SG::AuxElement::ConstAccessor< int > truthfatjet_ZBosons("GhostZBosonsCount");
    +    safeFill<int, int, xAOD::Jet>(fatjet_parent, truthfatjet_ZBosons, m_nZBosons, -999);
    +
    +    static SG::AuxElement::ConstAccessor< int > truthfatjet_HBosons("GhostHBosonsCount");
    +    safeFill<int, int, xAOD::Jet>(fatjet_parent, truthfatjet_HBosons, m_nHBosons, -999);
    +  }
    +
    +  if (m_infoSwitch.m_muonCorrection) {
    +    static const SG::AuxElement::ConstAccessor<TLorentzVector> acc_correctedFatJets_tlv("correctedFatJets_tlv");
    +      m_muonCorrected_pt ->push_back(acc_correctedFatJets_tlv(*fatjet).Pt() / m_units);
    +      m_muonCorrected_eta->push_back(acc_correctedFatJets_tlv(*fatjet).Eta());
    +      m_muonCorrected_phi->push_back(acc_correctedFatJets_tlv(*fatjet).Phi());
    +      m_muonCorrected_m  ->push_back(acc_correctedFatJets_tlv(*fatjet).M()  / m_units);
    +  }
    +
    +
    +  //
    +  // Associated track jets
    +  //
    +  if( !m_infoSwitch.m_trackJetNames.empty() ){
    +
    +    // Find the fat jet parent
    +    const xAOD::Jet* fatjet_parent = fatjet; // Trimmed jet area will be used for leading calo-jet if parent link fails
    +
    +    try{
    +      auto el = fatjet->auxdata<ElementLink<xAOD::JetContainer> >("Parent");
    +      if(el.isValid())
    +    fatjet_parent = (*el);
    +      else
    +    Warning("execute()", "Invalid link to \"Parent\" from leading calo-jet");
    +    }
    +    catch (...){
    +      Warning("execute()", "Unable to fetch \"Parent\" link from leading calo-jet");
    +    }
    +
    +    // Associate the different track jet collections
    +    std::vector<const xAOD::Jet*> assotrkjets;
    +    for(const auto& trackJetName : m_infoSwitch.m_trackJetNames)
    +      {
    +    try{
    +      assotrkjets = fatjet_parent->getAssociatedObjects<xAOD::Jet>(trackJetName);
    +      std::sort( assotrkjets.begin(), assotrkjets.end(), HelperFunctions::sort_pt );
    +    }
    +    catch (...){
    +      Warning("execute()", "Unable to fetch \"%s\" link from leading calo-jet", trackJetName.data());
    +    }
    +
    +    std::vector<unsigned int> trkJetsIdx;
    +    for(auto TrackJet : assotrkjets){
    +      if(!SelectTrackJet(TrackJet)) continue;
    +      trkJetsIdx.push_back(m_trkJets[trackJetName]->m_n);
    +      m_trkJets[trackJetName]->FillJet(TrackJet, 0 , 0);
    +    }
    +    m_trkJetsIdx[trackJetName]->push_back(trkJetsIdx);
    +      }
    +  }
    +
    +  return;
    +}
    +
    +
    +bool FatJetContainer::SelectTrackJet(const xAOD::Jet* TrackJet)
    +{
    +  if( TrackJet->pt() < m_trackJetPtCut )            return false;
    +  if( fabs(TrackJet->eta()) > m_trackJetEtaCut )    return false;
    +  if( TrackJet->numConstituents() < 2 )             return false;
    +
    +  return true;
    +}
    +
    +float FatJetContainer::GetEMFrac(const xAOD::Jet& jet) {
    +    float eInSample = 0.;
    +    float eInSampleFull = 0.;
    +    float emfrac = 0.;
    +    const xAOD::JetConstituentVector constituents = jet.getConstituents();
    +    if (!constituents.isValid()){
    +      //ATH_MSG_WARNING("Unable to retrieve valid constituents from parent of large R jet");
    +      return -1.;
    +    }
    +    for (const auto& constituent : constituents) {
    +      if(!constituent) continue;
    +      if(constituent->rawConstituent()->type()!=xAOD::Type::CaloCluster) {
    +        //ATH_MSG_WARNING("Tried to call fillEperSamplingCluster with a jet constituent that is not a cluster!");
    +        continue;
    +      }
    +      const xAOD::CaloCluster* constit = static_cast<const xAOD::CaloCluster*>(constituent->rawConstituent());
    +      if(!constit) continue;
    +      for (int s=0;s<CaloSampling::Unknown; s++){
    +          eInSampleFull += constit->eSample(CaloSampling::CaloSample(s));
    +      }
    +      eInSample += constit->eSample(CaloSampling::EMB1);
    +      eInSample += constit->eSample(CaloSampling::EMB2);
    +      eInSample += constit->eSample(CaloSampling::EMB3);
    +      eInSample += constit->eSample(CaloSampling::EME1);
    +      eInSample += constit->eSample(CaloSampling::EME2);
    +      eInSample += constit->eSample(CaloSampling::EME3);
    +      eInSample += constit->eSample(CaloSampling::FCAL1);
    +    }
    +    emfrac  = eInSample/eInSampleFull;
    +    if ( emfrac > 1.0 ) emfrac = 1.;
    +    else if ( emfrac < 0.0 ) emfrac = 0.;
    +
    +    return emfrac;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HLTJetGetter.cxx.html b/api/program_listing_file_Root_HLTJetGetter.cxx.html new file mode 100644 index 0000000000..e11c73c7d9 --- /dev/null +++ b/api/program_listing_file_Root_HLTJetGetter.cxx.html @@ -0,0 +1,399 @@ + + + + + + + + + + + Program Listing for File HLTJetGetter.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HLTJetGetter.cxx

    +

    Return to documentation for file (Root/HLTJetGetter.cxx)

    +
    /******************************************
    + *
    + * This class gets HLT jets from the TDT and can be expanded to get other features
    + *
    + * Merlin Davies (merlin.davies@cern.ch)
    + * Caterina Doglioni (caterina.doglioni@cern.ch)
    + * John Alison (john.alison@cern.ch)
    + *
    + *
    + ******************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <vector>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/JetAuxContainer.h"
    +#include "xAODJet/Jet.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HLTJetGetter.h"
    +#include "TrigConfxAOD/xAODConfigTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(HLTJetGetter)
    +
    +HLTJetGetter :: HLTJetGetter () :
    +Algorithm("HLTJetGetter")
    +{
    +}
    +
    +
    +EL::StatusCode HLTJetGetter :: setupJob (EL::Job& job)
    +{
    +    ANA_MSG_INFO( "Calling setupJob");
    +    job.useXAOD ();
    +    xAOD::Init( "HLTJetGetter" ).ignore(); // call before opening first file
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: histInitialize ()
    +{
    +    ANA_CHECK( xAH::Algorithm::algInitialize());
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: fileExecute ()
    +{
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: changeInput (bool /*firstFile*/)
    +{
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode HLTJetGetter :: initialize ()
    +{
    +
    +
    +    ANA_MSG_INFO( "Initializing HLTJetGetter Interface... ");
    +
    +    m_event = wk()->xaodEvent();
    +    m_store = wk()->xaodStore();
    +
    +    //
    +    // Grab the TrigDecTool from the ToolStore
    +    //
    +
    +    /*
    +    if ( asg::ToolStore::contains<Trig::TrigDecisionTool>( "TrigDecisionTool" ) ) {
    +        m_trigDecTool = asg::ToolStore::get<Trig::TrigDecisionTool>("TrigDecisionTool");
    +    } else {
    +        Info ("Initialize()", "the Trigger Decision Tool is not yet initialized...[%s]. Doing so now.", m_name.c_str());
    +        m_ownTDTAndTCT = true;
    +
    +        m_trigConfTool = new TrigConf::xAODConfigTool( "xAODConfigTool" );
    +        ANA_CHECK( m_trigConfTool->initialize());
    +        ToolHandle< TrigConf::ITrigConfigTool > configHandle( m_trigConfTool );
    +
    +        m_trigDecTool = new Trig::TrigDecisionTool( "TrigDecisionTool" );
    +        ANA_CHECK( m_trigDecTool->setProperty( "ConfigTool", configHandle ));
    +        ANA_CHECK( m_trigDecTool->setProperty( "TrigDecisionKey", "xTrigDecision" ));
    +        ANA_CHECK( m_trigDecTool->setProperty( "OutputLevel", MSG::ERROR));
    +        ANA_CHECK( m_trigDecTool->initialize());
    +        ANA_MSG_INFO( "Successfully configured Trig::TrigDecisionTool!");
    +    }
    +    */
    +
    +    if(!m_trigDecTool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    // If there is no InputContainer we must stop
    +    if ( m_inContainerName.empty() ) {
    +        ANA_MSG_ERROR( "InputContainer is empty!");
    +        return EL::StatusCode::FAILURE;
    +    }
    +
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode HLTJetGetter :: execute ()
    +{
    +    ANA_MSG_DEBUG( "Getting HLT jets... ");
    +
    +    //
    +    // Create the new container and its auxiliary store.
    +    //
    +    xAOD::JetContainer*     hltJets    = new xAOD::JetContainer();
    +    xAOD::JetAuxContainer*  hltJetsAux = new xAOD::JetAuxContainer();
    +    hltJets->setStore( hltJetsAux ); //< Connect the two
    +
    +    //Retrieving jets via trigger decision tool:
    +    const Trig::ChainGroup * chainGroup = m_trigDecTool_handle->getChainGroup(m_triggerList); //Trigger list:
    +
    +    std::vector<std::string> trigger_list = chainGroup->getListOfTriggers();
    +
    +    auto chainFeatures = chainGroup->features(); //Gets features associated to chain defined above
    +
    +    auto JetFeatureContainers = chainFeatures.containerFeature<xAOD::JetContainer>(m_inContainerName.c_str());
    +
    +    ANA_CHECK( m_store->record( hltJets,    m_outContainerName));
    +    ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux."));
    +
    +    for( auto fContainer : JetFeatureContainers ) {
    +        for( auto trigJet : *fContainer.cptr() ) {
    +            xAOD::Jet *Jet = new xAOD::Jet();
    +            *Jet = *trigJet;
    +            hltJets->push_back( Jet );
    +        }//end trigJet loop
    +    }//end feature container loop
    +
    +    if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: postExecute ()
    +{
    +    ANA_MSG_DEBUG( "Calling postExecute");
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: finalize ()
    +{
    +    ANA_MSG_INFO( "Deleting tool instances...");
    +
    +    // this is necessary because in most cases the pointer will be set to null
    +    // after deletion in BasicEventSelection, but it will not propagate here
    +    if ( m_ownTDTAndTCT ) {
    +      //if ( m_trigDecTool_handle )  { delete m_trigDecTool_handle; m_trigDecTool_handle = nullptr;  }
    +      if ( m_trigDecTool_handle.isInitialized() )  m_trigDecTool_handle->finalize();
    +      if ( m_trigConfTool ) {  delete m_trigConfTool; m_trigConfTool = nullptr; }
    +    }
    +
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode HLTJetGetter :: histFinalize ()
    +{
    +    ANA_MSG_INFO( "Calling histFinalize");
    +    ANA_CHECK( xAH::Algorithm::algFinalize());
    +    return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.html b/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.html new file mode 100644 index 0000000000..0e1f0285cc --- /dev/null +++ b/api/program_listing_file_Root_HLTJetRoIBuilder.cxx.html @@ -0,0 +1,761 @@ + + + + + + + + + + + Program Listing for File HLTJetRoIBuilder.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HLTJetRoIBuilder.cxx

    +

    Return to documentation for file (Root/HLTJetRoIBuilder.cxx)

    +
    /******************************************
    + *
    + * This class builds HLT jets and thier associated objects
    + *
    + * John Alison (john.alison@cern.ch)
    + *
    + *
    + ******************************************/
    +
    +//#include <iostream>
    +//#include <vector>
    +//
    +//#include <EventLoop/Job.h>
    +//#include <EventLoop/StatusCode.h>
    +//#include <EventLoop/Worker.h>
    +//
    +//#include "xAODEventInfo/EventInfo.h"
    +//#include "xAODJet/JetContainer.h"
    +//#include "xAODJet/JetAuxContainer.h"
    +//#include "xAODJet/Jet.h"
    +//#include "xAODBase/IParticleHelpers.h"
    +//#include "xAODBase/IParticleContainer.h"
    +//#include "xAODBase/IParticle.h"
    +//#include "AthContainers/ConstDataVector.h"
    +//#include "AthContainers/DataVector.h"
    +//#include "xAODCore/ShallowCopy.h"
    +//
    +//#include "xAODAnaHelpers/HelperFunctions.h"
    +//#include "xAODAnaHelpers/HLTJetRoIBuilder.h"
    +//
    +//#include "TrigConfxAOD/xAODConfigTool.h"
    +//#include "TrigDecisionTool/TrigDecisionTool.h"
    +//
    +//ClassImp(HLTJetRoIBuilder)
    +//
    +//HLTJetRoIBuilder :: HLTJetRoIBuilder () :
    +//  Algorithm("HLTJetRoIBuilder")
    +//{
    +//}
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: setupJob (EL::Job& job)
    +//{
    +//  ANA_MSG_DEBUG( "Calling setupJob");
    +//  job.useXAOD ();
    +//  xAOD::Init( "HLTJetRoIBuilder" ).ignore(); // call before opening first file
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: histInitialize ()
    +//{
    +//  ANA_CHECK( xAH::Algorithm::algInitialize());
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: fileExecute ()
    +//{
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: changeInput (bool /*firstFile*/)
    +//{
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: initialize ()
    +//{
    +//
    +//  ANA_MSG_DEBUG( "Initializing HLTJetRoIBuilder Interface... ");
    +//
    +//  m_event = wk()->xaodEvent();
    +//  m_store = wk()->xaodStore();
    +//
    +//  // Grab the TrigDecTool from the ToolStore
    +//  if(!m_trigDecTool_handle.isUserConfigured()){
    +//    ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +//    return EL::StatusCode::FAILURE;
    +//  }
    +//  ANA_CHECK( m_trigDecTool_handle.retrieve());
    +//  ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +//
    +//  if(m_trigItem.find("split") != std::string::npos){
    +//    m_jetName = "SplitJet";
    +//    m_vtxName = "xPrimVx";
    +//  }
    +//
    +//  if(m_trigItem.find("gsc") != std::string::npos){
    +//    m_jetName = "GSCJet";
    +//    m_vtxName = "xPrimVx";
    +//  }
    +//
    +//  if(m_trigItem.find("FTK") != std::string::npos){
    +//    m_trkName = "InDetTrigTrackingxAODCnv_Bjet_FTK";
    +//    m_vtxName = "";
    +//    //m_vtxName = "HLT_PrimVertexFTK";
    +//  }
    +//
    +//  if(m_trigItem.find("FTKRefit") != std::string::npos){
    +//    m_trkName = "InDetTrigTrackingxAODCnv_Bjet_FTKRefit";
    +//  }
    +//
    +//  if(m_trigItem.find("FTKVtx") != std::string::npos){
    +//    m_trkName = "InDetTrigTrackingxAODCnv_Bjet_IDTrig";
    +//  }
    +//
    +//  ANA_MSG_INFO("HLTJetRoIBuilder::Configured " << m_name << " with ");
    +//  ANA_MSG_INFO("\tm_trigItem: " << m_trigItem);
    +//  ANA_MSG_INFO("\tm_trigItemVeto: " << m_trigItemVeto);
    +//  ANA_MSG_INFO("\tm_trkName: " << m_trkName);
    +//  ANA_MSG_INFO("\tm_vtxName: " << m_vtxName);
    +//  ANA_MSG_INFO("\tm_jetName: " << m_jetName);
    +//
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: execute ()
    +//{
    +//  ANA_MSG_DEBUG( "Doing HLT JEt ROI Building... ");
    +//
    +//  if(m_doHLTBJet){
    +//    return buildHLTBJets();
    +//  }else if(m_doHLTJet){
    +//    return buildHLTJets();
    +//  }
    +//
    +//
    +//
    +//  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +//
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: buildHLTBJets ()
    +//{
    +//  ANA_MSG_VERBOSE(" "  );
    +//  auto triggerChainGroup = m_trigDecTool_handle->getChainGroup(m_trigItem);
    +//
    +//  std::vector<std::string> triggersUsed = triggerChainGroup->getListOfTriggers();
    +//  std::vector<std::string> triggersAfterVeto;
    +//  for(std::string trig : triggersUsed){
    +//    if(trig.find("antimatchdr") != std::string::npos){
    +//      continue;
    +//    }
    +//
    +//    if((m_trigItemVeto != "") && (trig.find(m_trigItemVeto) != std::string::npos)){
    +//      continue;
    +//    }
    +//    triggersAfterVeto.push_back(trig);
    +//  }
    +//
    +//  std::string m_trigItemAfterVeto = "";
    +//  bool firstItem = true;
    +//  for(std::string trig : triggersAfterVeto){
    +//    if(firstItem) m_trigItemAfterVeto += trig;
    +//    else          m_trigItemAfterVeto += "||"+trig;
    +//    firstItem = false;
    +//  }
    +//
    +//  ANA_MSG_VERBOSE(m_name << " " << m_trigItem << " matches");
    +//  ANA_MSG_VERBOSE(m_trigItemAfterVeto);
    +//  auto triggerChainGroupAfterVeto = m_trigDecTool_handle->getChainGroup(m_trigItemAfterVeto);
    +//  std::vector<std::string> triggersUsedAfterVeto = triggerChainGroupAfterVeto->getListOfTriggers();
    +//  for(std::string trig : triggersUsedAfterVeto){
    +//    ANA_MSG_VERBOSE(" \t " << trig);
    +//    if(m_trigDecTool_handle->isPassed(trig))
    +//      ANA_MSG_VERBOSE(" \t " << trig << " Passed "  );
    +//  }
    +//
    +//
    +//  //
    +//  // Create the new container and its auxiliary store.
    +//  //
    +//  ANA_MSG_VERBOSE("Creating the new container ");
    +//  xAOD::JetContainer*     hltJets    = new xAOD::JetContainer();
    +//  xAOD::JetAuxContainer*  hltJetsAux = new xAOD::JetAuxContainer();
    +//  hltJets->setStore( hltJetsAux ); //< Connect the two
    +//
    +//  //
    +//  //  For Adding Tracks to the Jet
    +//  //
    +//  ANA_MSG_VERBOSE("Making the decorators ");
    +//  static xAOD::Jet::Decorator<std::vector<const xAOD::TrackParticle*> > m_track_decoration      ("HLTBJetTracks");
    +//  static xAOD::Jet::Decorator<const xAOD::Vertex*>                 m_vtx_decoration        ("HLTBJetTracks_vtx");
    +//  static xAOD::Jet::Decorator<const xAOD::Vertex*>                 m_vtx_decoration_bkg    ("HLTBJetTracks_vtx_bkg");
    +//  static xAOD::Jet::Decorator<char >                               m_vtx_hadDummyPV        ("hadDummyPV");
    +//  static xAOD::Jet::Decorator<const xAOD::Vertex*>                 m_offline_vtx_decoration("offline_vtx");
    +//
    +//  static xAOD::Jet::Decorator<float >                              m_bs_online_vz       ("bs_online_vz");
    +//  static xAOD::Jet::Decorator<float >                              m_bs_online_vy       ("bs_online_vy");
    +//  static xAOD::Jet::Decorator<float >                              m_bs_online_vx       ("bs_online_vx");
    +//
    +//
    +//  //
    +//  // get primary vertex
    +//  //
    +//  ANA_MSG_VERBOSE("Getting the PV ");
    +//  const xAOD::VertexContainer *offline_vertices(nullptr);
    +//  const xAOD::Vertex *offline_pvx(nullptr);
    +//  ANA_CHECK( HelperFunctions::retrieve(offline_vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +//  offline_pvx = HelperFunctions::getPrimaryVertex(offline_vertices, msg());
    +//
    +//  //
    +//  // get event info
    +//  //
    +//  const xAOD::EventInfo* eventInfo(nullptr);
    +//  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +//
    +//
    +//  //
    +//  //  Make accessors/decorators
    +//  //
    +//  static SG::AuxElement::Decorator< const xAOD::BTagging* > hltBTagDecor( "HLTBTag" );
    +//
    +//  Trig::FeatureContainer fc = m_trigDecTool_handle->features(m_trigItemAfterVeto, TrigDefs::Physics );
    +//  Trig::FeatureContainer::combination_const_iterator comb   (fc.getCombinations().begin());
    +//  Trig::FeatureContainer::combination_const_iterator combEnd(fc.getCombinations().end());
    +//  ANA_MSG_VERBOSE( m_name << " New Event --------------- ");
    +//  ANA_MSG_VERBOSE( " Event Pass? " << m_trigDecTool_handle->isPassed(m_trigItemAfterVeto) );
    +//  ANA_MSG_VERBOSE( " comb size " << fc.getCombinations().size());
    +//  for( ; comb!=combEnd ; ++comb) {
    +//    std::vector< Trig::Feature<xAOD::JetContainer> >            jetCollections  = comb->containerFeature<xAOD::JetContainer>(m_jetName);
    +//    std::vector< Trig::Feature<xAOD::BTaggingContainer> >       bjetCollections = comb->containerFeature<xAOD::BTaggingContainer>("HLTBjetFex");
    +//    std::vector< Trig::Feature<xAOD::TrackParticleContainer> >  trkCollections;
    +//    if(m_readHLTTracks) trkCollections = comb->containerFeature<xAOD::TrackParticleContainer>(m_trkName);
    +//    //std::vector< Trig::Feature<xAOD::TrackParticleContainer> >  ftfCollections  = comb->containerFeature<xAOD::TrackParticleContainer>("InDetTrigTrackingxAODCnv_Bjet_FTF");
    +//
    +//    std::vector<Trig::Feature<xAOD::VertexContainer> > vtxCollections;
    +//    std::vector<Trig::Feature<xAOD::VertexContainer> > backupVtxCollections;
    +//    if(m_readHLTVtx){
    +//      backupVtxCollections = comb->containerFeature<xAOD::VertexContainer>("EFHistoPrmVtx");
    +//
    +//      if(m_vtxName.size()){
    +//  vtxCollections = comb->containerFeature<xAOD::VertexContainer>(m_vtxName);
    +//      }else{
    +//  vtxCollections = comb->containerFeature<xAOD::VertexContainer>();
    +//      }
    +//    }
    +//
    +//    //ANA_MSG_INFO(" Test Size ");
    +//    //ANA_MSG_INFO(" \tSplitJet: " << comb->containerFeature<xAOD::JetContainer>("SplitJet").size());
    +//    //ANA_MSG_INFO(" \tGSCJet: "   << comb->containerFeature<xAOD::JetContainer>("GSCJet")  .size());
    +//    //ANA_MSG_INFO(" \tEFJet:  "   << comb->containerFeature<xAOD::JetContainer>("EFJet")   .size());
    +//    //
    +//    //// FTK Vertex debugging
    +//    //ANA_MSG_INFO(" Test Size " << vtxCollections.size() << "  '" << m_vtxName << "'");
    +//    //ANA_MSG_INFO(" Test Size2 " << vtxCollections.size());
    +//    //ANA_MSG_INFO(" \tempty: " << comb->containerFeature<xAOD::VertexContainer>().size());
    +//    //ANA_MSG_INFO(" \tEFHistoPrmVtx: " << comb->containerFeature<xAOD::VertexContainer>("EFHistoPrmVtx").size();
    +//    //ANA_MSG_INFO(" \txPrimVx: " << comb->containerFeature<xAOD::VertexContainer>("xPrimVx").size());
    +//    //ANA_MSG_INFO(" \tPrimVertexFTK " << comb->containerFeature<xAOD::VertexContainer>("PrimVertexFTK").size());
    +//    //ANA_MSG_INFO(" \tPrimVertexFTKRaw " << comb->containerFeature<xAOD::VertexContainer>("PrimVertexFTKRaw").size());
    +//    //ANA_MSG_INFO(" \tPrimVertexFTKRefit " << comb->containerFeature<xAOD::VertexContainer>("PrimVertexFTKRefit").size();
    +//    //ANA_MSG_INFO(" \tHLT_PrimVertexFTK " << comb->containerFeature<xAOD::VertexContainer>("HLT_PrimVertexFTK").size());
    +//
    +//    //
    +//    //    std::vector<Trig::Feature<xAOD::VertexContainer> > EvtxCollections = comb->containerFeature<xAOD::VertexContainer>();
    +//    //    for ( unsigned ifeat=0 ; ifeat<EvtxCollections.size() ; ifeat++ ) {
    +//    //      ANA_MSG_INFO(EvtxCollections.at(ifeat).label());
    +//    //      for( auto vtx_itr : *(EvtxCollections.at(ifeat).cptr()) ){
    +//    //          ANA_MSG_INFO(vtx_itr->vertexType() << " ");
    +//    //      }
    +//    //    }
    +//
    +//    bool isValid = true;
    +//
    +//    ANA_MSG_VERBOSE("ncontainers  " << bjetCollections.size());
    +//
    +//    if(jetCollections.size() != bjetCollections.size()){
    +//      ANA_MSG_ERROR("Problem in container size: " << m_name << " jets: "<< jetCollections.size() << " bjets: "<< bjetCollections.size());
    +//      isValid = false;
    +//
    +//      auto triggerChainGroupAfterVeto = m_trigDecTool_handle->getChainGroup(m_trigItemAfterVeto);
    +//      std::vector<std::string> triggersUsedAfterVeto = triggerChainGroupAfterVeto->getListOfTriggers();
    +//      ANA_MSG_VERBOSE("Passed Triggers ");
    +//      for(std::string trig : triggersUsedAfterVeto){
    +//        auto trigChain = m_trigDecTool_handle->getChainGroup(trig);
    +//        if(trigChain->isPassed()) ANA_MSG_VERBOSE(" \t " << trig);
    +//      }
    +//
    +//    }
    +//
    +//    if(m_readHLTTracks && jetCollections.size() != trkCollections.size()){
    +//      ANA_MSG_ERROR("Problem in container size: " << m_name << " jets: "<< jetCollections.size() << " trks: "<< trkCollections.size());
    +//      ANA_MSG_ERROR(" Jet Collection " << m_jetName << " Trk Collection:  " << m_trkName);
    +//      isValid = false;
    +//    }
    +//
    +//    //if(jetCollections.size() != ftfCollections.size()){
    +//    //  ANA_MSG_ERROR("Problem in container size: " << m_name  << " jets: "<< jetCollections.size() << " ftfs: "<< ftfCollections.size());
    +//    //  isValid = false;
    +//    //}
    +//
    +//    if(m_readHLTVtx){
    +//      if(vtxCollections.size() < jetCollections.size()){
    +//  ANA_MSG_ERROR("Problem in container size: " << m_name
    +//                       << " jets: "<< jetCollections.size() << " " << m_jetName
    +//                       << " vtx: "<< vtxCollections.size()  << " " << m_vtxName);
    +//  for ( unsigned ifeat=0 ; ifeat<vtxCollections.size() ; ifeat++ ) {
    +//    ANA_MSG_INFO("Feture: " << ifeat);
    +//    for( auto vtx_itr : *(vtxCollections.at(ifeat).cptr()) ){
    +//      ANA_MSG_INFO(vtx_itr->vertexType());
    +//    }
    +//  }
    +//  isValid = false;
    +//      }
    +//    }
    +//
    +//    if(!isValid) continue;
    +//
    +//    //Loop over jets until a jet with track size > 0 is found
    +//
    +//    // Declare variables here as same bs for all jets
    +//    float var_bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx);
    +//    float var_bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy);
    +//    float var_bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz);
    +//
    +//    ANA_MSG_VERBOSE(" bs_online_vx " << var_bs_online_vx << " bs_online_vy " << var_bs_online_vy << " bs_online_vz " << var_bs_online_vz);
    +//
    +//
    +//    //ANA_MSG_INFO(" is Valid " << jetCollections.size() << " " << vtxCollections.size());
    +//    for ( unsigned ifeat=0 ; ifeat<jetCollections.size() ; ifeat++ ) {
    +//      const xAOD::Jet* hlt_jet = getTrigObject<xAOD::Jet, xAOD::JetContainer>(jetCollections.at(ifeat));
    +//      if(!hlt_jet) continue;
    +//
    +//      bool passOverlap = true;
    +//      for( const xAOD::Jet* previousJet : *hltJets){
    +//  if(previousJet->p4().DeltaR(hlt_jet->p4()) < 0.1){
    +//    const xAOD::BTagging *p_btag_info = previousJet->auxdata< const xAOD::BTagging* >("HLTBTag");
    +//    double p_mv2c10 = -99;
    +//    p_btag_info->MVx_discriminant("MV2c10", p_mv2c10);
    +//
    +//    double this_mv2c10 = -99;
    +//    const xAOD::BTagging* hlt_btag = getTrigObject<xAOD::BTagging, xAOD::BTaggingContainer>(bjetCollections.at(ifeat));
    +//    if(hlt_btag){
    +//      hlt_btag->MVx_discriminant("MV2c10", this_mv2c10);
    +//    }
    +//
    +//    if(fabs(p_mv2c10 - this_mv2c10) > 0.01){
    +//      std::cout << "ERROR:: Previous mv2c10 " << p_mv2c10 << " this mv2c10 "  << this_mv2c10 << std::endl;
    +//      std::cout << "Previous Jet: pt: " << previousJet->pt() << " eta: " << previousJet->eta() << " phi: " << previousJet->phi() << std::endl;;
    +//      std::cout << "This Jet: pt: " << hlt_jet->pt() << " eta: " << hlt_jet->eta() << " phi: " << hlt_jet->phi() << std::endl;;
    +//    }
    +//    passOverlap = false;
    +//  }
    +//      }
    +//
    +//      if(!passOverlap){
    +//  ANA_MSG_VERBOSE(" Jet Failed overlap " );
    +//  continue;
    +//      }
    +//      ANA_MSG_VERBOSE("New Jet: pt: " << hlt_jet->pt() << " eta: " << hlt_jet->eta() << " phi: " << hlt_jet->phi());
    +//
    +//      const xAOD::BTagging* hlt_btag = getTrigObject<xAOD::BTagging, xAOD::BTaggingContainer>(bjetCollections.at(ifeat));
    +//      if(!hlt_btag) continue;
    +//
    +//      const xAOD::TrackParticleContainer* hlt_tracks(nullptr);
    +//      if(m_readHLTTracks){
    +//  hlt_tracks = trkCollections.at(ifeat).cptr();
    +//  if(!hlt_tracks) continue;
    +//      }
    +//
    +//      xAOD::Jet* newHLTBJet = new xAOD::Jet();
    +//      newHLTBJet->makePrivateStore( hlt_jet );
    +//
    +//      //
    +//      // Add Link to BTagging Info
    +//      //
    +//      newHLTBJet->auxdecor< const xAOD::BTagging* >("HLTBTag") = hlt_btag;
    +//
    +//      //
    +//      // Add Tracks to BJet
    +//      //
    +//      if(m_readHLTTracks){
    +//
    +//        std::vector<const xAOD::TrackParticle*> matchedTracks;
    +//  ANA_MSG_VERBOSE("Trk Size" << hlt_tracks->size());
    +//
    +//  for(const xAOD::TrackParticle* thisHLTTrk: *hlt_tracks){
    +//    ANA_MSG_VERBOSE("\tAdding  track " << thisHLTTrk->pt()   << " " << thisHLTTrk->eta()  << " " << thisHLTTrk->phi());
    +//    matchedTracks.push_back(thisHLTTrk);
    +//  }
    +//
    +//  //
    +//  // Adding online beamspot information from online track
    +//  //
    +//
    +//  if(hlt_tracks->size()){
    +//    ANA_MSG_VERBOSE("Found a hlt_tracks   " << hlt_tracks->at(0)->vx() << " " << hlt_tracks->at(0)->vy() << " " << hlt_tracks->at(0)->vz());
    +//    ANA_MSG_VERBOSE("Compares to variable " << " " << var_bs_online_vx << " " << var_bs_online_vy << " " << var_bs_online_vz);
    +//  }
    +//
    +//  m_bs_online_vx (*newHLTBJet) = var_bs_online_vx;
    +//  m_bs_online_vy (*newHLTBJet) = var_bs_online_vy;
    +//  m_bs_online_vz (*newHLTBJet) = var_bs_online_vz;
    +//
    +//  ANA_MSG_VERBOSE("Adding tracks to jet ");
    +//  m_track_decoration(*newHLTBJet)         = matchedTracks;
    +//
    +//
    +//      }
    +//
    +//      ANA_MSG_VERBOSE("Doing it for:        " << m_trigItem);
    +//      ANA_MSG_VERBOSE("Check for m_jetName: " << m_jetName);
    +//      ANA_MSG_VERBOSE("Check for m_vtxName: " << m_vtxName);
    +//
    +//      //
    +//      // Check for dummy verticies
    +//      //
    +//      // hadDummyPV => class with three option
    +//      //               0 - IDTrig  Found Vertex
    +//      //               1 - EFHisto Found Vertex
    +//      //               2 - No Vertex found
    +//      if(m_readHLTVtx){
    +//  if(!HelperFunctions::getPrimaryVertex(vtxCollections.at(ifeat).cptr(), msg())){
    +//
    +//    ANA_MSG_VERBOSE("HAVE  No Online Vtx!!! m_vtxName is  " << m_vtxName);
    +//    for( auto vtx_itr : *(vtxCollections.at(ifeat).cptr()) ) ANA_MSG_VERBOSE(vtx_itr->vertexType());
    +//
    +//    //
    +//    //  Try the HistoPrmVtx
    +//    //
    +//    if(backupVtxCollections.size()){
    +//      ANA_MSG_VERBOSE("Have EFHistoPrmVtx.  ");
    +//      m_vtx_hadDummyPV  (*newHLTBJet)         = '1';
    +//      const xAOD::Vertex *backup_pvx = HelperFunctions::getPrimaryVertex(backupVtxCollections.at(ifeat).cptr(), msg());
    +//      ANA_MSG_VERBOSE("backup_pvx.  " << backup_pvx);
    +//      m_vtx_decoration  (*newHLTBJet)         = backup_pvx;
    +//      m_vtx_decoration_bkg(*newHLTBJet)       = backup_pvx;
    +//    }else{
    +//      ANA_MSG_INFO("No EFHistoPrmVtx....  ");
    +//      m_vtx_hadDummyPV  (*newHLTBJet)         = '2';
    +//      m_vtx_decoration  (*newHLTBJet)         = 0;
    +//      m_vtx_decoration_bkg(*newHLTBJet)       = 0;
    +//    }
    +//
    +//    //ANA_MSG_INFO("hadDummy and vtxType " << m_vtx_hadDummyPV (*newHLTBJet) << " " << m_vtxName);
    +//
    +//  }else{
    +//
    +//    m_vtx_decoration  (*newHLTBJet)         = HelperFunctions::getPrimaryVertex(vtxCollections.at(ifeat).cptr(), msg());
    +//    m_vtx_hadDummyPV  (*newHLTBJet)         = '0';
    +//
    +//    if(backupVtxCollections.size()){
    +//      m_vtx_decoration_bkg(*newHLTBJet)     = HelperFunctions::getPrimaryVertex(backupVtxCollections.at(ifeat).cptr(), msg());
    +//    }else{
    +//      m_vtx_decoration_bkg(*newHLTBJet)     = 0;
    +//    }
    +//
    +//  }
    +//
    +//  m_offline_vtx_decoration (*newHLTBJet)  = offline_pvx;
    +//
    +//  ANA_MSG_VERBOSE("hadDummy and vtxType" << m_vtx_hadDummyPV (*newHLTBJet) << " " << m_vtxName);
    +//  //if(m_vtx_hadDummyPV (*newHLTBJet) != '0' ){
    +//  //   ANA_MSG_INFO("hadDummy and vtxType and m_outContainerName  " << m_vtx_hadDummyPV (*newHLTBJet) << " "
    +//  //  << m_vtxName << ' '<< m_outContainerName);
    +//  //}
    +//      } else{ //m_readHLTVtx
    +//
    +//  m_vtx_decoration  (*newHLTBJet)         = 0;
    +//  m_vtx_hadDummyPV  (*newHLTBJet)         = '0';
    +//  m_vtx_decoration_bkg(*newHLTBJet)       = 0;
    +//  m_offline_vtx_decoration (*newHLTBJet)  = 0;
    +//      }
    +//
    +//      hltJets->push_back( newHLTBJet );
    +//      ANA_MSG_VERBOSE("pushed back ");
    +//
    +//    }//feature
    +//
    +//
    +//
    +//  }// Combinations
    +//
    +//  ANA_CHECK( m_store->record( hltJets,    m_outContainerName));
    +//  ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux."));
    +//
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: buildHLTJets ()
    +//{
    +//  ANA_MSG_VERBOSE("In buildHLTJets  ");
    +//  //
    +//  // Create the new container and its auxiliary store.
    +//  //
    +//  xAOD::JetContainer*     hltJets    = new xAOD::JetContainer();
    +//  xAOD::JetAuxContainer*  hltJetsAux = new xAOD::JetAuxContainer();
    +//  hltJets->setStore( hltJetsAux ); //< Connect the two
    +//
    +//  Trig::FeatureContainer fc = m_trigDecTool_handle->features(m_trigItem);
    +//  auto jetFeatureContainers = fc.containerFeature<xAOD::JetContainer>();
    +//
    +//  ANA_MSG_VERBOSE("ncontainers  " << jetFeatureContainers.size());
    +//
    +//  //DataModel_detail::const_iterator<JetContainer >::reference {aka const xAOD::Jet_v1*}
    +//
    +//  for(auto  jcont : jetFeatureContainers) {
    +//    for (const xAOD::Jet*  hlt_jet : *jcont.cptr()) {
    +//
    +//      xAOD::Jet* newHLTJet = new xAOD::Jet();
    +//      newHLTJet->makePrivateStore( hlt_jet );
    +//
    +//      hltJets->push_back( newHLTJet );
    +//    }
    +//  }
    +//
    +//  ANA_CHECK( m_store->record( hltJets,    m_outContainerName));
    +//  ANA_CHECK( m_store->record( hltJetsAux, m_outContainerName+"Aux."));
    +//  ANA_MSG_VERBOSE("Left buildHLTJets  ");
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: postExecute ()
    +//{
    +//  ANA_MSG_DEBUG( "Calling postExecute");
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: finalize ()
    +//{
    +//  ANA_MSG_DEBUG( "Deleting tool instances...");
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +//
    +//
    +//
    +//EL::StatusCode HLTJetRoIBuilder :: histFinalize ()
    +//{
    +//  ANA_MSG_DEBUG( "Calling histFinalize");
    +//  ANA_CHECK( xAH::Algorithm::algFinalize());
    +//  return EL::StatusCode::SUCCESS;
    +//}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HelpTreeBase.cxx.html b/api/program_listing_file_Root_HelpTreeBase.cxx.html new file mode 100644 index 0000000000..752962de8e --- /dev/null +++ b/api/program_listing_file_Root_HelpTreeBase.cxx.html @@ -0,0 +1,1311 @@ + + + + + + + + + + + Program Listing for File HelpTreeBase.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelpTreeBase.cxx

    +

    Return to documentation for file (Root/HelpTreeBase.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <exception>
    +#include <sstream>
    +
    +// EDM include(s):
    +#include "xAODBTagging/BTagging.h"
    +#include "xAODTracking/TrackParticle.h"
    +#include "xAODTracking/TrackSummaryAccessors_v1.h"
    +#include "xAODJet/JetConstituentVector.h"
    +#include "xAODPrimitives/IsolationType.h"
    +
    +
    +#include "TrigConfxAOD/xAODConfigTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +
    +// package include(s):
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/HelpTreeBase.h>
    +#include <AsgMessaging/MessageCheck.h>
    +
    +
    +#include "AsgMessaging/StatusCode.h"
    +
    +using std::vector;
    +
    +// needed? should it be here?
    +#ifdef __MAKECINT__
    +#pragma link C++ class vector<float>+;
    +#endif
    +
    +HelpTreeBase::HelpTreeBase(xAOD::TEvent* event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store, std::string nominalTreeName):
    +  m_trigInfoSwitch(nullptr),
    +  m_trigConfTool(nullptr),
    +  m_trigDecTool(nullptr),
    +  m_eventInfo(nullptr)
    +{
    +
    +  m_units = units;
    +  m_debug = debug;
    +  m_tree = tree;
    +  m_tree->SetDirectory( file );
    +  m_nominalTreeName = nominalTreeName;
    +  m_nominalTree = strcmp(m_tree->GetName(), nominalTreeName.c_str()) == 0;
    +  m_event = event;
    +  m_store = store;
    +  Info("HelpTreeBase()", "HelpTreeBase setup");
    +
    +  // turn things off it this is data...since TStore is not a needed input
    +  // default isMC to true so more is added to the tree than less
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  HelperFunctions::retrieve(eventInfo, "EventInfo", m_event, m_store);
    +  m_isMC = ( eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ) );
    +
    +}
    +
    +HelpTreeBase::~HelpTreeBase() {
    +
    +    //delete all the info switches that have been built earlier on
    +    //event
    +    if(m_eventInfo) delete m_eventInfo;
    +
    +    //trig
    +    if(m_trigInfoSwitch) delete m_trigInfoSwitch;
    +
    +    //muon
    +    for (auto muon: m_muons)
    +      delete muon.second;
    +
    +    //el
    +    for (auto elec: m_elecs)
    +      delete elec.second;
    +
    +    //ph
    +    for (auto photon: m_photons)
    +      delete photon.second;
    +
    +    //cl
    +    for (auto cluster: m_clusters)
    +      delete cluster.second;
    +
    +    //fatjet
    +    for (auto fatjet: m_fatjets)
    +      delete fatjet.second;
    +
    +    //tau
    +    for (auto tau: m_taus)
    +      delete tau.second;
    +
    +    //met
    +    for (auto met: m_met)
    +      delete met.second;
    +
    +    //jet
    +    for (auto jet: m_jets)
    +      delete jet.second;
    +
    +    //truth fat jet
    +    for (auto truth_fatjet: m_truth_fatjets)
    +      delete truth_fatjet.second;
    +
    +    //truth
    +    for (auto truth: m_truth)
    +      delete truth.second;
    +
    +    //track
    +    for (auto track: m_tracks)
    +      delete track.second;
    +
    +}
    +
    +
    +HelpTreeBase::HelpTreeBase(TTree* tree, TFile* file, xAOD::TEvent* event, xAOD::TStore* store, const float units, bool debug, std::string nominalTreeName):
    +  HelpTreeBase(event, tree, file, units, debug, store, nominalTreeName)
    +{
    +  // use the other constructor for everything
    +}
    +
    +
    +void HelpTreeBase::Fill() {
    +  // code_or_nbytes is the number of bytes written, or -1 if an error occured
    +  const int code_or_nbytes = m_tree->Fill();
    +  if(code_or_nbytes < 0) // 0 can be OK if all branches are disabled and thus no data is written
    +  {
    +    auto msg = std::stringstream();
    +    msg << "HelpTreeBase::Fill(): error in TTree::Fill() : returned " << code_or_nbytes;
    +    throw std::runtime_error(msg.str());
    +  }
    +}
    +
    +/*********************
    + *
    + *   EVENT
    + *
    + ********************/
    +
    +void HelpTreeBase::AddEvent( const std::string& detailStr ) {
    +
    +  if(m_debug)  Info("AddEvent()", "Adding event variables: %s", detailStr.c_str());
    +
    +  m_eventInfo       = new xAH::EventInfo(detailStr, m_units, m_isMC, m_nominalTree);
    +  m_eventInfo -> setBranches(m_tree);
    +  this->AddEventUser(detailStr);
    +}
    +
    +void HelpTreeBase::FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* /*event*/, const xAOD::VertexContainer* vertices ) {
    +
    +  this->ClearEvent();
    +
    +  // only retrieve the vertex container if it's not set and the user asks for that information
    +  if( m_eventInfo->m_infoSwitch.m_pileup && !vertices ) {
    +    HelperFunctions::retrieve( vertices, m_vertexContainerName, m_event, 0);
    +  }
    +
    +  m_eventInfo->FillEvent(eventInfo, m_event, vertices);
    +
    +  this->FillEventUser(eventInfo);
    +}
    +
    +/*********************
    + *
    + *   TRIGGER
    + *
    + ********************/
    +void HelpTreeBase::AddTrigger( const std::string& detailStr ) {
    +
    +  if(m_debug) Info("AddTrigger()", "Adding trigger variables: %s", detailStr.c_str());
    +
    +  m_trigInfoSwitch = new HelperClasses::TriggerInfoSwitch( detailStr );
    +
    +  // Add these basic branches
    +  if ( m_trigInfoSwitch->m_basic ) {
    +    m_tree->Branch("passL1",          &m_passL1,       "passL1/I"      );
    +    m_tree->Branch("passHLT",         &m_passHLT,      "passHLT/I"     );
    +  }
    +
    +  // Detailed trigger infoformation related to the menu (might be useful)
    +  // This is useful for using this database: https://atlas-trigconf.cern.ch/
    +  if ( m_trigInfoSwitch->m_menuKeys ) {
    +    m_tree->Branch("masterKey",       &m_masterKey,    "masterKey/I"         );
    +    m_tree->Branch("lvl1PrescaleKey", &m_L1PSKey,      "lvl1PrescaleKey/I"   );
    +    m_tree->Branch("hltPrescaleKey",  &m_HLTPSKey,     "hltPrescaleKey/I"    );
    +  }
    +
    +  // Trigger Decision for each and every trigger in a vector
    +  if ( m_trigInfoSwitch->m_passTriggers ) {
    +    // vector of strings for trigger names which fired
    +    m_tree->Branch("passedTriggers",       &m_passedTriggers      );
    +    m_tree->Branch("disabledTriggers",     &m_disabledTriggers    );
    +  }
    +
    +  if ( !m_isMC && m_trigInfoSwitch->m_prescales ) {
    +    m_tree->Branch("triggerPrescales",     &m_triggerPrescales    );
    +  }
    +
    +  if ( !m_isMC && m_trigInfoSwitch->m_prescalesLumi ) {
    +    m_tree->Branch("triggerPrescalesLumi", &m_triggerPrescalesLumi);
    +  }
    +
    +  if ( m_trigInfoSwitch->m_passTrigBits ) {
    +    m_tree->Branch("isPassBits",           &m_isPassBits          );
    +    m_tree->Branch("isPassBitsNames",      &m_isPassBitsNames     );
    +  }
    +
    +  this->AddTriggerUser( detailStr );
    +}
    +
    +// Fill the information in the trigger branches
    +void HelpTreeBase::FillTrigger( const xAOD::EventInfo* eventInfo ) {
    +
    +  if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Filling trigger info"); }
    +
    +  // Clear previous events
    +  this->ClearTrigger();
    +  this->ClearTriggerUser();
    +
    +  // Grab the global pass information from the TrigDecisionTool
    +  if ( m_trigInfoSwitch->m_basic ) {
    +
    +    if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_basic"); }
    +
    +    static SG::AuxElement::ConstAccessor< int > passAny("passAny");
    +    static SG::AuxElement::ConstAccessor< int > passL1("passL1");
    +    if( passL1.isAvailable( *eventInfo ) ) { m_passL1 = passL1( *eventInfo ); }
    +    else { m_passL1 = -1; }
    +    static SG::AuxElement::ConstAccessor< int > passHLT("passHLT");
    +    if( passHLT.isAvailable( *eventInfo ) ) { m_passHLT = passHLT( *eventInfo ); }
    +    else { m_passHLT = -1; }
    +
    +  }
    +
    +  // If detailed menu information about the configuration keys, turn this on.
    +  // This is useful for using this database: https://atlas-trigconf.cern.ch/
    +  if ( m_trigInfoSwitch->m_menuKeys ) {
    +
    +    if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_menuKeys"); }
    +
    +    static SG::AuxElement::ConstAccessor< int > masterKey("masterKey");
    +    if( masterKey.isAvailable( *eventInfo ) ) { m_masterKey = masterKey( *eventInfo ); }
    +    else { m_masterKey = -999; }
    +    static SG::AuxElement::ConstAccessor< int > L1PSKey("L1PSKey");
    +    if( L1PSKey.isAvailable( *eventInfo ) ) { m_L1PSKey = L1PSKey( *eventInfo ); }
    +    else { m_L1PSKey = -999; }
    +    static SG::AuxElement::ConstAccessor< int > HLTPSKey("HLTPSKey");
    +    if( HLTPSKey.isAvailable( *eventInfo ) ) { m_HLTPSKey = HLTPSKey( *eventInfo ); }
    +    else { m_HLTPSKey = -999; }
    +
    +  }
    +
    +  // If detailed information about each and every trigger is desired
    +  // save a vector of strings holding passing decisions
    +  if ( m_trigInfoSwitch->m_passTriggers ) {
    +
    +    if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_passTriggers"); }
    +    static SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_passedTriggers  ("passedTriggers");
    +    if( acc_passedTriggers  .isAvailable( *eventInfo ) ) { m_passedTriggers   = acc_passedTriggers  ( *eventInfo ); }
    +    static SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_disabledTriggers("disabledTriggers");
    +    if( acc_disabledTriggers.isAvailable( *eventInfo ) ) { m_disabledTriggers = acc_disabledTriggers( *eventInfo ); }
    +  }
    +
    +  if ( !m_isMC && m_trigInfoSwitch->m_prescales ) {
    +
    +    if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_prescales"); }
    +
    +    static SG::AuxElement::ConstAccessor< std::vector< float > > trigPrescales("triggerPrescales");
    +    if( trigPrescales.isAvailable( *eventInfo ) ) { m_triggerPrescales = trigPrescales( *eventInfo ); }
    +
    +  }
    +
    +  if ( !m_isMC && m_trigInfoSwitch->m_prescalesLumi ) {
    +
    +    if ( m_debug ) { Info("HelpTreeBase::FillTrigger()", "Switch: m_trigInfoSwitch->m_prescalesLumi"); }
    +
    +    static SG::AuxElement::ConstAccessor< std::vector< float > > trigPrescalesLumi("triggerPrescalesLumi");
    +    if( trigPrescalesLumi.isAvailable( *eventInfo ) ) { m_triggerPrescalesLumi = trigPrescalesLumi( *eventInfo ); }
    +
    +  }
    +
    +  if ( m_trigInfoSwitch->m_passTrigBits ) {
    +
    +    static SG::AuxElement::ConstAccessor< std::vector< unsigned int > > isPassBits("isPassedBits");
    +    if( isPassBits.isAvailable( *eventInfo ) ) { m_isPassBits = isPassBits( *eventInfo ); }
    +
    +    static SG::AuxElement::ConstAccessor< std::vector< std::string > > isPassBitsNames("isPassedBitsNames");
    +    if( isPassBitsNames.isAvailable( *eventInfo ) ) { m_isPassBitsNames = isPassBitsNames( *eventInfo ); }
    +
    +  }
    +
    +  this->FillTriggerUser(eventInfo);
    +}
    +
    +// Clear Trigger
    +void HelpTreeBase::ClearTrigger() {
    +
    +  m_passL1  = -999;
    +  m_passHLT = -999;
    +
    +  m_masterKey = 0;
    +  m_L1PSKey   = 0;
    +  m_HLTPSKey  = 0;
    +
    +  m_passedTriggers.clear();
    +  m_disabledTriggers.clear();
    +  m_triggerPrescales.clear();
    +  m_triggerPrescalesLumi.clear();
    +  m_isPassBits.clear();
    +  m_isPassBitsNames.clear();
    +
    +}
    +
    +/*********************
    + *
    + *   JET TRIGGER
    + *
    + ********************/
    +
    +/* TODO: jet trigger */
    +//CD: is this useful at all?
    +void HelpTreeBase::AddJetTrigger( const std::string& detailStr )
    +{
    +  if ( m_debug )  Info("AddJetTrigger()", "Adding jet trigger variables: %s", detailStr.c_str());
    +}
    +void HelpTreeBase::FillJetTrigger(  ) { }
    +void HelpTreeBase::ClearJetTrigger(  ) { }
    +
    +
    +/*********************
    + *
    + *   MUONS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddMuons(const std::string& detailStr, const std::string& muonName) {
    +
    +  if ( m_debug )  Info("AddMuons()", "Adding muon variables: %s", detailStr.c_str());
    +
    +  m_muons[muonName] = new xAH::MuonContainer(muonName, detailStr, m_units, m_isMC, m_nominalTree);
    +  xAH::MuonContainer* thisMuon = m_muons[muonName];
    +  HelperClasses::MuonInfoSwitch& muonInfoSwitch = thisMuon->m_infoSwitch;
    +
    +  if (m_nominalTree) {
    +
    +     if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +       for (auto& reco : muonInfoSwitch.m_recoWPs) {
    +         std::string recoEffSF_sysNames = "muon_RecoEff_SF_" + reco + "_sysNames";
    +         m_tree->Branch( recoEffSF_sysNames.c_str() , & (m_MuonRecoEff_SF_sysNames)[ reco ] );
    +       }
    +     }
    +
    +     if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +       for (auto& isol : muonInfoSwitch.m_isolWPs) {
    +         std::string isolEffSF_sysNames = "muon_IsoEff_SF_" + isol + "_sysNames";
    +         m_tree->Branch( isolEffSF_sysNames.c_str() , & (m_MuonIsoEff_SF_sysNames)[ isol ] );
    +       }
    +     }
    +
    +     if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +       for (auto& trig : muonInfoSwitch.m_trigWPs) {
    +         for (auto& reco : muonInfoSwitch.m_recoWPs) {
    +           std::string trigEffSF_sysNames = (muonInfoSwitch.m_recoWPs.size()>1) ? "muon_TrigEff_SF_" + trig + "_" + reco + "_sysNames" : "muon_TrigEff_SF_" + trig + "_sysNames";
    +           m_tree->Branch( trigEffSF_sysNames.c_str() , & (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ] );
    +         }
    +       }
    +     }
    +
    +     if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +       std::string ttvaEffSF_sysNames = "muon_TTVAEff_SF_sysNames";
    +       m_tree->Branch( ttvaEffSF_sysNames.c_str() , &m_MuonTTVAEff_SF_sysNames );
    +     }
    +
    +  }
    +
    +  thisMuon->setBranches(m_tree);
    +  this->AddMuonsUser(detailStr, muonName);
    +}
    +
    +void HelpTreeBase::FillMuons( const xAOD::MuonContainer* muons, const xAOD::Vertex* primaryVertex, const std::string& muonName ) {
    +
    +  this->ClearMuons(muonName);
    +  HelperClasses::MuonInfoSwitch& muonInfoSwitch = m_muons[muonName]->m_infoSwitch;
    +
    +  if (m_nominalTree) {
    +
    +    if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& reco : muonInfoSwitch.m_recoWPs ) {
    +        std::vector< std::string >* tmp_reco_sys(nullptr);
    +        if ( m_store->retrieve(tmp_reco_sys, "MuonEfficiencyCorrector_RecoSyst_Reco" + reco).isSuccess() ) {
    +          (m_MuonRecoEff_SF_sysNames)[ reco ] = *tmp_reco_sys;
    +        }
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& isol : muonInfoSwitch.m_isolWPs ) {
    +        std::vector< std::string >* tmp_iso_sys(nullptr);
    +        if ( m_store->retrieve(tmp_iso_sys, "MuonEfficiencyCorrector_IsoSyst_Iso" + isol).isSuccess() ) {
    +          (m_MuonIsoEff_SF_sysNames)[ isol ] = *tmp_iso_sys;
    +        }
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& trig : muonInfoSwitch.m_trigWPs ) {
    +        for ( auto& reco : muonInfoSwitch.m_recoWPs ) {
    +          std::vector< std::string >* tmp_trig_sys(nullptr);
    +          if ( m_store->retrieve(tmp_trig_sys, "MuonEfficiencyCorrector_TrigSyst_" + trig + "_Reco" + reco).isSuccess() ) {
    +            (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ] = *tmp_trig_sys;
    +          }
    +        }
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      std::vector< std::string >* tmp_ttva_sys(nullptr);
    +      if ( m_store->retrieve(tmp_ttva_sys, "MuonEfficiencyCorrector_TTVASyst_TTVA").isSuccess() ) {
    +        m_MuonTTVAEff_SF_sysNames = *tmp_ttva_sys;
    +      }
    +    }
    +
    +  }
    +
    +  for( auto muon_itr : *muons ) {
    +    this->FillMuon(muon_itr, primaryVertex, muonName);
    +  }
    +
    +}
    +
    +void HelpTreeBase::FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex, const std::string& muonName ) {
    +
    +  xAH::MuonContainer* thisMuon = m_muons[muonName];
    +
    +  thisMuon->FillMuon(muon, primaryVertex);
    +
    +  this->FillMuonsUser(muon, muonName, primaryVertex);
    +
    +  return;
    +}
    +
    +void HelpTreeBase::ClearMuons(const std::string& muonName) {
    +
    +  xAH::MuonContainer* thisMuon = m_muons[muonName];
    +  HelperClasses::MuonInfoSwitch& muonInfoSwitch = thisMuon->m_infoSwitch;
    +
    +  if (m_nominalTree) {
    +
    +    if ( muonInfoSwitch.m_recoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& reco : muonInfoSwitch.m_recoWPs ) {
    +          (m_MuonRecoEff_SF_sysNames)[ reco ].clear();
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_isoEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& isol : muonInfoSwitch.m_isolWPs ) {
    +          (m_MuonIsoEff_SF_sysNames)[ isol ].clear();
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_trigEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +      for ( auto& trig : muonInfoSwitch.m_trigWPs ) {
    +        for ( auto& reco : muonInfoSwitch.m_recoWPs ) {
    +            (m_MuonTrigEff_SF_sysNames)[ trig ][ reco ].clear();
    +        }
    +      }
    +    }
    +
    +    if ( muonInfoSwitch.m_ttvaEff_sysNames && muonInfoSwitch.m_effSF && m_isMC ) {
    +       m_MuonTTVAEff_SF_sysNames.clear();
    +    }
    +
    +  }
    +
    +  thisMuon->clear();
    +
    +  this->ClearMuonsUser(muonName);
    +
    +}
    +
    +/*********************
    + *
    + *   ELECTRONS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddElectrons(const std::string& detailStr, const std::string& elecName) {
    +
    +  if(m_debug)  Info("AddElectrons()", "Adding electron variables: %s", detailStr.c_str());
    +
    +  m_elecs[elecName] = new xAH::ElectronContainer(elecName, detailStr, m_units, m_isMC, m_nominalTree);
    +
    +  xAH::ElectronContainer* thisElec = m_elecs[elecName];
    +
    +  thisElec->setBranches(m_tree);
    +  this->AddElectronsUser(detailStr, elecName);
    +}
    +
    +
    +void HelpTreeBase::FillElectrons( const xAOD::ElectronContainer* electrons, const xAOD::Vertex* primaryVertex, const std::string& elecName ) {
    +
    +  this->ClearElectrons(elecName);
    +
    +  for ( auto el_itr : *electrons ) {
    +    this->FillElectron(el_itr, primaryVertex, elecName);
    +  }
    +}
    +
    +void HelpTreeBase::FillElectron ( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex, const std::string& elecName ) {
    +
    +  xAH::ElectronContainer* thisElec = m_elecs[elecName];
    +
    +  thisElec->FillElectron(elec, primaryVertex);
    +
    +  this->FillElectronsUser(elec, elecName, primaryVertex);
    +
    +  return;
    +}
    +
    +
    +void HelpTreeBase::ClearElectrons(const std::string& elecName) {
    +
    +  xAH::ElectronContainer* thisElec = m_elecs[elecName];
    +  thisElec->clear();
    +
    +  this->ClearElectronsUser(elecName);
    +}
    +
    +/*********************
    + *
    + *   PHOTONS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddPhotons(const std::string& detailStr, const std::string& photonName) {
    +
    +  if(m_debug)  Info("AddPhotons()", "Adding photon variables: %s", detailStr.c_str());
    +
    +  m_photons[photonName] = new xAH::PhotonContainer(photonName, detailStr, m_units, m_isMC);
    +
    +  xAH::PhotonContainer* thisPhoton = m_photons[photonName];
    +
    +  thisPhoton->setBranches(m_tree);
    +  this->AddPhotonsUser(detailStr, photonName);
    +}
    +
    +
    +void HelpTreeBase::FillPhotons( const xAOD::PhotonContainer* photons, const std::string& photonName ) {
    +
    +  this->ClearPhotons(photonName);
    +
    +  for ( auto ph_itr : *photons ) {
    +    this->FillPhoton(ph_itr, photonName);
    +  }
    +}
    +
    +void HelpTreeBase::FillPhoton( const xAOD::Photon* photon, const std::string& photonName ) {
    +
    +  xAH::PhotonContainer* thisPhoton = m_photons[photonName];
    +
    +  thisPhoton->FillPhoton(photon);
    +
    +  this->FillPhotonsUser(photon, photonName);
    +
    +  return;
    +}
    +
    +
    +void HelpTreeBase::ClearPhotons(const std::string& photonName) {
    +
    +  xAH::PhotonContainer* thisPhoton = m_photons[photonName];
    +  thisPhoton->clear();
    +
    +  this->ClearPhotonsUser(photonName);
    +}
    +
    +/*********************
    + *
    + * CLUSTERS
    + *
    + *********************/
    +
    +void HelpTreeBase::AddClusters(const std::string& detailStr, const std::string& clusterName) {
    +
    +  if(m_debug)  Info("AddClusters()", "Adding cluster variables: %s", detailStr.c_str());
    +
    +  m_clusters[clusterName] = new xAH::ClusterContainer(clusterName, detailStr, m_units, m_isMC);
    +
    +  xAH::ClusterContainer* thisCluster = m_clusters[clusterName];
    +
    +  thisCluster->setBranches(m_tree);
    +  this->AddClustersUser(detailStr, clusterName);
    +}
    +
    +
    +void HelpTreeBase::FillClusters( const xAOD::CaloClusterContainer* clusters, const std::string& clusterName ) {
    +
    +  this->ClearClusters(clusterName);
    +
    +  for ( auto cl_itr : *clusters ) {
    +    this->FillCluster(cl_itr, clusterName);
    +  }
    +}
    +
    +void HelpTreeBase::FillCluster( const xAOD::CaloCluster* cluster, const std::string& clusterName ) {
    +
    +  xAH::ClusterContainer* thisCluster = m_clusters[clusterName];
    +
    +  thisCluster->FillCluster(cluster);
    +
    +  this->FillClustersUser(cluster, clusterName);
    +
    +  return;
    +}
    +
    +
    +void HelpTreeBase::ClearClusters(const std::string& clusterName) {
    +
    +  xAH::ClusterContainer* thisCluster = m_clusters[clusterName];
    +  thisCluster->clear();
    +
    +  this->ClearClustersUser(clusterName);
    +}
    +
    +/*********************
    + *
    + *   L1 JETS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddL1Jets( const std::string& jetName)
    +{
    +
    +  if(m_debug) Info("AddL1Jets()", "Adding %s L1 jets", jetName.c_str());
    +
    +  m_l1Jets[jetName] = new xAH::L1JetContainer(jetName, m_units, m_isMC);
    +  m_l1Jets[jetName]->m_debug = m_debug;
    +
    +  xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName];
    +  thisL1Jet->setBranches(m_tree);
    +
    +}
    +
    +void HelpTreeBase::FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, const std::string& jetName, bool sortL1Jets ) {
    +
    +  this->ClearL1Jets(jetName);
    +
    +  xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName];
    +
    +  thisL1Jet->FillLegacyL1Jets(jets,sortL1Jets);
    +
    +}
    +
    +void HelpTreeBase::ClearL1Jets(const std::string& jetName) {
    +
    +  xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName];
    +  thisL1Jet->clear();
    +
    +}
    +
    +
    +/*********************
    + *
    + *   JETS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddJets(const std::string& detailStr, const std::string& jetName)
    +{
    +
    +  if(m_debug) Info("AddJets()", "Adding jet %s with variables: %s", jetName.c_str(), detailStr.c_str());
    +
    +  m_jets[jetName] = new xAH::JetContainer(jetName, detailStr, m_units, m_isMC);
    +  m_jets[jetName]->m_debug = m_debug;
    +
    +  xAH::JetContainer* thisJet = m_jets[jetName];
    +  thisJet->setBranches(m_tree);
    +  this->AddJetsUser(detailStr, jetName);
    +
    +}
    +
    +
    +void HelpTreeBase::FillJets( const xAOD::JetContainer* jets, int pvLocation, const std::string& jetName ) {
    +
    +  this->ClearJets(jetName);
    +
    +  const xAOD::VertexContainer* vertices(nullptr);
    +  const xAOD::Vertex *pv = 0;
    +
    +  xAH::JetContainer* thisJet = m_jets[jetName];
    +
    +  if( thisJet->m_infoSwitch.m_trackPV || thisJet->m_infoSwitch.m_allTrack ) {
    +    HelperFunctions::retrieve( vertices, m_vertexContainerName, m_event, 0);
    +    pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices );
    +    if ( pvLocation >= 0 ) pv = vertices->at( pvLocation );
    +  }
    +
    +  for( auto jet_itr : *jets ) {
    +    this->FillJet(jet_itr, pv, pvLocation, jetName);
    +  }
    +
    +}
    +
    +
    +
    +void HelpTreeBase::FillJet( const xAOD::Jet* jet_itr, const xAOD::Vertex* pv, int pvLocation, const std::string& jetName ) {
    +
    +  xAH::JetContainer* thisJet = m_jets[jetName];
    +
    +  thisJet->FillJet(jet_itr, pv, pvLocation);
    +
    +  this->FillJetsUser(jet_itr, jetName);
    +
    +  return;
    +}
    +
    +void HelpTreeBase::ClearJets(const std::string& jetName) {
    +
    +  xAH::JetContainer* thisJet = m_jets[jetName];
    +  thisJet->clear();
    +
    +  this->ClearJetsUser(jetName);
    +
    +}
    +
    +/*********************
    + *
    + *   TRUTH
    + *
    + ********************/
    +
    +void HelpTreeBase::AddTruthParts(const std::string& detailStr, const std::string& truthName)
    +{
    +
    +  if(m_debug) Info("AddTruthParts()", "Adding truth particle %s with variables: %s", truthName.c_str(), detailStr.c_str());
    +  m_truth[truthName] = new xAH::TruthContainer(truthName, detailStr, m_units);
    +
    +  xAH::TruthContainer* thisTruth = m_truth[truthName];
    +  thisTruth->setBranches(m_tree);
    +  this->AddTruthUser(truthName, detailStr);
    +}
    +
    +void HelpTreeBase::FillTruth( const xAOD::TruthParticleContainer* truthParts, const std::string& truthName  ) {
    +
    +  this->ClearTruth(truthName);
    +
    +  // We need some basic cuts here to avoid many PseudoRapiditity warnings being thrown ...
    +  float truthparticle_ptmin  = 2.0;
    +  float truthparticle_etamax = 8.0;
    +
    +  for( auto truth_itr : *truthParts ) {
    +
    +    if((truth_itr->pt() / m_units < truthparticle_ptmin) || (fabs(truth_itr->eta()) > truthparticle_etamax) ){
    +      continue;
    +    }
    +
    +    this->FillTruth(truth_itr, truthName);
    +  }
    +
    +}
    +
    +void HelpTreeBase::FillTruth( const xAOD::TruthParticle* truthPart, const std::string& truthName )
    +{
    +  xAH::TruthContainer* thisTruth = m_truth[truthName];
    +
    +  thisTruth->FillTruth(truthPart);
    +
    +  this->FillTruthUser(truthPart, truthName);
    +
    +  return;
    +}
    +
    +void HelpTreeBase::ClearTruth(const std::string& truthName) {
    +
    +  xAH::TruthContainer* thisTruth = m_truth[truthName];
    +  thisTruth->clear();
    +
    +  this->ClearTruthUser(truthName);
    +
    +}
    +
    +/*********************
    + *
    + *   TRACKS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddTrackParts(const std::string& detailStr, const std::string& trackName)
    +{
    +  if(m_debug) Info("AddTrackParts()", "Adding track particle %s with variables: %s", trackName.c_str(), detailStr.c_str());
    +  m_tracks[trackName] = new xAH::TrackContainer(trackName, detailStr, m_units);
    +
    +  xAH::TrackContainer* thisTrack = m_tracks[trackName];
    +  thisTrack->setBranches(m_tree);
    +  this->AddTracksUser(trackName, detailStr);
    +}
    +
    +void HelpTreeBase::FillTracks( const xAOD::TrackParticleContainer* trackParts, const std::string& trackName  ) {
    +
    +  this->ClearTracks(trackName);
    +
    +  // We need some basic cuts here to avoid many PseudoRapiditity warnings being thrown ...
    +  // float trackparticle_ptmin  = 1.0;
    +  // float trackparticle_etamax = 8.0;
    +
    +  for( auto track_itr : *trackParts ) {
    +
    +    // if((track_itr->pt() / m_units < trackparticle_ptmin) || (fabs(track_itr->eta()) > trackparticle_etamax) ){
    +    //  continue;
    +    // }
    +
    +    this->FillTrack(track_itr, trackName);
    +  }
    +
    +}
    +
    +void HelpTreeBase::FillTrack( const xAOD::TrackParticle* trackPart, const std::string& trackName )
    +{
    +  xAH::TrackContainer* thisTrack = m_tracks[trackName];
    +
    +  thisTrack->FillTrack(trackPart);
    +
    +  this->FillTracksUser(trackPart, trackName);
    +
    +  return;
    +}
    +
    +void HelpTreeBase::ClearTracks(const std::string& trackName) {
    +
    +  xAH::TrackContainer* thisTrack = m_tracks[trackName];
    +  thisTrack->clear();
    +
    +  this->ClearTracksUser(trackName);
    +
    +}
    +
    +/*********************
    + *
    + *   FAT JETS
    + *
    + ********************/
    +
    +// make a unique container:suffix key to lookup the branches in the maps
    +std::string HelpTreeBase::FatJetCollectionName(const std::string& fatjetName,
    +                           const std::string& suffix) {
    +  return suffix.empty() ? fatjetName : (fatjetName + ":" + suffix);
    +}
    +
    +void HelpTreeBase::AddFatJets(const std::string& detailStr, const std::string& fatjetName,
    +                  const std::string& subjetDetailStr,
    +                  const std::string& suffix) {
    +
    +  if(m_debug) Info("AddFatJets()", "Adding fat jet variables: %s", detailStr.c_str());
    +
    +  const std::string& collectionName = FatJetCollectionName(fatjetName, suffix);
    +  m_fatjets[collectionName] = new xAH::FatJetContainer(fatjetName, detailStr, subjetDetailStr, suffix, m_units, m_isMC);
    +
    +  xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName];
    +  thisFatJet->setBranches(m_tree);
    +
    +  this->AddFatJetsUser(detailStr, fatjetName, suffix);
    +}
    +
    +void HelpTreeBase::AddTruthFatJets(const std::string& detailStr, const std::string& truthFatJetName) {
    +
    +  if(m_debug) Info("AddTruthFatJets()", "Adding fat jet variables: %s", detailStr.c_str());
    +
    +  m_truth_fatjets[truthFatJetName] = new xAH::FatJetContainer(truthFatJetName, detailStr, "", "", m_units, m_isMC);
    +
    +  xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName];
    +  thisTruthFatJet->setBranches(m_tree);
    +
    +  this->AddTruthFatJetsUser(detailStr, truthFatJetName);
    +}
    +
    +
    +void HelpTreeBase::FillFatJets( const xAOD::JetContainer* fatJets , int pvLocation, const std::string& fatjetName, const std::string& suffix ) {
    +
    +  this->ClearFatJets(fatjetName, suffix);
    +
    +  for( auto fatjet_itr : *fatJets ) {
    +
    +    this->FillFatJet(fatjet_itr, pvLocation, fatjetName, suffix);
    +
    +  } // loop over fat jets
    +
    +}
    +
    +void HelpTreeBase::FillFatJet( const xAOD::Jet* fatjet_itr, int pvLocation, const std::string& fatjetName, const std::string& suffix ) {
    +
    +  const std::string& collectionName = FatJetCollectionName(fatjetName, suffix);
    +  xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName];
    +
    +  thisFatJet->FillFatJet(fatjet_itr, pvLocation);
    +
    +  this->FillFatJetsUser(fatjet_itr, pvLocation, fatjetName, suffix);
    +
    +  return;
    +}
    +
    +
    +void HelpTreeBase::FillTruthFatJets( const xAOD::JetContainer* truthTruthFatJets, int pvLocation, const std::string& truthFatJetName ) {
    +  this->ClearTruthFatJets(truthFatJetName);
    +
    +  for( auto truth_fatjet_itr : *truthTruthFatJets ) {
    +
    +    this->FillTruthFatJet(truth_fatjet_itr, pvLocation, truthFatJetName);
    +
    +  } // loop over truth fat jets
    +
    +}
    +
    +void HelpTreeBase::FillTruthFatJet( const xAOD::Jet* truth_fatjet_itr, int pvLocation, const std::string& truthFatJetName ) {
    +
    +  xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName];
    +
    +  thisTruthFatJet->FillFatJet(truth_fatjet_itr, pvLocation);
    +
    +  this->FillTruthFatJetsUser(truth_fatjet_itr, pvLocation, truthFatJetName);
    +
    +  return;
    +}
    +
    +
    +void HelpTreeBase::ClearFatJets(const std::string& fatjetName, const std::string& suffix) {
    +  const std::string& collectionName = FatJetCollectionName(fatjetName, suffix);
    +
    +  xAH::FatJetContainer* thisFatJet = m_fatjets[collectionName];
    +  thisFatJet->clear();
    +
    +  this->ClearFatJetsUser(fatjetName, suffix);
    +}
    +
    +void HelpTreeBase::ClearTruthFatJets(const std::string& truthFatJetName) {
    +
    +  xAH::FatJetContainer* thisTruthFatJet = m_truth_fatjets[truthFatJetName];
    +  thisTruthFatJet->clear();
    +
    +  this->ClearTruthFatJetsUser(truthFatJetName);
    +}
    +
    +void HelpTreeBase::ClearEvent() {
    +  m_eventInfo->clear();
    +  this->ClearEventUser();
    +}
    +
    +
    +/*********************
    + *
    + *   TAUS
    + *
    + ********************/
    +
    +void HelpTreeBase::AddTaus(const std::string& detailStr, const std::string& tauName) {
    +
    +  if ( m_debug )  Info("AddTaus()", "Adding tau variables: %s", detailStr.c_str());
    +
    +  m_taus[tauName] = new xAH::TauContainer(tauName, detailStr, m_units, m_isMC, m_nominalTree);
    +
    +  xAH::TauContainer* thisTau = m_taus[tauName];
    +
    +  thisTau->setBranches(m_tree);
    +  this->AddTausUser(detailStr, tauName);
    +}
    +
    +void HelpTreeBase::FillTaus( const xAOD::TauJetContainer* taus, const std::string& tauName ) {
    +
    +  this->ClearTaus(tauName);
    +
    +  for( auto tau_itr : *taus ) {
    +    this->FillTau(tau_itr, tauName);
    +  }
    +}
    +
    +void HelpTreeBase::FillTau( const xAOD::TauJet* tau, const std::string& tauName ) {
    +
    +  xAH::TauContainer* thisTau = m_taus[tauName];
    +
    +  thisTau->FillTau(tau);
    +
    +  this->FillTausUser(tau, tauName);
    +}
    +
    +void HelpTreeBase::ClearTaus(const std::string& tauName) {
    +
    +  xAH::TauContainer* thisTau = m_taus[tauName];
    +
    +  thisTau->clear();
    +
    +  this->ClearTausUser(tauName);
    +
    +}
    +
    +
    +
    +/*********************
    + *
    + *     MET
    + *
    + ********************/
    +void HelpTreeBase::AddMET( const std::string& detailStr, const std::string& metName ) {
    +
    +  if(m_debug) Info("AddMET()", "Adding MET variables: %s", detailStr.c_str());
    +
    +  m_met[metName] = new xAH::MetContainer(metName, detailStr, m_units);
    +
    +  xAH::MetContainer* thisMet = m_met[metName];
    +
    +  thisMet->setBranches(m_tree);
    +  this->AddMETUser(detailStr, metName);
    +}
    +
    +void HelpTreeBase::FillMET( const xAOD::MissingETContainer* met, const std::string& metName ) {
    +
    +  // Clear previous events
    +  this->ClearMET(metName);
    +
    +  xAH::MetContainer* thisMet = m_met[metName];
    +
    +  thisMet->FillMET(met);
    +
    +  this->FillMETUser(met, metName);
    +}
    +
    +void HelpTreeBase::ClearMET( const std::string& metName ) {
    +  xAH::MetContainer* thisMet = m_met[metName];
    +
    +  thisMet->clear();
    +
    +  this->ClearMETUser(metName);
    +}
    +
    +
    +bool HelpTreeBase::writeTo( TFile* file ) {
    +  file->cd(); // necessary?
    +  int status( m_tree->Write() );
    +  if ( status == 0 ) { return false; }
    +  return true;
    +}
    +
    +/*********************
    + *
    + *   VERTICES
    + *
    + ********************/
    +
    +void HelpTreeBase::AddVertices( const std::string& detailStr, const std::string& vertexName )
    +{
    +
    +  if(m_debug) Info("AddVertices()", "Adding %s vertices", vertexName.c_str());
    +
    +  m_vertices[vertexName] = new xAH::VertexContainer(detailStr, vertexName);
    +  xAH::VertexContainer* thisVertex = m_vertices[vertexName];
    +  thisVertex->setBranches(m_tree);
    +
    +}
    +
    +void HelpTreeBase::FillVertices( const xAOD::VertexContainer* vertices, const std::string& vertexName ) {
    +
    +  this->ClearVertices(vertexName);
    +
    +  xAH::VertexContainer* thisVertex = m_vertices[vertexName];
    +
    +  thisVertex->FillVertices(vertices);
    +
    +}
    +
    +void HelpTreeBase::ClearVertices( const std::string& vertexName )
    +{
    +
    +  xAH::VertexContainer* thisVertex = m_vertices[vertexName];
    +  thisVertex->clear();
    +
    +}
    +
    +void HelpTreeBase::AddTruthVertices( const std::string& detailStr, const std::string& truthVertexName )
    +{
    +
    +  if(m_debug) Info("AddTruthVertices()", "Adding %s vertices", truthVertexName.c_str());
    +
    +  m_truth_vertices[truthVertexName] = new xAH::VertexContainer(detailStr, truthVertexName);
    +  xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName];
    +  thisTruthVertex->setBranches(m_tree);
    +
    +}
    +
    +void HelpTreeBase::FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices, const std::string& truthVertexName ) {
    +
    +  this->ClearTruthVertices(truthVertexName);
    +
    +  xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName];
    +
    +  thisTruthVertex->FillTruthVertices(truthVertices);
    +
    +}
    +
    +void HelpTreeBase::ClearTruthVertices( const std::string& truthVertexName )
    +{
    +
    +  xAH::VertexContainer* thisTruthVertex = m_truth_vertices[truthVertexName];
    +  thisTruthVertex->clear();
    +
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HelperClasses.cxx.html b/api/program_listing_file_Root_HelperClasses.cxx.html new file mode 100644 index 0000000000..b533178909 --- /dev/null +++ b/api/program_listing_file_Root_HelperClasses.cxx.html @@ -0,0 +1,729 @@ + + + + + + + + + + + Program Listing for File HelperClasses.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelperClasses.cxx

    +

    Return to documentation for file (Root/HelperClasses.cxx)

    +
    #include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODPrimitives/IsolationType.h"
    +#include "xAODMuon/Muon.h"
    +#include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h"
    +#include "ElectronPhotonSelectorTools/egammaPIDdefs.h"
    +#include "ElectronPhotonSelectorTools/LikelihoodEnums.h"
    +#include "xAODTau/TauDefs.h"
    +
    +namespace HelperClasses{
    +
    +  /* parser for electron isolation enum */
    +  template <>
    +  EnumParser<xAOD::Iso::IsolationType>::EnumParser()
    +  {
    +    std::string etcone20("etcone20");         enumMap.insert(std::make_pair(etcone20,      xAOD::Iso::etcone20));
    +    std::string etcone30("etcone30");         enumMap.insert(std::make_pair(etcone30,      xAOD::Iso::etcone30));
    +    std::string etcone40("etcone40");         enumMap.insert(std::make_pair(etcone40,      xAOD::Iso::etcone40));
    +    std::string topoetcone20("topoetcone20"); enumMap.insert(std::make_pair(topoetcone20,  xAOD::Iso::topoetcone20));
    +    std::string topoetcone30("topoetcone30"); enumMap.insert(std::make_pair(topoetcone30,  xAOD::Iso::topoetcone30));
    +    std::string topoetcone40("topoetcone40"); enumMap.insert(std::make_pair(topoetcone40,  xAOD::Iso::topoetcone40));
    +    std::string ptcone20("ptcone20");         enumMap.insert(std::make_pair(ptcone20,      xAOD::Iso::ptcone20));
    +    std::string ptcone30("ptcone30");         enumMap.insert(std::make_pair(ptcone30,      xAOD::Iso::ptcone30));
    +    std::string ptcone40("ptcone40");         enumMap.insert(std::make_pair(ptcone40,      xAOD::Iso::ptcone40));
    +    std::string ptcone50("ptcone50");         enumMap.insert(std::make_pair(ptcone50,      xAOD::Iso::ptcone50));
    +    std::string ptvarcone20("ptvarcone20");   enumMap.insert(std::make_pair(ptvarcone20,   xAOD::Iso::ptvarcone20));
    +    std::string ptvarcone30("ptvarcone30");   enumMap.insert(std::make_pair(ptvarcone30,   xAOD::Iso::ptvarcone30));
    +    std::string ptvarcone40("ptvarcone40");   enumMap.insert(std::make_pair(ptvarcone40,   xAOD::Iso::ptvarcone40));
    +    std::string neflowisol20("neflowisol20"); enumMap.insert(std::make_pair(neflowisol20,  xAOD::Iso::neflowisol20));
    +    std::string ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ("ptcone20_Nonprompt_All_MaxWeightTTVA_pt500");                      enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVA_pt500,             xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt500));
    +    std::string ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000("ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000");                     enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000,            xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000));
    +    std::string ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500");                      enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500,             xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500));
    +    std::string ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000");                     enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000,            xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000));
    +    std::string ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500");          enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500,       xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500));
    +    std::string ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000("ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000");         enumMap.insert(std::make_pair(ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000,      xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000));
    +    std::string ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 ("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500");    enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500,    xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500));
    +    std::string ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000("ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000");   enumMap.insert(std::make_pair(ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000,   xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000));
    +  }
    +
    +  /* parser for electron likelihood PID enum */
    +  template <>
    +  EnumParser<LikeEnum::Menu>::EnumParser()
    +  {
    +    std::string VeryLoose("VeryLoose");                       enumMap.insert(std::make_pair(VeryLoose            , LikeEnum::VeryLoose));
    +    std::string Loose("Loose");                               enumMap.insert(std::make_pair(Loose                , LikeEnum::Loose));
    +    std::string LooseBL("LooseBL");                           enumMap.insert(std::make_pair(LooseBL              , LikeEnum::LooseBL));
    +    std::string Medium("Medium");                             enumMap.insert(std::make_pair(Medium               , LikeEnum::Medium));
    +    std::string Tight("Tight");                               enumMap.insert(std::make_pair(Tight                , LikeEnum::Tight));
    +    std::string VeryTight("VeryTight");                       enumMap.insert(std::make_pair(VeryTight            , LikeEnum::VeryTight));
    +    std::string LooseRelaxed("LooseRelaxed");                 enumMap.insert(std::make_pair(LooseRelaxed         , LikeEnum::Tight));
    +    std::string CustomOperatingPoint("CustomOperatingPoint"); enumMap.insert(std::make_pair(CustomOperatingPoint , LikeEnum::Tight));
    +    std::string VeryLooseLLP("VeryLooseLLP");                 enumMap.insert(std::make_pair(VeryLooseLLP         , LikeEnum::VeryLooseLLP));
    +    std::string LooseLLP("LooseLLP");                         enumMap.insert(std::make_pair(LooseLLP             , LikeEnum::LooseLLP));
    +    std::string MediumLLP("MediumLLP");                       enumMap.insert(std::make_pair(MediumLLP            , LikeEnum::MediumLLP));
    +    std::string TightLLP("TightLLP");                         enumMap.insert(std::make_pair(TightLLP             , LikeEnum::TightLLP));
    +  }
    +
    +  /* parser for electron cut-based PID enum */
    +  /* Apparently this won't be useful for non-Athena users...  */
    +  template <>
    +  EnumParser<egammaPID::egammaIDQuality>::EnumParser()
    +  {
    +    std::string ElectronIDLoose("ElectronIDLoose");           enumMap.insert(std::make_pair(ElectronIDLoose    , egammaPID::ElectronIDLoose));
    +    std::string ElectronIDMedium("ElectronIDMedum");          enumMap.insert(std::make_pair(ElectronIDMedium   , egammaPID::ElectronIDMedium));
    +    std::string ElectronIDTight("ElectronIDTight");           enumMap.insert(std::make_pair(ElectronIDTight    , egammaPID::ElectronIDTight));
    +    std::string ElectronIDLoosePP("ElectronIDLoosePP");       enumMap.insert(std::make_pair(ElectronIDLoosePP  , egammaPID::ElectronIDLoosePP));
    +    std::string ElectronIDLoose1("ElectronIDLoose1");         enumMap.insert(std::make_pair(ElectronIDLoose1   , egammaPID::ElectronIDLoose1));
    +    std::string ElectronIDLooseHLT("ElectronIDLooseHLT");     enumMap.insert(std::make_pair(ElectronIDLooseHLT , egammaPID::ElectronIDLooseHLT));
    +    std::string ElectronIDMediumPP("ElectronIDMediumPP");     enumMap.insert(std::make_pair(ElectronIDMediumPP , egammaPID::ElectronIDMediumPP));
    +    std::string ElectronIDMedium1("ElectronIDMedium1");       enumMap.insert(std::make_pair(ElectronIDMedium1  , egammaPID::ElectronIDMedium1));
    +    std::string ElectronIDMediumHLT("ElectronIDMediumHLT");   enumMap.insert(std::make_pair(ElectronIDMediumHLT, egammaPID::ElectronIDMediumHLT));
    +    std::string ElectronIDTightPP("ElectronIDTightPP");       enumMap.insert(std::make_pair(ElectronIDTightPP  , egammaPID::ElectronIDTightPP));
    +    std::string ElectronIDTight1("ElectronIDTight1");         enumMap.insert(std::make_pair(ElectronIDTight1   , egammaPID::ElectronIDTight1));
    +    std::string ElectronIDTightHLT("ElectronIDTightHLT");     enumMap.insert(std::make_pair(ElectronIDTightHLT , egammaPID::ElectronIDTightHLT));
    +  }
    +//  template <>
    +//  EnumParser<egammaPID::PID>::EnumParser()
    +//  {
    +//    std::string IsEMLoose("IsEMLoose");     enumMap.insert(std::make_pair( IsEMLoose , egammaPID::IsEMLoose));
    +//    std::string IsEMMedium("IsEMMedium");   enumMap.insert(std::make_pair( IsEMMedium, egammaPID::IsEMMedium));
    +//    std::string IsEMTight("IsEMTight");     enumMap.insert(std::make_pair( IsEMTight , egammaPID::IsEMTight));
    +//  }
    +
    +
    +  /* parser for Tau RNN ID enum */
    +  /* Apparently this won't be useful for non-Athena users...  */
    +
    +  template <>
    +  EnumParser<xAOD::TauJetParameters::IsTauFlag>::EnumParser()
    +  {
    +    std::string TauIDVeryLoose("TauIDVeryLoose"); enumMap.insert(std::make_pair(TauIDVeryLoose , xAOD::TauJetParameters::JetRNNSigVeryLoose));
    +    std::string TauIDLoose("TauIDLoose");         enumMap.insert(std::make_pair(TauIDLoose     , xAOD::TauJetParameters::JetRNNSigLoose));
    +    std::string TauIDMedium("TauIDMedium");       enumMap.insert(std::make_pair(TauIDMedium    , xAOD::TauJetParameters::JetRNNSigMedium));
    +    std::string TauIDTight("TauIDTight");         enumMap.insert(std::make_pair(TauIDTight     , xAOD::TauJetParameters::JetRNNSigTight));
    +  }
    +
    +  /* parser for muon quality enum */
    +  template <>
    +  EnumParser<xAOD::Muon::Quality>::EnumParser()
    +  {
    +    std::string VeryLoose("VeryLoose");       enumMap.insert(std::make_pair(VeryLoose    , xAOD::Muon::VeryLoose));
    +    std::string Loose("Loose");               enumMap.insert(std::make_pair(Loose        , xAOD::Muon::Loose));
    +    std::string Medium("Medium");             enumMap.insert(std::make_pair(Medium       , xAOD::Muon::Medium));
    +    std::string Tight("Tight");               enumMap.insert(std::make_pair(Tight        , xAOD::Muon::Tight));
    +  }
    +
    +  /* parser for muon type enum */
    +  template <>
    +  EnumParser<xAOD::Muon::MuonType>::EnumParser()
    +  {
    +    std::string Combined("Combined");                               enumMap.insert(std::make_pair(Combined                , xAOD::Muon::Combined));
    +    std::string MuonStandAlone("MuonStandAlone");                           enumMap.insert(std::make_pair(MuonStandAlone                  , xAOD::Muon::MuonStandAlone));
    +    std::string SegmentTagged("SegmentTagged");                             enumMap.insert(std::make_pair(SegmentTagged               , xAOD::Muon::SegmentTagged));
    +    std::string CaloTagged("CaloTagged");                                       enumMap.insert(std::make_pair(CaloTagged                  , xAOD::Muon::CaloTagged));
    +    std::string SiliconAssociatedForwardMuon("SiliconAssociatedForwardMuon");   enumMap.insert(std::make_pair(SiliconAssociatedForwardMuon , xAOD::Muon::SiliconAssociatedForwardMuon));
    +  }
    +
    +  std::string InfoSwitch::get_working_point(const std::string flag) {
    +    for (auto configDetail : m_configDetails) {
    +      if (configDetail.compare(0, flag.size(), flag) == 0) {
    +        return configDetail.substr(flag.size(), std::string::npos);
    +      }
    +    }
    +    return "";
    +  }
    +
    +  std::vector<std::string>InfoSwitch::get_working_points(const std::string flag) {
    +    std::vector<std::string> wps;
    +    for (auto configDetail : m_configDetails) {
    +      if (configDetail.compare(0, flag.size(), flag) == 0) {
    +        wps.push_back(configDetail.substr(flag.size(), std::string::npos));
    +      }
    +    }
    +    return wps;
    +  }
    +
    +  /*
    +            !!!!!!!!!!!!!WARNING!!!!!!!!!!!!!
    +              If you change the string here,
    +                please update the relevant
    +            documentation in the header file.
    +            !!!!!!!!!!!!!WARNING!!!!!!!!!!!!!
    +  */
    +
    +  void EventInfoSwitch::initialize(){
    +    m_noDataInfo    = has_exact("noDataInfo");
    +    m_pileup        = has_exact("pileup");
    +    m_pileupsys     = has_exact("pileupsys");
    +    m_eventCleaning = has_exact("eventCleaning");
    +    m_bcidInfo      = has_exact("bcidInfo");
    +    m_shapeEM       = has_exact("shapeEM");
    +    m_shapeEMPFLOW  = has_exact("shapeEMPFLOW");
    +    m_shapeLC       = has_exact("shapeLC");
    +    m_truth         = has_exact("truth");
    +    m_caloClus      = has_exact("caloClusters");
    +    m_weightsSys    = has_exact("weightsSys");
    +    m_beamspotweight= has_exact("beamspotweight");
    +  }
    +
    +  void TriggerInfoSwitch::initialize(){
    +    m_basic             = has_exact("basic");
    +    m_menuKeys          = has_exact("menuKeys");
    +    m_passTriggers      = has_exact("passTriggers");
    +    m_passTrigBits      = has_exact("passTrigBits");
    +    m_prescales         = has_exact("prescales");
    +    m_prescalesLumi     = has_exact("prescalesLumi");
    +  }
    +
    +  void IParticleInfoSwitch::initialize(){
    +    m_noMultiplicity= has_exact("noMultiplicity");
    +    m_kinematic     = has_exact("kinematic");
    +
    +    m_numLeading    = 0;
    +    for(auto configDetail : m_configDetails)
    +      {
    +    if( configDetail.compare(0,8,"NLeading")==0)
    +      {
    +        m_numLeading = std::atoi( configDetail.substr(8, std::string::npos).c_str() );
    +        break;
    +      }
    +      }
    +
    +    m_useTheS   = has_exact("useTheS");
    +  }
    +
    +  void MuonInfoSwitch::initialize(){
    +    m_trigger       = has_exact("trigger");
    +    m_isolation     = has_exact("isolation");
    +    m_isolationKinematics = has_exact("isolationKinematics");
    +    m_quality       = has_exact("quality");
    +    m_trackparams   = has_exact("trackparams");
    +    m_trackhitcont  = has_exact("trackhitcont");
    +    m_effSF         = has_exact("effSF");
    +    m_energyLoss    = has_exact("energyLoss");
    +    m_promptlepton  = has_exact("promptlepton");
    +
    +    // working points combinations for trigger corrections
    +    std::string token;
    +    std::string reco_keyword = "RECO_";
    +    std::string isol_keyword = "ISOL_";
    +    std::string trig_keyword = "TRIG_";
    +
    +    std::istringstream ss(m_configStr);
    +    while ( std::getline(ss, token, ' ') ) {
    +      auto reco_substr = token.find(reco_keyword);
    +      auto isol_substr = token.find(isol_keyword);
    +      auto trig_substr = token.find(trig_keyword);
    +      if( reco_substr != std::string::npos ){
    +        m_recoWPs.push_back(token.substr(5));
    +      } else if(isol_substr != std::string::npos){
    +        if(token.substr(5) == "NONE" || token == isol_keyword) m_isolWPs.push_back("");
    +        else m_isolWPs.push_back(token.substr(5));
    +      } else if(trig_substr != std::string::npos){
    +        m_trigWPs.push_back(token.substr(5));
    +      }
    +    }
    +
    +    // passSel
    +    m_passSel = has_exact("passSel");
    +    // passOR
    +    m_passOR = has_exact("passOR");
    +
    +    m_recoEff_sysNames = has_exact("recoEff_sysNames");
    +    m_isoEff_sysNames  = has_exact("isoEff_sysNames");
    +    m_trigEff_sysNames = has_exact("trigEff_sysNames");
    +    m_ttvaEff_sysNames = has_exact("ttvaEff_sysNames");
    +
    +    m_doLRT = has_exact("doLRT");
    +    m_closeByCorr = has_exact("IsolCloseByCorr");
    +
    +  }
    +
    +  void ElectronInfoSwitch::initialize(){
    +    m_trigger       = has_exact("trigger");
    +    m_isolation     = has_exact("isolation");
    +    m_isolationKinematics = has_exact("isolationKinematics");
    +    m_quality       = has_exact("quality");
    +    if (m_quality) {
    +        std::cerr << "WARNING! The 'quality' option is deprecated in ElectronInfoSwitch. Use 'PID' instead." << std::endl;
    +    }
    +    m_PID           = has_exact("PID");
    +    m_recoparams    = has_exact("recoparams");
    +    m_trackparams   = has_exact("trackparams");
    +    m_trackhitcont  = has_exact("trackhitcont");
    +    m_effSF         = has_exact("effSF");
    +    m_promptlepton  = has_exact("promptlepton");
    +    // working points for scale-factors
    +
    +    // working points combinations for trigger corrections
    +    std::string token;
    +    std::string pid_keyword = "PID_";
    +    std::string pidsf_keyword = "PIDSF_";
    +    std::string isol_keyword = "ISOL_";
    +    std::string trig_keyword = "TRIG_";
    +
    +    std::istringstream ss(m_configStr);
    +    while ( std::getline(ss, token, ' ') ) {
    +      auto pid_substr = token.find(pid_keyword);
    +      auto pidsf_substr = token.find(pidsf_keyword);
    +      auto isol_substr = token.find(isol_keyword);
    +      auto trig_substr = token.find(trig_keyword);
    +      if( pid_substr != std::string::npos ){
    +        m_PIDWPs.push_back(token.substr(4));
    +      } else if( pidsf_substr != std::string::npos ){
    +        m_PIDSFWPs.push_back(token.substr(6));
    +      } else if(isol_substr != std::string::npos){
    +        if(token.substr(5) == "NONE" || token == isol_keyword) m_isolWPs.push_back("");
    +        else m_isolWPs.push_back(token.substr(5));
    +      } else if(trig_substr != std::string::npos){
    +        m_trigWPs.push_back(token.substr(5));
    +      }
    +    }
    +
    +    // passSel
    +    m_passSel = has_exact("passSel");
    +    // passOR
    +    m_passOR = has_exact("passOR");
    +    //Add LRT flag
    +    m_doLRT = has_exact("doLRT");
    +
    +    m_closeByCorr = has_exact("IsolCloseByCorr");
    +  }
    +
    +  void PhotonInfoSwitch::initialize(){
    +    m_isolation     = has_exact("isolation");
    +    m_PID           = has_exact("PID");
    +    m_purity        = has_exact("purity");
    +    m_effSF         = has_exact("effSF");
    +    m_trigger       = has_exact("trigger");
    +    m_isoCones      = get_working_points("isoCone");
    +  }
    +
    +  void ClusterInfoSwitch::initialize(){
    +  }
    +
    +  void JetInfoSwitch::initialize(){
    +    std::string tmpConfigStr; // temporary config string used to extract multiple values
    +
    +    m_trigger       = has_exact("trigger");
    +    m_substructure  = has_exact("substructure");
    +    m_ntrimsubjets  = has_exact("ntrimsubjets");
    +    m_bosonCount    = has_exact("bosonCount");
    +    m_VTags         = has_exact("VTags");
    +    m_rapidity      = has_exact("rapidity");
    +    m_clean         = has_exact("clean");
    +    m_cleanLight    = has_exact("cleanLight");
    +    m_cleanTrig     = has_exact("cleanTrig");
    +    m_cleanLLP      = has_exact("cleanLLP");
    +    m_timing        = has_exact("timing");
    +    m_energy        = has_exact("energy");
    +    m_energyLight   = has_exact("energyLight");
    +    m_scales        = has_exact("scales");
    +    m_constscaleEta = has_exact("constscaleEta");
    +    m_detectorEta   = has_exact("detectorEta");
    +    m_resolution    = has_exact("resolution");
    +    m_truth         = has_exact("truth");
    +    m_truthDetails  = has_exact("truth_details");
    +    m_layer         = has_exact("layer");
    +    m_fJvt          = has_exact("fJvt");
    +    m_trackPV       = has_exact("trackPV");
    +    m_trackAll      = has_exact("trackAll");
    +    m_chargedPFOPV  = has_exact("chargedPFOPV");
    +    m_jvt           = has_exact("JVT");
    +    m_NNJvt         = has_exact("NNJvt");
    +    m_allTrack      = has_exact("allTrack");
    +    m_allTrackPVSel = has_exact("allTrackPVSel");
    +    m_allTrackDetail= has_exact("allTrackDetail");
    +    m_muonCorrection= has_exact("muonCorrection");
    +
    +    if( m_allTrackDetail ) {
    +      m_allTrackPVSel = m_allTrackPVSel || has_exact("allTrackDetailPVSel") ;
    +    }
    +    m_constituent       = has_exact("constituent");
    +    m_constituentAll    = has_exact("constituentAll");
    +    m_flavorTag         = has_exact("flavorTag");
    +    m_flavorTagHLT      = has_exact("flavorTagHLT");
    +    m_flavorTagTLA      = has_exact("flavorTagTLA");
    +    m_btag_jettrk       = has_exact("btag_jettrk");
    +    m_jetFitterDetails  = has_exact("jetFitterDetails");
    +    m_svDetails         = has_exact("svDetails");
    +    m_ipDetails         = has_exact("ipDetails");
    +
    +    if(has_match("tracksInJet")){
    +      m_tracksInJet       = true;
    +      std::string input(m_configStr);
    +      // erase everything before the interesting string
    +      input.erase( 0, input.find("tracksInJet_") );
    +      // erase everything after the interesting string
    +      // only if there is something after the string
    +      if( input.find(" ") != std::string::npos ) {
    +        input.erase( input.find_first_of(" "), input.size() );
    +      }
    +      // remove tracksInJet_ to just leave the tack name
    +      input.erase(0,12);
    +
    +      m_trackName = input;
    +    }else{
    +      m_tracksInJet       = false;
    +      m_trackName         = "";
    +    }
    +
    +
    +    m_trackJetNames.clear();
    +    if(has_match("trackJetName")){
    +      std::string input(m_configStr);
    +      // erase everything before the interesting string
    +      input.erase( 0, input.find("trackJetName") );
    +      if(input.find(" ")!=std::string::npos) input.erase( input.find(" "), std::string::npos );
    +      input.erase( 0, 13 );
    +
    +      std::stringstream ss(input);
    +      std::string s;
    +      while(std::getline(ss, s, '_'))
    +    m_trackJetNames.push_back(s);
    +    }
    +
    +
    +    m_hltVtxComp          = has_exact("hltVtxComp");
    +    m_onlineBS            = has_exact("onlineBS");
    +    m_onlineBSTool        = has_exact("onlineBSTool");
    +
    +    m_passSel             = has_exact("passSel");
    +    m_passOR              = has_exact("passOR");
    +
    +    m_charge              = has_exact("charge");
    +    m_etaPhiMap           = has_exact("etaPhiMap");
    +    m_byAverageMu         = has_exact("byAverageMu");
    +    m_byEta               = has_exact("byEta");
    +    m_vsLumiBlock         = has_exact("vsLumiBlock");
    +    m_vsActualMu          = has_exact("vsActualMu");
    +    m_lumiB_runN          = has_exact("lumiB_runN");
    +
    +    m_sfJVTName           = get_working_point("sfJVT");
    +    m_sffJVTName          = get_working_point("sffJVT");
    +
    +    m_jetBTag.clear();
    +    m_jetBTagCts.clear();
    +    tmpConfigStr=std::string(m_configStr);
    +    while( tmpConfigStr.find("jetBTag") != std::string::npos ) { // jetBTag
    +      // erase everything before the interesting string
    +      tmpConfigStr.erase( 0, tmpConfigStr.find("jetBTag") );
    +      // extract interesting string
    +      std::size_t pos  =tmpConfigStr.find(" ");
    +      std::string input=tmpConfigStr.substr(0,pos);
    +      // remove interesting string from configStr being processed
    +      tmpConfigStr.erase(0,pos);
    +      // extracted the tagger and numbers
    +      std::stringstream ss(input);
    +      std::string s;
    +      uint idx=0;
    +      std::string tagger;
    +      std::string type;
    +      std::vector<uint> wps;
    +      while(std::getline(ss, s, '_')) {
    +    switch(idx)
    +      {
    +      case 0: // jetBTag
    +        break;
    +      case 1: // tagger
    +        tagger=s;
    +        break;
    +      case 2: // efficiency type
    +        type=s;
    +        break;
    +      case 3: // list of efficiency working points
    +        uint size( s.size()/2 );
    +        for(uint i=0;i<size;i++) {
    +          std::string number = s.substr(0,2);
    +          wps.push_back( atoi( number.c_str() ) );
    +          s.erase(0,2);
    +        }
    +      }
    +    idx++;
    +      }
    +      if(m_jetBTag.find(tagger)==m_jetBTag.end()) m_jetBTag[tagger]=std::vector<std::pair<std::string,uint>>();
    +      for(auto wp : wps)
    +    m_jetBTag[tagger].push_back(std::make_pair(type,wp));
    +
    +      // Add the continuous tagger if this was the one that was passed
    +      if(type.find("Continuous")!=std::string::npos)
    +        m_jetBTagCts.push_back(tagger);
    +
    +    } // jetBTag
    +
    +    m_area          = has_exact("area");
    +    m_JVC           = has_exact("JVC");
    +  }
    +
    +  void TruthInfoSwitch::initialize(){
    +    m_type          = has_exact("type");
    +    m_bVtx          = has_exact("bVtx");
    +    m_parents       = has_exact("parents");
    +    m_children      = has_exact("children");
    +    m_dressed       = has_exact("dressed");
    +    m_origin        = has_exact("origin");
    +    m_particleType  = has_exact("particleType");
    +    m_pdgIdOnly     = has_exact("pdgIdOnly");
    +  }
    +
    +  void TrackInfoSwitch::initialize(){
    +    m_noMultiplicity= has_exact("noMultiplicity");
    +    m_kinematic     = has_exact("kinematic");
    +    m_fitpars       = has_exact("fitpars");
    +    m_numbers       = has_exact("numbers");
    +    m_vertex        = has_exact("vertex");
    +    m_useTheS       = has_exact("useTheS");
    +  }
    +
    +  void TauInfoSwitch::initialize(){
    +    m_trigger           = has_exact("trigger");
    +    m_JetID             = has_exact("JetID");
    +    m_EleVeto           = has_exact("EleVeto");
    +    m_trackAll          = has_exact("trackAll");
    +    m_xahTauJetMatching = has_exact("xahTauJetMatching");
    +    m_effSF             = has_exact("effSF");
    +    m_trackparams       = has_exact("trackparams");
    +    m_trackhitcont      = has_exact("trackhitcont");
    +
    +    // working points combinations for trigger corrections
    +    std::string token;
    +    std::string taueff_keyword = "TAUEFF_";
    +    std::string trig_keyword  = "TRIG_";
    +
    +    std::istringstream ss(m_configStr);
    +    while ( std::getline(ss, token, ' ') ) {
    +      auto taueff_substr = token.find(taueff_keyword);
    +      auto trig_substr = token.find(trig_keyword);
    +      if( taueff_substr != std::string::npos ){
    +        m_tauEffWPs.push_back(token.substr(7));
    +      } else if(trig_substr != std::string::npos){
    +        m_trigWPs.push_back(token.substr(5));
    +      }
    +    }
    +
    +  }
    +
    +  void METInfoSwitch::initialize(){
    +    m_metClus   = has_exact("metClus");
    +    m_metTrk    = has_exact("metTrk");
    +    m_sigClus   = has_exact("sigClus")  || has_exact("all");
    +    m_sigTrk    = has_exact("sigTrk")   || has_exact("all");
    +    m_sigResolutionClus = has_exact("sigResolutionClus") || has_exact("all");
    +    m_sigResolutionTrk  = has_exact("sigResolutionTrk")  || has_exact("all");
    +    m_refEle    = has_exact("refEle")   || has_exact("all");
    +    m_refGamma  = has_exact("refGamma") || has_exact("all");
    +    m_refTau    = has_exact("refTau")   || has_exact("all");
    +    m_refMuons  = has_exact("refMuons") || has_exact("all");
    +    m_refJet    = has_exact("refJet")   || has_exact("all");
    +    m_refJetTrk = has_exact("refJetTrk"); // take this one *only* if requested by user explicitly
    +    m_softClus  = has_exact("softClus") || has_exact("all");
    +    m_softTrk   = has_exact("softTrk")  || has_exact("all");
    +    m_noExtra   = has_exact("noExtra");
    +    if(!m_metClus && !m_metTrk && !m_noExtra){ // to maintain backward compatibility which turned on metClus and metTrk if both were false
    +      m_metClus = true;
    +      m_metTrk  = true;
    +    }
    +  }
    +
    +} // close namespace HelperClasses
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HelperFunctions.cxx.html b/api/program_listing_file_Root_HelperFunctions.cxx.html new file mode 100644 index 0000000000..bb282ad5a2 --- /dev/null +++ b/api/program_listing_file_Root_HelperFunctions.cxx.html @@ -0,0 +1,777 @@ + + + + + + + + + + + Program Listing for File HelperFunctions.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelperFunctions.cxx

    +

    Return to documentation for file (Root/HelperFunctions.cxx)

    +
    #include "xAODAnaHelpers/HelperFunctions.h"
    +#include <AsgMessaging/MessageCheck.h>
    +
    +#include "xAODBase/IParticleContainer.h"
    +
    +// samples
    +#include <SampleHandler/SampleGrid.h>
    +#include <SampleHandler/MetaFields.h>
    +#include <SampleHandler/MetaObject.h>
    +
    +// jet reclustering
    +#include <fastjet/PseudoJet.hh>
    +#include <fastjet/ClusterSequence.hh>
    +
    +// jet trimming
    +#include <fastjet/tools/Filter.hh>
    +#include <JetEDM/JetConstituentFiller.h>
    +
    +void xAH::addRucio(SH::SampleHandler& sh, const std::string& name, const std::string& dslist)
    +{
    +  std::unique_ptr<SH::SampleGrid> sample(new SH::SampleGrid(name));
    +  sample->meta()->setString(SH::MetaFields::gridName, dslist);
    +  sample->meta()->setString(SH::MetaFields::gridFilter, SH::MetaFields::gridFilter_default);
    +  sh.add(sample.release());
    +}
    +
    +MsgStream& HelperFunctions::msg( MSG::Level lvl ) {
    +  static MsgStream msgStream( "HelperFunctions" );
    +  msgStream << lvl;
    +  return msgStream;
    +}
    +
    +// Get Number of Vertices with at least Ntracks
    +bool HelperFunctions::passPrimaryVertexSelection(const xAOD::VertexContainer* vertexContainer, int Ntracks)
    +{
    +  const xAOD::Vertex* primaryVertex = getPrimaryVertex( vertexContainer );
    +  if(!primaryVertex){ return false; }
    +  if((int)(primaryVertex)->nTrackParticles() < Ntracks ) {
    +    return false;
    +  }
    +  return true;
    +}
    +
    +int HelperFunctions::countPrimaryVertices(const xAOD::VertexContainer* vertexContainer, int Ntracks)
    +{
    +
    +  int NPV = 0;
    +
    +  // Loop over vertices in the container
    +  for( auto vtx_itr : *vertexContainer )
    +  {
    +    if((int)vtx_itr->nTrackParticles() < Ntracks ) { continue; }
    +    NPV++;
    +  }
    +
    +  return NPV;
    +
    +}
    +
    +int HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer, MsgStream& msg)
    +{
    +  int location(0);
    +
    +  if(vertexContainer == nullptr) {
    +    msg << MSG::DEBUG << "No primary vertex container was found! Returning -1" << endmsg;
    +    return -1;
    +  }
    +
    +  for( auto vtx_itr : *vertexContainer )
    +  {
    +    if(vtx_itr->vertexType() == xAOD::VxType::VertexType::PriVtx) {
    +      return location;
    +    }
    +    location++;
    +  }
    +  msg << MSG::WARNING << "No primary vertex location was found! Returning -1" << endmsg;
    +  return -1;
    +}
    +
    +bool HelperFunctions::applyPrimaryVertexSelection( const xAOD::JetContainer* jets, const xAOD::VertexContainer* vertices )
    +{
    +
    +  // if(jets->empty()) { return true; }
    +
    +  // int pvLocation = HelperFunctions::getPrimaryVertexLocation(vertices);
    +  // if ( pvLocation < 0 ) { return false; }
    +  // const xAOD::Vertex* vertex = vertices->at( pvLocation );
    +
    +  // // check if the PV compatible Ghost Matched tracks are already here
    +  // static SG::AuxElement::ConstAccessor< std::vector<ElementLink< xAOD::IParticleContainer > > >ghostTrackPVAcc ("GhostTrackPV");
    +  // if( ghostTrackPVAcc.isAvailable( *(jets->at(0)) ) ) { return true; }
    +
    +  // // get the originals and apply selection
    +  // static SG::AuxElement::ConstAccessor< std::vector<ElementLink< xAOD::IParticleContainer > > >ghostTrack ("GhostTrack");
    +  // for( auto jet_itr : *jets ) {
    +
    +  //   if ( !ghostTrack.isAvailable( *jet_itr ) ) { continue; }
    +  //   std::vector<ElementLink<xAOD::IParticleContainer> > trackLinks = ghostTrack( *jet_itr );
    +
    +  //   // store the selected tracks
    +  //   std::vector<ElementLink< xAOD::IParticleContainer > > selectedTrackHolder;
    +
    +  //   int originalIndex(-1);
    +  //   for ( auto link_itr : trackLinks ) {
    +  //     originalIndex++;
    +
    +  //     if( !link_itr.isValid() ) { continue; }
    +  //     const xAOD::TrackParticle* track = dynamic_cast<const xAOD::TrackParticle*>( *link_itr );
    +
    +  //     if( track->pt() < 500 )                     { continue; } // pT cut
    +  //     if( track->vertex() != vertex ) {                        // if not in PV vertex fit
    +  //       if( track->vertex() != 0 )                { continue; } // make sure in no vertex fits
    +  //       if( fabs((track->z0()+track->vz()-vertex->z())*sin(track->theta())) > 3.0 ) { continue; } // make sure close to PV in z
    +  //     }
    +
    +  //     selectedTrackHolder.push_back( link_itr );
    +
    +  //   } // loop over tracks
    +
    +  //   jet_itr->auxdecor< std::vector< ElementLink< xAOD::IParticleContainer > > > ("GhostTrackPV") = selectedTrackHolder;
    +
    +  // } // loop over jets
    +
    +
    +  return true;
    +}
    +
    +std::string HelperFunctions::replaceString(std::string subject, const std::string& search, const std::string& replace)
    +{
    +  size_t pos = 0;
    +  while ((pos = subject.find(search, pos)) != std::string::npos) {
    +    subject.replace(pos, search.length(), replace);
    +    pos += replace.length();
    +  }
    +  return subject;
    +}
    +
    +std::vector<TString> HelperFunctions::SplitString(TString& orig, const char separator)
    +{
    +    // 'splitV' with the primitive strings
    +    std::vector<TString> splitV;
    +    TString splitOpt(orig);
    +    splitOpt.ReplaceAll("\n"," ");
    +    splitOpt = splitOpt.Strip(TString::kBoth,separator);
    +
    +    while (splitOpt.Length()>0) {
    +      if ( !splitOpt.Contains(separator) ) {
    +        splitOpt.ReplaceAll(" ",""); // clear empty spaces
    +        splitV.push_back(splitOpt);
    +        break;
    +      }
    +      else {
    +        TString toSave = splitOpt(0,splitOpt.First(separator));
    +        splitV.push_back(toSave);
    +        splitOpt = splitOpt(splitOpt.First(separator),splitOpt.Length());
    +      }
    +      splitOpt = splitOpt.Strip(TString::kLeading,separator);
    +    }
    +
    +    return splitV;
    +}
    +
    +StatusCode HelperFunctions::isAvailableMetaData(TTree* metaData){
    +    if ( !metaData ) {
    +      Info("HelperFunctions::isAvailableMetaData()", "MetaData tree missing from input file. Aborting ");
    +      return StatusCode::FAILURE;
    +    }
    +    return StatusCode::SUCCESS;
    +}
    +
    +bool HelperFunctions::isFilePrimaryxAOD(TFile* inputFile) {
    +    TTree* metaData = dynamic_cast<TTree*> (inputFile->Get("MetaData"));
    +
    +    /* check that MetaData tree exists */
    +    ANA_CHECK( isAvailableMetaData(metaData));
    +
    +    metaData->LoadTree(0);
    +    TObjArray* ar = metaData->GetListOfBranches();
    +    for (int i = 0; i < ar->GetEntries(); ++i) {
    +      TBranch* b = (TBranch*) ar->At(i);
    +      std::string name = std::string(b->GetName());
    +      if (name == "StreamAOD")
    +        return true;
    +    }
    +
    +    return false;
    +}
    +
    +
    +std::vector<TLorentzVector> HelperFunctions::jetReclustering(
    +  const xAOD::JetContainer* jets,
    +  double radius,
    +  double fcut,
    +  fastjet::JetAlgorithm rc_alg
    +){
    +
    +  //1. Need to convert the vector of jets to a vector of pseudojets
    +  //    only need p4() since we're using them as inputs
    +  std::vector<fastjet::PseudoJet> input_jets;
    +
    +  for(auto jet : *jets){
    +    const TLorentzVector jet_p4 = jet->p4();
    +    input_jets.push_back(
    +      fastjet::PseudoJet(
    +        jet_p4.Px()/1000.,
    +        jet_p4.Py()/1000.,
    +        jet_p4.Pz()/1000.,
    +        jet_p4.E ()/1000.
    +      )
    +    );
    +  }
    +
    +  //2. Build up the new jet definitions using input configurations
    +  //    - jet algorithm
    +  //    - radius
    +  fastjet::JetDefinition jet_def(rc_alg, radius);
    +
    +  //3. Run the Cluster Sequence on pseudojets with the right jet definition above
    +  //    cs = clustersequence
    +  fastjet::ClusterSequence cs(input_jets, jet_def);
    +
    +  // 4. Grab the reclustered jets, sorted by pt()
    +  //    rc_jets == reclustered jets
    +  std::vector<fastjet::PseudoJet> rc_jets = fastjet::sorted_by_pt(cs.inclusive_jets());
    +
    +  //5.  Apply trimming on PJ.constituents() using fcut
    +  //    rc_t_jets == reclustered, trimmed jets
    +  std::vector<TLorentzVector> rc_t_jets;
    +
    +  for(auto rc_jet : rc_jets){
    +    TLorentzVector rc_t_jet = TLorentzVector();
    +    // loop over subjets
    +    for(auto rc_jet_subjet : rc_jet.constituents()){
    +      TLorentzVector subjet = TLorentzVector();
    +      subjet.SetPtEtaPhiE(
    +        rc_jet_subjet.pt(),
    +        rc_jet_subjet.eta(),
    +        rc_jet_subjet.phi(),
    +        rc_jet_subjet.e()
    +      );
    +      if(subjet.Pt() > fcut*rc_jet.pt()) rc_t_jet += subjet;
    +    }
    +    rc_t_jets.push_back(rc_t_jet);
    +  }
    +
    +  // notes: rc_t_jets is not sorted by pt due to trimming applied
    +  struct sort_by_pt
    +  {
    +      inline bool operator() (const TLorentzVector lhs, const TLorentzVector rhs)
    +      {
    +        return (lhs.Pt() > rhs.Pt());
    +      }
    +  };
    +  std::sort(rc_t_jets.begin(), rc_t_jets.end(), sort_by_pt());
    +
    +  return rc_t_jets;
    +}
    +
    +std::vector<TLorentzVector> HelperFunctions::jetTrimming(
    +  const xAOD::JetContainer* jets,
    +  double radius,
    +  double fcut,
    +  fastjet::JetAlgorithm s_alg
    +){
    +
    +  std::vector<TLorentzVector> t_jets;
    +  for(const auto jet: *jets){
    +    t_jets.push_back( jetTrimming(jet, radius, fcut, s_alg) );
    +  }
    +
    +  // notes: t_jets is not sorted by pt due to trimming applied
    +  struct sort_by_pt
    +  {
    +      inline bool operator() (const TLorentzVector lhs, const TLorentzVector rhs)
    +      {
    +        return (lhs.Pt() > rhs.Pt());
    +      }
    +  };
    +  std::sort(t_jets.begin(), t_jets.end(), sort_by_pt());
    +
    +  return t_jets;
    +}
    +
    +TLorentzVector HelperFunctions::jetTrimming(
    +  const xAOD::Jet* jet,
    +  double radius,
    +  double fcut,
    +  fastjet::JetAlgorithm s_alg
    +){
    +
    +  //1. Create the trimmer
    +  fastjet::Filter trimmer(fastjet::JetDefinition(s_alg, radius), fastjet::SelectorPtFractionMin(fcut));
    +
    +  //2.  Apply the trimmer to the jet, this requires the JetEDM
    +  //        convert xAOD::Jet to PseudoJet with constituents
    +  //        apply trimmer on the PseudoJet
    +  TLorentzVector t_jet = TLorentzVector();
    +  std::vector<fastjet::PseudoJet> constit_pseudojets = jet::JetConstituentFiller::constituentPseudoJets(*jet);
    +
    +  //3. Need to use ClusterSequence to recluster jet again once we found constituents
    +  fastjet::ClusterSequence cs(constit_pseudojets, fastjet::JetDefinition( (fastjet::JetAlgorithm) jet->getAlgorithmType(), jet->getSizeParameter()));
    +
    +  fastjet::PseudoJet t_pjet = trimmer(fastjet::join(cs.inclusive_jets()));
    +
    +  t_jet.SetPtEtaPhiE(
    +    t_pjet.pt(),
    +    t_pjet.eta(),
    +    t_pjet.phi(),
    +    t_pjet.e()
    +  );
    +
    +  return t_jet;
    +
    +}
    +
    +const xAOD::Vertex* HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer* vertexContainer, MsgStream& msg)
    +{
    +
    +  // vertex types are listed on L328 of
    +  // https://svnweb.cern.ch/trac/atlasoff/browser/Event/xAOD/xAODTracking/trunk/xAODTracking/TrackingPrimitives.h
    +  for( auto vtx_itr : *vertexContainer )
    +  {
    +    if(vtx_itr->vertexType() != xAOD::VxType::VertexType::PriVtx) { continue; }
    +    return vtx_itr;
    +  }
    +
    +  msg << MSG::WARNING << "No primary vertex was found! Returning nullptr" << endmsg;
    +
    +  return 0;
    +}
    +
    +float HelperFunctions::getPrimaryVertexZ(const xAOD::Vertex* pvx)
    +{
    +  float pvx_z = 0;
    +  if(pvx) pvx_z = pvx->z();
    +  return pvx_z;
    +}
    +
    +bool HelperFunctions::sort_pt(const xAOD::IParticle* partA, const xAOD::IParticle* partB){
    +  return partA->pt() > partB->pt();
    +}
    +
    +// Get the subset of systematics to consider
    +// can also return full set if systName = "All"
    +//
    +// CP::make_systematics_vector(recSysts); has some similar functionality but does not
    +// prune down to 1 systematic if only request that one.  It does however include the
    +// nominal case as a null SystematicSet
    +std::vector< CP::SystematicSet > HelperFunctions::getListofSystematics(const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream& msg ) {
    +
    +  std::vector< CP::SystematicSet > outSystList;
    +
    +  // parse and split by comma
    +  std::vector<std::string> systNamesList;
    +  std::string token;
    +  std::istringstream ss(systNames);
    +  while (std::getline(ss, token, ',')) {
    +    systNamesList.push_back(token);
    +  }
    +
    +  msg << MSG::DEBUG << "systNames: " << endmsg;
    +  for ( const std::string &name : systNamesList ) {
    +    msg << MSG::DEBUG << "\t" << name << endmsg;
    +  }
    +
    +  // loop over input set
    +  //
    +  for ( const auto syst : inSysts ) {
    +
    +    msg << MSG::DEBUG << syst.name() << endmsg;
    +
    +    // 1.
    +    // input systName does not contain "All":
    +    // match with input systName(s) from the list:
    +    // add these systematics only to the output list
    +    //
    +    if ( systNames.find("All") == std::string::npos ) {
    +      // do systNames vector matching
    +      bool valid = false;
    +      for ( const auto s : systNamesList ) {
    +        if ( s == syst.basename() ) {
    +          valid = true;
    +          break;
    +        }
    +      }
    +
    +      // continue if not matched
    +      if ( !valid ) continue;
    +
    +      msg << MSG::DEBUG << "Found match! Adding systematic " << syst.name() << endmsg;
    +
    +      // continuous systematics - can choose at what sigma to evaluate
    +      //
    +      if ( syst == CP::SystematicVariation (syst.basename(), CP::SystematicVariation::CONTINUOUS) ) {
    +
    +        outSystList.push_back(CP::SystematicSet());
    +
    +        if ( systVal == 0 ) {
    +          msg << MSG::ERROR << "Setting continuous systematic to 0 is nominal! Please check!" << endmsg;
    +          RCU_THROW_MSG("Failure");
    +        }
    +
    +        outSystList.back().insert(CP::SystematicVariation (syst.basename(), systVal));
    +        outSystList.push_back(CP::SystematicSet());
    +        outSystList.back().insert(CP::SystematicVariation (syst.basename(), -1.0*fabs(systVal)));
    +
    +      } else {
    +      // not a continuous system
    +
    +        outSystList.push_back(CP::SystematicSet());
    +        outSystList.back().insert(syst);
    +
    +      }
    +    }
    +    // 2.
    +    // input systName contains "All":
    +    // add all systematics to the output list
    +    //
    +    else if ( systNames.find("All") != std::string::npos ) {
    +
    +      msg << MSG::DEBUG << "Adding systematic " << syst.name() << endmsg;
    +
    +      // continuous systematics - can choose at what sigma to evaluate
    +      // add +1 and -1 for when running all
    +      //
    +      if ( syst == CP::SystematicVariation (syst.basename(), CP::SystematicVariation::CONTINUOUS) ) {
    +
    +      if ( systVal == 0 ) {
    +        msg << MSG::ERROR << "Setting continuous systematic to 0 is nominal! Please check!" << endmsg;
    +        RCU_THROW_MSG("Failure");
    +      }
    +
    +      outSystList.push_back(CP::SystematicSet());
    +      outSystList.back().insert(CP::SystematicVariation (syst.basename(),  fabs(systVal)));
    +      outSystList.push_back(CP::SystematicSet());
    +      outSystList.back().insert(CP::SystematicVariation (syst.basename(), -1.0*fabs(systVal)));
    +
    +      } else {
    +      // not a continuous systematic
    +
    +        outSystList.push_back(CP::SystematicSet());
    +        outSystList.back().insert(syst);
    +
    +      }
    +
    +    }
    +
    +  } // loop over recommended systematics
    +
    +  // Add an empty CP::SystematicVariation at the top of output list to account for the nominal case
    +  // when running on all systematics or on nominal only
    +  //
    +  if ( systNames.find("Nominal") != std::string::npos || systNames.find("All") != std::string::npos || systNames.empty() ) {
    +    outSystList.insert( outSystList.begin(), CP::SystematicSet() );
    +    const CP::SystematicVariation nullVar = CP::SystematicVariation("");
    +    outSystList.back().insert(nullVar);
    +  }
    +
    +  return outSystList;
    +
    +}
    +
    +void HelperFunctions::writeSystematicsListHist( const std::vector< CP::SystematicSet > &systs, std::string histName, TFile *file )
    +{
    +  std::string folderName = "systematics";
    +  std::string name = folderName + "/" + histName;
    +  if (!systs.size() || histName.empty() || file->Get(name.c_str())) {
    +    return;
    +  }
    +
    +  if (!file->Get(folderName.c_str())) {
    +    file->mkdir(folderName.c_str());
    +  }
    +  file->cd(folderName.c_str());
    +
    +  TH1D hist(histName.c_str(), histName.c_str(), systs.size(), 0.5, systs.size() + 0.5);
    +  for (size_t i = 0; i < systs.size(); i++) {
    +    if (systs[i].name().empty()) {
    +      hist.GetXaxis()->SetBinLabel(i + 1, "nominal");
    +    } else {
    +      hist.GetXaxis()->SetBinLabel(i + 1, systs[i].name().c_str());
    +    }
    +  }
    +  hist.Write();
    +}
    +
    +float HelperFunctions::dPhi(float phi1, float phi2)
    +{
    +  float dPhi = phi1 - phi2;
    +  if(dPhi > 3.14)  dPhi -= 2*3.14;
    +  if(dPhi < -3.14) dPhi += 2*3.14;
    +  return dPhi;
    +}
    +
    +
    +std::size_t HelperFunctions::string_pos( const std::string& haystack, const std::string& needle, unsigned int N )
    +{
    +  if( N == 0 ) return std::string::npos;
    +  std::size_t pos, from = 0;
    +  for(unsigned i=0; i<N; i++){
    +    pos = haystack.find(needle, from);
    +    if( pos == std::string::npos ) break;
    +    from = pos + 1;
    +  }
    +  return pos;
    +}
    +
    +bool HelperFunctions::has_exact(const std::string input, const std::string flag)
    +{
    +  std::set<std::string> inputSet;
    +
    +  // parse and split by space
    +  std::string token;
    +  std::istringstream ss(input);
    +  while ( std::getline(ss, token, ' ') )
    +    inputSet.insert(token);
    +
    +
    +  return inputSet.find(flag) != inputSet.end();
    +}
    +
    +HelperFunctions::ShowerType HelperFunctions::getMCShowerType(const std::string& sample_name, const std::string& m_taggerName)
    +{
    +  //
    +  //pre-process sample name
    +  TString tmp_name(sample_name);
    +  tmp_name.ReplaceAll("Py8EG","PYTHIA8EVTGEN");
    +  tmp_name.ReplaceAll("Py8EvtGen","PYTHIA8EVTGEN");
    +  tmp_name.ReplaceAll("Py8","Pythia8");
    +  if(tmp_name.Contains("Pythia") && !tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia","PYTHIA8EVTGEN");
    +  if(tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia8","PYTHIA8EVTGEN");
    +  //capitalize the entire sample name
    +  tmp_name.ToUpper();
    +
    +  //
    +  // Determine shower type by looking for keywords in name
    +  if(m_taggerName=="DL1dv01"){
    +    if(tmp_name.Contains("AMCATNLOPY")) return AmcPy8;
    +    else if(tmp_name.Contains("AMCATNLOH")) return AmcH7;
    +    else if(tmp_name.Contains("PYTHIA8EVTGEN")) return Pythia8;
    +    else if(tmp_name.Contains("HERWIG")) return Herwig7p1;
    +    else if(tmp_name.Contains("PHH7EG")) return Herwig7p2;
    +    else if(tmp_name.Contains("SHERPA_221_")) return Sherpa221;
    +    else if(tmp_name.Contains("SH_221_")) return Sherpa221;
    +    else if(tmp_name.Contains("SH_2210")) return Sherpa2210;
    +    else if(tmp_name.Contains("SH_2211")) return Sherpa2210;
    +    else if(tmp_name.Contains("SH_2212")) return Sherpa2212;
    +    else return Unknown;
    +  } else if(m_taggerName=="GN2v01"){
    +    if(tmp_name.Contains("PYTHIA8EVTGEN517")) return Pythia8_517;
    +    else if(tmp_name.Contains("PYTHIA8EVTGEN") and !tmp_name.Contains("AMCATNLO")) return Pythia8; //aMcAtNlo not supported for GN2, so don't let it count as Pythia8
    +    else if(tmp_name.Contains("HERWIG") and !tmp_name.Contains("AMCATNLO")) return Herwig7p1;
    +    else if(tmp_name.Contains("PHH7EG")) return Herwig7p2;
    +    else if(tmp_name.Contains("SH_2210")) return Sherpa2214;//FTAG uses 2.2.14 SFs for 2.2.10
    +    else if(tmp_name.Contains("SH_2211")) return Sherpa2214;//MC-to-MC maps for versions of Sherpa between 2.2.11 and 2.2.16 are equivalent.
    +    else if(tmp_name.Contains("SH_2212")) return Sherpa2214;
    +    else if(tmp_name.Contains("SH_2213")) return Sherpa2214;
    +    else if(tmp_name.Contains("SH_2214")) return Sherpa2214;
    +    else if(tmp_name.Contains("SH_2215")) return Sherpa2214;
    +    else if(tmp_name.Contains("SH_2216")) return Sherpa2214;
    +    else if(tmp_name.Contains("SH_") and !tmp_name.Contains("SH_2")) return Sherpa_Unknown;//Unknown Sherpa Version. This is to handle Sh_blank (e.g. DSID 701050). The examples I've found are all 2.2.16, but that's not guaranteed.
    +    else return Unknown;
    +  } else {
    +    return  Unknown;
    +  }
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_HistogramManager.cxx.html b/api/program_listing_file_Root_HistogramManager.cxx.html new file mode 100644 index 0000000000..f709689b00 --- /dev/null +++ b/api/program_listing_file_Root_HistogramManager.cxx.html @@ -0,0 +1,480 @@ + + + + + + + + + + + Program Listing for File HistogramManager.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HistogramManager.cxx

    +

    Return to documentation for file (Root/HistogramManager.cxx)

    +
    /******************************************
    + *
    + * Base class used to book a set of histograms.
    + * Many sets can be created and compared for
    + * efficiecny studies or population studies.
    + *
    + * G. Facini
    + * Sep 9 08:58:12 CEST 2014
    + * G. Stark
    + * Jan 20 10:29 CEST 2015
    + *
    + ******************************************/
    +
    +#include <AsgMessaging/MsgStream.h>
    +#include "xAODAnaHelpers/HistogramManager.h"
    +
    +/* constructors and destructors */
    +HistogramManager::HistogramManager(std::string name, std::string detailStr):
    +  m_name(name),
    +  m_detailStr(detailStr),
    +  m_msg(name)
    +{
    +
    +  // if last character of name is a alphanumeric add a / so that
    +  // in the output file, a TDirectory is created with the histograms inside
    +  if( isalnum( m_name.back() ) && !ispunct( m_name.back() ) ) {
    +    m_name += "/";
    +    //Info("HistogramManager()", "Adding slash to put hists in TDirectories: %s",m_name.c_str());
    +  }
    +
    +  m_msg.setLevel(MSG::INFO);
    +}
    +
    +HistogramManager::~HistogramManager() {}
    +
    +/* Main book() functions for 1D, 2D, 3D histograms */
    +TH1F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, double xlow, double xhigh)
    +{
    +  TH1F* tmp = new TH1F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh);
    +  SetLabel(tmp, xlabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH2F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, double xlow, double xhigh,
    +                             std::string ylabel, int ybins, double ylow, double yhigh)
    +{
    +  TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ylow, yhigh);
    +  SetLabel(tmp, xlabel, ylabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH3F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, double xlow, double xhigh,
    +                             std::string ylabel, int ybins, double ylow, double yhigh,
    +                             std::string zlabel, int zbins, double zlow, double zhigh)
    +{
    +  TH3F* tmp = new TH3F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ylow, yhigh, zbins, zlow, zhigh);
    +  SetLabel(tmp, xlabel, ylabel, zlabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TProfile* HistogramManager::book(std::string name, std::string title,
    +                 std::string xlabel, int xbins, double xlow, double xhigh,
    +                 std::string ylabel, double ylow, double yhigh,
    +                 std::string option)
    +{
    +  TProfile* tmp = new TProfile( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ylow, yhigh, option.c_str());
    +  SetLabel(tmp, xlabel, ylabel);
    +  //this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +
    +TH1F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, const Double_t* xbinArr)
    +{
    +  TH1F* tmp = new TH1F( (name + title).c_str(), title.c_str(), xbins, xbinArr);
    +  SetLabel(tmp, xlabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH2F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, const Double_t* xbinArr,
    +                             std::string ylabel, int ybins, double ylow, double yhigh)
    +{
    +  TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ylow, yhigh);
    +  SetLabel(tmp, xlabel, ylabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH2F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, double xlow, double xhigh,
    +                             std::string ylabel, int ybins, const Double_t* ybinArr)
    +{
    +  TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xlow, xhigh, ybins, ybinArr);
    +  SetLabel(tmp, xlabel, ylabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH2F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, const Double_t* xbinArr,
    +                             std::string ylabel, int ybins, const Double_t* ybinArr)
    +{
    +  TH2F* tmp = new TH2F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ybinArr);
    +  SetLabel(tmp, xlabel, ylabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TH3F* HistogramManager::book(std::string name, std::string title,
    +                             std::string xlabel, int xbins, const Double_t* xbinArr,
    +                             std::string ylabel, int ybins, const Double_t* ybinArr,
    +                             std::string zlabel, int zbins, const Double_t* zbinArr)
    +{
    +  TH3F* tmp = new TH3F( (name + title).c_str(), title.c_str(), xbins, xbinArr, ybins, ybinArr, zbins, zbinArr);
    +  SetLabel(tmp, xlabel, ylabel, zlabel);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TProfile* HistogramManager::book(std::string name, std::string title,
    +                            int xbins, const Double_t* xbinArr,
    +                            double ylow, double yhigh)
    +{
    +  TProfile* tmp = new TProfile( (name+title).c_str(), title.c_str(), xbins, xbinArr, ylow, yhigh);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +TProfile* HistogramManager::book(std::string name, std::string title,
    +           int xbins, double xlow, double xhigh,
    +       double ylow, double yhigh)
    +{
    +  TProfile* tmp = new TProfile( (name+title).c_str(), title.c_str(), xbins, xlow, xhigh, ylow, yhigh);
    +  this->Sumw2(tmp);
    +  this->record(tmp);
    +  return tmp;
    +}
    +
    +MsgStream& HistogramManager :: msg () const { return m_msg; }
    +MsgStream& HistogramManager :: msg (int level) const {
    +    MsgStream& result = msg();
    +    result << MSG::Level (level);
    +    return result;
    +}
    +
    +/* Helper functions */
    +void HistogramManager::Sumw2(TH1* hist, bool flag /*=true*/) {
    +  hist->Sumw2(flag);
    +}
    +
    +void HistogramManager::record(TH1* hist) {
    +  m_allHists.push_back( hist );
    +
    +  // Check if this histName already exists
    +  std::string histName = hist->GetName();
    +  HistMap_t::const_iterator it = m_histMap.find( histName );
    +  if ( it != m_histMap.end() ) // It does exist!
    +    {
    +      ANA_MSG_WARNING( "The histogram with name=" << histName << " already exists! "
    +                       << " NOT entering into the hist map, but prepare for unexpected behaviour" );
    +      return;
    +    }
    +  m_histMap.insert( m_histMap.end(), std::pair< std::string, TH1* >( histName, hist ) );
    +}
    +
    +void HistogramManager::record(EL::IWorker* wk) {
    +  for( auto hist : m_allHists ){
    +    wk->addOutput(hist);
    +  }
    +}
    +
    +void HistogramManager::SetLabel(TH1* hist, std::string xlabel)
    +{
    +  hist->GetXaxis()->SetTitle(xlabel.c_str());
    +}
    +
    +void HistogramManager::SetLabel(TH1* hist, std::string xlabel, std::string ylabel)
    +{
    +  hist->GetYaxis()->SetTitle(ylabel.c_str());
    +  this->SetLabel(hist, xlabel);
    +}
    +
    +void HistogramManager::SetLabel(TH1* hist, std::string xlabel, std::string ylabel, std::string zlabel)
    +{
    +  hist->GetZaxis()->SetTitle(zlabel.c_str());
    +  this->SetLabel(hist, xlabel, ylabel);
    +}
    +
    +TH1* HistogramManager::findHist(const std::string& histName) {
    +  // See if this entry exists in the map
    +  HistMap_t::const_iterator it = m_histMap.find( histName );
    +  if ( it == m_histMap.end() ) {
    +    ANA_MSG_ERROR("Histogram name " << histName << " not found");
    +    return NULL;
    +  }
    +  else {
    +    return it->second;
    +  }
    +}
    +
    +void HistogramManager::fillHist(const std::string& histName, double value) {
    +  TH1* histPointer(NULL);
    +  histPointer = this->findHist(histName);
    +  histPointer->Fill(value);
    +}
    +
    +void HistogramManager::fillHist(const std::string& histName, double value, double weight) {
    +  TH1* histPointer(NULL);
    +  histPointer = this->findHist(histName);
    +  histPointer->Fill(value, weight);
    +}
    +
    +void HistogramManager::fillHist(const std::string& histName, double valueX, double valueY, double weight) {
    +  TH2* histPointer(NULL);
    +  HistMap_t::const_iterator it = m_histMap.find( histName );
    +  if ( it == m_histMap.end() ) {
    +    ANA_MSG_ERROR("Histogram name " << histName << " not found");
    +    return;
    +  }
    +  else {
    +    histPointer = (TH2*)it->second;
    +  }
    +  histPointer->Fill(valueX, valueY, weight);
    +}
    +
    +void HistogramManager::fillHist(const std::string& histName, double valueX, double valueY, double valueZ, double weight) {
    +  TH3* histPointer(NULL);
    +  HistMap_t::const_iterator it = m_histMap.find( histName );
    +  if ( it == m_histMap.end() ) {
    +    ANA_MSG_ERROR("Histogram name " << histName << " not found");
    +    return;
    +  }
    +  else {
    +    histPointer = (TH3*)it->second;
    +  }
    +  histPointer->Fill(valueX, valueY, valueZ, weight);
    +}
    +
    +void HistogramManager::fillProfile(const std::string& histName, double valueX, double valueY, double weight) {
    +  TProfile* histPointer(NULL);
    +  HistMap_t::const_iterator it = m_histMap.find( histName );
    +  if ( it == m_histMap.end() ) {
    +    ANA_MSG_ERROR("Histogram name " << histName << " not found");
    +    return;
    +  }
    +  else {
    +    histPointer = (TProfile*)it->second;
    +  }
    +  histPointer->Fill(valueX, valueY, weight);
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_IParticleHists.cxx.html b/api/program_listing_file_Root_IParticleHists.cxx.html new file mode 100644 index 0000000000..386f35741b --- /dev/null +++ b/api/program_listing_file_Root_IParticleHists.cxx.html @@ -0,0 +1,401 @@ + + + + + + + + + + + Program Listing for File IParticleHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IParticleHists.cxx

    +

    Return to documentation for file (Root/IParticleHists.cxx)

    +
    #include <xAODAnaHelpers/IParticleHists.h>
    +#include <sstream>
    +
    +ANA_MSG_SOURCE(msgIParticleHists, "IParticleHists")
    +
    +using std::vector;
    +
    +IParticleHists :: IParticleHists (std::string name, std::string detailStr, std::string prefix, std::string title) :
    +  HistogramManager(name, detailStr),
    +  m_infoSwitch(new HelperClasses::IParticleInfoSwitch(m_detailStr)),
    +  m_prefix(prefix),m_title(title)
    +{
    +  m_debug = false;
    +}
    +
    +IParticleHists :: ~IParticleHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +StatusCode IParticleHists::initialize() {
    +
    +  // These plots are always made
    +  m_Pt_l        = book(m_name, m_prefix+"Pt_l",     m_title+" p_{T} [GeV]", 120, 0, 3000.);
    +  m_Pt          = book(m_name, m_prefix+"Pt",       m_title+" p_{T} [GeV]", 100, 0, 1000.);
    +  m_Pt_m        = book(m_name, m_prefix+"Pt_m",     m_title+" p_{T} [GeV]", 100, 0,  500.);
    +  m_Pt_s        = book(m_name, m_prefix+"Pt_s",     m_title+" p_{T} [GeV]", 200, 0,  200.);
    +  m_Eta         = book(m_name, m_prefix+"Eta",      m_title+" #eta",         98, -4.9, 4.9);
    +  m_Phi         = book(m_name, m_prefix+"Phi",      m_title+" Phi",         120, -TMath::Pi(), TMath::Pi() );
    +  m_M           = book(m_name, m_prefix+"Mass",     m_title+" Mass [GeV]",  120, 0, 400);
    +  m_E           = book(m_name, m_prefix+"Energy",   m_title+" Energy [GeV]",120, 0, 4000.);
    +  m_Rapidity    = book(m_name, m_prefix+"Rapidity", m_title+" Rapidity",    120, -10, 10);
    +
    +  if(m_debug) Info("IParticleHists::initialize()", m_name.c_str());
    +  // details of the particle kinematics
    +  if( m_infoSwitch->m_kinematic ) {
    +    if(m_debug) Info("IParticleHists::initialize()", "adding kinematic plots");
    +    m_Px     = book(m_name, m_prefix+"Px",     m_title+" Px [GeV]",     120, 0, 1000);
    +    m_Py     = book(m_name, m_prefix+"Py",     m_title+" Py [GeV]",     120, 0, 1000);
    +    m_Pz     = book(m_name, m_prefix+"Pz",     m_title+" Pz [GeV]",     120, 0, 4000);
    +
    +    m_Et          = book(m_name, m_prefix+"Et",       m_title+" E_{T} [GeV]", 100, 0, 1000.);
    +    m_Et_m        = book(m_name, m_prefix+"Et_m",     m_title+" E_{T} [GeV]", 100, 0,  500.);
    +    m_Et_s        = book(m_name, m_prefix+"Et_s",     m_title+" E_{T} [GeV]", 100, 0,  100.);
    +  }
    +
    +  // N leading jets
    +  if( m_infoSwitch->m_numLeading > 0 ){
    +    std::stringstream pNum;
    +    std::stringstream pTitle;
    +    for(int iParticle=0; iParticle < m_infoSwitch->m_numLeading; ++iParticle){
    +      pNum << iParticle;
    +
    +      pTitle << iParticle+1;
    +      switch(iParticle)
    +    {
    +    case 0:
    +      pTitle << "^{st}";
    +      break;
    +    case 1:
    +      pTitle << "^{nd}";
    +      break;
    +    case 2:
    +      pTitle << "^{rd}";
    +      break;
    +    default:
    +      pTitle << "^{th}";
    +      break;
    +    }
    +
    +      m_NPt_l.push_back(       book(m_name, (m_prefix+"Pt_l_"+pNum.str()),       pTitle.str()+" "+m_title+" p_{T} [GeV]" ,120,            0,       3000. ) );
    +      m_NPt .push_back(       book(m_name, (m_prefix+"Pt_"+pNum.str()),       pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100,            0,       1000. ) );
    +      m_NPt_m.push_back(       book(m_name, (m_prefix+"Pt_m_"+pNum.str()),       pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100,            0,       500. ) );
    +      m_NPt_s.push_back(       book(m_name, (m_prefix+"Pt_s_"+pNum.str()),       pTitle.str()+" "+m_title+" p_{T} [GeV]" ,100,            0,       100. ) );
    +      m_NEta.push_back(      book(m_name, (m_prefix+"Eta_"+pNum.str()),      pTitle.str()+" "+m_title+" #eta"        , 80,           -4,           4 ) );
    +      m_NPhi.push_back(      book(m_name, (m_prefix+"Phi_"+pNum.str()),      pTitle.str()+" "+m_title+" Phi"         ,120, -TMath::Pi(), TMath::Pi() ) );
    +      m_NM.push_back(        book(m_name, (m_prefix+"Mass_"+pNum.str()),     pTitle.str()+" "+m_title+" Mass [GeV]"  ,120,            0,         400 ) );
    +      m_NE.push_back(        book(m_name, (m_prefix+"Energy_"+pNum.str()),   pTitle.str()+" "+m_title+" Energy [GeV]",120,            0,       4000. ) );
    +      m_NRapidity.push_back( book(m_name, (m_prefix+"Rapidity_"+pNum.str()), pTitle.str()+" "+m_title+" Rapidity"    ,120,          -10,          10 ) );
    +      if(m_infoSwitch->m_kinematic){
    +    m_NEt .push_back(        book(m_name, (m_prefix+"Et_"+pNum.str()),         pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100,            0,       1000. ) );
    +    m_NEt_m.push_back(       book(m_name, (m_prefix+"Et_m_"+pNum.str()),       pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100,            0,       500. ) );
    +    m_NEt_s.push_back(       book(m_name, (m_prefix+"Et_s_"+pNum.str()),       pTitle.str()+" "+m_title+" E_{T} [GeV]" ,100,            0,       100. ) );
    +      }
    +
    +      pNum.str("");
    +      pTitle.str("");
    +
    +    }//for iParticle
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode IParticleHists::execute( const xAOD::IParticleContainer* particles, float eventWeight, const xAOD::EventInfo* eventInfo) {
    +  using namespace msgIParticleHists;
    +  for( auto particle_itr : *particles ) {
    +    ANA_CHECK( this->execute( particle_itr, eventWeight, eventInfo));
    +  }
    +
    +  if( m_infoSwitch->m_numLeading > 0){
    +    int numParticles = std::min( m_infoSwitch->m_numLeading, (int)particles->size() );
    +    for(int iParticle=0; iParticle < numParticles; ++iParticle){
    +      m_NPt_l.at(iParticle)->        Fill( particles->at(iParticle)->pt()/1e3,   eventWeight);
    +      m_NPt.at(iParticle)->        Fill( particles->at(iParticle)->pt()/1e3,   eventWeight);
    +      m_NPt_m.at(iParticle)->        Fill( particles->at(iParticle)->pt()/1e3,   eventWeight);
    +      m_NPt_s.at(iParticle)->        Fill( particles->at(iParticle)->pt()/1e3,   eventWeight);
    +      m_NEta.at(iParticle)->       Fill( particles->at(iParticle)->eta(),      eventWeight);
    +      m_NPhi.at(iParticle)->       Fill( particles->at(iParticle)->phi(),      eventWeight);
    +      m_NM.at(iParticle)->         Fill( particles->at(iParticle)->m()/1e3,    eventWeight);
    +      m_NE.at(iParticle)->         Fill( particles->at(iParticle)->e()/1e3,    eventWeight);
    +      m_NRapidity.at(iParticle)->  Fill( particles->at(iParticle)->rapidity(), eventWeight);
    +
    +      if(m_infoSwitch->m_kinematic){
    +    float et = particles->at(iParticle)->e()/cosh(particles->at(iParticle)->eta())/1e3;
    +    m_NEt  .at(iParticle)->        Fill( et,   eventWeight);
    +    m_NEt_m.at(iParticle)->        Fill( et,   eventWeight);
    +    m_NEt_s.at(iParticle)->        Fill( et,   eventWeight);
    +      }
    +
    +    }
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode IParticleHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* /*eventInfo*/ ) {
    +
    +  if(m_debug) std::cout << "IParticleHists: in execute " <<std::endl;
    +
    +  //basic
    +  m_Pt_l ->      Fill( particle->pt()/1e3,    eventWeight );
    +  m_Pt ->        Fill( particle->pt()/1e3,    eventWeight );
    +  m_Pt_m ->      Fill( particle->pt()/1e3,    eventWeight );
    +  m_Pt_s ->      Fill( particle->pt()/1e3,    eventWeight );
    +  m_Eta->        Fill( particle->eta(),       eventWeight );
    +  m_Phi->        Fill( particle->phi(),       eventWeight );
    +  m_M->          Fill( particle->m()/1e3,     eventWeight );
    +  m_E->          Fill( particle->e()/1e3,     eventWeight );
    +  m_Rapidity->   Fill( particle->rapidity(),  eventWeight );
    +
    +  // kinematic
    +  if( m_infoSwitch->m_kinematic ) {
    +
    +
    +    m_Px->  Fill( particle->p4().Px()/1e3,  eventWeight );
    +    m_Py->  Fill( particle->p4().Py()/1e3,  eventWeight );
    +    m_Pz->  Fill( particle->p4().Pz()/1e3,  eventWeight );
    +
    +
    +    m_Et ->        Fill( particle->p4().Et()/1e3,    eventWeight );
    +    m_Et_m ->      Fill( particle->p4().Et()/1e3,    eventWeight );
    +    m_Et_s ->      Fill( particle->p4().Et()/1e3,    eventWeight );
    +  } // fillKinematic
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    +
    +StatusCode IParticleHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/ ) {
    +
    +  if(m_debug) std::cout << "IParticleHists: in execute " <<std::endl;
    +
    +  const TLorentzVector& partP4 = particle->p4;
    +
    +  //basic
    +  m_Pt_l ->      Fill( partP4.Pt(),    eventWeight );
    +  m_Pt ->        Fill( partP4.Pt(),    eventWeight );
    +  m_Pt_m ->      Fill( partP4.Pt(),    eventWeight );
    +  m_Pt_s ->      Fill( partP4.Pt(),    eventWeight );
    +  m_Eta->        Fill( partP4.Eta(),       eventWeight );
    +  m_Phi->        Fill( partP4.Phi(),       eventWeight );
    +  m_M->          Fill( partP4.M(),     eventWeight );
    +  m_E->          Fill( partP4.E(),     eventWeight );
    +  m_Rapidity->   Fill( partP4.Rapidity(),  eventWeight );
    +
    +  // kinematic
    +  if( m_infoSwitch->m_kinematic ) {
    +    m_Px->  Fill( partP4.Px(),  eventWeight );
    +    m_Py->  Fill( partP4.Py(),  eventWeight );
    +    m_Pz->  Fill( partP4.Pz(),  eventWeight );
    +
    +    m_Et ->        Fill( partP4.Et(),    eventWeight );
    +    m_Et_m ->      Fill( partP4.Et(),    eventWeight );
    +    m_Et_s ->      Fill( partP4.Et(),    eventWeight );
    +  } // fillKinematic
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_IParticleHistsAlgo.cxx.html b/api/program_listing_file_Root_IParticleHistsAlgo.cxx.html new file mode 100644 index 0000000000..b4b38d28c4 --- /dev/null +++ b/api/program_listing_file_Root_IParticleHistsAlgo.cxx.html @@ -0,0 +1,302 @@ + + + + + + + + + + + Program Listing for File IParticleHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IParticleHistsAlgo.cxx

    +

    Return to documentation for file (Root/IParticleHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <xAODBase/IParticleContainer.h>
    +#include <xAODEventInfo/EventInfo.h>
    +#include <AthContainers/ConstDataVector.h>
    +
    +#include <xAODAnaHelpers/IParticleHistsAlgo.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(IParticleHistsAlgo)
    +
    +IParticleHistsAlgo :: IParticleHistsAlgo (std::string className) :
    +    Algorithm(className)
    +{
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("IParticleHistsAlgo").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: histInitialize ()
    +{
    +
    +  ANA_MSG_INFO( m_name );
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IParticleHistsAlgo::AddHists( std::string name ) {
    +  std::string fullname(m_name);
    +  fullname += name; // add systematic
    +  IParticleHists* particleHists = new IParticleHists( fullname, m_detailStr, m_histPrefix, m_histTitle ); // add systematic
    +  particleHists->m_debug = msgLvl(MSG::DEBUG);
    +  ANA_CHECK( particleHists->initialize());
    +  particleHists->record( wk() );
    +  m_plots[name] = particleHists;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode IParticleHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode IParticleHistsAlgo :: initialize ()
    +{
    +  ANA_MSG_DEBUG( m_name);
    +
    +  // in case anything was missing or blank...
    +  if( m_inContainerName.empty() || m_detailStr.empty() ){
    +    ANA_MSG_ERROR( "One or more required configuration values are empty");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  // only running 1 collection
    +  if(m_inputAlgo.empty()) { AddHists( "" ); }
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: execute ()
    +{
    +  return execute<IParticleHists, xAOD::IParticleContainer>();
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode IParticleHistsAlgo :: finalize () {
    +  ANA_MSG_DEBUG( m_name );
    +  for( auto plots : m_plots ) {
    +    if(plots.second){
    +      plots.second->finalize();
    +      delete plots.second;
    +    }
    +  }
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IParticleHistsAlgo :: histFinalize () {
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_IsoCloseByCorr.cxx.html b/api/program_listing_file_Root_IsoCloseByCorr.cxx.html new file mode 100644 index 0000000000..5221d560b7 --- /dev/null +++ b/api/program_listing_file_Root_IsoCloseByCorr.cxx.html @@ -0,0 +1,447 @@ + + + + + + + + + + + Program Listing for File IsoCloseByCorr.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IsoCloseByCorr.cxx

    +

    Return to documentation for file (Root/IsoCloseByCorr.cxx)

    +
    /******************************************
    + *
    + * Interface to Isolation Close-by-Correction tool to correct variables used in the evaluation of
    + * isolation working points for the presence of leptons close-by to the object of interest.
    + * More information on the twiki:
    + * https://twiki.cern.ch/twiki/bin/view/AtlasProtected/IsolationOverlapRemoval
    + *
    + * G. Frattari (guglielmo.frattari@SPAMNOT_CERN.CH), S. Addepalli (sagara17@SPAMNOT_CERN.CH)
    + *
    + ******************************************/
    +//
    +//
    +// c++ include(s):
    +#include <iostream>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/Electron.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODEgamma/Photon.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODMuon/Muon.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/IsoCloseByCorr.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(IsoCloseByCorr)
    +
    +
    +IsoCloseByCorr :: IsoCloseByCorr () :
    +    Algorithm("IsoCloseByCorr")
    +{
    +}
    +
    +EL::StatusCode IsoCloseByCorr :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "IsoCloseByCorr" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode IsoCloseByCorr :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode IsoCloseByCorr :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode IsoCloseByCorr :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode IsoCloseByCorr :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing IsoCloseByCorr Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  //Add a track selection tool to superseed the default in the isolation close-by-correction tool
    +  ANA_MSG_INFO( " Initialising InDet::InDetTrackSelectionTool..." );
    +  m_trackSelectionTool_name = "TrackParticleSelectionTool";
    +  ANA_CHECK(checkToolStore<InDet::InDetTrackSelectionTool>(m_trackSelectionTool_name));
    +  const bool TrackSelToolInstanceExists = asg::ToolStore::contains<InDet::InDetTrackSelectionTool>(m_trackSelectionTool_name);
    +  m_trackSelection_tool = asg::AnaToolHandle<InDet::InDetTrackSelectionTool>("InDet::InDetTrackSelectionTool/"+m_trackSelectionTool_name);
    +  ANA_CHECK(m_trackSelection_tool.setProperty("minPt", 500.));
    +  ANA_CHECK(m_trackSelection_tool.setProperty("CutLevel", "Loose"));
    +  ANA_CHECK(m_trackSelection_tool.retrieve());
    +  assert(m_trackSelection_tool.isInitialized());
    +
    +
    +  //Initialize isolation tool to be input to close-by-correction tool
    +  m_IsoSelToolCloseBy_name = "IsoSelToolCloseBy";
    +  ANA_MSG_INFO( " Initialising CP::IsolationSelectionTool..." );
    +  ANA_CHECK(checkToolStore<CP::IsolationSelectionTool>(m_IsoSelToolCloseBy_name));
    +  const bool IsoSelToolInstanceExists = asg::ToolStore::contains<CP::IsolationSelectionTool>(m_IsoSelToolCloseBy_name);
    +  m_IsoSelCloseBy_tool = asg::AnaToolHandle<CP::IsolationSelectionTool>("CP::IsolationSelectionTool/"+m_IsoSelToolCloseBy_name);
    +  ANA_CHECK( m_IsoSelCloseBy_tool.setProperty("ElectronWP" , m_el_iso_WP) );
    +  ANA_CHECK( m_IsoSelCloseBy_tool.setProperty("MuonWP" , m_mu_iso_WP) );
    +  ANA_CHECK( m_IsoSelCloseBy_tool.retrieve());
    +  assert(m_IsoSelCloseBy_tool.isInitialized());
    +
    +  //Initialize the close-by-correction tool
    +  m_IsoCloseByCorr_tool_name = "IsoCloseByCorrTool";
    +  ANA_MSG_INFO( " Initialising CP::IsolationCloseByCorrectionTool..." );
    +  ANA_CHECK(checkToolStore<CP::IsolationCloseByCorrectionTool>(m_IsoCloseByCorr_tool_name));
    +  const bool IsoCloseByCorrToolInstanceExists = asg::ToolStore::contains<CP::IsolationCloseByCorrectionTool>(m_IsoCloseByCorr_tool_name);
    +  m_IsoCloseByCorr_tool = asg::AnaToolHandle<CP::IsolationCloseByCorrectionTool>("CP::IsolationCloseByCorrectionTool/"+m_IsoCloseByCorr_tool_name);
    +  ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("IsolationSelectionTool", m_IsoSelToolCloseBy_name) );
    +  ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("TrackSelectionTool", m_trackSelectionTool_name) );
    +  ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("BackupPrefix" , "Vanilla") );
    +  ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("IsolationSelectionDecorator", "CleanedUpIsolation") );
    +  ANA_CHECK( m_IsoCloseByCorr_tool.setProperty("CaloCorrectionModel", CP::IsolationCloseByCorrectionTool::UseAveragedDecorators) );
    +  ANA_CHECK( m_IsoCloseByCorr_tool.retrieve());
    +  assert(m_IsoCloseByCorr_tool.isInitialized());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode IsoCloseByCorr :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG("Applying IsoCloseByCorrectionTool... ");
    +
    +  // get the collections from TEvent or TStore
    +  const xAOD::ElectronContainer* inElectrons (nullptr);
    +  const xAOD::MuonContainer* inMuons         (nullptr);
    +  const xAOD::PhotonContainer* inPhotons     (nullptr);
    +
    +  ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +  ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +  if(m_doPhotons){
    +    ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +  }
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  if(m_IsoCloseByCorr_tool->getCloseByIsoCorrection(Gaudi::Hive::currentContext(),
    +                                                    (xAOD::ElectronContainer*)inElectrons,
    +                                                    (xAOD::MuonContainer*)inMuons,
    +                                                    (xAOD::PhotonContainer*)inPhotons).code()  == CP::CorrectionCode::Error) {
    +    ANA_MSG_ERROR("CloseByIsoCorrection returns Error code");
    +    return StatusCode::FAILURE;
    +  }
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode IsoCloseByCorr :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode IsoCloseByCorr :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode IsoCloseByCorr :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_Jet.cxx.html b/api/program_listing_file_Root_Jet.cxx.html new file mode 100644 index 0000000000..5774f50ac8 --- /dev/null +++ b/api/program_listing_file_Root_Jet.cxx.html @@ -0,0 +1,479 @@ + + + + + + + + + + + Program Listing for File Jet.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Jet.cxx

    +

    Return to documentation for file (Root/Jet.cxx)

    +
    #include <xAODAnaHelpers/Jet.h>
    +
    +using namespace xAH;
    +
    +int Jet::is_btag(BTaggerOP op) const
    +{
    +  switch(op)
    +    {
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_60:
    +      return is_DL1r_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_70:
    +      return is_DL1r_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_77:
    +      return is_DL1r_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_85:
    +      return is_DL1r_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1r_Continuous:
    +      return is_DL1r_Continuous;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60:
    +      return is_DL1dv00_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70:
    +      return is_DL1dv00_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77:
    +      return is_DL1dv00_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85:
    +      return is_DL1dv00_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_Continuous:
    +      return is_DL1dv00_Continuous;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60:
    +      return is_DL1dv01_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70:
    +      return is_DL1dv01_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77:
    +      return is_DL1dv01_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85:
    +      return is_DL1dv01_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_Continuous:
    +      return is_DL1dv01_Continuous;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_60:
    +      return is_GN120220509_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_70:
    +      return is_GN120220509_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_77:
    +      return is_GN120220509_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_85:
    +      return is_GN120220509_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_Continuous:
    +      return is_GN120220509_Continuous;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60:
    +      return is_GN2v00LegacyWP_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70:
    +      return is_GN2v00LegacyWP_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77:
    +      return is_GN2v00LegacyWP_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85:
    +      return is_GN2v00LegacyWP_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60:
    +      return is_GN2v00NewAliasWP_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70:
    +      return is_GN2v00NewAliasWP_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77:
    +      return is_GN2v00NewAliasWP_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85:
    +      return is_GN2v00NewAliasWP_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_65:
    +      return is_GN2v01_FixedCutBEff_65;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_70:
    +      return is_GN2v01_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_77:
    +      return is_GN2v01_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_85:
    +      return is_GN2v01_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_90:
    +      return is_GN2v01_FixedCutBEff_90;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_Continuous:
    +      return is_GN2v01_Continuous;
    +      break;
    +    default:
    +      return 0;
    +      break;
    +    }
    +}
    +
    +const std::vector<float>& Jet::SF_btag(BTaggerOP op) const
    +{
    +  switch(op)
    +    {
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_60:
    +      return SF_DL1r_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_70:
    +      return SF_DL1r_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_77:
    +      return SF_DL1r_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_85:
    +      return SF_DL1r_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1r_Continuous:
    +      return SF_DL1r_Continuous;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60:
    +      return SF_DL1dv00_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70:
    +      return SF_DL1dv00_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77:
    +      return SF_DL1dv00_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85:
    +      return SF_DL1dv00_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_Continuous:
    +      return SF_DL1dv00_Continuous;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60:
    +      return SF_DL1dv01_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70:
    +      return SF_DL1dv01_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77:
    +      return SF_DL1dv01_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85:
    +      return SF_DL1dv01_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_Continuous:
    +      return SF_DL1dv01_Continuous;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_60:
    +      return SF_GN120220509_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_70:
    +      return SF_GN120220509_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_77:
    +      return SF_GN120220509_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_85:
    +      return SF_GN120220509_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_Continuous:
    +      return SF_GN120220509_Continuous;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60:
    +      return SF_GN2v00LegacyWP_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70:
    +      return SF_GN2v00LegacyWP_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77:
    +      return SF_GN2v00LegacyWP_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85:
    +      return SF_GN2v00LegacyWP_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60:
    +      return SF_GN2v00NewAliasWP_FixedCutBEff_60;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70:
    +      return SF_GN2v00NewAliasWP_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77:
    +      return SF_GN2v00NewAliasWP_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85:
    +      return SF_GN2v00NewAliasWP_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_65:
    +      return SF_GN2v01_FixedCutBEff_65;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_70:
    +      return SF_GN2v01_FixedCutBEff_70;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_77:
    +      return SF_GN2v01_FixedCutBEff_77;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_85:
    +      return SF_GN2v01_FixedCutBEff_85;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_90:
    +      return SF_GN2v01_FixedCutBEff_90;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_Continuous:
    +      return SF_GN2v01_Continuous;
    +      break;
    +    default:
    +      static const std::vector<float> dummySF = {1.};
    +      return dummySF;
    +      break;
    +    }
    +}
    +
    +
    +void Jet::muonInJetCorrection(const xAH::MuonContainer* muons){
    +
    +  TLorentzVector& jetVec = p4;
    +  float minDr            = 0.5;
    +  const Muon* minDr_muon  = 0;
    +
    +  for(unsigned int iMuon = 0; iMuon < muons->size(); ++iMuon){
    +    const Muon* thisMuon = &(muons->at(iMuon));
    +    const TLorentzVector& muonVec = thisMuon->p4;
    +
    +    if(muonVec.Pt()  < 4)                       continue;
    +    if(!(thisMuon->quality.find("Medium") != thisMuon->quality.end() && thisMuon->quality.at("Medium"))) continue;
    +
    +    float thisDr = jetVec.DeltaR(muonVec);
    +    if(thisDr < minDr){
    +      minDr      = thisDr;
    +      minDr_muon = thisMuon;
    +    }
    +
    +  }
    +
    +  if(minDr < 0.4){
    +    matchedMuon = minDr_muon;
    +
    +    const TLorentzVector& matchedMuonVec = minDr_muon->p4;
    +    TLorentzVector muon_elossVec  = minDr_muon->vec_eLoss();
    +
    +    TLorentzVector JetNoMuon = (p4 - muon_elossVec);
    +    TLorentzVector newVec    = (JetNoMuon + matchedMuonVec);
    +
    +    p4.SetPtEtaPhiE(newVec.Pt (),
    +            newVec.Eta(),
    +            newVec.Phi(),
    +            newVec.E  ());
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_JetCalibrator.cxx.html b/api/program_listing_file_Root_JetCalibrator.cxx.html new file mode 100644 index 0000000000..8ef1d80568 --- /dev/null +++ b/api/program_listing_file_Root_JetCalibrator.cxx.html @@ -0,0 +1,894 @@ + + + + + + + + + + + Program Listing for File JetCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetCalibrator.cxx

    +

    Return to documentation for file (Root/JetCalibrator.cxx)

    +
    /******************************************
    + *
    + * Interface to Jet calibration tool(s).
    + *
    + * G.Facini (gabriel.facini@cern.ch), M. Milesi (marco.milesi@cern.ch), J. Dandoy (jeff.dandoy@cern.ch)
    + *
    + *
    + ******************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/Jet.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/JetCalibrator.h"
    +
    +// ROOT includes:
    +#include "TSystem.h"
    +
    +// tools
    +#include "JetCalibTools/JetCalibrationTool.h"
    +#include "JetUncertainties/JetUncertaintiesTool.h"
    +#include "JetSelectorTools/JetCleaningTool.h"
    +// #include "JetTileCorrection/JetTileCorrectionTool.h"
    +#include "METUtilities/METHelpers.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(JetCalibrator)
    +
    +JetCalibrator :: JetCalibrator () :
    +    Algorithm("JetCalibrator")
    +{
    +}
    +
    +EL::StatusCode JetCalibrator :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "JetCalibrator" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing JetCalibrator Interface... ");
    +  m_runSysts = false; //Ensure this starts false
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  // If there is no InputContainer we must stop
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( m_jetAlgo.empty() ) {
    +    m_jetAlgo = m_inContainerName;
    +    std::string jets = "Jets";
    +    std::string::size_type i = m_jetAlgo.find(jets);
    +    if (i != std::string::npos) {
    +       m_jetAlgo.erase(i, jets.length());
    +    }
    +  }
    +
    +  if ( m_outputAlgo.empty() ) {
    +    m_outputAlgo = m_jetAlgo + "_Calib_Algo";
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +  if( isMC() && m_calibSequence.find("_Insitu") != std::string::npos){
    +    ANA_MSG_ERROR( "Attempting to use an Insitu calibration sequence on MC.  Exiting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if( !isMC() && m_calibSequence.find("_Smear") != std::string::npos){
    +    ANA_MSG_ERROR( "Attempting to use an Smear calibration sequence on data.  Exiting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( !isMC() ) {
    +    // Insitu should not be applied to the trimmed jets, per Jet/Etmiss recommendation
    +    if ( m_forceInsitu && m_calibSequence.find("Insitu") == std::string::npos) m_calibSequence += "_Insitu";
    +
    +    m_calibConfig = m_calibConfigData;
    +  } else {
    +
    +    if ( isFastSim() ) {
    +      m_calibConfig = m_calibConfigAFII;
    +    } else {
    +      m_calibConfig = m_calibConfigFullSim;
    +      // Insitu should not be applied to the trimmed jets, per Jet/Etmiss recommendation
    +      if ( m_forceSmear && m_calibSequence.find("Smear") == std::string::npos) m_calibSequence += "_Smear";
    +    }
    +  }
    +
    +  if(!isFastSim() && m_uncertMCType.empty() && !m_uncertConfig.empty()){
    +    ANA_MSG_ERROR("MCType not provided, please set m_uncertMCType (MC20 or MC21) when running on FullSim samples.  Exiting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // Autoconfigure calibration sequence if the user didn't do it.
    +  // Recommended strings taken from ApplyJetCalibrationR21 Twiki.
    +  if(m_calibSequence.empty()){
    +    // Standard R=0.4 jets
    +    if(m_inContainerName.find("AntiKt4EM") != std::string::npos){
    +      if( !isMC() )           m_calibSequence = "JetArea_Residual_EtaJES_GSC_Insitu";
    +      else if( isFastSim() )  m_calibSequence = "JetArea_Residual_EtaJES_GSC";
    +      else /*FullSim*/        m_calibSequence = "JetArea_Residual_EtaJES_GSC_Smear";
    +    }
    +    // R-scan jets
    +    else if(m_inContainerName.find("AntiKt2LCTopo") != std::string::npos ||
    +            m_inContainerName.find("AntiKt6LCTopo") != std::string::npos)
    +      m_calibSequence = "JetArea_Residual_EtaJES_GSC";
    +    // R=1.0 jets
    +    else if(m_inContainerName.find("AntiKt10LCTopo")           != std::string::npos ||
    +            m_inContainerName.find("AntiKt10TrackCaloCluster") != std::string::npos)
    +      m_calibSequence = "EtaJES_JMS";
    +    // Anything else is unrecognized
    +    else{
    +      ANA_MSG_ERROR( "Cannot autoconfigure jet calibration sequence for collection " << m_systName);
    +      ANA_MSG_ERROR( "JetCalibrator::m_calibSequence needs to be set manually in configuration.");
    +      return EL::StatusCode::FAILURE;
    +    }
    +  }
    +
    +  // Warn user if they're running standard jets without in-situ in data or smearing in MC
    +  if(m_inContainerName.find("AntiKt4EM") != std::string::npos){
    +    if(!isMC()){
    +      if(m_calibSequence.find("_Insitu") == std::string::npos){
    +        ANA_MSG_WARNING("Calibrating AntiKt4EM jets in data without the in-situ step. This is not recommended, make sure it's really what you want!");
    +      }
    +    } else { // MC
    +      if(!isFastSim() && m_calibSequence.find("_Smear") == std::string::npos){
    +        ANA_MSG_WARNING("Calibrating AntiKt4EM jets in fullsim without the smearing step. This is not recommended, make sure it's really what you want!");
    +      }
    +    }
    +  }
    +
    +  // initialize jet calibration tool
    +  ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JetCalibrationTool_handle, JetCalibrationTool));
    +  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("JetCollection",m_jetAlgo));
    +  if(!m_calibConfigDir.empty()){
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("ConfigDir",m_calibConfigDir));
    +  }
    +  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("ConfigFile",m_calibConfig));
    +  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("CalibSequence",m_calibSequence));
    +  if ( !m_overrideCalibArea.empty() ) {
    +    ANA_MSG_WARNING("Overriding jet calibration area to " << m_overrideCalibArea);
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("CalibArea", m_overrideCalibArea));
    +  }
    +  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("IsData",!isMC()));
    +  ANA_CHECK( m_JetCalibrationTool_handle.setProperty("OutputLevel", msg().level()));
    +  if ( m_jetCalibToolsDEV ) {
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("DEVmode", m_jetCalibToolsDEV));
    +  }
    +  if (!m_calibGSCDepth.empty() && m_calibSequence.find("GSC") != std::string::npos) {
    +    ANA_MSG_WARNING("Using modified GSCDepth property for jet calibration '" << m_calibGSCDepth << "' which will override config file value");
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("GSCDepth", m_calibGSCDepth));
    +  }
    +  // HLT jet re-calibration configuration
    +  if (m_recalibrateHLTJets) {
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("UseHLTEventShape", true) );
    +    // Note: PrimaryVerticesContainerName is actually a private ReadHandleKey, but we can set its value via the setProperty method
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("PrimaryVerticesContainerName", m_HLTVertexContainerName) );
    +    ANA_CHECK( m_JetCalibrationTool_handle.setProperty("averageInteractionsPerCrossingKey", m_HLTAvgMuDecor) );
    +    if (m_EvtInfoHLTNPVDecor != "") {
    +      ANA_CHECK( m_JetCalibrationTool_handle.setProperty("UseNPVFromEventInfo", true) );
    +      ANA_CHECK( m_JetCalibrationTool_handle.setProperty("NPVKey", m_EvtInfoHLTNPVDecor) );
    +    }
    +  }
    +  ANA_CHECK( m_JetCalibrationTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_JetCalibrationTool_handle);
    +
    +  // initialize jet tile correction tool
    +  // if(m_doJetTileCorr && !isMC()){ // Jet Tile Correction should only be applied to data
    +  //   ANA_CHECK( ASG_MAKE_ANA_TOOL(m_JetTileCorrectionTool_handle, CP::JetTileCorrectionTool));
    +  //   ANA_CHECK( m_JetTileCorrectionTool_handle.setProperty("OutputLevel", msg().level()));
    +  //   ANA_CHECK( m_JetTileCorrectionTool_handle.retrieve());
    +  //   ANA_MSG_DEBUG("Retrieved tool: " << m_JetTileCorrectionTool_handle);
    +  // }
    +
    +  if(m_doCleaning){
    +    // initialize and configure the jet cleaning tool
    +    //------------------------------------------------
    +
    +    ANA_CHECK( m_JetCleaningTool_handle.setProperty( "CutLevel", m_jetCleanCutLevel));
    +    ANA_CHECK( m_JetCleaningTool_handle.setProperty( "DoUgly", m_jetCleanUgly));
    +    ANA_CHECK( m_JetCleaningTool_handle.setProperty( "OutputLevel", msg().level() ));
    +    ANA_CHECK( m_JetCleaningTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_JetCleaningTool_handle);
    +
    +    if( m_saveAllCleanDecisions ){
    +      m_decisionNames.push_back( "LooseBad" );
    +      m_decisionNames.push_back( "LooseBadUgly" );
    +      m_decisionNames.push_back( "LooseBadTrigger" );
    +      m_decisionNames.push_back( "LooseBadLLP" );
    +      m_decisionNames.push_back( "TightBad" );
    +      m_decisionNames.push_back( "TightBadUgly" );
    +
    +      for(unsigned int iD=0; iD < m_decisionNames.size() ; ++iD){
    +        asg::AnaToolHandle<IJetSelector> this_JetCleaningTool_handle("JetCleaningTool/JetCleaningTool_"+m_decisionNames.at(iD), this);
    +        if( m_decisionNames.at(iD).find("Ugly") != std::string::npos ){
    +          ANA_CHECK( this_JetCleaningTool_handle.setProperty( "CutLevel", m_decisionNames.at(iD).substr(0,m_decisionNames.at(iD).size()-4) ));
    +          ANA_CHECK( this_JetCleaningTool_handle.setProperty( "DoUgly", true));
    +        }else{
    +          ANA_CHECK( this_JetCleaningTool_handle.setProperty( "CutLevel", m_decisionNames.at(iD) ));
    +        }
    +        ANA_CHECK( this_JetCleaningTool_handle.setProperty( "OutputLevel", msg().level() ));
    +        ANA_CHECK( this_JetCleaningTool_handle.retrieve());
    +        ANA_MSG_DEBUG("Retrieved tool: " << this_JetCleaningTool_handle);
    +        m_AllJetCleaningTool_handles.push_back( this_JetCleaningTool_handle );
    +      }// For each cleaning decision
    +    }//If save all cleaning decisions
    +  }// if m_doCleaning
    +
    +  // initialize largeR jet truth labelling tool
    +  if(isMC() && m_useLargeRTruthLabelingTool && m_inContainerName.find("AntiKt10") != std::string::npos){
    +    // Truth labelling is required for systematics on largeR jets.
    +    // TruthLabelName typically should not be changed until new recommendations are available
    +    // The other properties have default values but need to be configured by the user
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthLabelName" , m_truthLabelName));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("IsTruthJetCollection" , m_isTruthJetCol));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("UseTRUTH3" , m_useTRUTH3));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthParticleContainerName" , m_truthParticleContainerName));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthBosonContainerName" , m_truthBosonContainerName));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("TruthTopQuarkContainerName" , m_truthTopQuarkContainerName));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.setProperty("OutputLevel" , msg().level()));
    +    // ANA_CHECK(m_JetTruthLabelingTool_handle.retrieve());
    +  }// if MC && largeR
    +
    +  // Generate nominal systematic
    +  const CP::SystematicSet recSyst = CP::SystematicSet();;
    +  m_systList = HelperFunctions::getListofSystematics( recSyst, "", 0, msg() ); // Generate nominal
    +
    +  // initialize and configure the jet uncertainity tool
    +  // only initialize if a config file has been given
    +  //------------------------------------------------
    +  if ( !m_uncertConfig.empty() && !m_systName.empty() && m_systName != "None" ) {
    +
    +    if(m_mcAndPseudoData){
    +      ANA_MSG_INFO("Input treated as MC AND pseudo-data. JER uncertainties will be run twice.");
    +      initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, false);
    +      // Need a second uncertainties tool to handle the pseudodata smearing
    +      initializeUncertaintiesTool(m_pseudodataJERTool_handle, true);
    +    }
    +    else if(m_pseudoData) {
    +      ANA_MSG_INFO("Input treated as pseudo-data");
    +      initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, true);
    +    }
    +    else {
    +      initializeUncertaintiesTool(m_JetUncertaintiesTool_handle, !isMC());
    +    }
    +
    +    //
    +    // Get a list of recommended systematics for this tool
    +    //
    +    ANA_MSG_INFO(" Initializing Jet Systematics :");
    +    const CP::SystematicSet recSysts = m_JetUncertaintiesTool_handle->recommendedSystematics();
    +
    +    //If just one systVal, then push it to the vector
    +    ANA_CHECK( this->parseSystValVector());
    +    if( m_systValVector.size() == 0) {
    +      ANA_MSG_DEBUG("Pushing the following systVal to m_systValVector: " << m_systVal );
    +      m_systValVector.push_back(m_systVal);
    +    }
    +
    +    for(unsigned int iSyst=0; iSyst < m_systValVector.size(); ++iSyst){
    +      std::vector<CP::SystematicSet> sysList = HelperFunctions::getListofSystematics( recSysts, m_systName, m_systValVector.at(iSyst), msg() );
    +
    +      for(unsigned int i=0; i < sysList.size(); ++i){
    +        // do not add another nominal syst to the list!!
    +        // CP::SystematicSet() creates an empty systematic set, compared to the set at index i
    +        if (sysList.at(i).empty() || sysList.at(i) == CP::SystematicSet() ) { ANA_MSG_INFO("sysList Empty at index " << i); continue; }
    +        m_systList.push_back( sysList.at(i) );
    +      }
    +    }
    +
    +    // Setup the tool for the 1st systematic on the list
    +    // If running all, the tool will be setup for each syst on each event
    +    if ( !m_systList.empty() ) {
    +      m_runSysts = true;
    +      // setup uncertainity tool for systematic evaluation
    +      if ( m_JetUncertaintiesTool_handle->applySystematicVariation(m_systList.at(0)) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR( "Cannot configure JetUncertaintiesTool for systematic " << m_systName);
    +        return EL::StatusCode::FAILURE;
    +      }
    +    }
    +  } // running systematics
    +  else {
    +    ANA_MSG_INFO( "No Jet Uncertainities considered");
    +  }
    +
    +  auto SystJetsNames = std::make_unique< std::vector< std::string > >();
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( m_systName.empty() && m_systName.empty() ) {
    +      ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +      break;
    +    }
    +    SystJetsNames->push_back(syst_it.name());
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +  ANA_CHECK(m_store->record(std::move(SystJetsNames), "jets_Syst"+m_name ));
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD);
    +  }
    +
    +  ANA_MSG_INFO( "JetCalibrator Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode JetCalibrator :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG("Applying Jet Calibration and Cleaning... ");
    +
    +  m_numEvent++;
    +
    +  // get the collection from TEvent or TStore
    +  const xAOD::JetContainer* inJets(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName, m_event, m_store, msg()) );
    +
    +  //
    +  // Perform nominal calibration
    +  std::pair< xAOD::JetContainer*, xAOD::ShallowAuxContainer* > calibJetsSC = xAOD::shallowCopyContainer( *inJets );
    +
    +  if ( m_addGhostMuonsToJets ) {
    +    ANA_MSG_VERBOSE("Run muon-to-jet ghost association");
    +    const xAOD::MuonContainer* muons(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(muons, "Muons", m_event, m_store, msg()) );
    +    met::addGhostMuonsToJets( *muons, *calibJetsSC.first );
    +  }
    +
    +  std::string outSCContainerName=m_outContainerName+"ShallowCopy";
    +  std::string outSCAuxContainerName=m_outContainerName+"ShallowCopyAux.";
    +  ANA_CHECK( m_store->record( calibJetsSC.first,  outSCContainerName));
    +  ANA_CHECK( m_store->record( calibJetsSC.second, outSCAuxContainerName));
    +
    +  for ( auto jet_itr : *(calibJetsSC.first) ) {
    +    m_numObject++;
    +
    +    //
    +    // truth labelling for systematics
    +    if(isMC()){
    +
    +      if(m_runSysts){
    +
    +        // b-jet truth labelling
    +        int this_TruthLabel = 0;
    +
    +        static SG::AuxElement::ConstAccessor<int> TruthLabelID ("TruthLabelID");
    +        static SG::AuxElement::ConstAccessor<int> PartonTruthLabelID ("PartonTruthLabelID");
    +
    +        if ( TruthLabelID.isAvailable( *jet_itr) ) {
    +          this_TruthLabel = TruthLabelID( *jet_itr );
    +          if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0;
    +        } else if(PartonTruthLabelID.isAvailable( *jet_itr) ) {
    +          this_TruthLabel = PartonTruthLabelID( *jet_itr );
    +          if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0;
    +        }
    +
    +        bool isBjet = false; // decide whether or not the jet is a b-jet (truth-labelling + kinematic selections)
    +        if (this_TruthLabel == 5) isBjet = true;
    +        static SG::AuxElement::Decorator<char> accIsBjet("IsBjet"); // char due to limitations of ROOT I/O, still treat it as a bool
    +        accIsBjet(*jet_itr) = isBjet;
    +
    +      }
    +
    +      if(m_useLargeRTruthLabelingTool){
    +        static SG::AuxElement::ConstAccessor<int> JetTruthLabel (m_truthLabelName);
    +
    +        // largeR jet truth labelling
    +        // if(m_JetTruthLabelingTool_handle.isInitialized() && !JetTruthLabel.isAvailable(*jet_itr)) {
    +        //   m_JetTruthLabelingTool_handle->modifyJet(*jet_itr);
    +        // }
    +      }
    +
    +    }
    +
    +  }//for jets
    +
    +  // Apply the calibration
    +  if ( m_JetCalibrationTool_handle->applyCalibration( *(calibJetsSC.first) ) == EL::StatusCode::FAILURE ) {
    +    ANA_MSG_ERROR( "JetCalibration tool reported a EL::StatusCode::FAILURE");
    +    ANA_MSG_ERROR( m_name );
    +    return StatusCode::FAILURE;
    +  }
    +
    +  // Need to be adapted to use full jet container (once tool works in R22)
    +  // if(m_doJetTileCorr && !isMC()){
    +  //   if( m_JetTileCorrectionTool_handle->applyCorrection(*jet_itr) == CP::CorrectionCode::Error ){
    +  //     ANA_MSG_ERROR( "JetTileCorrection tool reported a CP::CorrectionCode::Error");
    +  //   }
    +  // }
    +
    +  // loop over available systematics - remember syst == "Nominal" --> baseline
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +
    +    executeSystematic(syst_it, inJets, calibJetsSC, *vecOutContainerNames, false);
    +
    +    if(m_mcAndPseudoData && std::string(syst_it.name()).find("JER") != std::string::npos) {
    +      // This is a JER uncertainty that also needs a pseudodata copy done.
    +      executeSystematic(syst_it, inJets, calibJetsSC, *vecOutContainerNames, true);
    +    }
    +  }
    +
    +  // add vector of systematic names to TStore
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgo));
    +
    +  // look what do we have in TStore
    +
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetCalibrator :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode JetCalibrator::executeSystematic(const CP::SystematicSet& thisSyst, const xAOD::JetContainer* inJets,
    +                                                std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*>& calibJetsSC,
    +                                                std::vector<std::string>& vecOutContainerNames, bool isPDCopy){
    +
    +  bool nominal = thisSyst.name().empty();
    +
    +  std::string outSCContainerName, outSCAuxContainerName, outContainerName;
    +  asg::AnaToolHandle<ICPJetUncertaintiesTool>* jetUncTool(nullptr);
    +
    +  // always append the name of the variation, including nominal which is an empty string
    +  if(isPDCopy){
    +    outSCContainerName    = m_outContainerName+thisSyst.name()+"_PDShallowCopy";
    +    outSCAuxContainerName = m_outContainerName+thisSyst.name()+"_PDShallowCopyAux.";
    +    outContainerName      = m_outContainerName+thisSyst.name()+"_PD";
    +    vecOutContainerNames.push_back(thisSyst.name()+"_PD");
    +    jetUncTool = &m_pseudodataJERTool_handle;
    +  }
    +  else{
    +    outSCContainerName    = m_outContainerName+thisSyst.name()+"ShallowCopy";
    +    outSCAuxContainerName = m_outContainerName+thisSyst.name()+"ShallowCopyAux.";
    +    outContainerName      = m_outContainerName+thisSyst.name();
    +    vecOutContainerNames.push_back(thisSyst.name());
    +    jetUncTool = &m_JetUncertaintiesTool_handle;
    +  }
    +
    +  // create shallow copy;
    +  std::pair< xAOD::JetContainer*, xAOD::ShallowAuxContainer* > uncertCalibJetsSC = nominal ? calibJetsSC : xAOD::shallowCopyContainer(*calibJetsSC.first);
    +  ConstDataVector<xAOD::JetContainer>* uncertCalibJetsCDV = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +  uncertCalibJetsCDV->reserve( uncertCalibJetsSC.first->size() );
    +
    +  //Apply Uncertainties
    +  if ( m_runSysts ) {
    +    // Jet Uncertainty Systematic
    +    ANA_MSG_DEBUG("Configure for systematic variation : " << thisSyst.name());
    +    if ( (*jetUncTool)->applySystematicVariation(thisSyst) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR( "Cannot configure JetUncertaintiesTool for systematic " << m_systName);
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    for ( auto jet_itr : *(uncertCalibJetsSC.first) ) {
    +      if (m_applyFatJetPreSel) {
    +        bool validForJES = (jet_itr->pt() >= 150e3 && jet_itr->pt() < 3000e3);
    +        validForJES &= (jet_itr->m()/jet_itr->pt() >= 0 && jet_itr->m()/jet_itr->pt() < 1);
    +        validForJES &= (fabs(jet_itr->eta()) < 2);
    +        if (!validForJES) continue;
    +      }
    +
    +      if ( (*jetUncTool)->applyCorrection( *jet_itr ) == CP::CorrectionCode::Error ) {
    +        ANA_MSG_ERROR( "JetUncertaintiesTool reported a CP::CorrectionCode::Error");
    +        ANA_MSG_ERROR( m_name );
    +      }
    +    }
    +
    +  }// if m_runSysts
    +
    +  if(m_doCleaning){
    +    // decorate with cleaning decision
    +    for ( auto jet_itr : *(uncertCalibJetsSC.first) ) {
    +
    +      static SG::AuxElement::Decorator< int > isCleanDecor( "cleanJet" );
    +      const xAOD::Jet* jetToClean = jet_itr;
    +
    +      if(m_cleanParent){
    +        ElementLink<xAOD::JetContainer> el_parent = jet_itr->auxdata<ElementLink<xAOD::JetContainer> >("Parent") ;
    +        if(!el_parent.isValid())
    +          ANA_MSG_ERROR( "Could not make jet cleaning decision on the parent! It doesn't exist.");
    +        else
    +          jetToClean = *el_parent;
    +      }
    +
    +      isCleanDecor(*jet_itr) = m_JetCleaningTool_handle->keep(*jetToClean);
    +
    +      if( m_saveAllCleanDecisions ){
    +        for(unsigned int i=0; i < m_AllJetCleaningTool_handles.size() ; ++i){
    +          jet_itr->auxdata< int >(("clean_pass"+m_decisionNames.at(i)).c_str()) = m_AllJetCleaningTool_handles.at(i)->keep(*jetToClean);
    +        }
    +      }
    +    } //end cleaning decision
    +  }
    +
    +  if ( !xAOD::setOriginalObjectLink(*inJets, *(uncertCalibJetsSC.first)) ) {
    +    ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed.");
    +  }
    +
    +  // save pointers in ConstDataVector with same order
    +  for ( auto jet_itr : *(uncertCalibJetsSC.first) ) {
    +    uncertCalibJetsCDV->push_back( jet_itr );
    +  }
    +
    +  // can only sort the CDV - a bit no-no to sort the shallow copies
    +  if ( m_sort ) {
    +    std::sort( uncertCalibJetsCDV->begin(), uncertCalibJetsCDV->end(), HelperFunctions::sort_pt );
    +  }
    +
    +  // add shallow copy to TStore
    +  if(!nominal){ // nominal is always saved outside of systematics loop
    +    ANA_CHECK( m_store->record( uncertCalibJetsSC.first, outSCContainerName));
    +    ANA_CHECK( m_store->record( uncertCalibJetsSC.second, outSCAuxContainerName));
    +  }
    +  // add ConstDataVector to TStore
    +  ANA_CHECK( m_store->record( uncertCalibJetsCDV, outContainerName));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode JetCalibrator::initializeUncertaintiesTool(asg::AnaToolHandle<ICPJetUncertaintiesTool>& uncToolHandle, bool isData){
    +
    +  ANA_MSG_INFO("Initialize Jet Uncertainties Tool with " << m_uncertConfig);
    +  ANA_CHECK( ASG_MAKE_ANA_TOOL(uncToolHandle, JetUncertaintiesTool));
    +  ANA_CHECK( uncToolHandle.setProperty("JetDefinition",m_jetAlgo));
    +  ANA_CHECK( uncToolHandle.setProperty("MCType",m_uncertMCType));
    +  ANA_CHECK( uncToolHandle.setProperty("IsData",isData));
    +  ANA_CHECK( uncToolHandle.setProperty("ConfigFile", m_uncertConfig));
    +  if ( !m_overrideUncertCalibArea.empty() ) {
    +    ANA_MSG_WARNING("Overriding jet uncertainties calibration area to " << m_overrideUncertCalibArea);
    +    ANA_CHECK( uncToolHandle.setProperty("CalibArea", m_overrideUncertCalibArea));
    +  }
    +  if( !m_overrideAnalysisFile.empty() ) {
    +     ANA_MSG_WARNING("Overriding jet uncertainties analysis file to " << m_overrideAnalysisFile);
    +     ANA_CHECK( uncToolHandle.setProperty("AnalysisFile", m_overrideAnalysisFile));
    +  }
    +  if( !m_overrideUncertPath.empty() ){
    +    std::string uncPath = PathResolverFindCalibDirectory(m_overrideUncertPath);
    +    ANA_MSG_WARNING("Overriding jet uncertainties path to " << uncPath);
    +    ANA_CHECK( uncToolHandle.setProperty("Path", uncPath));
    +  }
    +  ANA_CHECK( uncToolHandle.setProperty("OutputLevel", msg().level()));
    +  ANA_CHECK( uncToolHandle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved JetUncertaintiesTool: " << uncToolHandle);
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_JetContainer.cxx.html b/api/program_listing_file_Root_JetContainer.cxx.html new file mode 100644 index 0000000000..30d4d66cda --- /dev/null +++ b/api/program_listing_file_Root_JetContainer.cxx.html @@ -0,0 +1,4091 @@ + + + + + + + + + + + Program Listing for File JetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetContainer.cxx

    +

    Return to documentation for file (Root/JetContainer.cxx)

    +
    #include "xAODAnaHelpers/JetContainer.h"
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <iostream>
    +#include <exception> // std::domain_error
    +#include "xAODTruth/TruthEventContainer.h"
    +#include "xAODBTagging/BTaggingUtilities.h"
    +
    +using namespace xAH;
    +
    +JetContainer::JetContainer(const std::string& name, const std::string& detailStr, float units, bool mc)
    +  : ParticleContainer(name,detailStr,units,mc),
    +    m_trkSelTool(nullptr)
    +
    +{
    +  // rapidity
    +  if(m_infoSwitch.m_rapidity) {
    +    m_rapidity                  =new std::vector<float>();
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched          = new     std::vector<int>               ();
    +    m_isTrigMatchedToChain   = new     std::vector<std::vector<int> > ();
    +    m_listTrigChains         = new     std::vector<std::string>       ();
    +  }
    +
    +  // clean
    +  if(m_infoSwitch.m_cleanTrig && ! (m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP)) {
    +    std::cout << "JetContainer              WARNING You asked for cleanTrig for " << name << "but didn't specify clean, cleanLight or cleanLLP. Going to assume you wanted clean." << std::endl;
    +    m_infoSwitch.m_clean = true;
    +  }
    +  if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) {
    +    if(m_infoSwitch.m_clean){
    +      m_Timing                    =new std::vector<float>();
    +      m_LArQuality                =new std::vector<float>();
    +      m_HECQuality                =new std::vector<float>();
    +      m_NegativeE                 =new std::vector<float>();
    +      m_AverageLArQF              =new std::vector<float>();
    +      m_BchCorrCell               =new std::vector<float>();
    +      m_N90Constituents           =new std::vector<float>();
    +      m_LArBadHVEnergyFrac        =new std::vector<float>();
    +      m_LArBadHVNCell             =new std::vector<int>();
    +      m_ChargedFraction           =new std::vector<float>();
    +      m_OotFracClusters5          =new std::vector<float>();
    +      m_OotFracClusters10         =new std::vector<float>();
    +      m_LeadingClusterPt          =new std::vector<float>();
    +      m_LeadingClusterSecondLambda=new std::vector<float>();
    +      m_LeadingClusterCenterLambda=new std::vector<float>();
    +      m_LeadingClusterSecondR     =new std::vector<float>();
    +      if(m_infoSwitch.m_cleanTrig) {
    +        m_clean_passLooseBadTriggerUgly=new std::vector<int>();
    +      }
    +      else {
    +        m_clean_passLooseBadUgly    =new std::vector<int>();
    +        m_clean_passTightBadUgly    =new std::vector<int>();
    +      }
    +    }
    +    if(m_infoSwitch.m_cleanTrig) {
    +      m_clean_passLooseBadTrigger =new std::vector<int>();
    +    }
    +    else {
    +      m_clean_passLooseBad        =new std::vector<int>();
    +      m_clean_passTightBad        =new std::vector<int>();
    +    }
    +    if(m_infoSwitch.m_cleanLLP) {
    +      m_clean_passLooseBadLLP        =new std::vector<int>();
    +    }
    +  }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    m_Timing = new std::vector<float>();
    +  }
    +
    +  // energy
    +  if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) {
    +    if ( m_infoSwitch.m_energy )  {
    +      m_HECFrac               = new std::vector<float>();
    +      m_CentroidR             = new std::vector<float>();
    +      m_LowEtConstituentsFrac = new std::vector<float>();
    +    }
    +    m_EMFrac                = new std::vector<float>();
    +    m_FracSamplingMax       = new std::vector<float>();
    +    m_FracSamplingMaxIndex  = new std::vector<float>();
    +    m_GhostMuonSegmentCount = new std::vector<float>();
    +    m_Width                 = new std::vector<float>();
    +  }
    +
    +  // scales
    +  if ( m_infoSwitch.m_scales ) {
    +    m_emScalePt            = new std::vector<float>();
    +    m_constScalePt     = new std::vector<float>();
    +    m_pileupScalePt    = new std::vector<float>();
    +    m_originConstitScalePt = new std::vector<float>();
    +    m_etaJESScalePt    = new std::vector<float>();
    +    m_gscScalePt       = new std::vector<float>();
    +    m_jmsScalePt           = new std::vector<float>();
    +    m_insituScalePt    = new std::vector<float>();
    +
    +    m_emScaleM             = new std::vector<float>();
    +    m_constScaleM          = new std::vector<float>();
    +    m_pileupScaleM         = new std::vector<float>();
    +    m_originConstitScaleM  = new std::vector<float>();
    +    m_etaJESScaleM         = new std::vector<float>();
    +    m_gscScaleM            = new std::vector<float>();
    +    m_jmsScaleM            = new std::vector<float>();
    +    m_insituScaleM         = new std::vector<float>();
    +  }
    +
    +  // constscale eta
    +  if ( m_infoSwitch.m_constscaleEta ) {
    +    m_constScaleEta            = new std::vector<float>();
    +  }
    +
    +  // detector eta
    +  if ( m_infoSwitch.m_detectorEta ) {
    +    m_detectorEta              = new std::vector<float>();
    +  }
    +
    +  // layer
    +  if ( m_infoSwitch.m_layer ) {
    +    m_EnergyPerSampling        = new std::vector< std::vector<float> >();
    +  }
    +
    +  // tracksAll
    +  if ( m_infoSwitch.m_trackAll ) {
    +    m_NumTrkPt1000             = new std::vector< std::vector<int> >    ();
    +    m_SumPtTrkPt1000           = new std::vector< std::vector<float> >  ();
    +    m_TrackWidthPt1000         = new std::vector< std::vector<float> >  ();
    +    m_NumTrkPt500              = new std::vector< std::vector<int> >    ();
    +    m_SumPtTrkPt500            = new std::vector< std::vector<float> >  ();
    +    m_TrackWidthPt500          = new std::vector< std::vector<float> >  ();
    +    m_JVF                      = new std::vector< std::vector<float> >  ();
    +  }
    +
    +  // trackPV
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) {
    +    if (m_infoSwitch.m_trackPV){
    +      m_NumTrkPt1000PV       = new std::vector<float>();
    +      m_SumPtTrkPt1000PV     = new std::vector<float>();
    +      m_TrackWidthPt1000PV   = new std::vector<float>();
    +      m_NumTrkPt500PV        = new std::vector<float>();
    +      m_SumPtTrkPt500PV      = new std::vector<float>();
    +      m_TrackWidthPt500PV    = new std::vector<float>();
    +      m_JVFPV                = new std::vector<float>();
    +      m_JvtJvfcorr           = new std::vector<float>();
    +      m_JvtRpt               = new std::vector<float>();
    +    }
    +    m_Jvt                = new std::vector<float>();
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) {
    +    m_JvtPass_Loose    = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Loose  = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) {
    +    m_JvtPass_Medium   = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Medium = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) {
    +    m_JvtPass_Tight    = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Tight  = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) {
    +    m_JvtPass_FixedEffPt   = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_FixedEffPt = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) {
    +    m_JvtPass_TightFwd    = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_TightFwd  = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) {
    +    m_fJvtPass_Loose   = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Loose = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) {
    +    m_fJvtPass_Medium   = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Medium = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) {
    +    m_fJvtPass_Tight    = new std::vector<int>();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Tight  = new std::vector< std::vector<float> > ();
    +    }
    +  }
    +
    +  if (m_infoSwitch.m_fJvt) {
    +    m_fJvt = new std::vector<float>();
    +  }
    +
    +  if (m_infoSwitch.m_NNJvt) {
    +    m_NNJvt = new std::vector<float>();
    +    m_NNJvtPass = new std::vector<bool>();
    +  }
    +
    +  // chargedPFOPV
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    m_SumPtChargedPFOPt500PV = new std::vector<float> ();
    +    m_fCharged = new std::vector<float> ();
    +  }
    +
    +  // allTrack
    +  // trackAll or trackPV
    +  if ( m_infoSwitch.m_allTrack ) {
    +    m_GhostTrackCount     = new std::vector<int>                  ();
    +    m_GhostTrackPt        = new std::vector<float>                ();
    +    m_GhostTrack_pt       = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_qOverP   = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_eta      = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_phi      = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_e        = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_d0       = new std::vector< std::vector<float> > ();
    +    m_GhostTrack_z0       = new std::vector< std::vector<float> > ();
    +
    +
    +    // allTrackDetail
    +    if(m_infoSwitch.m_allTrackDetail){
    +      m_GhostTrack_nPixelHits                               = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nSCTHits                                 = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nTRTHits                                 = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nPixelSharedHits                         = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nPixelSplitHits                          = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nInnermostPixelLayerHits                 = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nInnermostPixelLayerSharedHits           = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nInnermostPixelLayerSplitHits            = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nNextToInnermostPixelLayerHits           = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nNextToInnermostPixelLayerSharedHits     = new std::vector< std::vector<int> >();
    +      m_GhostTrack_nNextToInnermostPixelLayerSplitHits      = new std::vector< std::vector<int> >();
    +    }
    +  }
    +
    +  // constituent
    +  if ( m_infoSwitch.m_constituent ) {
    +    m_numConstituents        = new  std::vector< int >                ();
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll ) {
    +    m_constituentWeights     = new  std::vector< std::vector<float> > ();
    +    m_constituent_pt         = new  std::vector< std::vector<float> > ();
    +    m_constituent_eta        = new  std::vector< std::vector<float> > ();
    +    m_constituent_phi        = new  std::vector< std::vector<float> > ();
    +    m_constituent_e          = new  std::vector< std::vector<float> > ();
    +  }
    +
    +  // flavorTag
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) {
    +    m_HadronConeExclTruthLabelID        =new std::vector<int>();
    +    m_HadronConeExclExtendedTruthLabelID=new std::vector<int>();
    +  }
    +
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT  ) {
    +
    +    m_DL1r                              =new std::vector<float>();
    +    m_DL1r_pu                           =new std::vector<float>();
    +    m_DL1r_pc                           =new std::vector<float>();
    +    m_DL1r_pb                           =new std::vector<float>();
    +    m_DL1dv00                           =new std::vector<float>();
    +    m_DL1dv00_pu                        =new std::vector<float>();
    +    m_DL1dv00_pc                        =new std::vector<float>();
    +    m_DL1dv00_pb                        =new std::vector<float>();
    +    m_DL1dv01                           =new std::vector<float>();
    +    m_DL1dv01_pu                        =new std::vector<float>();
    +    m_DL1dv01_pc                        =new std::vector<float>();
    +    m_DL1dv01_pb                        =new std::vector<float>();
    +    m_GN1                               =new std::vector<float>();
    +    m_GN1_pu                            =new std::vector<float>();
    +    m_GN1_pc                            =new std::vector<float>();
    +    m_GN1_pb                            =new std::vector<float>();
    +    m_GN2v00LegacyWP                    =new std::vector<float>();
    +    m_GN2v00LegacyWP_pu                 =new std::vector<float>();
    +    m_GN2v00LegacyWP_pc                 =new std::vector<float>();
    +    m_GN2v00LegacyWP_pb                 =new std::vector<float>();
    +    m_GN2v00NewAliasWP                  =new std::vector<float>();
    +    m_GN2v00NewAliasWP_pu               =new std::vector<float>();
    +    m_GN2v00NewAliasWP_pc               =new std::vector<float>();
    +    m_GN2v00NewAliasWP_pb               =new std::vector<float>();
    +    m_GN2v01                            =new std::vector<float>();
    +    m_GN2v01_pu                         =new std::vector<float>();
    +    m_GN2v01_pc                         =new std::vector<float>();
    +    m_GN2v01_pb                         =new std::vector<float>();
    +    m_GN2v01_ptau                       =new std::vector<float>();
    +
    +    // Jet Fitter
    +    if( m_infoSwitch.m_jetFitterDetails){
    +      m_JetFitter_nVTX             = new std::vector<float>();
    +      m_JetFitter_nSingleTracks    = new std::vector<float>();
    +      m_JetFitter_nTracksAtVtx     = new std::vector<float>();
    +      m_JetFitter_mass             = new std::vector<float>();
    +      m_JetFitter_energyFraction   = new std::vector<float>();
    +      m_JetFitter_significance3d   = new std::vector<float>();
    +      m_JetFitter_deltaeta         = new std::vector<float>();
    +      m_JetFitter_deltaphi         = new std::vector<float>();
    +      m_JetFitter_N2Tpar           = new std::vector<float>();
    +    }
    +
    +    // SV Details
    +    if( m_infoSwitch.m_svDetails){
    +
    +      m_SV0               = new      std::vector<float>();
    +
    +
    +      m_sv0_NGTinSvx      = new     std::vector<float>();
    +      m_sv0_N2Tpair       = new     std::vector<float>();
    +      m_sv0_massvx        = new     std::vector<float>();
    +      m_sv0_efracsvx      = new     std::vector<float>();
    +      m_sv0_normdist      = new     std::vector<float>();
    +
    +      m_SV1               = new     std::vector<float>();
    +      m_SV1IP3D           = new     std::vector<float>();
    +      m_COMBx             = new     std::vector<float>();
    +      m_sv1_pu            = new     std::vector<float>();
    +      m_sv1_pb            = new     std::vector<float>();
    +      m_sv1_pc            = new     std::vector<float>();
    +      m_sv1_c             = new     std::vector<float>();
    +      m_sv1_cu            = new     std::vector<float>();
    +      m_sv1_NGTinSvx      = new     std::vector<float>();
    +      m_sv1_N2Tpair       = new     std::vector<float>();
    +      m_sv1_massvx        = new     std::vector<float>();
    +      m_sv1_efracsvx      = new     std::vector<float>();
    +      m_sv1_normdist      = new     std::vector<float>();
    +      m_sv1_Lxy           = new     std::vector<float>();
    +      m_sv1_sig3d         = new     std::vector<float>();
    +      m_sv1_L3d           = new     std::vector<float>();
    +      m_sv1_distmatlay    = new     std::vector<float>();
    +      m_sv1_dR            = new     std::vector<float>();
    +    }
    +
    +    // IP3D
    +    if( m_infoSwitch.m_ipDetails){
    +      m_IP2D_pu        = new std::vector<float>();
    +      m_IP2D_pb        = new std::vector<float>();
    +      m_IP2D_pc        = new std::vector<float>();
    +      m_IP2D           = new std::vector<float>();
    +      m_IP2D_c         = new std::vector<float>();
    +      m_IP2D_cu        = new std::vector<float>();
    +      m_nIP2DTracks    = new std::vector<float>();
    +
    +      m_IP2D_gradeOfTracks              = new std::vector<std::vector<float> >();
    +      m_IP2D_flagFromV0ofTracks         = new std::vector<std::vector<float> >();
    +      m_IP2D_valD0wrtPVofTracks         = new std::vector<std::vector<float> >();
    +      m_IP2D_sigD0wrtPVofTracks         = new std::vector<std::vector<float> >();
    +      m_IP2D_weightBofTracks            = new std::vector<std::vector<float> >();
    +      m_IP2D_weightCofTracks            = new std::vector<std::vector<float> >();
    +      m_IP2D_weightUofTracks            = new std::vector<std::vector<float> >();
    +
    +      m_IP3D         = new std::vector<float>();
    +      m_IP3D_pu      = new std::vector<float>();
    +      m_IP3D_pb      = new std::vector<float>();
    +      m_IP3D_pc      = new std::vector<float>();
    +      m_IP3D_c       = new std::vector<float>();
    +      m_IP3D_cu      = new std::vector<float>();
    +      m_nIP3DTracks  = new std::vector<float>();
    +      m_IP3D_gradeOfTracks        = new  std::vector<std::vector<float> >();
    +      m_IP3D_flagFromV0ofTracks   = new  std::vector<std::vector<float> >();
    +      m_IP3D_valD0wrtPVofTracks   = new  std::vector<std::vector<float> >();
    +      m_IP3D_sigD0wrtPVofTracks   = new  std::vector<std::vector<float> >();
    +      m_IP3D_valZ0wrtPVofTracks   = new  std::vector<std::vector<float> >();
    +      m_IP3D_sigZ0wrtPVofTracks   = new  std::vector<std::vector<float> >();
    +      m_IP3D_weightBofTracks      = new  std::vector<std::vector<float> >();
    +      m_IP3D_weightCofTracks      = new  std::vector<std::vector<float> >();
    +      m_IP3D_weightUofTracks      = new  std::vector<std::vector<float> >();
    +    }
    +
    +    if( m_infoSwitch.m_JVC ) {
    +      m_JetVertexCharge_discriminant = new std::vector<double>();
    +    }
    +
    +  }
    +
    +  //  flavorTagHLT
    +  if( m_infoSwitch.m_flavorTagHLT  ) {
    +    m_vtxOnlineValid     = new  std::vector<float>();
    +    m_vtxHadDummy        = new  std::vector<float>();
    +
    +    m_bs_online_vx       = new  std::vector<float>();
    +    m_bs_online_vy       = new  std::vector<float>();
    +    m_bs_online_vz       = new  std::vector<float>();
    +
    +    m_vtx_offline_x0     = new  std::vector<float>();
    +    m_vtx_offline_y0     = new  std::vector<float>();
    +    m_vtx_offline_z0     = new  std::vector<float>();
    +
    +    m_vtx_online_x0      = new  std::vector<float>();
    +    m_vtx_online_y0      = new  std::vector<float>();
    +    m_vtx_online_z0      = new  std::vector<float>();
    +
    +    m_vtx_online_bkg_x0  = new  std::vector<float>();
    +    m_vtx_online_bkg_y0  = new  std::vector<float>();
    +    m_vtx_online_bkg_z0  = new  std::vector<float>();
    +  }
    +
    +  if( m_infoSwitch.m_flavorTagTLA  ) {
    +    m_fastDIPS     =new std::vector<float>();
    +    m_fastDIPS_pu  =new std::vector<float>();
    +    m_fastDIPS_pc  =new std::vector<float>();
    +    m_fastDIPS_pb  =new std::vector<float>();
    +  }
    +
    +  if( !m_infoSwitch.m_jetBTag.empty() ) {
    +    std::stringstream ss_wpName;
    +    for(const auto& btaginfo : m_infoSwitch.m_jetBTag)
    +      {
    +    for(auto wp : btaginfo.second)
    +      {
    +        ss_wpName.str("");
    +        ss_wpName << wp.first << "_" << std::setfill('0') << std::setw(2) << wp.second;
    +        m_btags.push_back(new btagOpPoint(m_mc, btaginfo.first, ss_wpName.str()));
    +      }
    +      }
    +  }
    +
    +  if ( !m_infoSwitch.m_jetBTagCts.empty() ){
    +    for(const auto& tagger: m_infoSwitch.m_jetBTagCts)
    +    {
    +      m_btags.push_back(new btagOpPoint(m_mc,tagger,"Continuous"));
    +    }
    +  }
    +
    +  // area
    +  if( m_infoSwitch.m_area ) {
    +    m_GhostArea          = new std::vector<float>();
    +    m_ActiveArea         = new std::vector<float>();
    +    m_VoronoiArea        = new std::vector<float>();
    +    m_ActiveArea4vec_pt  = new std::vector<float>();
    +    m_ActiveArea4vec_eta = new std::vector<float>();
    +    m_ActiveArea4vec_phi = new std::vector<float>();
    +    m_ActiveArea4vec_m   = new std::vector<float>();
    +  }
    +
    +
    +  // truth
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    m_ConeTruthLabelID  =new std::vector<int>();
    +    m_TruthCount        =new std::vector<int>();
    +    m_TruthLabelDeltaR_B=new std::vector<float>;
    +    m_TruthLabelDeltaR_C=new std::vector<float>;
    +    m_TruthLabelDeltaR_T=new std::vector<float>;
    +    m_PartonTruthLabelID=new std::vector<int>();
    +    m_GhostTruthAssociationFraction=new std::vector<float>;
    +    m_truth_E  =new std::vector<float>;
    +    m_truth_pt =new std::vector<float>;
    +    m_truth_phi=new std::vector<float>;
    +    m_truth_eta=new std::vector<float>;
    +  }
    +
    +  // truth detail
    +  if ( m_infoSwitch.m_truthDetails ) {
    +    m_GhostBHadronsFinalCount       = new       std::vector<int>   ();
    +    m_GhostBHadronsInitialCount     = new       std::vector<int>   ();
    +    m_GhostBQuarksFinalCount        = new       std::vector<int>   ();
    +    m_GhostBHadronsFinalPt          = new       std::vector<float> ();
    +    m_GhostBHadronsInitialPt        = new       std::vector<float> ();
    +    m_GhostBQuarksFinalPt           = new       std::vector<float> ();
    +
    +    m_GhostCHadronsFinalCount       = new       std::vector<int>   ();
    +    m_GhostCHadronsInitialCount     = new       std::vector<int>   ();
    +    m_GhostCQuarksFinalCount        = new       std::vector<int>   ();
    +    m_GhostCHadronsFinalPt          = new       std::vector<float> ();
    +    m_GhostCHadronsInitialPt        = new       std::vector<float> ();
    +    m_GhostCQuarksFinalPt           = new       std::vector<float> ();
    +
    +    m_GhostTausFinalCount           = new       std::vector<int>   ();
    +    m_GhostTausFinalPt              = new       std::vector<float> ();
    +
    +    m_truth_pdgId                   = new       std::vector<int>   ();
    +    m_truth_partonPt                = new       std::vector<float> ();
    +    m_truth_partonDR                = new      std::vector<float>  ();
    +  }
    +
    +  // charge
    +  if ( m_infoSwitch.m_charge ) {
    +    m_charge   =new std::vector<double>();
    +  }
    +
    +  // passSel
    +  if ( m_infoSwitch.m_passSel ) {
    +    m_passSel  =new std::vector<char>();
    +  }
    +
    +  // passOR
    +  if ( m_infoSwitch.m_passOR ) {
    +    m_passOR  =new std::vector<char>();
    +  }
    +
    +}
    +
    +JetContainer::~JetContainer()
    +{
    +  if(m_debug) std::cout << " Deleting JetContainer "  << std::endl;
    +  if(m_infoSwitch.m_rapidity) {
    +    delete m_rapidity;
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    delete m_isTrigMatched         ;
    +    delete m_isTrigMatchedToChain  ;
    +    delete m_listTrigChains        ;
    +  }
    +
    +  // clean
    +  if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) {
    +    if(m_infoSwitch.m_clean){
    +      delete m_Timing;
    +      delete m_LArQuality;
    +      delete m_HECQuality;
    +      delete m_NegativeE;
    +      delete m_AverageLArQF;
    +      delete m_BchCorrCell;
    +      delete m_N90Constituents;
    +      delete m_LArBadHVEnergyFrac;
    +      delete m_LArBadHVNCell;
    +      delete m_ChargedFraction;
    +      delete m_OotFracClusters5;
    +      delete m_OotFracClusters10;
    +      delete m_LeadingClusterPt;
    +      delete m_LeadingClusterSecondLambda;
    +      delete m_LeadingClusterCenterLambda;
    +      delete m_LeadingClusterSecondR;
    +      if(m_infoSwitch.m_cleanTrig) {
    +        delete m_clean_passLooseBadTriggerUgly;
    +      }
    +      else {
    +        delete m_clean_passLooseBadUgly;
    +        delete m_clean_passTightBadUgly;
    +      }
    +    }
    +    if(m_infoSwitch.m_cleanTrig) {
    +      delete m_clean_passLooseBadTrigger;
    +    }
    +    else {
    +      delete m_clean_passLooseBad;
    +      delete m_clean_passTightBad;
    +    }
    +    if(m_infoSwitch.m_cleanLLP) {
    +      delete m_clean_passLooseBadLLP;
    +    }
    +  }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    delete m_Timing;
    +  }
    +
    +  // energy
    +  if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) {
    +    if ( m_infoSwitch.m_energy ){
    +      delete m_HECFrac;
    +      delete m_CentroidR;
    +      delete m_LowEtConstituentsFrac;
    +    }
    +    delete m_EMFrac;
    +    delete m_FracSamplingMax;
    +    delete m_FracSamplingMaxIndex;
    +    delete m_GhostMuonSegmentCount;
    +    delete m_Width;
    +  }
    +
    +  // scales
    +  if ( m_infoSwitch.m_scales ) {
    +    delete m_emScalePt             ;
    +    delete m_constScalePt      ;
    +    delete m_pileupScalePt         ;
    +    delete m_originConstitScalePt  ;
    +    delete m_etaJESScalePt     ;
    +    delete m_gscScalePt        ;
    +    delete m_jmsScalePt            ;
    +    delete m_insituScalePt     ;
    +
    +    delete m_emScaleM             ;
    +    delete m_constScaleM          ;
    +    delete m_pileupScaleM                 ;
    +    delete m_originConstitScaleM  ;
    +    delete m_etaJESScaleM         ;
    +    delete m_gscScaleM            ;
    +    delete m_jmsScaleM            ;
    +    delete m_insituScaleM         ;
    +  }
    +
    +  // constscale eta
    +  if ( m_infoSwitch.m_constscaleEta ) {
    +    delete m_constScaleEta         ;
    +  }
    +
    +  // detector eta
    +  if ( m_infoSwitch.m_detectorEta ) {
    +    delete m_detectorEta;
    +  }
    +
    +  // layer
    +  if ( m_infoSwitch.m_layer ) {
    +    delete m_EnergyPerSampling;
    +  }
    +
    +  // tracksAll
    +  if ( m_infoSwitch.m_trackAll ) {
    +    delete m_NumTrkPt1000     ;
    +    delete m_SumPtTrkPt1000   ;
    +    delete m_TrackWidthPt1000 ;
    +    delete m_NumTrkPt500      ;
    +    delete m_SumPtTrkPt500    ;
    +    delete m_TrackWidthPt500  ;
    +    delete m_JVF              ;
    +  }
    +
    +
    +  // trackPV
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) {
    +    if ( m_infoSwitch.m_trackPV ){
    +      delete m_NumTrkPt1000PV;
    +      delete m_SumPtTrkPt1000PV;
    +      delete m_TrackWidthPt1000PV;
    +      delete m_NumTrkPt500PV;
    +      delete m_SumPtTrkPt500PV;
    +      delete m_TrackWidthPt500PV;
    +      delete m_JVFPV;
    +      delete m_JvtJvfcorr;
    +      delete m_JvtRpt;
    +    }
    +    delete m_Jvt;
    +  }
    +
    +  if (m_infoSwitch.m_fJvt){
    +    delete m_fJvt;
    +  }
    +
    +  if (m_infoSwitch.m_NNJvt){
    +    delete m_NNJvt;
    +    delete m_NNJvtPass;
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) {
    +    delete m_JvtPass_Loose;
    +      if ( m_mc ) {
    +          delete m_JvtEff_SF_Loose;
    +      }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) {
    +    delete m_JvtPass_Medium;
    +    if ( m_mc ) {
    +      delete m_JvtEff_SF_Medium;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) {
    +    delete m_JvtPass_Tight;
    +    if ( m_mc ) {
    +      delete m_JvtEff_SF_Tight;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) {
    +    delete m_JvtPass_FixedEffPt;
    +    if ( m_mc ) {
    +      delete m_JvtEff_SF_FixedEffPt;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) {
    +    delete m_JvtPass_TightFwd;
    +    if ( m_mc ) {
    +      delete m_JvtEff_SF_TightFwd;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) {
    +    delete m_fJvtPass_Loose;
    +    if ( m_mc ) {
    +      delete m_fJvtEff_SF_Loose;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) {
    +    delete m_fJvtPass_Medium;
    +    if ( m_mc ) {
    +      delete m_fJvtEff_SF_Medium;
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) {
    +    delete m_fJvtPass_Tight;
    +    if ( m_mc ) {
    +      delete m_fJvtEff_SF_Tight;
    +    }
    +  }
    +
    +  // chargedPFOPV
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    delete m_SumPtChargedPFOPt500PV;
    +    delete m_fCharged;
    +  }
    +
    +  // allTrack
    +  // trackAll or trackPV
    +  if ( m_infoSwitch.m_allTrack ) {
    +    delete m_GhostTrackCount    ;
    +    delete m_GhostTrackPt       ;
    +    delete m_GhostTrack_pt      ;
    +    delete m_GhostTrack_qOverP  ;
    +    delete m_GhostTrack_eta     ;
    +    delete m_GhostTrack_phi     ;
    +    delete m_GhostTrack_e       ;
    +    delete m_GhostTrack_d0      ;
    +    delete m_GhostTrack_z0      ;
    +
    +
    +    // allTrackDetail
    +    if(m_infoSwitch.m_allTrackDetail){
    +      delete m_GhostTrack_nPixelHits                               ;
    +      delete m_GhostTrack_nSCTHits                                 ;
    +      delete m_GhostTrack_nTRTHits                                 ;
    +      delete m_GhostTrack_nPixelSharedHits                         ;
    +      delete m_GhostTrack_nPixelSplitHits                          ;
    +      delete m_GhostTrack_nInnermostPixelLayerHits                 ;
    +      delete m_GhostTrack_nInnermostPixelLayerSharedHits           ;
    +      delete m_GhostTrack_nInnermostPixelLayerSplitHits            ;
    +      delete m_GhostTrack_nNextToInnermostPixelLayerHits           ;
    +      delete m_GhostTrack_nNextToInnermostPixelLayerSharedHits     ;
    +      delete m_GhostTrack_nNextToInnermostPixelLayerSplitHits      ;
    +    }
    +  }
    +
    +  // constituent
    +  if ( m_infoSwitch.m_constituent ) {
    +    delete m_numConstituents;
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll ) {
    +    delete m_constituentWeights;
    +    delete m_constituent_pt    ;
    +    delete m_constituent_eta   ;
    +    delete m_constituent_phi   ;
    +    delete m_constituent_e     ;
    +  }
    +
    +
    +  // flavorTag
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) {
    +    delete m_HadronConeExclTruthLabelID;
    +    delete m_HadronConeExclExtendedTruthLabelID;
    +  }
    +
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT ) {
    +    // flavorTag
    +
    +    delete m_DL1r;
    +    delete m_DL1r_pu;
    +    delete m_DL1r_pc;
    +    delete m_DL1r_pb;
    +    delete m_DL1dv00;
    +    delete m_DL1dv00_pu;
    +    delete m_DL1dv00_pc;
    +    delete m_DL1dv00_pb;
    +    delete m_DL1dv01;
    +    delete m_DL1dv01_pu;
    +    delete m_DL1dv01_pc;
    +    delete m_DL1dv01_pb;
    +    delete m_GN1;
    +    delete m_GN1_pu;
    +    delete m_GN1_pc;
    +    delete m_GN1_pb;
    +    delete m_GN2v00LegacyWP;
    +    delete m_GN2v00LegacyWP_pu;
    +    delete m_GN2v00LegacyWP_pc;
    +    delete m_GN2v00LegacyWP_pb;
    +    delete m_GN2v00NewAliasWP;
    +    delete m_GN2v00NewAliasWP_pu;
    +    delete m_GN2v00NewAliasWP_pc;
    +    delete m_GN2v00NewAliasWP_pb;
    +    delete m_GN2v01;
    +    delete m_GN2v01_pu;
    +    delete m_GN2v01_pc;
    +    delete m_GN2v01_pb;
    +    delete m_GN2v01_ptau;
    +
    +    // Jet Fitter
    +    if( m_infoSwitch.m_jetFitterDetails){
    +      delete m_JetFitter_nVTX          ;
    +      delete m_JetFitter_nSingleTracks ;
    +      delete m_JetFitter_nTracksAtVtx  ;
    +      delete m_JetFitter_mass          ;
    +      delete m_JetFitter_energyFraction;
    +      delete m_JetFitter_significance3d;
    +      delete m_JetFitter_deltaeta      ;
    +      delete m_JetFitter_deltaphi      ;
    +      delete m_JetFitter_N2Tpar        ;
    +    }
    +    // SV Details
    +    if( m_infoSwitch.m_svDetails){
    +
    +      delete m_SV0;
    +      delete m_sv0_NGTinSvx  ;
    +      delete m_sv0_N2Tpair   ;
    +      delete m_sv0_massvx    ;
    +      delete m_sv0_efracsvx  ;
    +      delete m_sv0_normdist  ;
    +
    +      delete m_SV1;
    +      delete m_SV1IP3D;
    +      delete m_COMBx;
    +      delete m_sv1_pb        ;
    +      delete m_sv1_pc        ;
    +      delete m_sv1_c         ;
    +      delete m_sv1_cu        ;
    +      delete m_sv1_NGTinSvx  ;
    +      delete m_sv1_N2Tpair   ;
    +      delete m_sv1_massvx    ;
    +      delete m_sv1_efracsvx  ;
    +      delete m_sv1_normdist  ;
    +      delete m_sv1_Lxy       ;
    +      delete m_sv1_sig3d     ;
    +      delete m_sv1_L3d       ;
    +      delete m_sv1_distmatlay;
    +      delete m_sv1_dR        ;
    +    }
    +
    +    // IP3D
    +    if( m_infoSwitch.m_ipDetails){
    +
    +      delete m_IP2D_pu     ;
    +      delete m_IP2D_pb     ;
    +      delete m_IP2D_pc     ;
    +      delete m_IP2D        ;
    +      delete m_IP2D_c      ;
    +      delete m_IP2D_cu     ;
    +      delete m_nIP2DTracks ;
    +
    +      delete m_IP2D_gradeOfTracks     ;
    +      delete m_IP2D_flagFromV0ofTracks;
    +      delete m_IP2D_valD0wrtPVofTracks;
    +      delete m_IP2D_sigD0wrtPVofTracks;
    +      delete m_IP2D_weightBofTracks   ;
    +      delete m_IP2D_weightCofTracks   ;
    +      delete m_IP2D_weightUofTracks   ;
    +
    +      delete m_IP3D;
    +      delete m_IP3D_pu     ;
    +      delete m_IP3D_pb     ;
    +      delete m_IP3D_pc     ;
    +      delete m_IP3D_c      ;
    +      delete m_IP3D_cu     ;
    +
    +      delete m_nIP3DTracks ;
    +      delete m_IP3D_gradeOfTracks       ;
    +      delete m_IP3D_flagFromV0ofTracks  ;
    +      delete m_IP3D_valD0wrtPVofTracks  ;
    +      delete m_IP3D_sigD0wrtPVofTracks  ;
    +      delete m_IP3D_valZ0wrtPVofTracks  ;
    +      delete m_IP3D_sigZ0wrtPVofTracks  ;
    +      delete m_IP3D_weightBofTracks     ;
    +      delete m_IP3D_weightCofTracks     ;
    +      delete m_IP3D_weightUofTracks     ;
    +
    +    }
    +
    +    if( m_infoSwitch.m_JVC ) {
    +      delete m_JetVertexCharge_discriminant          ;
    +    }
    +
    +  }
    +
    +    //  flavorTagHLT
    +  if( m_infoSwitch.m_flavorTagHLT  ) {
    +    delete m_vtxOnlineValid     ;
    +    delete m_vtxHadDummy        ;
    +    delete m_bs_online_vx       ;
    +    delete m_bs_online_vy       ;
    +    delete m_bs_online_vz       ;
    +
    +    delete m_vtx_offline_x0     ;
    +    delete m_vtx_offline_y0     ;
    +    delete m_vtx_offline_z0     ;
    +
    +    delete m_vtx_online_x0      ;
    +    delete m_vtx_online_y0      ;
    +    delete m_vtx_online_z0      ;
    +
    +    delete m_vtx_online_bkg_x0  ;
    +    delete m_vtx_online_bkg_y0  ;
    +    delete m_vtx_online_bkg_z0  ;
    +  }
    +
    +  if( m_infoSwitch.m_flavorTagTLA ) {
    +    delete m_fastDIPS;
    +    delete m_fastDIPS_pu;
    +    delete m_fastDIPS_pc;
    +    delete m_fastDIPS_pb;
    +  }
    +
    +  for(auto btag : m_btags)
    +    delete btag;
    +
    +  // area
    +  if( m_infoSwitch.m_area ) {
    +    delete m_GhostArea          ;
    +    delete m_ActiveArea         ;
    +    delete m_VoronoiArea        ;
    +    delete m_ActiveArea4vec_pt  ;
    +    delete m_ActiveArea4vec_eta ;
    +    delete m_ActiveArea4vec_phi ;
    +    delete m_ActiveArea4vec_m   ;
    +  }
    +
    +
    +  // truth
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    delete m_ConeTruthLabelID;
    +    delete m_TruthCount;
    +    delete m_TruthLabelDeltaR_B;
    +    delete m_TruthLabelDeltaR_C;
    +    delete m_TruthLabelDeltaR_T;
    +    delete m_PartonTruthLabelID;
    +    delete m_GhostTruthAssociationFraction;
    +    delete m_truth_E;
    +    delete m_truth_pt;
    +    delete m_truth_phi;
    +    delete m_truth_eta;
    +  }
    +
    +    // truth detail
    +  if ( m_infoSwitch.m_truthDetails ) {
    +    delete m_GhostBHadronsFinalCount   ;
    +    delete m_GhostBHadronsInitialCount ;
    +    delete m_GhostBQuarksFinalCount    ;
    +    delete m_GhostBHadronsFinalPt      ;
    +    delete m_GhostBHadronsInitialPt    ;
    +    delete m_GhostBQuarksFinalPt       ;
    +
    +    delete m_GhostCHadronsFinalCount   ;
    +    delete m_GhostCHadronsInitialCount ;
    +    delete m_GhostCQuarksFinalCount    ;
    +    delete m_GhostCHadronsFinalPt      ;
    +    delete m_GhostCHadronsInitialPt    ;
    +    delete m_GhostCQuarksFinalPt       ;
    +
    +    delete m_GhostTausFinalCount       ;
    +    delete m_GhostTausFinalPt          ;
    +
    +    delete m_truth_pdgId               ;
    +    delete m_truth_partonPt            ;
    +    delete m_truth_partonDR            ;
    +  }
    +
    +
    +  // charge
    +  if ( m_infoSwitch.m_charge ) {
    +    delete m_charge;
    +  }
    +
    +  // passSel
    +  if ( m_infoSwitch.m_passSel ) {
    +    delete m_passSel;
    +  }
    +
    +  // passOR
    +  if ( m_infoSwitch.m_passOR ) {
    +    delete m_passOR;
    +  }
    +
    +}
    +
    +void JetContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  if(m_infoSwitch.m_rapidity)
    +    {
    +      connectBranch<float>(tree,"rapidity",                      &m_rapidity);
    +    }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    connectBranch<int>              (tree, "isTrigMatched",        &m_isTrigMatched);
    +    connectBranch<std::vector<int> >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain );
    +    connectBranch<std::string>      (tree, "listTrigChains",       &m_listTrigChains );
    +  }
    +
    +  if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP)
    +    {
    +      if(m_infoSwitch.m_clean){
    +        connectBranch<float>(tree, "Timing",                     &m_Timing);
    +        connectBranch<float>(tree, "LArQuality",                 &m_LArQuality);
    +        connectBranch<int>  (tree, "LArBadHVNCell",              &m_LArBadHVNCell);
    +        connectBranch<float>(tree, "LArQuality",                 &m_LArQuality);
    +        connectBranch<float>(tree, "HECQuality",                 &m_HECQuality);
    +        connectBranch<float>(tree, "NegativeE",                  &m_NegativeE);
    +        connectBranch<float>(tree, "AverageLArQF",               &m_AverageLArQF);
    +        connectBranch<float>(tree, "BchCorrCell",                &m_BchCorrCell);
    +        connectBranch<float>(tree, "N90Constituents",            &m_N90Constituents);
    +        connectBranch<float>(tree, "LArBadHVEnergyFrac",         &m_LArBadHVEnergyFrac);
    +        connectBranch<float>(tree, "ChargedFraction",            &m_ChargedFraction);
    +        connectBranch<float>(tree, "OotFracClusters5",           &m_OotFracClusters5);
    +        connectBranch<float>(tree, "OotFracClusters10",          &m_OotFracClusters10);
    +        connectBranch<float>(tree, "LeadingClusterPt",           &m_LeadingClusterPt);
    +        connectBranch<float>(tree, "LeadingClusterSecondLambda", &m_LeadingClusterSecondLambda);
    +        connectBranch<float>(tree, "LeadingClusterCenterLambda", &m_LeadingClusterCenterLambda);
    +        connectBranch<float>(tree, "LeadingClusterSecondR",      &m_LeadingClusterSecondR);
    +        if(m_infoSwitch.m_cleanTrig) {
    +          connectBranch<int>  (tree, "clean_passLooseBadTriggerUgly",&m_clean_passLooseBadTriggerUgly);
    +        }
    +        else {
    +          connectBranch<int>  (tree, "clean_passLooseBadUgly",     &m_clean_passLooseBadUgly);
    +          connectBranch<int>  (tree, "clean_passTightBadUgly",     &m_clean_passTightBadUgly);
    +        }
    +      }
    +      if(m_infoSwitch.m_cleanTrig) {
    +        connectBranch<int>  (tree, "clean_passLooseBadTrigger",  &m_clean_passLooseBadTrigger);
    +      }
    +      else {
    +        connectBranch<int>  (tree, "clean_passLooseBad",         &m_clean_passLooseBad);
    +        connectBranch<int>  (tree, "clean_passTightBad",         &m_clean_passTightBad);
    +      }
    +      if(m_infoSwitch.m_cleanLLP) {
    +        connectBranch<int>  (tree, "clean_passLooseBadLLP",         &m_clean_passLooseBadLLP);
    +      }
    +    }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    connectBranch<float>(tree, "Timing", &m_Timing);
    +  }
    +
    +  if(m_infoSwitch.m_energy || m_infoSwitch.m_energyLight )
    +    {
    +      if ( m_infoSwitch.m_energy ){
    +        connectBranch<float>(tree, "HECFrac",               &m_HECFrac);
    +        connectBranch<float>(tree, "CentroidR",             &m_CentroidR);
    +        connectBranch<float>(tree, "LowEtConstituentsFrac", &m_LowEtConstituentsFrac);
    +      }
    +      connectBranch<float>(tree, "EMFrac",                &m_EMFrac);
    +      connectBranch<float>(tree, "FracSamplingMax",       &m_FracSamplingMax);
    +      connectBranch<float>(tree, "FracSamplingMaxIndex",  &m_FracSamplingMaxIndex);
    +      connectBranch<float>(tree, "GhostMuonSegmentCount", &m_GhostMuonSegmentCount);
    +      connectBranch<float>(tree, "Width",                 &m_Width);
    +    }
    +
    +  if(m_infoSwitch.m_trackPV)
    +    {
    +      connectBranch<float>(tree, "NumTrkPt1000PV",     &m_NumTrkPt1000PV);
    +      connectBranch<float>(tree, "SumPtTrkPt1000PV",   &m_SumPtTrkPt1000PV);
    +      connectBranch<float>(tree, "TrackWidthPt1000PV", &m_TrackWidthPt1000PV);
    +      connectBranch<float>(tree, "NumTrkPt500PV",      &m_NumTrkPt500PV);
    +      connectBranch<float>(tree, "SumPtTrkPt500PV",    &m_SumPtTrkPt500PV);
    +      connectBranch<float>(tree, "TrackWidthPt500PV",  &m_TrackWidthPt500PV);
    +      connectBranch<float>(tree, "JVFPV",              &m_JVFPV);
    +    }
    +
    +  if(m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt)
    +    {
    +      if(m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV){
    +        connectBranch<float>(tree, "JvtJvfcorr", &m_JvtJvfcorr);
    +        connectBranch<float>(tree, "JvtRpt",     &m_JvtRpt);
    +      }
    +      connectBranch<float>(tree, "Jvt",        &m_Jvt);
    +    }
    +
    +
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    connectBranch<float>(tree, "SumPtChargedPFOPt500PV", &m_SumPtChargedPFOPt500PV);
    +    connectBranch<float>(tree, "fCharged", &m_fCharged);
    +  }
    +
    +  if(m_infoSwitch.m_JVC)
    +    {
    +      connectBranch<double>(tree,"JetVertexCharge_discriminant", &m_JetVertexCharge_discriminant);
    +    }
    +
    +  if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA)
    +    {
    +      connectBranch<int>  (tree,"HadronConeExclTruthLabelID"        ,&m_HadronConeExclTruthLabelID);
    +      connectBranch<int>  (tree,"HadronConeExclExtendedTruthLabelID",&m_HadronConeExclExtendedTruthLabelID);
    +    }
    +
    +  if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT)
    +    {
    +      connectBranch<float>(tree,"DL1r"                              ,&m_DL1r     );
    +      connectBranch<float>(tree,"DL1r_pu"                           ,&m_DL1r_pu  );
    +      connectBranch<float>(tree,"DL1r_pc"                           ,&m_DL1r_pc  );
    +      connectBranch<float>(tree,"DL1r_pb"                           ,&m_DL1r_pb  );
    +      connectBranch<float>(tree,"DL1dv00"                           ,&m_DL1dv00     );
    +      connectBranch<float>(tree,"DL1dv00_pu"                        ,&m_DL1dv00_pu  );
    +      connectBranch<float>(tree,"DL1dv00_pc"                        ,&m_DL1dv00_pc  );
    +      connectBranch<float>(tree,"DL1dv00_pb"                        ,&m_DL1dv00_pb  );
    +      connectBranch<float>(tree,"DL1dv01"                           ,&m_DL1dv01     );
    +      connectBranch<float>(tree,"DL1dv01_pu"                        ,&m_DL1dv01_pu  );
    +      connectBranch<float>(tree,"DL1dv01_pc"                        ,&m_DL1dv01_pc  );
    +      connectBranch<float>(tree,"DL1dv01_pb"                        ,&m_DL1dv01_pb  );
    +      connectBranch<float>(tree,"GN1"                               ,&m_GN1     );
    +      connectBranch<float>(tree,"GN1_pu"                            ,&m_GN1_pu  );
    +      connectBranch<float>(tree,"GN1_pc"                            ,&m_GN1_pc  );
    +      connectBranch<float>(tree,"GN1_pb"                            ,&m_GN1_pb  );
    +      connectBranch<float>(tree,"GN2v00LegacyWP"                    ,&m_GN2v00LegacyWP     );
    +      connectBranch<float>(tree,"GN2v00LegacyWP_pu"                 ,&m_GN2v00LegacyWP_pu  );
    +      connectBranch<float>(tree,"GN2v00LegacyWP_pc"                 ,&m_GN2v00LegacyWP_pc  );
    +      connectBranch<float>(tree,"GN2v00LegacyWP_pb"                 ,&m_GN2v00LegacyWP_pb  );
    +      connectBranch<float>(tree,"GN2v00NewAliasWP"                  ,&m_GN2v00NewAliasWP     );
    +      connectBranch<float>(tree,"GN2v00NewAliasWP_pu"               ,&m_GN2v00NewAliasWP_pu  );
    +      connectBranch<float>(tree,"GN2v00NewAliasWP_pc"               ,&m_GN2v00NewAliasWP_pc  );
    +      connectBranch<float>(tree,"GN2v00NewAliasWP_pb"               ,&m_GN2v00NewAliasWP_pb  );
    +      connectBranch<float>(tree,"GN2v01"                            ,&m_GN2v01     );
    +      connectBranch<float>(tree,"GN2v01_pu"                         ,&m_GN2v01_pu  );
    +      connectBranch<float>(tree,"GN2v01_pc"                         ,&m_GN2v01_pc  );
    +      connectBranch<float>(tree,"GN2v01_pb"                         ,&m_GN2v01_pb  );
    +      connectBranch<float>(tree,"GN2v01_ptau"                       ,&m_GN2v01_ptau);
    +    }
    +
    +  if(m_infoSwitch.m_flavorTagHLT)
    +    {
    +      connectBranch<float>(tree,"vtxHadDummy",    &m_vtxHadDummy);
    +      connectBranch<float>(tree,"bs_online_vx",   &m_bs_online_vx);
    +      connectBranch<float>(tree,"bs_online_vy",   &m_bs_online_vy);
    +      connectBranch<float>(tree,"bs_online_vz",   &m_bs_online_vz);
    +
    +      connectBranch<float>(tree,"vtx_offline_x0", &m_vtx_offline_x0);
    +      connectBranch<float>(tree,"vtx_offline_y0", &m_vtx_offline_y0);
    +      connectBranch<float>(tree,"vtx_offline_z0", &m_vtx_offline_z0);
    +
    +      connectBranch<float>(tree,"vtx_online_x0",  &m_vtx_online_x0);
    +      connectBranch<float>(tree,"vtx_online_y0",  &m_vtx_online_y0);
    +      connectBranch<float>(tree,"vtx_online_z0",  &m_vtx_online_z0);
    +
    +      connectBranch<float>(tree,"vtx_online_bkg_x0",  &m_vtx_online_bkg_x0);
    +      connectBranch<float>(tree,"vtx_online_bkg_y0",  &m_vtx_online_bkg_y0);
    +      connectBranch<float>(tree,"vtx_online_bkg_z0",  &m_vtx_online_bkg_z0);
    +    }
    +  if(m_infoSwitch.m_flavorTagTLA)
    +    {
    +      connectBranch<float>(tree,"fastDIPS",    &m_fastDIPS);
    +      connectBranch<float>(tree,"fastDIPS_pu", &m_fastDIPS_pu);
    +      connectBranch<float>(tree,"fastDIPS_pc", &m_fastDIPS_pc);
    +      connectBranch<float>(tree,"fastDIPS_pb", &m_fastDIPS_pb);
    +    }
    +
    +  if(m_infoSwitch.m_jetFitterDetails)
    +    {
    +      connectBranch<float>(tree,"JetFitter_nVTX"          ,  &m_JetFitter_nVTX           );
    +      connectBranch<float>(tree,"JetFitter_nSingleTracks" ,  &m_JetFitter_nSingleTracks  );
    +      connectBranch<float>(tree,"JetFitter_nTracksAtVtx"  ,  &m_JetFitter_nTracksAtVtx   );
    +      connectBranch<float>(tree,"JetFitter_mass"          ,  &m_JetFitter_mass           );
    +      connectBranch<float>(tree,"JetFitter_energyFraction",  &m_JetFitter_energyFraction );
    +      connectBranch<float>(tree,"JetFitter_significance3d",  &m_JetFitter_significance3d );
    +      connectBranch<float>(tree,"JetFitter_deltaeta"      ,  &m_JetFitter_deltaeta       );
    +      connectBranch<float>(tree,"JetFitter_deltaphi"      ,  &m_JetFitter_deltaphi       );
    +      connectBranch<float>(tree,"JetFitter_N2Tpair"       ,  &m_JetFitter_N2Tpar         );
    +
    +    }
    +
    +    if( m_infoSwitch.m_svDetails){
    +
    +      connectBranch<float>(tree, "SV0",               &m_SV0);
    +      connectBranch<float>(tree, "sv0_NGTinSvx",      &m_sv0_NGTinSvx  );
    +      connectBranch<float>(tree, "sv0_N2Tpair",       &m_sv0_N2Tpair   );
    +      connectBranch<float>(tree, "sv0_massvx",        &m_sv0_massvx    );
    +      connectBranch<float>(tree, "sv0_efracsvx",      &m_sv0_efracsvx  );
    +      connectBranch<float>(tree, "sv0_normdist",      &m_sv0_normdist  );
    +
    +      connectBranch<float>(tree, "SV1",               &m_SV1);
    +      connectBranch<float>(tree, "SV1IP3D",           &m_SV1IP3D);
    +      connectBranch<float>(tree, "COMBx",             &m_COMBx);
    +      connectBranch<float>(tree, "sv1_pu",            &m_sv1_pu        );
    +      connectBranch<float>(tree, "sv1_pb",            &m_sv1_pb        );
    +      connectBranch<float>(tree, "sv1_pc",            &m_sv1_pc        );
    +      connectBranch<float>(tree, "sv1_c",             &m_sv1_c         );
    +      connectBranch<float>(tree, "sv1_cu",            &m_sv1_cu        );
    +      connectBranch<float>(tree, "sv1_NGTinSvx",      &m_sv1_NGTinSvx  );
    +      connectBranch<float>(tree, "sv1_N2Tpair",       &m_sv1_N2Tpair   );
    +      connectBranch<float>(tree, "sv1_massvx",        &m_sv1_massvx    );
    +      connectBranch<float>(tree, "sv1_efracsvx",      &m_sv1_efracsvx  );
    +      connectBranch<float>(tree, "sv1_normdist",      &m_sv1_normdist  );
    +      connectBranch<float>(tree, "sv1_Lxy",           &m_sv1_Lxy       );
    +      connectBranch<float>(tree, "sv1_sig3d",         &m_sv1_sig3d       );
    +      connectBranch<float>(tree, "sv1_L3d",           &m_sv1_L3d       );
    +      connectBranch<float>(tree, "sv1_distmatlay",    &m_sv1_distmatlay);
    +      connectBranch<float>(tree, "sv1_dR",            &m_sv1_dR        );
    +
    +    }
    +
    +    if( m_infoSwitch.m_ipDetails){
    +
    +      connectBranch<float>         (tree,  "IP2D_pu",                   &m_IP2D_pu                   );
    +      connectBranch<float>         (tree,  "IP2D_pb",                   &m_IP2D_pb                   );
    +      connectBranch<float>         (tree,  "IP2D_pc",                   &m_IP2D_pc                   );
    +      connectBranch<float>         (tree,  "IP2D",                      &m_IP2D                      );
    +      connectBranch<float>         (tree,  "IP2D_c",                    &m_IP2D_c                    );
    +      connectBranch<float>         (tree,  "IP2D_cu",                   &m_IP2D_cu                   );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_gradeOfTracks"       , &m_IP2D_gradeOfTracks        );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_flagFromV0ofTracks"  , &m_IP2D_flagFromV0ofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_valD0wrtPVofTracks"  , &m_IP2D_valD0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_sigD0wrtPVofTracks"  , &m_IP2D_sigD0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_weightBofTracks"     , &m_IP2D_weightBofTracks      );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_weightCofTracks"     , &m_IP2D_weightCofTracks      );
    +      connectBranch<std::vector<float> >(tree,  "IP2D_weightUofTracks"     , &m_IP2D_weightUofTracks      );
    +
    +      connectBranch<float>         (tree,  "IP3D",                      &m_IP3D);
    +      connectBranch<float>         (tree,  "IP3D_pu",                   &m_IP3D_pu                   );
    +      connectBranch<float>         (tree,  "IP3D_pb",                   &m_IP3D_pb                   );
    +      connectBranch<float>         (tree,  "IP3D_pc",                   &m_IP3D_pc                   );
    +      connectBranch<float>         (tree,  "IP3D_c",                    &m_IP3D_c                    );
    +      connectBranch<float>         (tree,  "IP3D_cu",                   &m_IP3D_cu                   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_gradeOfTracks"       , &m_IP3D_gradeOfTracks        );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_flagFromV0ofTracks"  , &m_IP3D_flagFromV0ofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_valD0wrtPVofTracks"  , &m_IP3D_valD0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_sigD0wrtPVofTracks"  , &m_IP3D_sigD0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_valZ0wrtPVofTracks"  , &m_IP3D_valZ0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_sigZ0wrtPVofTracks"  , &m_IP3D_sigZ0wrtPVofTracks   );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_weightBofTracks"     , &m_IP3D_weightBofTracks      );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_weightCofTracks"     , &m_IP3D_weightCofTracks      );
    +      connectBranch<std::vector<float> >(tree,  "IP3D_weightUofTracks"     , &m_IP3D_weightUofTracks      );
    +
    +    }
    +
    +    for(auto btag : m_btags)
    +      btag->setTree(tree, m_name);
    +
    +  // truth
    +  if(m_infoSwitch.m_truth)
    +    {
    +      connectBranch<int>  (tree,"ConeTruthLabelID",   &m_ConeTruthLabelID);
    +      connectBranch<int>  (tree,"TruthCount",         &m_TruthCount);
    +      connectBranch<float>(tree,"TruthLabelDeltaR_B", &m_TruthLabelDeltaR_B);
    +      connectBranch<float>(tree,"TruthLabelDeltaR_C", &m_TruthLabelDeltaR_C);
    +      connectBranch<float>(tree,"TruthLabelDeltaR_T", &m_TruthLabelDeltaR_T);
    +      connectBranch<int>  (tree,"PartonTruthLabelID", &m_PartonTruthLabelID);
    +      connectBranch<float>(tree,"GhostTruthAssociationFraction", &m_GhostTruthAssociationFraction);
    +      connectBranch<float>(tree,"truth_E",   &m_truth_E);
    +      connectBranch<float>(tree,"truth_pt",  &m_truth_pt);
    +      connectBranch<float>(tree,"truth_phi", &m_truth_phi);
    +      connectBranch<float>(tree,"truth_eta", &m_truth_eta);
    +    }
    +
    +  // charge
    +  if(m_infoSwitch.m_charge)
    +    {
    +      connectBranch<double>(tree,"charge", &m_charge);
    +    }
    +
    +  // passSel
    +  if(m_infoSwitch.m_passSel) connectBranch<char>(tree,"passSel", &m_passSel);
    +
    +  // passOR
    +  if(m_infoSwitch.m_passOR) connectBranch<char>(tree,"passOR", &m_passOR);
    +
    +}
    +
    +void JetContainer::updateParticle(uint idx, Jet& jet)
    +{
    +  if(m_debug) std::cout << "in JetContainer::updateParticle " << std::endl;
    +  ParticleContainer::updateParticle(idx,jet);
    +
    +  if(m_infoSwitch.m_rapidity)
    +    {
    +      jet.rapidity                    =m_rapidity                    ->at(idx);
    +    }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    jet.isTrigMatched         =     m_isTrigMatched         ->at(idx);
    +    jet.isTrigMatchedToChain  =     m_isTrigMatchedToChain  ->at(idx);
    +    jet.listTrigChains        =     m_listTrigChains        ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP)
    +    {
    +      if(m_debug) std::cout << "updating clean " << std::endl;
    +      if(m_infoSwitch.m_clean){
    +        jet.Timing                    =m_Timing                    ->at(idx);
    +        jet.LArQuality                =m_LArQuality                ->at(idx);
    +        jet.HECQuality                =m_HECQuality                ->at(idx);
    +        jet.NegativeE                 =m_NegativeE                 ->at(idx);
    +        jet.AverageLArQF              =m_AverageLArQF              ->at(idx);
    +        jet.BchCorrCell               =m_BchCorrCell               ->at(idx);
    +        jet.N90Constituents           =m_N90Constituents           ->at(idx);
    +        jet.LArBadHVEFrac             =m_LArBadHVEnergyFrac        ->at(idx);
    +        jet.LArBadHVNCell             =m_LArBadHVNCell             ->at(idx);
    +        jet.ChargedFraction           =m_ChargedFraction           ->at(idx);
    +        jet.OotFracClusters5          =m_OotFracClusters5          ->at(idx);
    +        jet.OotFracClusters10         =m_OotFracClusters10         ->at(idx);
    +        jet.LeadingClusterPt          =m_LeadingClusterPt          ->at(idx);
    +        jet.LeadingClusterSecondLambda=m_LeadingClusterSecondLambda->at(idx);
    +        jet.LeadingClusterCenterLambda=m_LeadingClusterCenterLambda->at(idx);
    +        jet.LeadingClusterSecondR     =m_LeadingClusterSecondR     ->at(idx);
    +        if(m_infoSwitch.m_cleanTrig) {
    +          jet.clean_passLooseBadTriggerUgly =m_clean_passLooseBadTriggerUgly    ->at(idx);
    +        }
    +        else {
    +          jet.clean_passLooseBadUgly    =m_clean_passLooseBadUgly    ->at(idx);
    +          jet.clean_passTightBadUgly    =m_clean_passTightBadUgly    ->at(idx);
    +        }
    +      }
    +      if(m_infoSwitch.m_cleanTrig) {
    +        jet.clean_passLooseBadTrigger =m_clean_passLooseBadTrigger ->at(idx);
    +      }
    +      else {
    +        jet.clean_passLooseBad        =m_clean_passLooseBad        ->at(idx);
    +        jet.clean_passTightBad        =m_clean_passTightBad        ->at(idx);
    +      }
    +      if(m_infoSwitch.m_cleanLLP) {
    +        jet.clean_passLooseBadLLP        =m_clean_passLooseBadLLP        ->at(idx);
    +      }
    +    }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    jet.Timing = m_Timing->at(idx);
    +    }
    +
    +  if(m_infoSwitch.m_energy || m_infoSwitch.m_energyLight)
    +    {
    +      if(m_debug) std::cout << "updating energy " << std::endl;
    +      if ( m_infoSwitch.m_energy ){
    +        jet.HECFrac              =m_HECFrac              ->at(idx);
    +        jet.CentroidR            =m_CentroidR            ->at(idx);
    +        jet.LowEtConstituentsFrac=m_LowEtConstituentsFrac->at(idx);
    +      }
    +      jet.EMFrac               =m_EMFrac               ->at(idx);
    +      jet.FracSamplingMax      =m_FracSamplingMax      ->at(idx);
    +      jet.FracSamplingMaxIndex =m_FracSamplingMaxIndex ->at(idx);
    +      jet.GhostMuonSegmentCount=m_GhostMuonSegmentCount->at(idx);
    +      jet.Width                =m_Width                ->at(idx);
    +    }
    +
    +  if(m_infoSwitch.m_trackPV)
    +    {
    +      jet.NumTrkPt1000PV    =m_NumTrkPt1000PV    ->at(idx);
    +      jet.SumPtTrkPt1000PV  =m_SumPtTrkPt1000PV  ->at(idx);
    +      jet.TrackWidthPt1000PV=m_TrackWidthPt1000PV->at(idx);
    +      jet.NumTrkPt500PV     =m_NumTrkPt500PV     ->at(idx);
    +      jet.SumPtTrkPt500PV   =m_SumPtTrkPt500PV   ->at(idx);
    +      jet.TrackWidthPt500PV =m_TrackWidthPt500PV ->at(idx);
    +      jet.JVFPV             =m_JVFPV             ->at(idx);
    +    }
    +
    +  if(m_infoSwitch.m_trackPV || m_infoSwitch.m_trackAll || m_infoSwitch.m_jvt)
    +    {
    +      if(m_infoSwitch.m_trackPV || m_infoSwitch.m_trackAll){
    +        jet.JvtJvfcorr=m_JvtJvfcorr->at(idx);
    +        jet.JvtRpt    =m_JvtRpt    ->at(idx);
    +      }
    +      jet.Jvt       =m_Jvt       ->at(idx);
    +    }
    +
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    jet.SumPtChargedPFOPt500PV=m_SumPtChargedPFOPt500PV->at(idx);
    +    jet.fCharged=m_fCharged->at(idx);
    +  }
    +
    +  if( m_infoSwitch.m_JVC ) {
    +    if(m_debug) std::cout << "updating JVC " << std::endl;
    +    if(m_debug) std::cout << m_JetVertexCharge_discriminant->size() << std::endl;
    +    jet.JVC = m_JetVertexCharge_discriminant->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA)
    +    {
    +      if(m_HadronConeExclTruthLabelID)         jet.HadronConeExclTruthLabelID        =m_HadronConeExclTruthLabelID        ->at(idx);
    +      if(m_HadronConeExclExtendedTruthLabelID) jet.HadronConeExclExtendedTruthLabelID=m_HadronConeExclExtendedTruthLabelID->at(idx);
    +    }
    +
    +  if(m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT)
    +    {
    +      if(m_debug) std::cout << "updating flavorTag " << std::endl;
    +      if(m_DL1r)        jet.DL1r        =m_DL1r        ->at(idx);
    +      if(m_DL1r_pu)     jet.DL1r_pu     =m_DL1r_pu     ->at(idx);
    +      if(m_DL1r_pc)     jet.DL1r_pc     =m_DL1r_pc     ->at(idx);
    +      if(m_DL1r_pb)     jet.DL1r_pb     =m_DL1r_pb     ->at(idx);
    +      if(m_DL1dv00)     jet.DL1dv00     =m_DL1dv00     ->at(idx);
    +      if(m_DL1dv00_pu)  jet.DL1dv00_pu  =m_DL1dv00_pu  ->at(idx);
    +      if(m_DL1dv00_pc)  jet.DL1dv00_pc  =m_DL1dv00_pc  ->at(idx);
    +      if(m_DL1dv00_pb)  jet.DL1dv00_pb  =m_DL1dv00_pb  ->at(idx);
    +      if(m_DL1dv01)     jet.DL1dv01     =m_DL1dv01     ->at(idx);
    +      if(m_DL1dv01_pu)  jet.DL1dv01_pu  =m_DL1dv01_pu  ->at(idx);
    +      if(m_DL1dv01_pc)  jet.DL1dv01_pc  =m_DL1dv01_pc  ->at(idx);
    +      if(m_DL1dv01_pb)  jet.DL1dv01_pb  =m_DL1dv01_pb  ->at(idx);
    +      if(m_GN1)         jet.GN1         =m_GN1         ->at(idx);
    +      if(m_GN1_pu)      jet.GN1_pu      =m_GN1_pu      ->at(idx);
    +      if(m_GN1_pc)      jet.GN1_pc      =m_GN1_pc      ->at(idx);
    +      if(m_GN1_pb)      jet.GN1_pb      =m_GN1_pb      ->at(idx);
    +      if(m_GN2v00LegacyWP)    jet.GN2v00LegacyWP    =m_GN2v00LegacyWP    ->at(idx);
    +      if(m_GN2v00LegacyWP_pu) jet.GN2v00LegacyWP_pu =m_GN2v00LegacyWP_pu ->at(idx);
    +      if(m_GN2v00LegacyWP_pc) jet.GN2v00LegacyWP_pc =m_GN2v00LegacyWP_pc ->at(idx);
    +      if(m_GN2v00LegacyWP_pb) jet.GN2v00LegacyWP_pb =m_GN2v00LegacyWP_pb ->at(idx);
    +      if(m_GN2v00NewAliasWP)    jet.GN2v00NewAliasWP    =m_GN2v00NewAliasWP    ->at(idx);
    +      if(m_GN2v00NewAliasWP_pu) jet.GN2v00NewAliasWP_pu =m_GN2v00NewAliasWP_pu ->at(idx);
    +      if(m_GN2v00NewAliasWP_pc) jet.GN2v00NewAliasWP_pc =m_GN2v00NewAliasWP_pc ->at(idx);
    +      if(m_GN2v00NewAliasWP_pb) jet.GN2v00NewAliasWP_pb =m_GN2v00NewAliasWP_pb ->at(idx);
    +      if(m_GN2v01)       jet.GN2v01       =m_GN2v01       ->at(idx);
    +      if(m_GN2v01_pu)    jet.GN2v01_pu    =m_GN2v01_pu    ->at(idx);
    +      if(m_GN2v01_pc)    jet.GN2v01_pc    =m_GN2v01_pc    ->at(idx);
    +      if(m_GN2v01_pb)    jet.GN2v01_pb    =m_GN2v01_pb    ->at(idx);
    +      if(m_GN2v01_ptau)  jet.GN2v01_ptau  =m_GN2v01_ptau  ->at(idx);
    +
    +      //std::cout << m_HadronConeExclTruthLabelID->size() << std::endl;
    +      if(m_debug) std::cout << "leave flavorTag " << std::endl;
    +    }
    +
    +
    +  if(m_infoSwitch.m_flavorTagHLT)
    +    {
    +      if(m_debug) std::cout << "updating flavorTagHLT " << std::endl;
    +      jet.bs_online_vx                      =m_bs_online_vx                  ->at(idx);
    +      jet.bs_online_vy                      =m_bs_online_vy                  ->at(idx);
    +      jet.bs_online_vz                      =m_bs_online_vz                  ->at(idx);
    +      jet.vtxHadDummy                       =m_vtxHadDummy                   ->at(idx);
    +      jet.vtx_offline_x0                    =m_vtx_offline_x0                  ->at(idx);
    +      jet.vtx_offline_y0                    =m_vtx_offline_y0                  ->at(idx);
    +      jet.vtx_offline_z0                    =m_vtx_offline_z0                  ->at(idx);
    +
    +      jet.vtx_online_x0                     =m_vtx_online_x0                  ->at(idx);
    +      jet.vtx_online_y0                     =m_vtx_online_y0                  ->at(idx);
    +      jet.vtx_online_z0                     =m_vtx_online_z0                  ->at(idx);
    +
    +      jet.vtx_online_bkg_x0                     =m_vtx_online_bkg_x0                  ->at(idx);
    +      jet.vtx_online_bkg_y0                     =m_vtx_online_bkg_y0                  ->at(idx);
    +      jet.vtx_online_bkg_z0                     =m_vtx_online_bkg_z0                  ->at(idx);
    +
    +    }
    +
    +  if(m_infoSwitch.m_jetFitterDetails)
    +    {
    +      jet.JetFitter_nVTX                  =m_JetFitter_nVTX           ->at(idx);
    +      jet.JetFitter_nSingleTracks         =m_JetFitter_nSingleTracks  ->at(idx);
    +      jet.JetFitter_nTracksAtVtx          =m_JetFitter_nTracksAtVtx   ->at(idx);
    +      jet.JetFitter_mass                  =m_JetFitter_mass           ->at(idx);
    +      jet.JetFitter_energyFraction        =m_JetFitter_energyFraction ->at(idx);
    +      jet.JetFitter_significance3d        =m_JetFitter_significance3d ->at(idx);
    +      jet.JetFitter_deltaeta              =m_JetFitter_deltaeta       ->at(idx);
    +      jet.JetFitter_deltaphi              =m_JetFitter_deltaphi       ->at(idx);
    +      jet.JetFitter_N2Tpar                =m_JetFitter_N2Tpar         ->at(idx);
    +
    +    }
    +
    +  if(m_infoSwitch.m_flavorTagTLA)
    +    {
    +      if(m_debug) std::cout << "updating flavorTagTLA " << std::endl;
    +      if(m_fastDIPS)    jet.fastDIPS      =m_fastDIPS     ->at(idx);
    +      if(m_fastDIPS_pu) jet.fastDIPS_pu   =m_fastDIPS_pu  ->at(idx);
    +      if(m_fastDIPS_pc) jet.fastDIPS_pc   =m_fastDIPS_pc  ->at(idx);
    +      if(m_fastDIPS_pb) jet.fastDIPS_pb   =m_fastDIPS_pb  ->at(idx);
    +      if(m_debug) std::cout << "leave flavorTagTLA " << std::endl;
    +    }
    +
    +  if(m_infoSwitch.m_svDetails){
    +
    +    jet.SV0            = m_SV0           ->at(idx);
    +    jet.sv0_NGTinSvx   = m_sv0_NGTinSvx  ->at(idx);
    +    jet.sv0_N2Tpair    = m_sv0_N2Tpair   ->at(idx);
    +    jet.sv0_massvx     = m_sv0_massvx    ->at(idx);
    +    jet.sv0_efracsvx   = m_sv0_efracsvx  ->at(idx);
    +    jet.sv0_normdist   = m_sv0_normdist  ->at(idx);
    +
    +    jet.SV1            = m_SV1           ->at(idx);
    +    jet.SV1IP3D        = m_SV1IP3D       ->at(idx);
    +    jet.COMBx          = m_COMBx         ->at(idx);
    +    jet.sv1_pu         = m_sv1_pu        ->at(idx);
    +    jet.sv1_pb         = m_sv1_pb        ->at(idx);
    +    jet.sv1_pc         = m_sv1_pc        ->at(idx);
    +    jet.sv1_c          = m_sv1_c         ->at(idx);
    +    jet.sv1_cu         = m_sv1_cu        ->at(idx);
    +    jet.sv1_NGTinSvx   = m_sv1_NGTinSvx  ->at(idx);
    +    jet.sv1_N2Tpair    = m_sv1_N2Tpair   ->at(idx);
    +    jet.sv1_massvx     = m_sv1_massvx    ->at(idx);
    +    jet.sv1_efracsvx   = m_sv1_efracsvx  ->at(idx);
    +    jet.sv1_normdist   = m_sv1_normdist  ->at(idx);
    +    jet.sv1_Lxy        = m_sv1_Lxy       ->at(idx);
    +    if(m_sv1_sig3d->size())
    +      jet.sv1_sig3d      = m_sv1_sig3d     ->at(idx);
    +    jet.sv1_L3d        = m_sv1_L3d       ->at(idx);
    +    jet.sv1_distmatlay = m_sv1_distmatlay->at(idx);
    +    jet.sv1_dR         = m_sv1_dR        ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_ipDetails){
    +    jet.IP2D_pu                          = m_IP2D_pu                   ->at(idx);
    +    jet.IP2D_pb                          = m_IP2D_pb                   ->at(idx);
    +    jet.IP2D_pc                          = m_IP2D_pc                   ->at(idx);
    +    jet.IP2D                             = m_IP2D                      ->at(idx);
    +    jet.IP2D_c                           = m_IP2D_c                    ->at(idx);
    +    jet.IP2D_cu                          = m_IP2D_cu                   ->at(idx);
    +    jet.nIP2DTracks                      = m_IP2D_gradeOfTracks        ->at(idx).size();
    +
    +    jet.IP2D_gradeOfTracks               = m_IP2D_gradeOfTracks        ->at(idx);
    +    jet.IP2D_flagFromV0ofTracks          = m_IP2D_flagFromV0ofTracks   ->at(idx);
    +    jet.IP2D_valD0wrtPVofTracks          = m_IP2D_valD0wrtPVofTracks   ->at(idx);
    +    jet.IP2D_sigD0wrtPVofTracks          = m_IP2D_sigD0wrtPVofTracks   ->at(idx);
    +    jet.IP2D_weightBofTracks             = m_IP2D_weightBofTracks      ->at(idx);
    +    jet.IP2D_weightCofTracks             = m_IP2D_weightCofTracks      ->at(idx);
    +    jet.IP2D_weightUofTracks             = m_IP2D_weightUofTracks      ->at(idx);
    +
    +    jet.IP3D                             = m_IP3D                      ->at(idx);
    +    jet.IP3D_pu                          = m_IP3D_pu                   ->at(idx);
    +    jet.IP3D_pb                          = m_IP3D_pb                   ->at(idx);
    +    jet.IP3D_pc                          = m_IP3D_pc                   ->at(idx);
    +    jet.IP3D_c                           = m_IP3D_c                    ->at(idx);
    +    jet.IP3D_cu                          = m_IP3D_cu                   ->at(idx);
    +    jet.nIP3DTracks                      = m_IP3D_gradeOfTracks        ->at(idx).size();
    +    jet.IP3D_gradeOfTracks               = m_IP3D_gradeOfTracks        ->at(idx);
    +    jet.IP3D_flagFromV0ofTracks          = m_IP3D_flagFromV0ofTracks   ->at(idx);
    +    jet.IP3D_valD0wrtPVofTracks          = m_IP3D_valD0wrtPVofTracks   ->at(idx);
    +    jet.IP3D_sigD0wrtPVofTracks          = m_IP3D_sigD0wrtPVofTracks   ->at(idx);
    +    jet.IP3D_valZ0wrtPVofTracks          = m_IP3D_valZ0wrtPVofTracks   ->at(idx);
    +    jet.IP3D_sigZ0wrtPVofTracks          = m_IP3D_sigZ0wrtPVofTracks   ->at(idx);
    +    jet.IP3D_weightBofTracks             = m_IP3D_weightBofTracks      ->at(idx);
    +    jet.IP3D_weightCofTracks             = m_IP3D_weightCofTracks      ->at(idx);
    +    jet.IP3D_weightUofTracks             = m_IP3D_weightUofTracks      ->at(idx);
    +  }
    +
    +  static const std::vector<float> dummy1 = {1.};
    +  for(btagOpPoint* btag : m_btags)
    +    {
    +      switch(btag->m_op)
    +    {
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_60:
    +      jet.is_DL1r_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_DL1r_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_70:
    +      jet.is_DL1r_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_DL1r_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_77:
    +      jet.is_DL1r_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_DL1r_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1r_FixedCutBEff_85:
    +      jet.is_DL1r_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_DL1r_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1r_Continuous:
    +      jet.is_DL1r_Continuous=       btag->m_isTag->at(idx);
    +      jet.SF_DL1r_Continuous=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    //DL1dv01 has preliminary rel22 pre-rec SF uncertainties
    +        case Jet::BTaggerOP::DL1dv01_FixedCutBEff_60:
    +      jet.is_DL1dv01_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv01_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_70:
    +      jet.is_DL1dv01_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv01_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_77:
    +      jet.is_DL1dv01_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv01_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_FixedCutBEff_85:
    +      jet.is_DL1dv01_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv01_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv01_Continuous:
    +      jet.is_DL1dv01_Continuous=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv01_Continuous=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +        case Jet::BTaggerOP::DL1dv00_FixedCutBEff_60:
    +      jet.is_DL1dv00_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv00_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_70:
    +      jet.is_DL1dv00_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv00_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_77:
    +      jet.is_DL1dv00_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv00_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_FixedCutBEff_85:
    +      jet.is_DL1dv00_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv00_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::DL1dv00_Continuous:
    +      jet.is_DL1dv00_Continuous=       btag->m_isTag->at(idx);
    +      jet.SF_DL1dv00_Continuous=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +        case Jet::BTaggerOP::GN120220509_FixedCutBEff_60:
    +      jet.is_GN120220509_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_GN120220509_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_70:
    +      jet.is_GN120220509_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_GN120220509_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_77:
    +      jet.is_GN120220509_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_GN120220509_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_FixedCutBEff_85:
    +      jet.is_GN120220509_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_GN120220509_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN120220509_Continuous:
    +      jet.is_GN120220509_Continuous=       btag->m_isTag->at(idx);
    +      jet.SF_GN120220509_Continuous=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +  case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60:
    +      jet.is_GN2v00LegacyWP_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00LegacyWP_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70:
    +      jet.is_GN2v00LegacyWP_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00LegacyWP_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77:
    +      jet.is_GN2v00LegacyWP_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00LegacyWP_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85:
    +      jet.is_GN2v00LegacyWP_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00LegacyWP_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +  case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60:
    +      jet.is_GN2v00NewAliasWP_FixedCutBEff_60=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00NewAliasWP_FixedCutBEff_60=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70:
    +      jet.is_GN2v00NewAliasWP_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00NewAliasWP_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77:
    +      jet.is_GN2v00NewAliasWP_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00NewAliasWP_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85:
    +      jet.is_GN2v00NewAliasWP_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v00NewAliasWP_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +        case Jet::BTaggerOP::GN2v01_FixedCutBEff_65:
    +      jet.is_GN2v01_FixedCutBEff_65=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_FixedCutBEff_65=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_70:
    +      jet.is_GN2v01_FixedCutBEff_70=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_FixedCutBEff_70=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_77:
    +      jet.is_GN2v01_FixedCutBEff_77=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_FixedCutBEff_77=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_85:
    +      jet.is_GN2v01_FixedCutBEff_85=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_FixedCutBEff_85=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_FixedCutBEff_90:
    +      jet.is_GN2v01_FixedCutBEff_90=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_FixedCutBEff_90=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +    case Jet::BTaggerOP::GN2v01_Continuous:
    +      jet.is_GN2v01_Continuous=       btag->m_isTag->at(idx);
    +      jet.SF_GN2v01_Continuous=(m_mc)?btag->m_sf   ->at(idx):dummy1;
    +      break;
    +
    +    default:
    +      throw std::domain_error(
    +                  __FILE__ + std::string(", in ") + __func__ + ": "
    +                  + "unexpected value of btag->m_op (of type xAH::Jet::BTaggerOP)");
    +    }
    +    }
    +
    +  // truth
    +  if(m_infoSwitch.m_truth)
    +    {
    +      jet.ConeTruthLabelID  =m_ConeTruthLabelID->at(idx);
    +      jet.TruthCount        =m_TruthCount      ->at(idx);
    +      jet.TruthLabelDeltaR_B=m_TruthLabelDeltaR_B->at(idx);
    +      jet.TruthLabelDeltaR_C=m_TruthLabelDeltaR_C->at(idx);
    +      jet.TruthLabelDeltaR_T=m_TruthLabelDeltaR_T->at(idx);
    +      jet.PartonTruthLabelID=m_PartonTruthLabelID->at(idx);
    +      jet.GhostTruthAssociationFraction= m_GhostTruthAssociationFraction->at(idx);
    +
    +      jet.truth_p4.SetPtEtaPhiE(m_truth_pt ->at(idx),
    +                                m_truth_eta->at(idx),
    +                                m_truth_phi->at(idx),
    +                                m_truth_E  ->at(idx));
    +    }
    +
    +  // charge
    +  if(m_infoSwitch.m_charge)
    +    {
    +      jet.charge=m_charge->at(idx);
    +    }
    +
    +  // passSel
    +  if(m_infoSwitch.m_passSel) jet.passSel=m_passSel->at(idx);
    +
    +  // passOR
    +  if(m_infoSwitch.m_passOR) jet.passOR=m_passOR->at(idx);
    +
    +  if(m_debug) std::cout << "leave JetContainer::updateParticle " << std::endl;
    +  return;
    +}
    +
    +
    +
    +void JetContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +  if ( m_infoSwitch.m_rapidity ) {
    +    setBranch<float>(tree,"rapidity",                      m_rapidity              );
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    // this is true if there's a match for at least one trigger chain
    +    setBranch<int>(tree,"isTrigMatched", m_isTrigMatched);
    +    // a vector of trigger match decision for each jet trigger chain
    +    setBranch<std::vector<int> >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain );
    +    // a vector of strings for each jet trigger chain - 1:1 correspondence w/ vector above
    +    setBranch<std::string>(tree, "listTrigChains", m_listTrigChains );
    +  }
    +
    +  if( m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) {
    +    if(m_infoSwitch.m_clean){
    +      setBranch<float>(tree,"Timing",                        m_Timing               );
    +      setBranch<float>(tree,"LArQuality",                    m_LArQuality         );
    +      setBranch<float>(tree,"HECQuality",                    m_HECQuality               );
    +      setBranch<float>(tree,"NegativeE",                     m_NegativeE               );
    +      setBranch<float>(tree,"AverageLArQF",                  m_AverageLArQF            );
    +      setBranch<float>(tree,"BchCorrCell",                   m_BchCorrCell        );
    +      setBranch<float>(tree,"N90Constituents",               m_N90Constituents           );
    +      setBranch<float>(tree,"LArBadHVEnergyFrac",            m_LArBadHVEnergyFrac   );
    +      setBranch<int>  (tree,"LArBadHVNCell",                 m_LArBadHVNCell      );
    +      setBranch<float>(tree,"ChargedFraction",               m_ChargedFraction);
    +      setBranch<float>(tree,"OotFracClusters5",              m_OotFracClusters5         );
    +      setBranch<float>(tree,"OotFracClusters10",             m_OotFracClusters10      );
    +      setBranch<float>(tree,"LeadingClusterPt",              m_LeadingClusterPt                 );
    +      setBranch<float>(tree,"LeadingClusterSecondLambda",    m_LeadingClusterSecondLambda     );
    +      setBranch<float>(tree,"LeadingClusterCenterLambda",    m_LeadingClusterCenterLambda     );
    +      setBranch<float>(tree,"LeadingClusterSecondR",         m_LeadingClusterSecondR          );
    +      if(m_infoSwitch.m_cleanTrig) {
    +        setBranch<int>  (tree,"clean_passLooseBadTriggerUgly", m_clean_passLooseBadTriggerUgly  );
    +      }
    +      else {
    +        setBranch<int>  (tree,"clean_passLooseBadUgly",        m_clean_passLooseBadUgly         );
    +        setBranch<int>  (tree,"clean_passTightBadUgly",        m_clean_passTightBadUgly         );
    +      }
    +    }
    +    if(m_infoSwitch.m_cleanTrig) {
    +      setBranch<int>  (tree,"clean_passLooseBadTrigger",     m_clean_passLooseBadTrigger      );
    +    }
    +    else {
    +      setBranch<int>  (tree,"clean_passLooseBad",            m_clean_passLooseBad             );
    +      setBranch<int>  (tree,"clean_passTightBad",            m_clean_passTightBad             );
    +    }
    +    if(m_infoSwitch.m_cleanLLP) {
    +      setBranch<int>  (tree,"clean_passLooseBadLLP",            m_clean_passLooseBadLLP             );
    +    }
    +  }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    setBranch<float>(tree,"Timing",m_Timing);
    +  }
    +
    +
    +  if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) {
    +    if ( m_infoSwitch.m_energy ){
    +      setBranch<float>(tree,"HECFrac",                   m_HECFrac            );
    +      setBranch<float>(tree,"CentroidR",                 m_CentroidR      );
    +      setBranch<float>(tree,"LowEtConstituentsFrac",     m_LowEtConstituentsFrac      );
    +    }
    +    setBranch<float>(tree,"EMFrac",                    m_EMFrac     );
    +    setBranch<float>(tree,"FracSamplingMax",           m_FracSamplingMax    );
    +    setBranch<float>(tree,"FracSamplingMaxIndex",      m_FracSamplingMaxIndex );
    +    setBranch<float>(tree,"GhostMuonSegmentCount",     m_GhostMuonSegmentCount   );
    +    setBranch<float>(tree,"Width",                     m_Width          );
    +  }
    +
    +  if ( m_infoSwitch.m_scales ) {
    +    setBranch<float>(tree,"emScalePt",              m_emScalePt            );
    +    setBranch<float>(tree,"constScalePt",           m_constScalePt         );
    +    setBranch<float>(tree,"pileupScalePt",          m_pileupScalePt        );
    +    setBranch<float>(tree,"originConstitScalePt",   m_originConstitScalePt );
    +    setBranch<float>(tree,"etaJESScalePt",          m_etaJESScalePt        );
    +    setBranch<float>(tree,"gscScalePt",             m_gscScalePt           );
    +    setBranch<float>(tree,"jmsScalePt",             m_jmsScalePt           );
    +    setBranch<float>(tree,"insituScalePt",          m_insituScalePt        );
    +
    +    setBranch<float>(tree,"emScaleM",              m_emScaleM            );
    +    setBranch<float>(tree,"constScaleM",           m_constScaleM         );
    +    setBranch<float>(tree,"pileupScaleM",          m_pileupScaleM        );
    +    setBranch<float>(tree,"originConstitScaleM",   m_originConstitScaleM );
    +    setBranch<float>(tree,"etaJESScaleM",          m_etaJESScaleM        );
    +    setBranch<float>(tree,"gscScaleM",             m_gscScaleM           );
    +    setBranch<float>(tree,"jmsScaleM",             m_jmsScaleM           );
    +    setBranch<float>(tree,"insituScaleM",          m_insituScaleM        );
    +  }
    +
    +  if ( m_infoSwitch.m_constscaleEta ) {
    +    setBranch<float>(tree,"constScaleEta",              m_constScaleEta            );
    +  }
    +
    +  if ( m_infoSwitch.m_detectorEta ) {
    +    setBranch<float>(tree,"detectorEta",              m_detectorEta            );
    +  }
    +
    +  if ( m_infoSwitch.m_layer ) {
    +    setBranch<std::vector<float> >(tree,"EnergyPerSampling",     m_EnergyPerSampling   );
    +  }
    +
    +  if ( m_infoSwitch.m_trackAll ) {
    +    setBranch<std::vector<int  > >(tree,"NumTrkPt1000",      m_NumTrkPt1000   );
    +    setBranch<std::vector<float> >(tree,"SumPtTrkPt1000",    m_SumPtTrkPt1000  );
    +    setBranch<std::vector<float> >(tree,"TrackWidthPt1000",  m_TrackWidthPt1000   );
    +    setBranch<std::vector<int  > >(tree,"NumTrkPt500",       m_NumTrkPt500    );
    +    setBranch<std::vector<float> >(tree,"SumPtTrkPt500",     m_SumPtTrkPt500  );
    +    setBranch<std::vector<float> >(tree,"TrackWidthPt500",   m_TrackWidthPt500    );
    +    setBranch<std::vector<float> >(tree,"JVF",               m_JVF         );
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) {
    +    if ( m_infoSwitch.m_trackPV ) {
    +      setBranch<float>(tree,"NumTrkPt1000PV",       m_NumTrkPt1000PV   );
    +      setBranch<float>(tree,"SumPtTrkPt1000PV",     m_SumPtTrkPt1000PV  );
    +      setBranch<float>(tree,"TrackWidthPt1000PV",   m_TrackWidthPt1000PV   );
    +      setBranch<float>(tree,"NumTrkPt500PV",        m_NumTrkPt500PV    );
    +      setBranch<float>(tree,"SumPtTrkPt500PV",      m_SumPtTrkPt500PV   );
    +      setBranch<float>(tree,"TrackWidthPt500PV",    m_TrackWidthPt500PV    );
    +      setBranch<float>(tree,"JVFPV",                m_JVFPV             );
    +      setBranch<float>(tree,"JvtJvfcorr",           m_JvtJvfcorr     );
    +      setBranch<float>(tree,"JvtRpt",               m_JvtRpt         );
    +    }
    +    setBranch<float>(tree,"Jvt",                  m_Jvt                 );
    +    //setBranch<float>(tree,"GhostTrackAssociationFraction", m_ghostTrackAssFrac);
    +  }
    +
    +  if (m_infoSwitch.m_fJvt) {
    +    setBranch<float>(tree, "fJvt", m_fJvt);
    +  }
    +
    +  if (m_infoSwitch.m_NNJvt) {
    +    setBranch<float>(tree, "NNJvt", m_NNJvt);
    +    setBranch<bool>(tree, "NNJvtPass", m_NNJvtPass);
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) {
    +    setBranch<int>(tree,"JvtPass_Loose",        m_JvtPass_Loose );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"JvtEff_SF_Loose",     m_JvtEff_SF_Loose );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) {
    +    setBranch<int>(tree,"JvtPass_Medium",       m_JvtPass_Medium );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"JvtEff_SF_Medium",    m_JvtEff_SF_Medium );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) {
    +    setBranch<int>(tree,"JvtPass_Tight",        m_JvtPass_Tight );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"JvtEff_SF_Tight",     m_JvtEff_SF_Tight );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) {
    +    setBranch<int>(tree,"JvtPass_FixedEffPt",       m_JvtPass_FixedEffPt );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"JvtEff_SF_FixedEffPt",    m_JvtEff_SF_FixedEffPt );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) {
    +    setBranch<int>(tree,"JvtPass_TightFwd",        m_JvtPass_TightFwd );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"JvtEff_SF_TightFwd",     m_JvtEff_SF_TightFwd );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) {
    +    setBranch<int>(tree,"fJvtPass_Loose",       m_fJvtPass_Loose );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"fJvtEff_SF_Loose",    m_fJvtEff_SF_Loose );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) {
    +    setBranch<int>(tree,"fJvtPass_Medium",       m_fJvtPass_Medium );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"fJvtEff_SF_Medium",    m_fJvtEff_SF_Medium );
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) {
    +    setBranch<int>(tree,"fJvtPass_Tight",        m_fJvtPass_Tight );
    +    if ( m_mc ) {
    +      setBranch<std::vector<float> >(tree,"fJvtEff_SF_Tight",     m_fJvtEff_SF_Tight );
    +    }
    +  }
    +
    +
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    setBranch<float>(tree,"SumPtChargedPFOPt500PV", m_SumPtChargedPFOPt500PV);
    +    setBranch<float>(tree,"fCharged", m_fCharged);
    +  }
    +
    +
    +  if ( m_infoSwitch.m_allTrack ) {
    +    // if want to apply the selection of the PV then need to setup track selection tool
    +    // this applies the JVF/JVT selection cuts
    +    // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JvtManualRecalculation
    +    if( m_infoSwitch.m_allTrackPVSel ) {
    +      m_trkSelTool = new InDet::InDetTrackSelectionTool( "JetTrackSelection");
    +      m_trkSelTool->setProperty( "CutLevel", "Loose");
    +      m_trkSelTool->initialize();
    +      // to do this need to have AddJets return a status code
    +      //ANA_CHECK( m_trkSelTool->initialize());
    +    }
    +    setBranch<int  >(tree,"GhostTrackCount",  m_GhostTrackCount );
    +    setBranch<float>(tree,"GhostTrackPt",     m_GhostTrackPt    );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_pt",    m_GhostTrack_pt   );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_qOverP",m_GhostTrack_qOverP);
    +    setBranch<std::vector<float> >(tree,"GhostTrack_eta",   m_GhostTrack_eta  );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_phi",   m_GhostTrack_phi  );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_e",     m_GhostTrack_e    );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_d0",    m_GhostTrack_d0   );
    +    setBranch<std::vector<float> >(tree,"GhostTrack_z0",    m_GhostTrack_z0   );
    +    if ( m_infoSwitch.m_allTrackDetail ) {
    +      setBranch<std::vector<int> >(tree,"GhostTrack_nPixelHits",                           m_GhostTrack_nPixelHits);
    +      setBranch<std::vector<int> >(tree,"GhostTrack_nSCTHits",                             m_GhostTrack_nSCTHits);
    +      setBranch<std::vector<int> >(tree,"GhostTrack_nTRTHits",                             m_GhostTrack_nTRTHits);
    +      setBranch<std::vector<int> >(tree,"GhostTrack_nPixelSharedHits",                     m_GhostTrack_nPixelSharedHits);
    +      setBranch<std::vector<int> >(tree,"GhostTrack_nPixelSplitHits",                      m_GhostTrack_nPixelSplitHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nInnermostPixelLayerHits",             m_GhostTrack_nInnermostPixelLayerHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nInnermostPixelLayerSharedHits",       m_GhostTrack_nInnermostPixelLayerSharedHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nInnermostPixelLayerSplitHits",        m_GhostTrack_nInnermostPixelLayerSplitHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nNextToInnermostPixelLayerHits",       m_GhostTrack_nNextToInnermostPixelLayerHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nNextToInnermostPixelLayerSharedHits", m_GhostTrack_nNextToInnermostPixelLayerSharedHits);
    +      setBranch<std::vector<int> >(tree,"m_GhostTrack_nNextToInnermostPixelLayerSplitHits",  m_GhostTrack_nNextToInnermostPixelLayerSplitHits);
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_constituent ) {
    +    setBranch<int  >(tree,"numConstituents",   m_numConstituents);
    +  }
    +
    +  if ( m_infoSwitch.m_constituentAll ) {
    +    setBranch<std::vector<float> >(tree,"constituentWeights", m_constituentWeights);
    +    setBranch<std::vector<float> >(tree,"constituent_pt",     m_constituent_pt    );
    +    setBranch<std::vector<float> >(tree,"constituent_eta",    m_constituent_eta   );
    +    setBranch<std::vector<float> >(tree,"constituent_phi",    m_constituent_phi   );
    +    setBranch<std::vector<float> >(tree,"constituent_e",      m_constituent_e     );
    +  }
    +
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) {
    +    setBranch<int>(tree,"HadronConeExclTruthLabelID", m_HadronConeExclTruthLabelID);
    +    setBranch<int>(tree,"HadronConeExclExtendedTruthLabelID", m_HadronConeExclExtendedTruthLabelID);
    +  }
    +
    +  if( m_infoSwitch.m_flavorTag  || m_infoSwitch.m_flavorTagHLT  ) {
    +
    +    setBranch<float>(tree,"DL1r",    m_DL1r);
    +    setBranch<float>(tree,"DL1r_pu", m_DL1r_pu);
    +    setBranch<float>(tree,"DL1r_pc", m_DL1r_pc);
    +    setBranch<float>(tree,"DL1r_pb", m_DL1r_pb);
    +    setBranch<float>(tree,"DL1dv00",    m_DL1dv00);
    +    setBranch<float>(tree,"DL1dv00_pu", m_DL1dv00_pu);
    +    setBranch<float>(tree,"DL1dv00_pc", m_DL1dv00_pc);
    +    setBranch<float>(tree,"DL1dv00_pb", m_DL1dv00_pb);
    +    setBranch<float>(tree,"DL1dv01",    m_DL1dv01);
    +    setBranch<float>(tree,"DL1dv01_pu", m_DL1dv01_pu);
    +    setBranch<float>(tree,"DL1dv01_pc", m_DL1dv01_pc);
    +    setBranch<float>(tree,"DL1dv01_pb", m_DL1dv01_pb);
    +    setBranch<float>(tree,"GN1",    m_GN1);
    +    setBranch<float>(tree,"GN1_pu", m_GN1_pu);
    +    setBranch<float>(tree,"GN1_pc", m_GN1_pc);
    +    setBranch<float>(tree,"GN1_pb", m_GN1_pb);
    +    setBranch<float>(tree,"GN2v00LegacyWP",    m_GN2v00LegacyWP);
    +    setBranch<float>(tree,"GN2v00LegacyWP_pu", m_GN2v00LegacyWP_pu);
    +    setBranch<float>(tree,"GN2v00LegacyWP_pc", m_GN2v00LegacyWP_pc);
    +    setBranch<float>(tree,"GN2v00LegacyWP_pb", m_GN2v00LegacyWP_pb);
    +    setBranch<float>(tree,"GN2v00NewAliasWP",    m_GN2v00NewAliasWP);
    +    setBranch<float>(tree,"GN2v00NewAliasWP_pu", m_GN2v00NewAliasWP_pu);
    +    setBranch<float>(tree,"GN2v00NewAliasWP_pc", m_GN2v00NewAliasWP_pc);
    +    setBranch<float>(tree,"GN2v00NewAliasWP_pb", m_GN2v00NewAliasWP_pb);
    +    setBranch<float>(tree,"GN2v01",    m_GN2v01);
    +    setBranch<float>(tree,"GN2v01_pu", m_GN2v01_pu);
    +    setBranch<float>(tree,"GN2v01_pc", m_GN2v01_pc);
    +    setBranch<float>(tree,"GN2v01_pb", m_GN2v01_pb);
    +    setBranch<float>(tree,"GN2v01_ptau", m_GN2v01_ptau);
    +
    +    if( m_infoSwitch.m_jetFitterDetails){
    +
    +      setBranch<float>(tree, "JetFitter_nVTX"          ,   m_JetFitter_nVTX            );
    +      setBranch<float>(tree, "JetFitter_nSingleTracks" ,   m_JetFitter_nSingleTracks   );
    +      setBranch<float>(tree, "JetFitter_nTracksAtVtx"  ,   m_JetFitter_nTracksAtVtx    );
    +      setBranch<float>(tree, "JetFitter_mass"          ,   m_JetFitter_mass            );
    +      setBranch<float>(tree, "JetFitter_energyFraction",   m_JetFitter_energyFraction  );
    +      setBranch<float>(tree, "JetFitter_significance3d",   m_JetFitter_significance3d  );
    +      setBranch<float>(tree, "JetFitter_deltaeta"      ,   m_JetFitter_deltaeta        );
    +      setBranch<float>(tree, "JetFitter_deltaphi"      ,   m_JetFitter_deltaphi        );
    +      setBranch<float>(tree, "JetFitter_N2Tpair"       ,   m_JetFitter_N2Tpar          );
    +      //setBranch<float>(tree, "JetFitter_pb"            ,   m_JetFitter_pb              );
    +      //setBranch<float>(tree, "JetFitter_pc"            ,   m_JetFitter_pc              );
    +      //setBranch<float>(tree, "JetFitter_pu"            ,   m_JetFitter_pu              );
    +
    +    }
    +
    +    if( m_infoSwitch.m_svDetails){
    +      setBranch<float>(tree, "SV0",               m_SV0);
    +      setBranch<float>(tree, "sv0_NGTinSvx",      m_sv0_NGTinSvx  );
    +      setBranch<float>(tree, "sv0_N2Tpair",       m_sv0_N2Tpair   );
    +      setBranch<float>(tree, "sv0_massvx",        m_sv0_massvx    );
    +      setBranch<float>(tree, "sv0_efracsvx",      m_sv0_efracsvx  );
    +      setBranch<float>(tree, "sv0_normdist",      m_sv0_normdist  );
    +
    +      setBranch<float>(tree, "SV1",               m_SV1);
    +      setBranch<float>(tree, "SV1IP3D",           m_SV1IP3D);
    +      setBranch<float>(tree, "COMBx",             m_COMBx);
    +      setBranch<float>(tree, "sv1_pu",            m_sv1_pu        );
    +      setBranch<float>(tree, "sv1_pb",            m_sv1_pb        );
    +      setBranch<float>(tree, "sv1_pc",            m_sv1_pc        );
    +      setBranch<float>(tree, "sv1_c",             m_sv1_c         );
    +      setBranch<float>(tree, "sv1_cu",            m_sv1_cu        );
    +      setBranch<float>(tree, "sv1_NGTinSvx",      m_sv1_NGTinSvx  );
    +      setBranch<float>(tree, "sv1_N2Tpair",       m_sv1_N2Tpair   );
    +      setBranch<float>(tree, "sv1_massvx",        m_sv1_massvx    );
    +      setBranch<float>(tree, "sv1_efracsvx",      m_sv1_efracsvx  );
    +      setBranch<float>(tree, "sv1_normdist",      m_sv1_normdist  );
    +      setBranch<float>(tree, "sv1_Lxy",           m_sv1_Lxy       );
    +      setBranch<float>(tree, "sv1_sig3d",         m_sv1_sig3d       );
    +      setBranch<float>(tree, "sv1_L3d",           m_sv1_L3d       );
    +      setBranch<float>(tree, "sv1_distmatlay",    m_sv1_distmatlay);
    +      setBranch<float>(tree, "sv1_dR",            m_sv1_dR        );
    +    }
    +
    +    if( m_infoSwitch.m_ipDetails){
    +
    +      setBranch<float>(tree,  "IP2D_pu",                   m_IP2D_pu                   );
    +      setBranch<float>(tree,  "IP2D_pb",                   m_IP2D_pb                   );
    +      setBranch<float>(tree,  "IP2D_pc",                   m_IP2D_pc                   );
    +      setBranch<float>(tree,  "IP2D",                      m_IP2D                      );
    +      setBranch<float>(tree,  "IP2D_c",                    m_IP2D_c                    );
    +      setBranch<float>(tree,  "IP2D_cu",                   m_IP2D_cu                   );
    +      setBranch<float>(tree,  "nIP2DTracks"              , m_nIP2DTracks               );
    +      setBranch<std::vector<float> >(tree,  "IP2D_gradeOfTracks"       , m_IP2D_gradeOfTracks        );
    +      setBranch<std::vector<float> >(tree,  "IP2D_flagFromV0ofTracks"  , m_IP2D_flagFromV0ofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP2D_valD0wrtPVofTracks"  , m_IP2D_valD0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP2D_sigD0wrtPVofTracks"  , m_IP2D_sigD0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP2D_weightBofTracks"     , m_IP2D_weightBofTracks      );
    +      setBranch<std::vector<float> >(tree,  "IP2D_weightCofTracks"     , m_IP2D_weightCofTracks      );
    +      setBranch<std::vector<float> >(tree,  "IP2D_weightUofTracks"     , m_IP2D_weightUofTracks      );
    +
    +      setBranch<float>(tree,  "IP3D",                      m_IP3D);
    +      setBranch<float>(tree,  "IP3D_pu",                   m_IP3D_pu                   );
    +      setBranch<float>(tree,  "IP3D_pb",                   m_IP3D_pb                   );
    +      setBranch<float>(tree,  "IP3D_pc",                   m_IP3D_pc                   );
    +      setBranch<float>(tree,  "IP3D",                      m_IP3D                      );
    +      setBranch<float>(tree,  "IP3D_c",                    m_IP3D_c                    );
    +      setBranch<float>(tree,  "IP3D_cu",                   m_IP3D_cu                   );
    +      setBranch<float>(tree,  "nIP3DTracks"              , m_nIP3DTracks               );
    +      setBranch<std::vector<float> >(tree,  "IP3D_gradeOfTracks"       , m_IP3D_gradeOfTracks        );
    +      setBranch<std::vector<float> >(tree,  "IP3D_flagFromV0ofTracks"  , m_IP3D_flagFromV0ofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP3D_valD0wrtPVofTracks"  , m_IP3D_valD0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP3D_sigD0wrtPVofTracks"  , m_IP3D_sigD0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP3D_valZ0wrtPVofTracks"  , m_IP3D_valZ0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP3D_sigZ0wrtPVofTracks"  , m_IP3D_sigZ0wrtPVofTracks   );
    +      setBranch<std::vector<float> >(tree,  "IP3D_weightBofTracks"     , m_IP3D_weightBofTracks      );
    +      setBranch<std::vector<float> >(tree,  "IP3D_weightCofTracks"     , m_IP3D_weightCofTracks      );
    +      setBranch<std::vector<float> >(tree,  "IP3D_weightUofTracks"     , m_IP3D_weightUofTracks      );
    +
    +    }
    +
    +    if( m_infoSwitch.m_JVC ) {
    +      setBranch<double>(tree,"JetVertexCharge_discriminant",     m_JetVertexCharge_discriminant);
    +    }
    +  }
    +
    +  if( m_infoSwitch.m_flavorTagHLT  ) {
    +
    +    setBranch<float>(tree,"vtxOnlineValid",m_vtxOnlineValid);
    +    setBranch<float>(tree,"vtxHadDummy"   ,m_vtxHadDummy   );
    +    setBranch<float>(tree,"bs_online_vx"   ,m_bs_online_vx   );
    +    setBranch<float>(tree,"bs_online_vy"   ,m_bs_online_vy   );
    +    setBranch<float>(tree,"bs_online_vz"   ,m_bs_online_vz   );
    +
    +    setBranch<float>(tree,"vtx_offline_x0"     ,m_vtx_offline_x0     );
    +    setBranch<float>(tree,"vtx_offline_y0"     ,m_vtx_offline_y0     );
    +    setBranch<float>(tree,"vtx_offline_z0"     ,m_vtx_offline_z0     );
    +
    +    setBranch<float>(tree,"vtx_online_x0"      ,m_vtx_online_x0     );
    +    setBranch<float>(tree,"vtx_online_y0"      ,m_vtx_online_y0     );
    +    setBranch<float>(tree,"vtx_online_z0"      ,m_vtx_online_z0     );
    +
    +    setBranch<float>(tree,"vtx_online_bkg_x0"  ,m_vtx_online_bkg_x0     );
    +    setBranch<float>(tree,"vtx_online_bkg_y0"  ,m_vtx_online_bkg_y0     );
    +    setBranch<float>(tree,"vtx_online_bkg_z0"  ,m_vtx_online_bkg_z0     );
    +
    +  }
    +
    +  if( m_infoSwitch.m_flavorTagTLA ) {
    +    setBranch<float>(tree,"fastDIPS",    m_fastDIPS);
    +    setBranch<float>(tree,"fastDIPS_pu", m_fastDIPS_pu);
    +    setBranch<float>(tree,"fastDIPS_pc", m_fastDIPS_pc);
    +    setBranch<float>(tree,"fastDIPS_pb", m_fastDIPS_pb);
    +  }
    +
    +  if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty() ) {
    +    for(auto btag : m_btags)
    +      btag->setBranch(tree, m_name);
    +  }
    +
    +  if( m_infoSwitch.m_area ) {
    +    setBranch<float>(tree,"GhostArea",     m_GhostArea);
    +    setBranch<float>(tree,"ActiveArea",    m_ActiveArea);
    +    setBranch<float>(tree,"VoronoiArea",   m_VoronoiArea);
    +    setBranch<float>(tree,"ActiveArea4vec_pt", m_ActiveArea4vec_pt);
    +    setBranch<float>(tree,"ActiveArea4vec_eta", m_ActiveArea4vec_eta);
    +    setBranch<float>(tree,"ActiveArea4vec_phi", m_ActiveArea4vec_phi);
    +    setBranch<float>(tree,"ActiveArea4vec_m",   m_ActiveArea4vec_m);
    +  }
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    setBranch<int  >(tree,"ConeTruthLabelID",   m_ConeTruthLabelID );
    +    setBranch<int  >(tree,"TruthCount",         m_TruthCount     );
    +    setBranch<float>(tree,"TruthLabelDeltaR_B", m_TruthLabelDeltaR_B     );
    +    setBranch<float>(tree,"TruthLabelDeltaR_C", m_TruthLabelDeltaR_C      );
    +    setBranch<float>(tree,"TruthLabelDeltaR_T", m_TruthLabelDeltaR_T      );
    +    setBranch<int  >(tree,"PartonTruthLabelID", m_PartonTruthLabelID  );
    +    setBranch<float>(tree,"GhostTruthAssociationFraction", m_GhostTruthAssociationFraction);
    +    setBranch<float>(tree,"truth_E",   m_truth_E);
    +    setBranch<float>(tree,"truth_pt",  m_truth_pt);
    +    setBranch<float>(tree,"truth_phi", m_truth_phi);
    +    setBranch<float>(tree,"truth_eta", m_truth_eta);
    +  }
    +
    +
    +  if ( m_infoSwitch.m_truthDetails ) {
    +    setBranch<int  >(tree,"GhostBHadronsFinalCount",   m_GhostBHadronsFinalCount   );
    +    setBranch<int  >(tree,"GhostBHadronsInitialCount", m_GhostBHadronsInitialCount );
    +    setBranch<int  >(tree,"GhostBQuarksFinalCount",    m_GhostBQuarksFinalCount    );
    +    setBranch<float>(tree,"GhostBHadronsFinalPt",      m_GhostBHadronsFinalPt      );
    +    setBranch<float>(tree,"GhostBHadronsInitialPt",    m_GhostBHadronsInitialPt    );
    +    setBranch<float>(tree,"GhostBQuarksFinalPt",       m_GhostBQuarksFinalPt       );
    +
    +    setBranch<int  >(tree,"GhostCHadronsFinalCount"  , m_GhostCHadronsFinalCount  );
    +    setBranch<int  >(tree,"GhostCHadronsInitialCount", m_GhostCHadronsInitialCount);
    +    setBranch<int  >(tree,"GhostCQuarksFinalCount"   , m_GhostCQuarksFinalCount   );
    +    setBranch<float>(tree,"GhostCHadronsFinalPt"     , m_GhostCHadronsFinalPt     );
    +    setBranch<float>(tree,"GhostCHadronsInitialPt"   , m_GhostCHadronsInitialPt   );
    +    setBranch<float>(tree,"GhostCQuarksFinalPt"      , m_GhostCQuarksFinalPt      );
    +
    +    setBranch<int  >(tree,"GhostTausFinalCount",       m_GhostTausFinalCount );
    +    setBranch<float>(tree,"GhostTausFinalPt"   ,       m_GhostTausFinalPt    );
    +
    +    setBranch<int  >(tree,"truth_pdgId"   , m_truth_pdgId);
    +    setBranch<float>(tree,"truth_partonPt", m_truth_partonPt);
    +    setBranch<float>(tree,"truth_partonDR", m_truth_partonDR);
    +  }
    +
    +  if ( m_infoSwitch.m_charge ) {
    +    setBranch<double>(tree,"charge", m_charge);
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    setBranch<char>(tree,"passSel", m_passSel);
    +  }
    +
    +  if ( m_infoSwitch.m_passOR ) {
    +    setBranch<char>(tree,"passOR", m_passOR);
    +  }
    +
    +  return;
    +}
    +
    +
    +void JetContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  // rapidity
    +  if( m_infoSwitch.m_rapidity ) {
    +    m_rapidity->clear();
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched->clear();
    +    m_isTrigMatchedToChain->clear();
    +    m_listTrigChains->clear();
    +  }
    +
    +  // clean
    +  if( m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) {
    +    if(m_infoSwitch.m_clean){
    +      m_Timing                    ->clear();
    +      m_LArQuality                ->clear();
    +      m_HECQuality                ->clear();
    +      m_NegativeE                 ->clear();
    +      m_AverageLArQF              ->clear();
    +      m_BchCorrCell               ->clear();
    +      m_N90Constituents           ->clear();
    +      m_LArBadHVEnergyFrac        ->clear();
    +      m_LArBadHVNCell             ->clear();
    +      m_ChargedFraction           ->clear();
    +      m_OotFracClusters5          ->clear();
    +      m_OotFracClusters10         ->clear();
    +      m_LeadingClusterPt          ->clear();
    +      m_LeadingClusterSecondLambda->clear();
    +      m_LeadingClusterCenterLambda->clear();
    +      m_LeadingClusterSecondR     ->clear();
    +      if(m_infoSwitch.m_cleanTrig) {
    +        m_clean_passLooseBadTriggerUgly->clear();
    +      }
    +      else {
    +        m_clean_passTightBadUgly    ->clear();
    +        m_clean_passLooseBadUgly    ->clear();
    +      }
    +    }
    +    if(m_infoSwitch.m_cleanTrig) {
    +      m_clean_passLooseBadTrigger ->clear();
    +    }
    +    else {
    +      m_clean_passLooseBad        ->clear();
    +      m_clean_passTightBad        ->clear();
    +    }
    +    if(m_infoSwitch.m_cleanLLP) {
    +      m_clean_passLooseBadLLP        ->clear();
    +    }
    +  }
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    m_Timing->clear();
    +  }
    +
    +
    +  // energy
    +  if ( m_infoSwitch.m_energy || m_infoSwitch.m_energyLight ) {
    +    if ( m_infoSwitch.m_energy ){
    +      m_HECFrac               ->clear();
    +      m_CentroidR             ->clear();
    +      m_LowEtConstituentsFrac ->clear();
    +    }
    +    m_EMFrac                ->clear();
    +    m_FracSamplingMax       ->clear();
    +    m_FracSamplingMaxIndex  ->clear();
    +    m_GhostMuonSegmentCount ->clear();
    +    m_Width                 ->clear();
    +  }
    +
    +  // each step of the calibration sequence
    +  if ( m_infoSwitch.m_scales ) {
    +    m_emScalePt             ->clear();
    +    m_constScalePt      ->clear();
    +    m_pileupScalePt     ->clear();
    +    m_originConstitScalePt  ->clear();
    +    m_etaJESScalePt     ->clear();
    +    m_gscScalePt        ->clear();
    +    m_jmsScalePt            ->clear();
    +    m_insituScalePt     ->clear();
    +
    +    m_emScaleM             ->clear();
    +    m_constScaleM          ->clear();
    +    m_pileupScaleM         ->clear();
    +    m_originConstitScaleM  ->clear();
    +    m_etaJESScaleM         ->clear();
    +    m_gscScaleM            ->clear();
    +    m_jmsScaleM            ->clear();
    +    m_insituScaleM         ->clear();
    +  }
    +
    +  // eta at constScale
    +  if ( m_infoSwitch.m_constscaleEta ) {
    +    m_constScaleEta     ->clear();
    +  }
    +
    +  // detector eta
    +  if ( m_infoSwitch.m_detectorEta ) {
    +    m_detectorEta           ->clear();
    +  }
    +
    +  // layer
    +  if ( m_infoSwitch.m_layer ) {
    +    m_EnergyPerSampling->clear();
    +  }
    +
    +  // trackAll
    +  if ( m_infoSwitch.m_trackAll ) {
    +    m_NumTrkPt1000             ->clear();
    +    m_SumPtTrkPt1000           ->clear();
    +    m_TrackWidthPt1000         ->clear();
    +    m_NumTrkPt500              ->clear();
    +    m_SumPtTrkPt500            ->clear();
    +    m_TrackWidthPt500          ->clear();
    +    m_JVF                      ->clear();
    +  }
    +
    +  // trackPV
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt ) {
    +    if ( m_infoSwitch.m_trackPV ) {
    +      m_NumTrkPt1000PV    ->clear();
    +      m_SumPtTrkPt1000PV  ->clear();
    +      m_TrackWidthPt1000PV->clear();
    +      m_NumTrkPt500PV     ->clear();
    +      m_SumPtTrkPt500PV   ->clear();
    +      m_TrackWidthPt500PV ->clear();
    +      m_JVFPV             ->clear();
    +      m_JvtJvfcorr        ->clear();
    +      m_JvtRpt            ->clear();
    +    }
    +    m_Jvt               ->clear();
    +  }
    +
    +   if (m_infoSwitch.m_fJvt){
    +    m_fJvt->clear();
    +  }
    +
    +  if (m_infoSwitch.m_NNJvt){
    +    m_NNJvt->clear();
    +    m_NNJvtPass->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) {
    +    m_JvtPass_Loose   ->clear();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Loose ->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) {
    +    m_JvtPass_Medium    ->clear();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Medium->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) {
    +    m_JvtPass_Tight     ->clear();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_Tight ->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) {
    +    m_JvtPass_FixedEffPt    ->clear();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_FixedEffPt->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) {
    +    m_JvtPass_TightFwd     ->clear();
    +    if ( m_mc ) {
    +      m_JvtEff_SF_TightFwd ->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) {
    +    m_fJvtPass_Loose    ->clear();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Loose->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) {
    +    m_fJvtPass_Medium    ->clear();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Medium->clear();
    +    }
    +  }
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) {
    +    m_fJvtPass_Tight     ->clear();
    +    if ( m_mc ) {
    +      m_fJvtEff_SF_Tight ->clear();
    +    }
    +  }
    +
    +  // chargedPFOPV
    +  if ( m_infoSwitch.m_chargedPFOPV ) {
    +    m_SumPtChargedPFOPt500PV->clear();
    +    m_fCharged->clear();
    +
    +  }
    +
    +  if ( m_infoSwitch.m_allTrack ) {
    +    m_GhostTrackCount     ->clear();
    +    m_GhostTrackPt        ->clear();
    +    m_GhostTrack_pt       ->clear();
    +    m_GhostTrack_qOverP   ->clear();
    +    m_GhostTrack_eta      ->clear();
    +    m_GhostTrack_phi      ->clear();
    +    m_GhostTrack_e        ->clear();
    +    m_GhostTrack_d0       ->clear();
    +    m_GhostTrack_z0       ->clear();
    +
    +    if ( m_infoSwitch.m_allTrackDetail ) {
    +      m_GhostTrack_nPixelHits                               ->clear();
    +      m_GhostTrack_nSCTHits                                 ->clear();
    +      m_GhostTrack_nTRTHits                                 ->clear();
    +      m_GhostTrack_nPixelSharedHits                         ->clear();
    +      m_GhostTrack_nPixelSplitHits                          ->clear();
    +      m_GhostTrack_nInnermostPixelLayerHits                 ->clear();
    +      m_GhostTrack_nInnermostPixelLayerSharedHits           ->clear();
    +      m_GhostTrack_nInnermostPixelLayerSplitHits            ->clear();
    +      m_GhostTrack_nNextToInnermostPixelLayerHits           ->clear();
    +      m_GhostTrack_nNextToInnermostPixelLayerSharedHits     ->clear();
    +      m_GhostTrack_nNextToInnermostPixelLayerSplitHits      ->clear();
    +    }
    +  }
    +
    +  if( m_infoSwitch.m_constituent ) {
    +    m_numConstituents->clear();
    +  }
    +
    +  if( m_infoSwitch.m_constituentAll ) {
    +    m_constituentWeights ->clear();
    +    m_constituent_pt     ->clear();
    +    m_constituent_eta    ->clear();
    +    m_constituent_phi    ->clear();
    +    m_constituent_e      ->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) {
    +    m_HadronConeExclTruthLabelID        ->clear();
    +    m_HadronConeExclExtendedTruthLabelID->clear();
    +  }
    +
    +  // flavor tag
    +  if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT  ) {
    +
    +    m_DL1r                              ->clear();
    +    m_DL1r_pu                           ->clear();
    +    m_DL1r_pc                           ->clear();
    +    m_DL1r_pb                           ->clear();
    +    m_DL1dv00                           ->clear();
    +    m_DL1dv00_pu                        ->clear();
    +    m_DL1dv00_pc                        ->clear();
    +    m_DL1dv00_pb                        ->clear();
    +    m_DL1dv01                           ->clear();
    +    m_DL1dv01_pu                        ->clear();
    +    m_DL1dv01_pc                        ->clear();
    +    m_DL1dv01_pb                        ->clear();
    +    m_GN1                               ->clear();
    +    m_GN1_pu                            ->clear();
    +    m_GN1_pc                            ->clear();
    +    m_GN1_pb                            ->clear();
    +    m_GN2v00LegacyWP                    ->clear();
    +    m_GN2v00LegacyWP_pu                 ->clear();
    +    m_GN2v00LegacyWP_pc                 ->clear();
    +    m_GN2v00LegacyWP_pb                 ->clear();
    +    m_GN2v00NewAliasWP                  ->clear();
    +    m_GN2v00NewAliasWP_pu               ->clear();
    +    m_GN2v00NewAliasWP_pc               ->clear();
    +    m_GN2v00NewAliasWP_pb               ->clear();
    +    m_GN2v01                            ->clear();
    +    m_GN2v01_pu                         ->clear();
    +    m_GN2v01_pc                         ->clear();
    +    m_GN2v01_pb                         ->clear();
    +    m_GN2v01_ptau                       ->clear();
    +
    +    if( m_infoSwitch.m_jetFitterDetails){
    +      m_JetFitter_nVTX             ->clear();
    +      m_JetFitter_nSingleTracks    ->clear();
    +      m_JetFitter_nTracksAtVtx     ->clear();
    +      m_JetFitter_mass             ->clear();
    +      m_JetFitter_energyFraction   ->clear();
    +      m_JetFitter_significance3d   ->clear();
    +      m_JetFitter_deltaeta         ->clear();
    +      m_JetFitter_deltaphi         ->clear();
    +      m_JetFitter_N2Tpar           ->clear();
    +    }
    +
    +    if( m_infoSwitch.m_svDetails){
    +      m_SV0               ->clear();
    +      m_sv0_NGTinSvx      ->clear();
    +      m_sv0_N2Tpair       ->clear();
    +      m_sv0_massvx        ->clear();
    +      m_sv0_efracsvx      ->clear();
    +      m_sv0_normdist      ->clear();
    +
    +      m_SV1               ->clear();
    +      m_SV1IP3D           ->clear();
    +      m_COMBx             ->clear();
    +      m_sv1_pu            ->clear();
    +      m_sv1_pb            ->clear();
    +      m_sv1_pc            ->clear();
    +      m_sv1_c             ->clear();
    +      m_sv1_cu            ->clear();
    +      m_sv1_NGTinSvx      ->clear();
    +      m_sv1_N2Tpair       ->clear();
    +      m_sv1_massvx        ->clear();
    +      m_sv1_efracsvx      ->clear();
    +      m_sv1_normdist      ->clear();
    +      m_sv1_Lxy           ->clear();
    +      m_sv1_sig3d         ->clear();
    +      m_sv1_L3d           ->clear();
    +      m_sv1_distmatlay    ->clear();
    +      m_sv1_dR            ->clear();
    +    }
    +
    +    if( m_infoSwitch.m_ipDetails){
    +      m_IP2D_pu        ->clear();
    +      m_IP2D_pb        ->clear();
    +      m_IP2D_pc        ->clear();
    +      m_IP2D           ->clear();
    +      m_IP2D_c         ->clear();
    +      m_IP2D_cu        ->clear();
    +      m_nIP2DTracks    ->clear();
    +
    +      m_IP2D_gradeOfTracks              ->clear();
    +      m_IP2D_flagFromV0ofTracks         ->clear();
    +      m_IP2D_valD0wrtPVofTracks         ->clear();
    +      m_IP2D_sigD0wrtPVofTracks         ->clear();
    +      m_IP2D_weightBofTracks            ->clear();
    +      m_IP2D_weightCofTracks            ->clear();
    +      m_IP2D_weightUofTracks            ->clear();
    +
    +      m_IP3D         ->clear();
    +      m_IP3D_pu      ->clear();
    +      m_IP3D_pb      ->clear();
    +      m_IP3D_pc      ->clear();
    +      m_IP3D         ->clear();
    +      m_IP3D_c       ->clear();
    +      m_IP3D_cu      ->clear();
    +      m_nIP3DTracks  ->clear();
    +      m_IP3D_gradeOfTracks        ->clear();
    +      m_IP3D_flagFromV0ofTracks   ->clear();
    +      m_IP3D_valD0wrtPVofTracks   ->clear();
    +      m_IP3D_sigD0wrtPVofTracks   ->clear();
    +      m_IP3D_valZ0wrtPVofTracks   ->clear();
    +      m_IP3D_sigZ0wrtPVofTracks   ->clear();
    +      m_IP3D_weightBofTracks      ->clear();
    +      m_IP3D_weightCofTracks      ->clear();
    +      m_IP3D_weightUofTracks      ->clear();
    +    }
    +
    +    if( m_infoSwitch.m_JVC ){
    +      m_JetVertexCharge_discriminant->clear();
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_flavorTagHLT  ) {
    +    m_vtxOnlineValid->clear();
    +    m_vtxHadDummy->clear();
    +    m_bs_online_vx->clear();
    +    m_bs_online_vy->clear();
    +    m_bs_online_vz->clear();
    +
    +    m_vtx_offline_x0->clear();
    +    m_vtx_offline_y0->clear();
    +    m_vtx_offline_z0->clear();
    +
    +    m_vtx_online_x0->clear();
    +    m_vtx_online_y0->clear();
    +    m_vtx_online_z0->clear();
    +
    +    m_vtx_online_bkg_x0->clear();
    +    m_vtx_online_bkg_y0->clear();
    +    m_vtx_online_bkg_z0->clear();
    +
    +  }
    +
    +  if ( m_infoSwitch.m_flavorTagTLA  ) {
    +    m_fastDIPS    ->clear();
    +    m_fastDIPS_pu ->clear();
    +    m_fastDIPS_pc ->clear();
    +    m_fastDIPS_pb ->clear();
    +  }
    +
    +  if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty()) { // just clear them all....
    +    for(auto btag : m_btags)
    +      btag->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_area ) {
    +    m_GhostArea          ->clear();
    +    m_ActiveArea         ->clear();
    +    m_VoronoiArea        ->clear();
    +    m_ActiveArea4vec_pt  ->clear();
    +    m_ActiveArea4vec_eta ->clear();
    +    m_ActiveArea4vec_phi ->clear();
    +    m_ActiveArea4vec_m   ->clear();
    +  }
    +
    +  // truth
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +    m_ConeTruthLabelID  ->clear();
    +    m_TruthCount        ->clear();
    +    m_TruthLabelDeltaR_B->clear();
    +    m_TruthLabelDeltaR_C->clear();
    +    m_TruthLabelDeltaR_T->clear();
    +    m_PartonTruthLabelID->clear();
    +    m_GhostTruthAssociationFraction->clear();
    +    m_truth_E  ->clear();
    +    m_truth_pt ->clear();
    +    m_truth_phi->clear();
    +    m_truth_eta->clear();
    +  }
    +
    +  // truth_detail
    +  if ( m_infoSwitch.m_truthDetails ) {
    +    m_GhostBHadronsFinalCount       ->clear();
    +    m_GhostBHadronsInitialCount     ->clear();
    +    m_GhostBQuarksFinalCount        ->clear();
    +    m_GhostBHadronsFinalPt          ->clear();
    +    m_GhostBHadronsInitialPt        ->clear();
    +    m_GhostBQuarksFinalPt           ->clear();
    +
    +    m_GhostCHadronsFinalCount       ->clear();
    +    m_GhostCHadronsInitialCount     ->clear();
    +    m_GhostCQuarksFinalCount        ->clear();
    +    m_GhostCHadronsFinalPt          ->clear();
    +    m_GhostCHadronsInitialPt        ->clear();
    +    m_GhostCQuarksFinalPt           ->clear();
    +
    +    m_GhostTausFinalCount           ->clear();
    +    m_GhostTausFinalPt              ->clear();
    +
    +    m_truth_pdgId                   ->clear();
    +    m_truth_partonPt                ->clear();
    +    m_truth_partonDR                ->clear();
    +
    +  }
    +
    +  if( m_infoSwitch.m_charge ) {
    +    m_charge->clear();
    +  }
    +
    +  if( m_infoSwitch.m_passSel ) {
    +    m_passSel->clear();
    +  }
    +
    +  if( m_infoSwitch.m_passOR ) {
    +    m_passOR->clear();
    +  }
    +
    +  return;
    +}
    +
    +void JetContainer::FillJet( const xAOD::Jet* jet, const xAOD::Vertex* pv, int pvLocation ){
    +  return FillJet(static_cast<const xAOD::IParticle*>(jet), pv, pvLocation);
    +}
    +
    +void JetContainer::FillJet( const xAOD::IParticle* particle, const xAOD::Vertex* pv, int pvLocation ){
    +  if(m_debug) std::cout << "In JetContainer::FillJet " << std::endl;
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::Jet* jet=dynamic_cast<const xAOD::Jet*>(particle);
    +
    +  if( m_infoSwitch.m_rapidity ){
    +    m_rapidity->push_back( jet->rapidity() );
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +
    +    // retrieve map<string,char> w/ <chain,isMatched>
    +    //
    +    static SG::AuxElement::Accessor< std::map<std::string,char> > isTrigMatchedMapJetAcc("isTrigMatchedMapJet");
    +
    +    std::vector<int> matches;
    +
    +    if ( isTrigMatchedMapJetAcc.isAvailable( *jet ) ) {
    +      // loop over map and fill branches
    +      //
    +      for ( auto const &it : (isTrigMatchedMapJetAcc( *jet )) ) {
    +    matches.push_back( static_cast<int>(it.second) );
    +    m_listTrigChains->push_back( it.first );
    +      }
    +    } else {
    +      matches.push_back( -1 );
    +      m_listTrigChains->push_back("NONE");
    +    }
    +
    +    m_isTrigMatchedToChain->push_back(matches);
    +
    +    // if at least one match among the chains is found, say this jet is trigger matched
    +    if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); }
    +    else { m_isTrigMatched->push_back(0); }
    +
    +  }
    +
    +  if (m_infoSwitch.m_clean || m_infoSwitch.m_cleanLight || m_infoSwitch.m_cleanLLP) {
    +
    +    if(m_infoSwitch.m_clean){
    +
    +
    +      static SG::AuxElement::ConstAccessor<float> jetTime ("Timing");
    +      safeFill<float, float, xAOD::Jet>(jet, jetTime, m_Timing, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> LArQuality ("LArQuality");
    +      safeFill<float, float, xAOD::Jet>(jet, LArQuality, m_LArQuality, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> hecq ("HECQuality");
    +      safeFill<float, float, xAOD::Jet>(jet, hecq, m_HECQuality, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> negE ("NegativeE");
    +      safeFill<float, float, xAOD::Jet>(jet, negE, m_NegativeE, -999, m_units);
    +
    +      static SG::AuxElement::ConstAccessor<float> avLArQF ("AverageLArQF");
    +      safeFill<float, float, xAOD::Jet>(jet, avLArQF, m_AverageLArQF, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> bchCorrCell ("BchCorrCell");
    +      safeFill<float, float, xAOD::Jet>(jet, bchCorrCell, m_BchCorrCell, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> N90Const ("N90Constituents");
    +      safeFill<float, float, xAOD::Jet>(jet, N90Const, m_N90Constituents, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> LArBadHVEFrac ("LArBadHVEnergyFrac");
    +      safeFill<float, float, xAOD::Jet>(jet, LArBadHVEFrac, m_LArBadHVEnergyFrac, -999);
    +
    +      static SG::AuxElement::ConstAccessor<int> LArBadHVNCell ("LArBadHVNCell");
    +      safeFill<int, int, xAOD::Jet>(jet, LArBadHVNCell, m_LArBadHVNCell, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> OotFracClus5 ("OotFracClusters5");
    +      safeFill<float, float, xAOD::Jet>(jet, OotFracClus5, m_OotFracClusters5, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> OotFracClus10 ("OotFracClusters10");
    +      safeFill<float, float, xAOD::Jet>(jet, OotFracClus10, m_OotFracClusters10, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> leadClusPt ("LeadingClusterPt");
    +      safeFill<float, float, xAOD::Jet>(jet, leadClusPt, m_LeadingClusterPt, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> leadClusSecondLambda ("LeadingClusterSecondLambda");
    +      safeFill<float, float, xAOD::Jet>(jet, leadClusSecondLambda, m_LeadingClusterSecondLambda, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> leadClusCenterLambda ("LeadingClusterCenterLambda");
    +      safeFill<float, float, xAOD::Jet>(jet, leadClusCenterLambda, m_LeadingClusterCenterLambda, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> leadClusSecondR ("LeadingClusterSecondR");
    +      safeFill<float, float, xAOD::Jet>(jet, leadClusSecondR, m_LeadingClusterSecondR, -999);
    +
    +      if(!m_infoSwitch.m_cleanTrig) {
    +        static SG::AuxElement::ConstAccessor<int> clean_passLooseBadUgly ("clean_passLooseBadUgly");
    +        safeFill<int, int, xAOD::Jet>(jet, clean_passLooseBadUgly, m_clean_passLooseBadUgly, -999);
    +
    +        static SG::AuxElement::ConstAccessor<int> clean_passTightBadUgly ("clean_passTightBadUgly");
    +        safeFill<int, int, xAOD::Jet>(jet, clean_passTightBadUgly, m_clean_passTightBadUgly, -999);
    +      }
    +      else {
    +        static SG::AuxElement::ConstAccessor<int> clean_passLooseBadTriggerUgly ("clean_passLooseBadTriggerUgly");
    +        safeFill<int, int, xAOD::Jet>(jet, clean_passLooseBadTriggerUgly, m_clean_passLooseBadTriggerUgly, -999);
    +      }
    +
    +    }
    +
    +    if(!m_infoSwitch.m_cleanTrig) {
    +      static SG::AuxElement::ConstAccessor<int> clean_passLooseBad ("clean_passLooseBad");
    +      safeFill<int, int, xAOD::Jet>(jet, clean_passLooseBad, m_clean_passLooseBad, -999);
    +
    +      static SG::AuxElement::ConstAccessor<int> clean_passTightBad ("clean_passTightBad");
    +      safeFill<int, int, xAOD::Jet>(jet, clean_passTightBad, m_clean_passTightBad, -999);
    +    }
    +    else {
    +      static SG::AuxElement::ConstAccessor<int> clean_passLooseBadTrigger ("clean_passLooseBadTrigger");
    +      safeFill<int, int, xAOD::Jet>(jet, clean_passLooseBadTrigger, m_clean_passLooseBadTrigger, -999);
    +    }
    +    if(m_infoSwitch.m_cleanLLP) {
    +      static SG::AuxElement::ConstAccessor<int> clean_passLooseBadLLP ("clean_passLooseBadLLP");
    +      safeFill<int, int, xAOD::Jet>(jet, clean_passLooseBadLLP, m_clean_passLooseBadLLP, -999);
    +    }
    +
    +  } // clean
    +  if(m_infoSwitch.m_timing && !m_infoSwitch.m_clean){
    +    static SG::AuxElement::ConstAccessor<float> jetTime ("Timing");
    +    safeFill<float, float, xAOD::Jet>(jet, jetTime, m_Timing, -999);
    +  }
    +
    +
    +  if ( m_infoSwitch.m_energy | m_infoSwitch.m_energyLight ) {
    +
    +    if ( m_infoSwitch.m_energy ){
    +
    +      static SG::AuxElement::ConstAccessor<float> HECf ("HECFrac");
    +      safeFill<float, float, xAOD::Jet>(jet, HECf, m_HECFrac, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> centroidR ("CentroidR");
    +      safeFill<float, float, xAOD::Jet>(jet, centroidR, m_CentroidR, -999);
    +
    +      static SG::AuxElement::ConstAccessor<float> lowEtFrac ("LowEtConstituentsFrac");
    +      safeFill<float, float, xAOD::Jet>(jet, lowEtFrac, m_LowEtConstituentsFrac, -999);
    +
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> EMf ("EMFrac");
    +    safeFill<float, float, xAOD::Jet>(jet, EMf, m_EMFrac, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> fracSampMax ("FracSamplingMax");
    +    safeFill<float, float, xAOD::Jet>(jet, fracSampMax, m_FracSamplingMax, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> fracSampMaxIdx ("FracSamplingMaxIndex");
    +    safeFill<int, float, xAOD::Jet>(jet, fracSampMaxIdx, m_FracSamplingMaxIndex, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> muonSegCount ("GhostMuonSegmentCount");
    +    safeFill<int, float, xAOD::Jet>(jet, muonSegCount, m_GhostMuonSegmentCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> width ("Width");
    +    safeFill<float, float, xAOD::Jet>(jet, width, m_Width, -999);
    +
    +  } // energy
    +
    +  // each step of the calibration sequence
    +  if ( m_infoSwitch.m_scales ) {
    +    xAOD::JetFourMom_t fourVec;
    +    bool status(false);
    +    // EM Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetEMScaleMomentum", fourVec );
    +    if( status ) {
    +      m_emScalePt->push_back( fourVec.Pt() / m_units );
    +      m_emScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_emScalePt->push_back( -999 );
    +      m_emScaleM->push_back( -999 );
    +    }
    +    // Constit Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetConstitScaleMomentum", fourVec );
    +    if( status ) {
    +      m_constScalePt->push_back( fourVec.Pt() / m_units );
    +      m_constScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_constScalePt->push_back( -999 );
    +      m_constScaleM->push_back( -999 );
    +    }
    +    // Pileup Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetPileupScaleMomentum", fourVec );
    +    if( status ) {
    +      m_pileupScalePt->push_back( fourVec.Pt() / m_units );
    +      m_pileupScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_pileupScalePt->push_back( -999 );
    +      m_pileupScaleM->push_back( -999 );
    +    }
    +    // OriginConstit Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetOriginConstitScaleMomentum", fourVec );
    +    if( status ) {
    +      m_originConstitScalePt->push_back( fourVec.Pt() / m_units );
    +      m_originConstitScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_originConstitScalePt->push_back( -999 );
    +      m_originConstitScaleM->push_back( -999 );
    +    }
    +    // EtaJES Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetEtaJESScaleMomentum", fourVec );
    +    if( status ) {
    +      m_etaJESScalePt->push_back( fourVec.Pt() / m_units );
    +      m_etaJESScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_etaJESScalePt->push_back( -999 );
    +      m_etaJESScaleM->push_back( -999 );
    +    }
    +    // GSC Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetGSCScaleMomentum", fourVec );
    +    if( status ) {
    +      m_gscScalePt->push_back( fourVec.Pt() / m_units );
    +      m_gscScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_gscScalePt->push_back( -999 );
    +      m_gscScaleM->push_back( -999 );
    +    }
    +    // EtaJES Scale
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetJMSScaleMomentum", fourVec );
    +    if( status ) {
    +      m_jmsScalePt->push_back( fourVec.Pt() / m_units );
    +      m_jmsScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_jmsScalePt->push_back( -999 );
    +      m_jmsScaleM->push_back( -999 );
    +    }
    +    // only available in data
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetInsituScaleMomentum", fourVec );
    +    if(status) {
    +      m_insituScalePt->push_back( fourVec.Pt() / m_units );
    +      m_insituScaleM->push_back( fourVec.M() / m_units );
    +    }
    +    else {
    +      m_insituScalePt->push_back( -999 );
    +      m_insituScaleM->push_back( -999 );
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_constscaleEta ) {
    +    xAOD::JetFourMom_t fourVec;
    +    bool status(false);
    +    status = jet->getAttribute<xAOD::JetFourMom_t>( "JetConstitScaleMomentum", fourVec );
    +    if( status ) { m_constScaleEta->push_back( fourVec.Eta() ); }
    +    else { m_constScaleEta->push_back( -999 ); }
    +  }
    +
    +  if ( m_infoSwitch.m_detectorEta ) {
    +    static SG::AuxElement::ConstAccessor<float> DetEta ("DetectorEta");
    +    safeFill<float, float, xAOD::Jet>(jet, DetEta, m_detectorEta, -999);
    +  }
    +
    +  if ( m_infoSwitch.m_layer ) {
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > ePerSamp ("EnergyPerSampling");
    +    if ( ePerSamp.isAvailable( *jet ) ) {
    +      m_EnergyPerSampling->push_back( ePerSamp( *jet ) );
    +      m_EnergyPerSampling->back();
    +      std::transform((m_EnergyPerSampling->back()).begin(),
    +                     (m_EnergyPerSampling->back()).end(),
    +                     (m_EnergyPerSampling->back()).begin(),
    +                     std::bind2nd(std::divides<float>(), m_units));
    +    } else {
    +      // could push back a vector of 24...
    +      // ... waste of space vs prevention of out of range down stream
    +      std::vector<float> junk(1,-999);
    +      m_EnergyPerSampling->push_back( junk );
    +    }
    +  }
    +
    +
    +  if ( m_infoSwitch.m_trackAll || m_infoSwitch.m_trackPV || m_infoSwitch.m_jvt || m_infoSwitch.m_clean || m_infoSwitch.m_chargedPFOPV ) {
    +
    +    // several moments calculated from all verticies
    +    // one accessor for each and just use appropiately in the following
    +    static SG::AuxElement::ConstAccessor< std::vector<int> >   nTrk1000("NumTrkPt1000");
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > sumPt1000("SumPtTrkPt1000");
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > trkWidth1000("TrackWidthPt1000");
    +    static SG::AuxElement::ConstAccessor< std::vector<int> >   nTrk500 ("NumTrkPt500");
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > sumPt500 ("SumPtTrkPt500");
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > trkWidth500 ("TrackWidthPt500");
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > jvf("JVF");
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<float> > sumPtChargedPFO500 ("SumPtChargedPFOPt500");
    +
    +
    +    if ( m_infoSwitch.m_trackAll ) {
    +
    +      std::vector<int> junkInt(1,-999);
    +      std::vector<float> junkFlt(1,-999);
    +
    +      if ( nTrk1000.isAvailable( *jet ) ) {
    +        m_NumTrkPt1000->push_back( nTrk1000( *jet ) );
    +      } else { m_NumTrkPt1000->push_back( junkInt ); }
    +
    +      if ( sumPt1000.isAvailable( *jet ) ) {
    +        m_SumPtTrkPt1000->push_back( sumPt1000( *jet ) );
    +        std::transform((m_SumPtTrkPt1000->back()).begin(),
    +                     (m_SumPtTrkPt1000->back()).end(),
    +                     (m_SumPtTrkPt1000->back()).begin(),
    +                     std::bind2nd(std::divides<float>(), m_units));
    +      } else { m_SumPtTrkPt1000->push_back( junkFlt ); }
    +
    +      if ( trkWidth1000.isAvailable( *jet ) ) {
    +        m_TrackWidthPt1000->push_back( trkWidth1000( *jet ) );
    +      } else { m_TrackWidthPt1000->push_back( junkFlt ); }
    +
    +      if ( nTrk500.isAvailable( *jet ) ) {
    +        m_NumTrkPt500->push_back( nTrk500( *jet ) );
    +      } else { m_NumTrkPt500->push_back( junkInt ); }
    +
    +      if ( sumPt500.isAvailable( *jet ) ) {
    +        m_SumPtTrkPt500->push_back( sumPt500( *jet ) );
    +        std::transform((m_SumPtTrkPt500->back()).begin(),
    +                     (m_SumPtTrkPt500->back()).end(),
    +                     (m_SumPtTrkPt500->back()).begin(),
    +                     std::bind2nd(std::divides<float>(), m_units));
    +      } else { m_SumPtTrkPt500->push_back( junkFlt ); }
    +
    +      if ( trkWidth500.isAvailable( *jet ) ) {
    +        m_TrackWidthPt500->push_back( trkWidth500( *jet ) );
    +      } else { m_TrackWidthPt500->push_back( junkFlt ); }
    +
    +      if ( jvf.isAvailable( *jet ) ) {
    +        m_JVF->push_back( jvf( *jet ) );
    +      } else { m_JVF->push_back( junkFlt ); }
    +
    +    } // trackAll
    +
    +    if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_chargedPFOPV || m_infoSwitch.m_jvt ) {
    +
    +      if ( m_infoSwitch.m_trackPV && pvLocation >= 0 ) {
    +
    +        if ( nTrk1000.isAvailable( *jet ) ) {
    +          m_NumTrkPt1000PV->push_back( nTrk1000( *jet )[pvLocation] );
    +        } else { m_NumTrkPt1000PV->push_back( -999 ); }
    +
    +        if ( sumPt1000.isAvailable( *jet ) ) {
    +          m_SumPtTrkPt1000PV->push_back( sumPt1000( *jet )[pvLocation] / m_units );
    +        } else { m_SumPtTrkPt1000PV->push_back( -999 ); }
    +
    +        if ( trkWidth1000.isAvailable( *jet ) ) {
    +          m_TrackWidthPt1000PV->push_back( trkWidth1000( *jet )[pvLocation] );
    +        } else { m_TrackWidthPt1000PV->push_back( -999 ); }
    +
    +        if ( nTrk500.isAvailable( *jet ) ) {
    +          m_NumTrkPt500PV->push_back( nTrk500( *jet )[pvLocation] );
    +        } else { m_NumTrkPt500PV->push_back( -999 ); }
    +
    +        if ( sumPt500.isAvailable( *jet ) ) {
    +          m_SumPtTrkPt500PV->push_back( sumPt500( *jet )[pvLocation] / m_units );
    +        } else { m_SumPtTrkPt500PV->push_back( -999 ); }
    +
    +        if ( trkWidth500.isAvailable( *jet ) ) {
    +          m_TrackWidthPt500PV->push_back( trkWidth500( *jet )[pvLocation] );
    +        } else { m_TrackWidthPt500PV->push_back( -999 ); }
    +
    +        if ( jvf.isAvailable( *jet ) ) {
    +          m_JVFPV->push_back( jvf( *jet )[pvLocation] );
    +        } else { m_JVFPV->push_back( -999 ); }
    +
    +        static SG::AuxElement::ConstAccessor< float > jvtJvfcorr ("JVFCorr");
    +        safeFill<float, float, xAOD::Jet>(jet, jvtJvfcorr, m_JvtJvfcorr, -999);
    +
    +        static SG::AuxElement::ConstAccessor< float > jvtRpt ("JvtRpt");
    +        safeFill<float, float, xAOD::Jet>(jet, jvtRpt, m_JvtRpt, -999);
    +
    +      } // trackPV
    +
    +
    +      if ( m_infoSwitch.m_chargedPFOPV && pvLocation >= 0) {
    +
    +        if ( sumPtChargedPFO500.isAvailable( *jet ) ) {
    +          m_SumPtChargedPFOPt500PV->push_back( sumPtChargedPFO500( *jet)[pvLocation] );
    +
    +          xAOD::JetFourMom_t jetconstitP4 = jet->jetP4("JetConstitScaleMomentum");
    +          if (jetconstitP4.Pt()==0.0)
    +          {
    +            m_fCharged->push_back(-999);
    +          }else
    +          {
    +            m_fCharged->push_back( sumPtChargedPFO500( *jet)[pvLocation] / jetconstitP4.Pt());
    +          }
    +
    +        } else {
    +          m_SumPtChargedPFOPt500PV->push_back(-999);
    +          m_fCharged->push_back(-999);
    +        }
    +
    +      }
    +
    +      static SG::AuxElement::ConstAccessor< float > jvt ("Jvt");
    +      safeFill<float, float, xAOD::Jet>(jet, jvt, m_Jvt, -999);
    +
    +      //      static SG::AuxElement::ConstAccessor<float> ghostTrackAssFrac("GhostTrackAssociationFraction");
    +      //      if ( ghostTrackAssFrac.isAvailable( *jet) ) {
    +      //        m_ghostTrackAssFrac->push_back( ghostTrackAssFrac( *jet) );
    +      //      } else { m_ghostTrackAssFrac->push_back( -999 ) ; }
    +
    +    } // trackPV || chargedPFOPV || JVT
    +
    +    if (m_infoSwitch.m_fJvt) {
    +      static SG::AuxElement::ConstAccessor< float > fJvt ("DFCommonJets_fJvt");
    +      safeFill<float, float, xAOD::Jet>(jet, fJvt, m_fJvt, -999);
    +    }
    +
    +    if (m_infoSwitch.m_NNJvt) {
    +      static SG::AuxElement::ConstAccessor< float > NNJvt ("NNJvt");
    +      static SG::AuxElement::ConstAccessor< char > NNJvtPass ("NNJvtPass");
    +      safeFill<float, float, xAOD::Jet>(jet, NNJvt, m_NNJvt, -999);
    +      safeFill<char, bool, xAOD::Jet>(jet, NNJvtPass, m_NNJvtPass, 0);
    +    }
    +
    +    if ( m_infoSwitch.m_clean && pvLocation >= 0 ) {
    +
    +      static SG::AuxElement::ConstAccessor< float > ChargedFraction("ChargedFraction");
    +      static SG::AuxElement::Decorator< float > chargedFractionDecor("ChargedFraction");
    +      if ( !chargedFractionDecor.isAvailable( *jet ) ) {
    +        // calculate and decorate
    +        if ( sumPt500.isAvailable( *jet ) ) {
    +          m_ChargedFraction->push_back( sumPt500( *jet )[pvLocation] / jet->pt() ); // units cancel out
    +        } else {
    +          m_ChargedFraction->push_back( -999. );
    +        }
    +
    +        chargedFractionDecor( *jet ) = m_ChargedFraction->back();
    +      } else {
    +        safeFill<float, float, xAOD::Jet>(jet, ChargedFraction, m_ChargedFraction, -999);
    +      }
    +    } // clean
    +
    +  } // trackAll || trackPV || JVT
    +
    +  static SG::AuxElement::ConstAccessor< char > jvtPass_Loose("JetJVT_Passed_Loose");
    +  static SG::AuxElement::ConstAccessor< char > jvtPass_Medium("JetJVT_Passed_Medium");
    +  static SG::AuxElement::ConstAccessor< char > jvtPass_Tight("JetJVT_Passed_Tight");
    +  static SG::AuxElement::ConstAccessor< char > jvtPass_FixedEffPt("JetJVT_Passed_FixedEffPt");
    +  static SG::AuxElement::ConstAccessor< char > jvtPass_TightFwd("JetJVT_Passed_TightFwd");
    +  static SG::AuxElement::ConstAccessor< char > fjvtPass_Loose("JetfJVT_Passed_Loose");
    +  static SG::AuxElement::ConstAccessor< char > fjvtPass_Medium("JetfJVT_Passed_Medium");
    +  static SG::AuxElement::ConstAccessor< char > fjvtPass_Tight("JetfJVT_Passed_Tight");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Loose("JetJvtEfficiency_JVTSyst_JVT_Loose");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Medium("JetJvtEfficiency_JVTSyst_JVT_Medium");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_Tight("JetJvtEfficiency_JVTSyst_JVT_Tight");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_FixedEffPt("JetJvtEfficiency_JVTSyst_JVT_FixedEffPt");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > jvtSF_TightFwd("JetJvtEfficiency_JVTSyst_JVT_TightFwd");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Loose("JetJvtEfficiency_fJVTSyst_fJVT_Loose");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Medium("JetJvtEfficiency_fJVTSyst_fJVT_Medium");
    +  static SG::AuxElement::ConstAccessor< std::vector< float > > fjvtSF_Tight("JetJvtEfficiency_fJVTSyst_fJVT_Tight");
    +
    +  std::vector<float> junkSF(1,1.0);
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Loose" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, jvtPass_Loose, m_JvtPass_Loose, -1);
    +    if ( m_mc ) {
    +      if ( jvtSF_Loose.isAvailable( *jet ) ) {
    +        m_JvtEff_SF_Loose->push_back( jvtSF_Loose( *jet ) );
    +      } else {
    +        m_JvtEff_SF_Loose->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Medium" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, jvtPass_Medium, m_JvtPass_Medium, -1);
    +    if ( m_mc ) {
    +      if ( jvtSF_Medium.isAvailable( *jet ) ) {
    +        m_JvtEff_SF_Medium->push_back( jvtSF_Medium( *jet ) );
    +      } else {
    +        m_JvtEff_SF_Medium->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "Tight" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, jvtPass_Tight, m_JvtPass_Tight, -1);
    +    if ( m_mc ) {
    +      if ( jvtSF_Tight.isAvailable( *jet ) ) {
    +        m_JvtEff_SF_Tight->push_back( jvtSF_Tight( *jet ) );
    +      } else {
    +        m_JvtEff_SF_Tight->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "FixedEffPt" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, jvtPass_FixedEffPt, m_JvtPass_FixedEffPt, -1);
    +    if ( m_mc ) {
    +      if ( jvtSF_FixedEffPt.isAvailable( *jet ) ) {
    +        m_JvtEff_SF_FixedEffPt->push_back( jvtSF_FixedEffPt( *jet ) );
    +      } else {
    +        m_JvtEff_SF_FixedEffPt->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sfJVTName == "TightFwd" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, jvtPass_TightFwd, m_JvtPass_TightFwd, -1);
    +    if ( m_mc ) {
    +      if ( jvtSF_TightFwd.isAvailable( *jet ) ) {
    +        m_JvtEff_SF_TightFwd->push_back( jvtSF_TightFwd( *jet ) );
    +      } else {
    +        m_JvtEff_SF_TightFwd->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Loose" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, fjvtPass_Loose, m_fJvtPass_Loose, -1);
    +    if ( m_mc ) {
    +      if ( fjvtSF_Loose.isAvailable( *jet ) ) {
    +        m_fJvtEff_SF_Loose->push_back( fjvtSF_Loose( *jet ) );
    +      } else {
    +        m_fJvtEff_SF_Loose->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Medium" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, fjvtPass_Medium, m_fJvtPass_Medium, -1);
    +    if ( m_mc ) {
    +      if ( fjvtSF_Medium.isAvailable( *jet ) ) {
    +        m_fJvtEff_SF_Medium->push_back( fjvtSF_Medium( *jet ) );
    +      } else {
    +        m_fJvtEff_SF_Medium->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackPV || m_infoSwitch.m_sffJVTName == "Tight" ) {
    +    safeFill<char, int, xAOD::Jet>(jet, fjvtPass_Tight, m_fJvtPass_Tight, -1);
    +    if ( m_mc ) {
    +      if ( fjvtSF_Tight.isAvailable( *jet ) ) {
    +        m_fJvtEff_SF_Tight->push_back( fjvtSF_Tight( *jet ) );
    +      } else {
    +        m_fJvtEff_SF_Tight->push_back( junkSF );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_allTrack ) {
    +    static SG::AuxElement::ConstAccessor< int > ghostTrackCount("GhostTrackCount");
    +    safeFill<int, int, xAOD::Jet>(jet, ghostTrackCount, m_GhostTrackCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor< float > ghostTrackPt ("GhostTrackPt");
    +    safeFill<float, float, xAOD::Jet>(jet, ghostTrackPt, m_GhostTrackPt, -999, m_units);
    +
    +    std::vector<float> pt;
    +    std::vector<float> qOverP;
    +    std::vector<float> eta;
    +    std::vector<float> phi;
    +    std::vector<float> e;
    +    std::vector<float> d0;
    +    std::vector<float> z0;
    +    std::vector<int> nPixHits;
    +    std::vector<int> nSCTHits;
    +    std::vector<int> nTRTHits;
    +    std::vector<int> nPixSharedHits;
    +    std::vector<int> nPixSplitHits;
    +    std::vector<int> nIMLPixHits;
    +    std::vector<int> nIMLPixSharedHits;
    +    std::vector<int> nIMLPixSplitHits;
    +    std::vector<int> nNIMLPixHits;
    +    std::vector<int> nNIMLPixSharedHits;
    +    std::vector<int> nNIMLPixSplitHits;
    +    static SG::AuxElement::ConstAccessor< std::vector<ElementLink<DataVector<xAOD::IParticle> > > >ghostTrack ("GhostTrack");
    +    if ( ghostTrack.isAvailable( *jet ) ) {
    +      std::vector<ElementLink<DataVector<xAOD::IParticle> > > trackLinks = ghostTrack( *jet );
    +      //std::vector<float> pt(trackLinks.size(),-999);
    +      for ( auto link_itr : trackLinks ) {
    +        if( !link_itr.isValid() ) { continue; }
    +        const xAOD::TrackParticle* track = dynamic_cast<const xAOD::TrackParticle*>( *link_itr );
    +        // if asking for tracks passing PV selection ( i.e. JVF JVT tracks )
    +        if( m_infoSwitch.m_allTrackPVSel ) {
    +          // PV selection from
    +          // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JvtManualRecalculation
    +          if( track->pt() < 500 )                { continue; } // pT cut
    +          if( !m_trkSelTool->accept(*track,pv) ) { continue; } // ID quality cut
    +          // if( track->vertex() != pv ) {                        // if not in PV vertex fit
    +          //   if( track->vertex() != 0 )           { continue; } // make sure in no vertex fits
    +          //   if( fabs((track->z0()+track->vz()-pv->z())*sin(track->theta())) > 3.0 ) { continue; } // make sure close to PV in z
    +          // }
    +        }
    +        pt. push_back( track->pt() / m_units );
    +        qOverP.push_back( track->qOverP() * m_units );
    +        eta.push_back( track->eta() );
    +        phi.push_back( track->phi() );
    +        e.  push_back( track->e()  / m_units );
    +        d0. push_back( track->d0() );
    +        z0. push_back( track->z0() + track->vz() - pv->z() ); // store z0 wrt PV...most useful
    +        if( m_infoSwitch.m_allTrackDetail ) {
    +          uint8_t getInt(0);
    +          // n pix, sct, trt
    +          track->summaryValue( getInt, xAOD::numberOfPixelHits );
    +          nPixHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfSCTHits );
    +          nSCTHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfTRTHits );
    +          nTRTHits.push_back( getInt );
    +          // pixel split shared
    +          track->summaryValue( getInt, xAOD::numberOfPixelSharedHits );
    +          nPixSharedHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfPixelSplitHits );
    +          nPixSplitHits.push_back( getInt );
    +          // n ibl, split, shared
    +          track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerHits );
    +          nIMLPixHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerSharedHits );
    +          nIMLPixSharedHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfInnermostPixelLayerSplitHits );
    +          nIMLPixSplitHits.push_back( getInt );
    +          // n bl,  split, shared
    +          track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerHits );
    +          nNIMLPixHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerSharedHits );
    +          nNIMLPixSharedHits.push_back( getInt );
    +          track->summaryValue( getInt, xAOD::numberOfNextToInnermostPixelLayerSplitHits );
    +          nNIMLPixSplitHits.push_back( getInt );
    +        }
    +      }
    +    } // if ghostTrack available
    +    m_GhostTrack_pt-> push_back( pt  );
    +    m_GhostTrack_qOverP-> push_back( qOverP );
    +    m_GhostTrack_eta->push_back( eta );
    +    m_GhostTrack_phi->push_back( phi );
    +    m_GhostTrack_e->  push_back( e   );
    +    m_GhostTrack_d0-> push_back( d0  );
    +    m_GhostTrack_z0-> push_back( z0  );
    +    if( m_infoSwitch.m_allTrackDetail ) {
    +      m_GhostTrack_nPixelHits->push_back( nPixHits );
    +      m_GhostTrack_nSCTHits->push_back( nSCTHits );
    +      m_GhostTrack_nTRTHits->push_back( nTRTHits );
    +      m_GhostTrack_nPixelSharedHits->push_back( nPixSharedHits );
    +      m_GhostTrack_nPixelSplitHits->push_back( nPixSplitHits );
    +      m_GhostTrack_nInnermostPixelLayerHits->push_back( nIMLPixHits );
    +      m_GhostTrack_nInnermostPixelLayerSharedHits->push_back( nIMLPixSharedHits );
    +      m_GhostTrack_nInnermostPixelLayerSplitHits->push_back( nIMLPixSplitHits );
    +      m_GhostTrack_nNextToInnermostPixelLayerHits->push_back( nNIMLPixHits );
    +      m_GhostTrack_nNextToInnermostPixelLayerSharedHits->push_back( nNIMLPixSharedHits );
    +      m_GhostTrack_nNextToInnermostPixelLayerSplitHits->push_back( nNIMLPixSplitHits );
    +    }
    +  } // allTrack switch
    +
    +  if( m_infoSwitch.m_constituent ) {
    +    m_numConstituents->push_back( jet->numConstituents() );
    +  }
    +
    +  if( m_infoSwitch.m_constituentAll ) {
    +    m_constituentWeights->push_back( jet->getAttribute< std::vector<float> >( "constituentWeights" ) );
    +    std::vector<float> pt;
    +    std::vector<float> eta;
    +    std::vector<float> phi;
    +    std::vector<float> e;
    +    xAOD::JetConstituentVector consVec = jet->getConstituents();
    +    if( consVec.isValid() ) {
    +      // don't use auto since iterator can also set the scale ...
    +      // not sure what that does with auto - probably default but just incase
    +      // use the example provided in
    +      // http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Event/xAOD/xAODJet/xAODJet/JetConstituentVector.h
    +      xAOD::JetConstituentVector::iterator constit = consVec.begin();
    +      xAOD::JetConstituentVector::iterator constitE = consVec.end();
    +      for( ; constit != constitE; constit++){
    +        pt. push_back( constit->pt() / m_units );
    +        eta.push_back( constit->eta() );
    +        phi.push_back( constit->phi() );
    +        e.  push_back( constit->e() / m_units  );
    +      }
    +    }
    +    m_constituent_pt-> push_back( pt  );
    +    m_constituent_eta->push_back( eta );
    +    m_constituent_phi->push_back( phi );
    +    m_constituent_e->  push_back( e   );
    +  }
    +
    +
    +  if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT || m_infoSwitch.m_flavorTagTLA ) {
    +    // flavor groups truth definition
    +    static SG::AuxElement::ConstAccessor<int> hadConeExclTruthLabel("HadronConeExclTruthLabelID");
    +    safeFill<int, int, xAOD::Jet>(jet, hadConeExclTruthLabel, m_HadronConeExclTruthLabelID, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> hadConeExclExtendedTruthLabel("HadronConeExclExtendedTruthLabelID");
    +    safeFill<int, int, xAOD::Jet>(jet, hadConeExclExtendedTruthLabel, m_HadronConeExclExtendedTruthLabelID, -999);
    +  }
    +
    +  if ( m_infoSwitch.m_flavorTag || m_infoSwitch.m_flavorTagHLT ) {
    +    const xAOD::BTagging * myBTag(0);
    +
    +    if(m_infoSwitch.m_flavorTag){
    +      myBTag = xAOD::BTaggingUtilities::getBTagging(*jet);
    +    }else if(m_infoSwitch.m_flavorTagHLT){
    +      myBTag = jet->auxdata< const xAOD::BTagging* >("HLTBTag");
    +    }
    +
    +    if(m_infoSwitch.m_JVC ) {
    +      static SG::AuxElement::ConstAccessor<double> JetVertexCharge_discriminant("JetVertexCharge_discriminant");
    +      safeFill<double, double, xAOD::BTagging>(myBTag, JetVertexCharge_discriminant, m_JetVertexCharge_discriminant, -999);
    +    }
    +
    +    float pu, pb, pc, ptau, score;
    +
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("DL1r" , "pu", pu);
    +    myBTag->variable<float>("DL1r" , "pc", pc);
    +    myBTag->variable<float>("DL1r" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.018*pc+0.982*pu) );
    +    m_DL1r_pu->push_back(pu);
    +    m_DL1r_pc->push_back(pc);
    +    m_DL1r_pb->push_back(pb);
    +    m_DL1r->push_back( score );
    +
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("DL1dv00" , "pu", pu);
    +    myBTag->variable<float>("DL1dv00" , "pc", pc);
    +    myBTag->variable<float>("DL1dv00" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.018*pc+0.982*pu) );
    +    m_DL1dv00_pu->push_back(pu);
    +    m_DL1dv00_pc->push_back(pc);
    +    m_DL1dv00_pb->push_back(pb);
    +    m_DL1dv00->push_back( score );
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("DL1dv01" , "pu", pu);
    +    myBTag->variable<float>("DL1dv01" , "pc", pc);
    +    myBTag->variable<float>("DL1dv01" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.018*pc+0.982*pu) );
    +    m_DL1dv01_pu->push_back(pu);
    +    m_DL1dv01_pc->push_back(pc);
    +    m_DL1dv01_pb->push_back(pb);
    +    m_DL1dv01->push_back( score );
    +
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("GN120220509" , "pu", pu);
    +    myBTag->variable<float>("GN120220509" , "pc", pc);
    +    myBTag->variable<float>("GN120220509" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.05*pc+0.95*pu) ); // GN1 uses a different f_c value than DL1d which is 0.05
    +    m_GN1_pu->push_back(pu);
    +    m_GN1_pc->push_back(pc);
    +    m_GN1_pb->push_back(pb);
    +    m_GN1->push_back( score );
    +
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("GN2v00LegacyWP" , "pu", pu);
    +    myBTag->variable<float>("GN2v00LegacyWP" , "pc", pc);
    +    myBTag->variable<float>("GN2v00LegacyWP" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.10*pc+0.90*pu) ); // GN2 uses a different f_c value than DL1d which is 0.01
    +    m_GN2v00LegacyWP_pu->push_back(pu);
    +    m_GN2v00LegacyWP_pc->push_back(pc);
    +    m_GN2v00LegacyWP_pb->push_back(pb);
    +    m_GN2v00LegacyWP->push_back( score );
    +
    +    pu=0; pb=0; pc=0;
    +    myBTag->variable<float>("GN2v00NewAliasWP" , "pu", pu);
    +    myBTag->variable<float>("GN2v00NewAliasWP" , "pc", pc);
    +    myBTag->variable<float>("GN2v00NewAliasWP" , "pb", pb);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.10*pc+0.90*pu) ); // GN2 uses a different f_c value than DL1d which is 0.01
    +    m_GN2v00NewAliasWP_pu->push_back(pu);
    +    m_GN2v00NewAliasWP_pc->push_back(pc);
    +    m_GN2v00NewAliasWP_pb->push_back(pb);
    +    m_GN2v00NewAliasWP->push_back( score );
    +
    +    pu=0; pb=0; pc=0; ptau=0;
    +    myBTag->variable<float>("GN2v01" , "pu", pu);
    +    myBTag->variable<float>("GN2v01" , "pc", pc);
    +    myBTag->variable<float>("GN2v01" , "pb", pb);
    +    myBTag->variable<float>("GN2v01" , "ptau", ptau);
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.20*pc+0.01*ptau+0.79*pu) ); // GN2v01 uses a different f_c value than DL1dv01 which is 0.018
    +    m_GN2v01_pu->push_back(pu);
    +    m_GN2v01_pc->push_back(pc);
    +    m_GN2v01_pb->push_back(pb);
    +    m_GN2v01_ptau->push_back(ptau);
    +    m_GN2v01->push_back( score );
    +
    +    if(m_infoSwitch.m_jetFitterDetails ) {
    +
    +      static SG::AuxElement::ConstAccessor< int   > jf_nVTXAcc       ("JetFitter_nVTX");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, jf_nVTXAcc, m_JetFitter_nVTX, -999);
    +
    +      static SG::AuxElement::ConstAccessor< int   > jf_nSingleTracks ("JetFitter_nSingleTracks");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, jf_nSingleTracks, m_JetFitter_nSingleTracks, -999);
    +
    +      static SG::AuxElement::ConstAccessor< int   > jf_nTracksAtVtx  ("JetFitter_nTracksAtVtx");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, jf_nTracksAtVtx, m_JetFitter_nTracksAtVtx, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float > jf_mass          ("JetFitter_mass");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, jf_mass, m_JetFitter_mass, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float > jf_energyFraction("JetFitter_energyFraction");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, jf_energyFraction, m_JetFitter_energyFraction, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float > jf_significance3d("JetFitter_significance3d");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, jf_significance3d, m_JetFitter_significance3d, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float > jf_deltaeta      ("JetFitter_deltaeta");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, jf_deltaeta, m_JetFitter_deltaeta, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float > jf_deltaphi      ("JetFitter_deltaphi");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, jf_deltaphi, m_JetFitter_deltaphi, -999);
    +
    +      static SG::AuxElement::ConstAccessor< int   > jf_N2Tpar        ("JetFitter_N2Tpair");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, jf_N2Tpar, m_JetFitter_N2Tpar, -999);
    +
    +      //static SG::AuxElement::ConstAccessor< double > jf_pb           ("JetFitterCombNN_pb");
    +      //safeFill<double, float, xAOD::BTagging>(myBTag, jf_pb, m_JetFitter_pb, -999);
    +      //
    +      //static SG::AuxElement::ConstAccessor< double > jf_pc           ("JetFitterCombNN_pc");
    +      //safeFill<double, float, xAOD::BTagging>(myBTag, jf_pc, m_JetFitter_pc, -999);
    +      //
    +      //static SG::AuxElement::ConstAccessor< double > jf_pu           ("JetFitterCombNN_pu");
    +      //safeFill<double, float, xAOD::BTagging>(myBTag, jf_pu, m_JetFitter_pu, -999);
    +
    +    }
    +
    +    if(m_infoSwitch.m_svDetails ) {
    +      if(m_debug) std::cout << "Filling m_svDetails " << std::endl;
    +
    +      static SG::AuxElement::ConstAccessor< int   >   sv0_NGTinSvxAcc     ("SV0_NGTinSvx");
    +      safeFill<int, float, xAOD::BTagging>(myBTag,    sv0_NGTinSvxAcc, m_sv0_NGTinSvx, -999);
    +
    +      // @brief SV0 : Number of 2-track pairs
    +      static SG::AuxElement::ConstAccessor< int   >   sv0_N2TpairAcc      ("SV0_N2Tpair");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, sv0_N2TpairAcc, m_sv0_N2Tpair, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv0_masssvxAcc      ("SV0_masssvx");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv0_masssvxAcc, m_sv0_massvx, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv0_efracsvxAcc     ("SV0_efracsvx");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv0_efracsvxAcc, m_sv0_efracsvx, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv0_normdistAcc     ("SV0_normdist");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv0_normdistAcc, m_sv0_normdist, -999);
    +
    +      double sv0;
    +      myBTag->variable<double>("SV0", "significance3D", sv0);
    +      m_SV0->push_back(sv0);
    +
    +      m_SV1IP3D->push_back( myBTag -> SV1plusIP3D_discriminant() );
    +
    +      double w=(myBTag->IP3D_pb()/myBTag->IP3D_pu()) * (myBTag->SV1_pb()/myBTag->SV1_pu());
    +      double x=50;
    +      if(w/(1+w)<1) x=-1.0*TMath::Log10(1-(w/(1+w)));
    +      m_COMBx->push_back(x);
    +
    +      static SG::AuxElement::ConstAccessor< int   >   sv1_NGTinSvxAcc     ("SV1_NGTinSvx");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, sv1_NGTinSvxAcc, m_sv1_NGTinSvx, -999);
    +
    +      // @brief SV1 : Number of 2-track pairs
    +      static SG::AuxElement::ConstAccessor< int   >   sv1_N2TpairAcc      ("SV1_N2Tpair");
    +      safeFill<int, float, xAOD::BTagging>(myBTag, sv1_N2TpairAcc, m_sv1_N2Tpair, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv1_masssvxAcc      ("SV1_masssvx");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv1_masssvxAcc, m_sv1_massvx, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv1_efracsvxAcc     ("SV1_efracsvx");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv1_efracsvxAcc, m_sv1_efracsvx, -999);
    +
    +      static SG::AuxElement::ConstAccessor< float   > sv1_normdistAcc     ("SV1_normdist");
    +      safeFill<float, float, xAOD::BTagging>(myBTag, sv1_normdistAcc, m_sv1_normdist, -999);
    +
    +      double sv1_pu = -30;  myBTag->variable<double>("SV1", "pu", sv1_pu);
    +      double sv1_pb = -30;  myBTag->variable<double>("SV1", "pb", sv1_pb);
    +      double sv1_pc = -30;  myBTag->variable<double>("SV1", "pc", sv1_pc);
    +
    +      m_sv1_pu         ->push_back(sv1_pu);
    +      m_sv1_pb         ->push_back(sv1_pb);
    +      m_sv1_pc         ->push_back(sv1_pc);
    +      m_SV1            ->push_back( myBTag->calcLLR(sv1_pb,sv1_pu)  );
    +      m_sv1_c          ->push_back( myBTag->calcLLR(sv1_pb,sv1_pc)  );
    +      m_sv1_cu         ->push_back( myBTag->calcLLR(sv1_pc,sv1_pu)  );
    +
    +      float sv1_Lxy;        myBTag->variable<float>("SV1", "Lxy"         , sv1_Lxy);
    +      float sv1_sig3d;      myBTag->variable<float>("SV1", "significance3d"         , sv1_sig3d);
    +      float sv1_L3d;        myBTag->variable<float>("SV1", "L3d"         , sv1_L3d);
    +      float sv1_distmatlay; myBTag->variable<float>("SV1", "dstToMatLay" , sv1_distmatlay);
    +      float sv1_dR;         myBTag->variable<float>("SV1", "deltaR"      , sv1_dR );
    +
    +      m_sv1_Lxy        ->push_back(sv1_Lxy        );
    +      m_sv1_sig3d      ->push_back(sv1_sig3d      );
    +      m_sv1_L3d        ->push_back(sv1_L3d        );
    +      m_sv1_distmatlay ->push_back(sv1_distmatlay );
    +      m_sv1_dR         ->push_back(sv1_dR         );
    +
    +
    +    }
    +
    +    if(m_infoSwitch.m_ipDetails ) {
    +      if(m_debug) std::cout << "Filling m_ipDetails " << std::endl;
    +
    +      //
    +      // IP2D
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<int>   >   IP2D_gradeOfTracksAcc     ("IP2D_gradeOfTracks");
    +      safeVecFill<int, float, xAOD::BTagging>(myBTag, IP2D_gradeOfTracksAcc, m_IP2D_gradeOfTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<bool>   >  IP2D_flagFromV0ofTracksAcc("IP2D_flagFromV0ofTracks");
    +      safeVecFill<bool, float, xAOD::BTagging>(myBTag, IP2D_flagFromV0ofTracksAcc, m_IP2D_flagFromV0ofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP2D_valD0wrtPVofTracksAcc("IP2D_valD0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP2D_valD0wrtPVofTracksAcc, m_IP2D_valD0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP2D_sigD0wrtPVofTracksAcc("IP2D_sigD0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP2D_sigD0wrtPVofTracksAcc, m_IP2D_sigD0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP2D_weightBofTracksAcc   ("IP2D_weightBofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP2D_weightBofTracksAcc, m_IP2D_weightBofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP2D_weightCofTracksAcc   ("IP2D_weightCofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP2D_weightCofTracksAcc, m_IP2D_weightCofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP2D_weightUofTracksAcc   ("IP2D_weightUofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP2D_weightUofTracksAcc, m_IP2D_weightUofTracks);
    +
    +      double ip2_pu = -99;  myBTag->variable<double>("IP2D", "pu", ip2_pu);
    +      double ip2_pb = -99;  myBTag->variable<double>("IP2D", "pb", ip2_pb);
    +      double ip2_pc = -99;  myBTag->variable<double>("IP2D", "pc", ip2_pc);
    +
    +      m_IP2D_pu         ->push_back(ip2_pu);
    +      m_IP2D_pb         ->push_back(ip2_pb);
    +      m_IP2D_pc         ->push_back(ip2_pc);
    +
    +      m_IP2D            ->push_back( myBTag->calcLLR(ip2_pb,ip2_pu)  );
    +      m_IP2D_c          ->push_back( myBTag->calcLLR(ip2_pb,ip2_pc)  );
    +      m_IP2D_cu         ->push_back( myBTag->calcLLR(ip2_pc,ip2_pu)  );
    +
    +
    +      //
    +      // IP3D
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<int>   >   IP3D_gradeOfTracksAcc     ("IP3D_gradeOfTracks");
    +      safeVecFill<int, float, xAOD::BTagging>(myBTag, IP3D_gradeOfTracksAcc, m_IP3D_gradeOfTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<bool>   >  IP3D_flagFromV0ofTracksAcc("IP3D_flagFromV0ofTracks");
    +      safeVecFill<bool, float, xAOD::BTagging>(myBTag, IP3D_flagFromV0ofTracksAcc, m_IP3D_flagFromV0ofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_valD0wrtPVofTracksAcc("IP3D_valD0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_valD0wrtPVofTracksAcc, m_IP3D_valD0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_sigD0wrtPVofTracksAcc("IP3D_sigD0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_sigD0wrtPVofTracksAcc, m_IP3D_sigD0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_valZ0wrtPVofTracksAcc("IP3D_valZ0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_valZ0wrtPVofTracksAcc, m_IP3D_valZ0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_sigZ0wrtPVofTracksAcc("IP3D_sigZ0wrtPVofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_sigZ0wrtPVofTracksAcc, m_IP3D_sigZ0wrtPVofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_weightBofTracksAcc   ("IP3D_weightBofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_weightBofTracksAcc, m_IP3D_weightBofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_weightCofTracksAcc   ("IP3D_weightCofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_weightCofTracksAcc, m_IP3D_weightCofTracks);
    +
    +      static SG::AuxElement::ConstAccessor< std::vector<float>   > IP3D_weightUofTracksAcc   ("IP3D_weightUofTracks");
    +      safeVecFill<float, float, xAOD::BTagging>(myBTag, IP3D_weightUofTracksAcc, m_IP3D_weightUofTracks);
    +
    +      double ip3_pu = -30;  myBTag->variable<double>("IP3D", "pu", ip3_pu);
    +      double ip3_pb = -30;  myBTag->variable<double>("IP3D", "pb", ip3_pb);
    +      double ip3_pc = -30;  myBTag->variable<double>("IP3D", "pc", ip3_pc);
    +
    +      m_IP3D_pu         ->push_back(ip3_pu  );
    +      m_IP3D_pb         ->push_back(ip3_pb  );
    +      m_IP3D_pc         ->push_back(ip3_pc  );
    +
    +      m_IP3D            ->push_back( myBTag->calcLLR(ip3_pb,ip3_pu)  );
    +      m_IP3D_c          ->push_back( myBTag->calcLLR(ip3_pb,ip3_pc)  );
    +      m_IP3D_cu         ->push_back( myBTag->calcLLR(ip3_pc,ip3_pu)  );
    +
    +    }
    +
    +
    +
    +    if(m_infoSwitch.m_flavorTagHLT ) {
    +      if(m_debug) std::cout << "Filling m_flavorTagHLT " << std::endl;
    +      const xAOD::Vertex *online_pvx       = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx");
    +      const xAOD::Vertex *online_pvx_bkg   = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx_bkg");
    +      const xAOD::Vertex *offline_pvx      = jet->auxdata<const xAOD::Vertex*>("offline_vtx");
    +
    +      if(online_pvx)  m_vtxOnlineValid->push_back(1.0);
    +      else            m_vtxOnlineValid->push_back(0.0);
    +
    +      char hadDummyPV = jet->auxdata< char >("hadDummyPV");
    +      if( hadDummyPV == '0')  m_vtxHadDummy->push_back(0.0);
    +      if( hadDummyPV == '1')  m_vtxHadDummy->push_back(1.0);
    +      if( hadDummyPV == '2')  m_vtxHadDummy->push_back(2.0);
    +
    +      static SG::AuxElement::ConstAccessor< float > acc_bs_online_vs ("bs_online_vz");
    +      if(acc_bs_online_vs.isAvailable( *jet) ){
    +    if(m_debug) std::cout << "Have bs_online_vz " << std::endl;
    +    float bs_online_vz = jet->auxdata< float >("bs_online_vz");
    +    //std::cout << "**bs_online_vz " << bs_online_vz << std::endl;
    +    m_bs_online_vz->push_back( bs_online_vz );
    +
    +    float bs_online_vx = jet->auxdata< float >("bs_online_vx");
    +    //std::cout << "**bs_online_vx " << bs_online_vx << std::endl;
    +    m_bs_online_vx->push_back( bs_online_vx );
    +
    +    float bs_online_vy = jet->auxdata< float >("bs_online_vy");
    +    //std::cout << "**bs_online_vy " << bs_online_vy << std::endl;
    +    m_bs_online_vy->push_back( bs_online_vy );
    +      }else{
    +    m_bs_online_vz->push_back( -999 );
    +    m_bs_online_vx->push_back( -999 );
    +    m_bs_online_vy->push_back( -999 );
    +      }
    +
    +      if(m_debug) std::cout << "Filling m_vtx_offline " << std::endl;
    +      if(offline_pvx){
    +    m_vtx_offline_x0->push_back( offline_pvx->x() );
    +    m_vtx_offline_y0->push_back( offline_pvx->y() );
    +    m_vtx_offline_z0->push_back( offline_pvx->z() );
    +      }else{
    +    m_vtx_offline_x0->push_back( -999 );
    +    m_vtx_offline_y0->push_back( -999 );
    +    m_vtx_offline_z0->push_back( -999 );
    +      }
    +
    +      if(m_debug) std::cout << "Done Filling m_vtx_offline " << std::endl;
    +
    +      if(m_debug) std::cout << "Filling m_vtx_online... " << std::endl;
    +      if(online_pvx){
    +    if(m_debug) std::cout << " ... online_pvx valid " << std::endl;
    +        m_vtx_online_x0->push_back( online_pvx->x() );
    +        m_vtx_online_y0->push_back( online_pvx->y() );
    +        m_vtx_online_z0->push_back( online_pvx->z() );
    +      }else{
    +        m_vtx_online_x0->push_back( -999 );
    +        m_vtx_online_y0->push_back( -999 );
    +        m_vtx_online_z0->push_back( -999 );
    +      }
    +
    +      if(m_debug) std::cout << "Filling m_vtx_online... " << std::endl;
    +      if(online_pvx_bkg){
    +    if(m_debug) std::cout << " ...online_pvx_bkg valid " << std::endl;
    +        m_vtx_online_bkg_x0->push_back( online_pvx_bkg->x() );
    +        m_vtx_online_bkg_y0->push_back( online_pvx_bkg->y() );
    +        m_vtx_online_bkg_z0->push_back( online_pvx_bkg->z() );
    +      }else{
    +        m_vtx_online_bkg_x0->push_back( -999 );
    +        m_vtx_online_bkg_y0->push_back( -999 );
    +        m_vtx_online_bkg_z0->push_back( -999 );
    +      }
    +
    +    }// m_flavorTagHLT
    +    if(m_debug) std::cout << "Done m_flavorTagHLT " << std::endl;
    +  }
    +
    +  if (m_infoSwitch.m_flavorTagTLA){
    +    if(m_debug) std::cout << "Filling m_flavorTagHLT " << std::endl;
    +
    +    float  pu=0, pb=0, pc=0, score=0;
    +    pu = jet->auxdata<float>( "fastDIPS20211215_pu" );
    +    pc = jet->auxdata<float>( "fastDIPS20211215_pc" );
    +    pb = jet->auxdata<float>( "fastDIPS20211215_pb" );
    +    //FixMe: Retrieve the correct f_c value from the CDI file would be the best approach
    +    score=log( pb / (0.018*pc+0.982*pu) );
    +
    +    m_fastDIPS_pu->push_back( pu );
    +    m_fastDIPS_pc->push_back( pc );
    +    m_fastDIPS_pb->push_back( pb );
    +    m_fastDIPS->push_back( score );
    +
    +    if(m_debug) std::cout << "Done m_flavorTagTLA " << std::endl;
    +  }
    +
    +  if( !m_infoSwitch.m_jetBTag.empty() || !m_infoSwitch.m_jetBTagCts.empty() ) {
    +    for(auto btag : m_btags)
    +      btag->Fill( jet );
    +  } // jetBTag
    +
    +  if ( m_infoSwitch.m_area ) {
    +
    +    static SG::AuxElement::ConstAccessor<float> ghostArea("JetGhostArea");
    +    safeFill<float, float, xAOD::Jet>(jet, ghostArea, m_GhostArea, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> activeArea("ActiveArea");
    +    safeFill<float, float, xAOD::Jet>(jet, activeArea, m_ActiveArea, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> voronoiArea("VoronoiArea");
    +    safeFill<float, float, xAOD::Jet>(jet, voronoiArea, m_VoronoiArea, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> activeArea_pt("ActiveArea4vec_pt");
    +    safeFill<float, float, xAOD::Jet>(jet, activeArea_pt, m_ActiveArea4vec_pt, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> activeArea_eta("ActiveArea4vec_eta");
    +    safeFill<float, float, xAOD::Jet>(jet, activeArea_eta, m_ActiveArea4vec_eta, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> activeArea_phi("ActiveArea4vec_phi");
    +    safeFill<float, float, xAOD::Jet>(jet, activeArea_phi, m_ActiveArea4vec_phi, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> activeArea_m("ActiveArea4vec_m");
    +    safeFill<float, float, xAOD::Jet>(jet, activeArea_m, m_ActiveArea4vec_m, -999);
    +  }
    +
    +
    +  if ( m_infoSwitch.m_truth && m_mc ) {
    +
    +    static SG::AuxElement::ConstAccessor<int> ConeTruthLabelID ("ConeTruthLabelID");
    +    safeFill<int, int, xAOD::Jet>(jet, ConeTruthLabelID, m_ConeTruthLabelID, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> TruthCount ("TruthCount");
    +    safeFill<int, int, xAOD::Jet>(jet, TruthCount, m_TruthCount, -999);
    +
    +    //    seems to be empty
    +    //      static SG::AuxElement::ConstAccessor<float> TruthPt ("TruthPt");
    +    //      if ( TruthPt.isAvailable( *jet) ) {
    +    //        m_truthPt->push_back( TruthPt( *jet)/1000 );
    +    //      } else { m_truthPt->push_back( -999 ); }
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_B ("TruthLabelDeltaR_B");
    +    safeFill<float, float, xAOD::Jet>(jet, TruthLabelDeltaR_B, m_TruthLabelDeltaR_B, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_C ("TruthLabelDeltaR_C");
    +    safeFill<float, float, xAOD::Jet>(jet, TruthLabelDeltaR_C, m_TruthLabelDeltaR_C, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_T ("TruthLabelDeltaR_T");
    +    safeFill<float, float, xAOD::Jet>(jet, TruthLabelDeltaR_T, m_TruthLabelDeltaR_T, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> partonLabel("PartonTruthLabelID");
    +    safeFill<int, int, xAOD::Jet>(jet, partonLabel, m_PartonTruthLabelID, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> ghostTruthAssFrac("GhostTruthAssociationFraction");
    +    safeFill<float, float, xAOD::Jet>(jet, ghostTruthAssFrac, m_GhostTruthAssociationFraction, -999);
    +
    +    const xAOD::Jet* truthJet = HelperFunctions::getLink<xAOD::Jet>( jet, "GhostTruthAssociationLink" );
    +    if(truthJet) {
    +      m_truth_pt->push_back ( truthJet->pt() / m_units );
    +      m_truth_eta->push_back( truthJet->eta() );
    +      m_truth_phi->push_back( truthJet->phi() );
    +      m_truth_E->push_back  ( truthJet->e() / m_units );
    +    } else {
    +      m_truth_pt->push_back ( -999 );
    +      m_truth_eta->push_back( -999 );
    +      m_truth_phi->push_back( -999 );
    +      m_truth_E->push_back  ( -999 );
    +    }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_truthDetails ) {
    +
    +    //
    +    // B-Hadron Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostBHadronsFinalCount ("GhostBHadronsFinalCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostBHadronsFinalCount, m_GhostBHadronsFinalCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostBHadronsInitialCount ("GhostBHadronsInitialCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostBHadronsInitialCount, m_GhostBHadronsInitialCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostBQuarksFinalCount ("GhostBQuarksFinalCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostBQuarksFinalCount, m_GhostBQuarksFinalCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBHadronsFinalPt ("GhostBHadronsFinalPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostBHadronsFinalPt, m_GhostBHadronsFinalPt, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBHadronsInitialPt ("GhostBHadronsInitialPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostBHadronsInitialPt, m_GhostBHadronsInitialPt, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBQuarksFinalPt ("GhostBQuarksFinalPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostBQuarksFinalPt, m_GhostBQuarksFinalPt, -999);
    +
    +    //
    +    // C-Hadron Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostCHadronsFinalCount ("GhostCHadronsFinalCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostCHadronsFinalCount, m_GhostCHadronsFinalCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostCHadronsInitialCount ("GhostCHadronsInitialCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostCHadronsInitialCount, m_GhostCHadronsInitialCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostCQuarksFinalCount ("GhostCQuarksFinalCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostCQuarksFinalCount, m_GhostCQuarksFinalCount, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCHadronsFinalPt ("GhostCHadronsFinalPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostCHadronsFinalPt, m_GhostCHadronsFinalPt, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCHadronsInitialPt ("GhostCHadronsInitialPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostCHadronsInitialPt, m_GhostCHadronsInitialPt, -999);
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCQuarksFinalPt ("GhostCQuarksFinalPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostCQuarksFinalPt, m_GhostCQuarksFinalPt, -999);
    +
    +    //
    +    // Tau Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostTausFinalCount ("GhostTausFinalCount");
    +    safeFill<int, int, xAOD::Jet>(jet, GhostTausFinalCount, m_GhostTausFinalCount, -999);
    +
    +    // THE ONLY UN-OFFICIAL PIECE OF CODE HERE USE WITH CAUTION
    +    static SG::AuxElement::ConstAccessor<float> GhostTausFinalPt ("GhostTausFinalPt");
    +    safeFill<float, float, xAOD::Jet>(jet, GhostTausFinalPt, m_GhostTausFinalPt, -999);
    +
    +    // light quark(1,2,3) , gluon (21 or 9), charm(4) and b(5)
    +    // GhostPartons should select for these pdgIds only
    +    //    static SG::AuxElement::ConstAccessor< std::vector<const xAOD::TruthParticle*> > ghostPartons("GhostPartons");
    +    //    if( ghostPartons.isAvailable( *jet )) {
    +    //    std::vector<const xAOD::TruthParticle*> truthPartons = ghostPartons( *jet );
    +
    +    std::vector<const xAOD::TruthParticle*> truthPartons = jet->getAssociatedObjects<xAOD::TruthParticle>("GhostPartons");
    +
    +    if( truthPartons.size() == 0){
    +      m_truth_pdgId->push_back(-999);
    +    } else {
    +      int iParent = 0;
    +      for(unsigned int i=1; i < truthPartons.size(); ++i){
    +        if( (truthPartons.at(i)->pt() > 0.001) && (truthPartons.at(i)->e() > truthPartons.at(iParent)->e()) )
    +          iParent = i;
    +      }
    +      m_truth_pdgId->push_back(truthPartons.at(iParent)->pdgId());
    +      m_truth_partonPt->push_back(truthPartons.at(iParent)->pt() / m_units);
    +      m_truth_partonDR->push_back(truthPartons.at(iParent)->p4().DeltaR( jet->p4() ));
    +    }
    +
    +  }
    +
    +
    +  if ( m_infoSwitch.m_charge ) {
    +    xAOD::JetFourMom_t p4UsedInJetCharge;
    +    bool status = jet->getAttribute<xAOD::JetFourMom_t>( "JetPileupScaleMomentum", p4UsedInJetCharge );
    +    static SG::AuxElement::ConstAccessor<float>              uncalibratedJetCharge ("Charge");
    +
    +    if(status){
    +      float ptUsedInJetCharge   = p4UsedInJetCharge.Pt();
    +      float calibratedJetCharge = jet->pt() ? (ptUsedInJetCharge * uncalibratedJetCharge(*jet) / jet->pt()) : -99;
    +      m_charge->push_back(calibratedJetCharge);
    +    }else{
    +      m_charge->push_back(-99);
    +    }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    char passSel;
    +    bool status = jet->getAttribute<char>( "passSel", passSel );
    +    if(status){
    +      m_passSel->push_back(passSel);
    +    }else{
    +      m_passSel->push_back(-99);
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_passOR ) {
    +    char passOR;
    +    bool status = jet->getAttribute<char>( "passOR", passOR );
    +    if(status){
    +      m_passOR->push_back(passOR);
    +    }else{
    +      m_passOR->push_back(-99);
    +    }
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_JetHists.cxx.html b/api/program_listing_file_Root_JetHists.cxx.html new file mode 100644 index 0000000000..66ac26b901 --- /dev/null +++ b/api/program_listing_file_Root_JetHists.cxx.html @@ -0,0 +1,2201 @@ + + + + + + + + + + + Program Listing for File JetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetHists.cxx

    +

    Return to documentation for file (Root/JetHists.cxx)

    +
    #include <xAODAnaHelpers/JetHists.h>
    +#include "xAODBTagging/BTaggingUtilities.h"
    +#include <sstream>
    +#include <math.h>       /* hypot */
    +
    +ANA_MSG_SOURCE(msgJetHists, "JetHists")
    +
    +using std::vector;
    +
    +JetHists :: JetHists (std::string name, std::string detailStr, const std::string& prefix, const std::string& titlePrefix) :
    +  IParticleHists(name, detailStr, prefix, titlePrefix),
    +  m_infoSwitch(new HelperClasses::JetInfoSwitch(m_detailStr)),
    +  m_titlePrefix(titlePrefix),
    +  m_onlineBSTool(),
    +  m_tracksInJet(0)
    +{ }
    +
    +JetHists :: ~JetHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +
    +StatusCode JetHists::initialize() {
    +  using namespace msgJetHists;
    +  ANA_CHECK( IParticleHists::initialize());
    +
    +  if(m_debug) Info("JetHists::initialize()", m_name.c_str());
    +
    +  // details for jet cleaning
    +  if( m_infoSwitch->m_clean ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding clean plots");
    +    // units?
    +    m_jetTime     = book(m_name, "JetTimming" ,     m_titlePrefix+"Jet Timming",      120, -80, 80);
    +    m_LArQuality  = book(m_name, "LArQuality" ,     m_titlePrefix+"LAr Quality",      120, -600, 600);
    +    m_hecq        = book(m_name, "HECQuality" ,     m_titlePrefix+"HEC Quality",      120, -10, 10);
    +    m_negE        = book(m_name, "NegativeE" ,      m_titlePrefix+"Negative Energy",  120, -10, 10);
    +    m_avLArQF     = book(m_name, "AverageLArQF" ,   m_titlePrefix+"<LAr Quality Factor>" , 120, 0, 1000);
    +    m_bchCorrCell = book(m_name, "BchCorrCell" ,    m_titlePrefix+"BCH Corr Cell" ,   120, 0, 600);
    +    m_N90Const    = book(m_name, "N90Constituents", m_titlePrefix+"N90 Constituents" ,  120, 0, 40);
    +
    +    //m_LArBadHVEFrac              =book(m_name, "LArBadHVEFrac",              m_titlePrefix+" jet LAr Bad HV Energy Fraction", 120,   0,    1);
    +    //m_LArBadHVNCell              =book(m_name, "LArBadHVNCell",              m_titlePrefix+" jet LAr Bad HV N_{cells}",       120,  -0.5,499.5);
    +    // Range is [0, 2] instead of [0, 1] to include tail of events that spill over 1
    +    m_ChargedFraction = book(m_name, "ChargedFraction", m_titlePrefix+" Sum of charged tracks p_{T}/jet p_{T}", 120, 0, 2);
    +    //m_OotFracClusters5           =book(m_name, "OotFracClusters5",           m_titlePrefix+" jet OotFracClusters5" ,          120,   0,    1);
    +    //m_OotFracClusters10          =book(m_name, "OotFracClusters10",          m_titlePrefix+" jet OotFracClusters10" ,         120,   0,    1);
    +    //m_LeadingClusterPt           =book(m_name, "LeadingClusterPt",           m_titlePrefix+" jet Leading Cluster P_{T}" ,     120,   0, 1000);
    +    //m_LeadingClusterSecondLambda =book(m_name, "LeadingClusterSecondLambda", m_titlePrefix+" jet LeadingClusterSecondLambda", 120,   0, 1000e3);
    +    //m_LeadingClusterCenterLambda =book(m_name, "LeadingClusterCenterLambda", m_titlePrefix+" jet LeadingClusterCenterLambda", 120,   0, 5000);
    +    //m_LeadingClusterSecondR      =book(m_name, "LeadingClusterSecondR",      m_titlePrefix+" jet LeadingClusterSecondR" ,     120,   0, 300e3);
    +    //m_clean_passLooseBad         =book(m_name, "clean_passLooseBad",         m_titlePrefix+" jet LooseBad Cleaning Flag" ,      2,  -0.5,  1.5);
    +    //m_clean_passLooseBadUgly     =book(m_name, "clean_passLooseBadUgly",     m_titlePrefix+" jet LooseBadUgly Cleaning Flag",   2,  -0.5,  1.5);
    +    //m_clean_passTightBad         =book(m_name, "clean_passTightBad",         m_titlePrefix+" jet TightBad Cleaning Flag" ,      2,  -0.5,  1.5);
    +    //m_clean_passTightBadUgly     =book(m_name, "clean_passTightBadUgly",     m_titlePrefix+" jet TightBadUgly Cleaning Flag",   2,  -0.5,  1.5);
    +
    +  }
    +
    +  // details for jet energy information
    +  if( m_infoSwitch->m_energy ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding energy plots");
    +    m_HECf      = book(m_name, "HECFrac",         m_titlePrefix+"HEC Fraction" ,    120, 0, 5);
    +    m_EMf       = book(m_name, "EMFrac",          m_titlePrefix+"EM Fraction" ,     120, 0, 2);
    +    m_actArea   = book(m_name, "ActiveArea",      m_titlePrefix+"Jet Active Area" , 120, 0, 1);
    +    m_centroidR = book(m_name, "CentroidR",       m_titlePrefix+"CentroidR" ,       120, 0, 600);
    +    //m_FracSamplingMax       = book(m_name, "FracSamplingMax",       m_titlePrefix+" jet FracSamplingMax" ,       120,  0,      1);
    +    //m_FracSamplingMaxIndex  = book(m_name, "FracSamplingMaxIndex",  m_titlePrefix+" jet FracSamplingMaxIndex" ,   22, -0.5,   21.5);
    +    //m_LowEtConstituentsFrac = book(m_name, "LowEtConstituentsFrac", m_titlePrefix+" jet LowEtConstituentsFrac" , 120,  0,      1);
    +    //m_GhostMuonSegmentCount = book(m_name, "GhostMuonSegmentCount", m_titlePrefix+" jet GhostMuonSegmentCount" ,  10, -0.5,    9.5);
    +    //m_Width                 = book(m_name, "Width",                 m_titlePrefix+" jet Width",                  100, 0, 0.5);
    +
    +  }
    +
    +  // details for jet energy in each layer
    +  // plotted as fraction instead of absolute to make the plotting easier
    +  if( m_infoSwitch->m_layer ) {
    +    m_PreSamplerB  = book(m_name, "PreSamplerB",   "Pre sample barrel", 120, -0.1, 1.1);
    +    m_EMB1         = book(m_name, "EMB1", "EM Barrel  1", 120, -0.1, 1.1);
    +    m_EMB2         = book(m_name, "EMB2", "EM Barrel  2", 120, -0.1, 1.1);
    +    m_EMB3         = book(m_name, "EMB3", "EM Barrel  3", 120, -0.1, 1.1);
    +    m_PreSamplerE  = book(m_name, "PreSamplerE",   "Pre sample end cap", 120, -0.1, 1.1);
    +    m_EME1         = book(m_name, "EME1", "EM Endcap  1", 120, -0.1, 1.1);
    +    m_EME2         = book(m_name, "EME2", "EM Endcap  2", 120, -0.1, 1.1);
    +    m_EME3         = book(m_name, "EME3", "EM Endcap  3", 120, -0.1, 1.1);
    +    m_HEC0         = book(m_name, "HEC0", "Hadronic Endcap  0", 120, -0.1, 1.1);
    +    m_HEC1         = book(m_name, "HEC1", "Hadronic Endcap  1", 120, -0.1, 1.1);
    +    m_HEC2         = book(m_name, "HEC2", "Hadronic Endcap  2", 120, -0.1, 1.1);
    +    m_HEC3         = book(m_name, "HEC3", "Hadronic Endcap  3", 120, -0.1, 1.1);
    +    m_TileBar0     = book(m_name, "TileBar0", "Tile Barrel  0", 120, -0.1, 1.1);
    +    m_TileBar1     = book(m_name, "TileBar1", "Tile Barrel  1", 120, -0.1, 1.1);
    +    m_TileBar2     = book(m_name, "TileBar2", "Tile Barrel  2", 120, -0.1, 1.1);
    +    m_TileGap1     = book(m_name, "TileGap1", "Tile Gap  1", 120, -0.1, 1.1);
    +    m_TileGap2     = book(m_name, "TileGap2", "Tile Gap  2", 120, -0.1, 1.1);
    +    m_TileGap3     = book(m_name, "TileGap3", "Tile Gap  3", 120, -0.1, 1.1);
    +    m_TileExt0     = book(m_name, "TileExt0", "Tile extended barrel  0", 120, -0.1, 1.1);
    +    m_TileExt1     = book(m_name, "TileExt1", "Tile extended barrel  1", 120, -0.1, 1.1);
    +    m_TileExt2     = book(m_name, "TileExt2", "Tile extended barrel  2", 120, -0.1, 1.1);
    +    m_FCAL0        = book(m_name, "FCAL0", "Foward EM endcap  0", 120, -0.1, 1.1);
    +    m_FCAL1        = book(m_name, "FCAL1", "Foward EM endcap  1", 120, -0.1, 1.1);
    +    m_FCAL2        = book(m_name, "FCAL2", "Foward EM endcap  2", 120, -0.1, 1.1);
    +
    +//      LAr calo barrel
    +//      PreSamplerB 0
    +//      EMB1 1
    +//      EMB2 2
    +//      EMB3 3
    +//      LAr calo endcap
    +//      PreSamplerE 4
    +//      EME1  5
    +//      EME2  6
    +//      EME3  7
    +//      Hadronic endcap
    +//      HEC0  8
    +//      HEC1  9
    +//      HEC2  10
    +//      HEC3  11
    +//      Tile barrel
    +//      TileBar0  12
    +//      TileBar1  13
    +//      TileBar2  14
    +//      Tile gap (ITC & scint)
    +//      TileGap1  15
    +//      TileGap2  16
    +//      TileGap3  17
    +//      Tile extended barrel
    +//      TileExt0  18
    +//      TileExt1  19
    +//      TileExt2  20
    +//      Forward EM endcap
    +//      FCAL0 21
    +//      FCAL1 22
    +//      FCAL2 23
    +//      Mini FCAL
    +//      MINIFCAL0 24
    +//      MINIFCAL1 25
    +//      MINIFCAL2 26
    +//      MINIFCAL3 27
    +
    +  }
    +
    +  //m_chf         = book(m_name, "chfPV" ,    "PV(chf)" ,     120, 0, 600);
    +
    +  // details for jet resolutions
    +  if( m_infoSwitch->m_resolution ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding resolution plots");
    +    // 1D
    +    m_jetGhostTruthPt   = book(m_name, "jetGhostTruthPt",  "jet ghost truth p_{T} [GeV]", 120, 0, 600);
    +    // 2D
    +    m_jetPt_vs_resolution = book(m_name, "jetPt_vs_resolution",
    +      "jet p_{T} [GeV]", 120, 0, 600,
    +      "resolution", 30, -5, 35
    +    );
    +    m_jetGhostTruthPt_vs_resolution = book(m_name, "jetGhostTruthPt_vs_resolution",
    +      "jet ghost truth p_{T} [GeV]", 120, 0, 600,
    +      "resolution", 30, -5, 35
    +    );
    +  }
    +
    +  // details for jet energy information
    +  if( m_infoSwitch->m_truth ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding truth plots");
    +
    +    m_truthLabelID   = book(m_name, "TruthLabelID",        m_titlePrefix+"Truth Label" ,          40,  -10.5,  29.5);
    +    m_hadronConeExclTruthLabelID   = book(m_name, "HadronConeExclTruthLabelID",        m_titlePrefix+"HadronConeExclTruthLabelID" ,          40,  -10.5,  29.5);
    +    m_truthCount     = book(m_name, "TruthCount",          m_titlePrefix+"Truth Count" ,          60,  -10.5,  49.5);
    +    m_truthPt        = book(m_name, "TruthPt",             m_titlePrefix+"Truth Pt",              100,   0,   100.0);
    +
    +    m_truthDr_B      = book(m_name, "TruthLabelDeltaR_B",  m_titlePrefix+"Truth Label dR(b)" ,          120, -0.1,   1.0);
    +    m_truthDr_C      = book(m_name, "TruthLabelDeltaR_C",  m_titlePrefix+"Truth Label dR(c)" ,    120, -0.1, 1.0);
    +    m_truthDr_T      = book(m_name, "TruthLabelDeltaR_T",  m_titlePrefix+"Truth Label dR(tau)" ,  120, -0.1, 1.0);
    +
    +    //m_PartonTruthLabelID= book(m_name, "PartonTruthLabelID", m_titlePrefix+"jet PartonTruthLabelID",  22, -0.5, 21.5);
    +    //m_GhostTruthAssociationFraction= book(m_name, "GhostTruthAssociationFraction", m_titlePrefix+" jet GhostTruthAssociationFraction", 100, 0, 1);
    +    //m
    +    //m_truth_pt_m = book(m_name, "truth_pt_m"  , m_titlePrefix+" jet truth p_{T} [GeV]", 100, 0, 1000);
    +    //m_truth_pt_l = book(m_name, "truth_pt_l"  , m_titlePrefix+" jet truth p_{T} [GeV]", 100, 0, 5000);
    +    //m
    +    //m_truth_eta  = book(m_name, "truth_eta"   , m_titlePrefix+" jet truth #eta", 100, -3          , 3);
    +    //m_truth_phi  = book(m_name, "truth_phi"   , m_titlePrefix+" jet truth #phi", 100, -TMath::Pi(), TMath::Pi());
    +
    +
    +  }
    +
    +  if( m_infoSwitch->m_truthDetails ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding detailed truth plots");
    +
    +    m_truthCount_BhadFinal = book(m_name, "GhostBHadronsFinalCount",    "Truth Count BHad (final)" ,    10, -0.5,   9.5);
    +    m_truthCount_BhadInit  = book(m_name, "GhostBHadronsInitialCount",  "Truth Count BHad (initial)" ,  10, -0.5,   9.5);
    +    m_truthCount_BQFinal   = book(m_name, "GhostBQuarksFinalCount",     "Truth Count BQuark (final)" ,  10, -0.5,   9.5);
    +    m_truthPt_BhadFinal    = book(m_name, "GhostBHadronsFinalPt",       "Truth p_{T} BHad (final)" ,      100,    0,   100);
    +    m_truthPt_BhadInit     = book(m_name, "GhostBHadronsInitialPt",     "Truth p_{T} BHad (initial)" ,    100,    0,   100);
    +    m_truthPt_BQFinal      = book(m_name, "GhostBQuarksFinalPt",        "Truth p_{T} BQuark (final)" ,    100,    0,   100);
    +
    +    m_truthCount_ChadFinal = book(m_name, "GhostCHadronsFinalCount",   "Truth Count CHad (final)" ,    10, -0.5,   9.5);
    +    m_truthCount_ChadInit  = book(m_name, "GhostCHadronsInitialCount", "Truth Count CHad (initial)" ,  10, -0.5,   9.5);
    +    m_truthCount_CQFinal   = book(m_name, "GhostCQuarksFinalCount",    "Truth Count CQuark (final)" ,  10, -0.5,   9.5);
    +    m_truthPt_ChadFinal    = book(m_name, "GhostCHadronsFinalPt",      "Truth p_{T} CHad (final)" ,      100,    0,   100);
    +    m_truthPt_ChadInit     = book(m_name, "GhostCHadronsInitialPt",    "Truth p_{T} CHad (initial)" ,    100,    0,   100);
    +    m_truthPt_CQFinal      = book(m_name, "GhostCQuarksFinalPt",       "Truth p_{T} CQuark (final)" ,    100,    0,   100);
    +
    +    m_truthCount_TausFinal = book(m_name, "GhostTausFinalCount", "Truth Count Taus (final)" ,    10, -0.5,   9.5);
    +    m_truthPt_TausFinal    = book(m_name, "GhostTausFinalPt",    "Truth p_{T} Taus (final)" ,      100,    0,   100);
    +
    +  }
    +
    +  if(m_infoSwitch->m_JVC){
    +    if(m_debug) Info("JetHists::initialize()", "adding JVC plots");
    +    m_JVC = book(m_name, "JVC", m_titlePrefix+"JVC", 100, -5, 5);
    +  }
    +
    +  if( m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding btagging plots");
    +
    +    m_COMB            = book(m_name, "COMB",              m_titlePrefix+"COMB" ,     100,    -20,   40);
    +    m_JetFitter       = book(m_name, "JetFitter",         m_titlePrefix+"JetFitter" ,     100,    -10,   10);
    +
    +    if(m_infoSwitch->m_vsActualMu){
    +      // counts (e.g. numbers of jets) vs. proton-proton Interactions
    +      m_actualMu = book(m_name, "actualMu", "number vs. actual #mu", 50, 0, 100);
    +    }
    +
    +  }
    +
    +  if(m_infoSwitch->m_btag_jettrk) {
    +    m_trkSum_ntrk     = book(m_name, "trkSum_ntrk",     "trkSum_ntrk" ,     40,    -0.5,   39.5);
    +    m_trkSum_sPt      = book(m_name, "trkSum_sPt",      "trkSum_sPt" ,     100,   -10,    200.0);
    +    m_trkSum_vPt      = book(m_name, "trkSum_vPt",      "trkSum_vPt" ,     100,   -10,    200.0);
    +    m_trkSum_vAbsEta  = book(m_name, "trkSum_vAbsEta",  "trkSum_vAbsEta" ,  50,    -0.1,    3.0);
    +    m_width           = book(m_name, "width",           "width"         ,  100,    -0.1,    0.5);
    +    m_n_trk_sigd0cut  = book(m_name, "n_trk_sigd0cut",  "n_trk_sigd0cut" ,  30,    -0.5,   29.5);
    +    m_trk3_d0sig      = book(m_name, "trk3_d0sig",      "trk3_d0sig"     , 100,    -20.,   20.0);
    +    m_trk3_z0sig      = book(m_name, "trk3_z0sig",      "trk3_z0sig"     , 100,    -20.,   20.0);
    +    m_sv_scaled_efc   = book(m_name, "sv_scaled_efc",   "sv_scaled_efc"  , 100,     -0.1,   10.1);
    +    m_jf_scaled_efc   = book(m_name, "jf_scaled_efc",   "jf_scaled_efc"  , 100,     -0.1,   10.1);
    +  }
    +
    +  if( m_infoSwitch->m_jetFitterDetails ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding JetFitter Detail plots");
    +
    +    m_jf_nVTX           = book(m_name, "JetFitter_nVTX"          , "JetFitter_nVTX"          ,  10,  -0.5,   9.5 );
    +    m_jf_nSingleTracks  = book(m_name, "JetFitter_nSingleTracks" , "JetFitter_nSingleTracks" ,  10,  -0.5,   9.5 );
    +    m_jf_nTracksAtVtx   = book(m_name, "JetFitter_nTracksAtVtx"  , "JetFitter_nTracksAtVtx"  ,  20,  -0.5,  19.5 );
    +    m_jf_mass           = book(m_name, "JetFitter_mass"          , "JetFitter_mass"          , 100,   0,     10 );
    +    m_jf_energyFraction = book(m_name, "JetFitter_energyFraction", "JetFitter_energyFraction", 100,  -0.1,   1.1 );
    +    m_jf_significance3d = book(m_name, "JetFitter_significance3d", "JetFitter_significance3d", 100,   0,    100 );
    +    m_jf_deltaeta       = book(m_name, "JetFitter_deltaeta"      , "JetFitter_deltaeta"      , 100,  -0.2,   0.2);
    +    m_jf_deltaeta_l     = book(m_name, "JetFitter_deltaeta_l"    , "JetFitter_deltaeta"      , 100,  -0.4,   0.4);
    +    m_jf_deltaphi       = book(m_name, "JetFitter_deltaphi"      , "JetFitter_deltaphi"      , 100,  -0.2,   0.2);
    +    m_jf_deltaR         = book(m_name, "JetFitter_deltaR"        , "JetFitter_deltaR"        , 100,  -0.01,  0.5);
    +    m_jf_deltaphi_l     = book(m_name, "JetFitter_deltaphi_l"    , "JetFitter_deltaphi"      , 100,  -0.4,   0.4);
    +    m_jf_N2Tpar         = book(m_name, "JetFitter_N2Tpair"       , "JetFitter_N2Tpair"       ,  20,  -0.5,  19.5);
    +    m_jf_pb             = book(m_name, "JetFitter_pb"            , "JetFitter_pb"            , 100,  -0.1,   1);
    +    m_jf_pc             = book(m_name, "JetFitter_pc"            , "JetFitter_pc"            , 100,  -0.1,   1);
    +    m_jf_pu             = book(m_name, "JetFitter_pu"            , "JetFitter_pu"            , 100,  -0.1,   1);
    +    m_jf_mass_unco      = book(m_name, "JetFitter_mass_unco"     , "JetFitter_mass_unco"     , 100,  -0.1,  10);
    +    m_jf_dR_flight      = book(m_name, "JetFitter_dR_flight"     , "JetFitter_dR_flight"     , 100,  -0.1,   1);
    +
    +  }
    +
    +  if( m_infoSwitch->m_svDetails ) {
    +    if(m_debug) Info("JetHists::initialize()", "adding JetFitter Detail plots");
    +    m_SV0           = book(m_name, "SV0",            "SV0" ,          100, -20,   200);
    +    m_sv0_NGTinSvx  = book(m_name, "SV0_NGTinSvx",   "SV0_NGTinSvx",   20,  -0.5,  19.5);
    +    m_sv0_N2Tpair   = book(m_name, "SV0_N2Tpair ",   "SV0_N2Tpair ",   40,  -9.5,  29.5);
    +    m_sv0_massvx    = book(m_name, "SV0_massvx  ",   "SV0_massvx  ",   100, -0.1,    8);
    +    m_sv0_efracsvx  = book(m_name, "SV0_efracsvx",   "SV0_efracsvx",   100, -0.1,   1.2);
    +    m_sv0_normdist  = book(m_name, "SV0_normdist",   "SV0_normdist",   100, -10,    70);
    +
    +    m_SV1_pu        = book(m_name, "SV1_pu",                   "SV1_pu" ,                100,  -0.1, 1.1);
    +    m_SV1_pb        = book(m_name, "SV1_pb",                   "SV1_pb" ,                100,  -0.1, 1.1);
    +    m_SV1_pc        = book(m_name, "SV1_pc",                   "SV1_pc" ,                100,  -0.1, 1.1);
    +    m_SV1           = book(m_name, "SV1",                      "SV1" ,                   100,  -5,  15);
    +    m_SV1_c         = book(m_name, "SV1_c",                    "SV1_c" ,                 100,  -5,  15);
    +    m_SV1_cu        = book(m_name, "SV1_cu",                   "SV1_cu" ,                100,  -5,  15);
    +
    +    m_sv1_NGTinSvx  = book(m_name, "SV1_NGTinSvx",   "SV1_NGTinSvx",   20,  -0.5,  19.5);
    +    m_sv1_N2Tpair   = book(m_name, "SV1_N2Tpair ",   "SV1_N2Tpair ",   40,  -9.5,  29.5);
    +    m_sv1_massvx    = book(m_name, "SV1_massvx  ",   "SV1_massvx  ",   100, -0.1,     8);
    +    m_sv1_efracsvx  = book(m_name, "SV1_efracsvx",   "SV1_efracsvx",   100, -0.1,   1.2);
    +    m_sv1_normdist  = book(m_name, "SV1_normdist",   "SV1_normdist",   100, -10,    70);
    +    m_SV1_Lxy       = book(m_name, "SV1_Lxy",        "SV1_Lxy",        100,  -1,    70);
    +    m_SV1_sig3d     = book(m_name, "SV1_sig3d",      "SV1_sig3d",      100,   0,   100);
    +    m_SV1_L3d       = book(m_name, "SV1_L3d",        "SV1_L3d",        100,  -1,    70);
    +    m_SV1_distmatlay = book(m_name, "SV1_distmatlay","SV1_distmatlay", 100,  -1,    30);
    +    m_SV1_dR        = book(m_name, "SV1_dR",         "SV1_dR",         100,  -0.1,   2);
    +
    +  }
    +
    +  if( m_infoSwitch->m_ipDetails ) {
    +    m_IP2D_pu                   = book(m_name, "IP2D_pu",                   "IP2D_pu" ,                100,  -0.1, 1.1);
    +    m_IP2D_pb                   = book(m_name, "IP2D_pb",                   "IP2D_pb" ,                100,  -0.1, 1.1);
    +    m_IP2D_pc                   = book(m_name, "IP2D_pc",                   "IP2D_pc" ,                100,  -0.1, 1.1);
    +    m_IP2D                      = book(m_name, "IP2D",                      "IP2D" ,                   100, -10,  40);
    +    m_IP2D_c                    = book(m_name, "IP2D_c",                    "IP2D_c" ,                 100, -10,  40);
    +    m_IP2D_cu                   = book(m_name, "IP2D_cu",                   "IP2D_cu" ,                100, -10,  40);
    +    m_nIP2DTracks               = book(m_name, "nIP2DTracks"              , "nIP2DTracks"            ,  20,  -0.5, 19.5);
    +    m_IP2D_gradeOfTracks        = book(m_name, "IP2D_gradeOfTracks"       , "IP2D_gradeOfTracks"     ,  20,  -0.5, 19.5);
    +    m_IP2D_flagFromV0ofTracks   = book(m_name, "IP2D_flagFromV0ofTracks"  , "IP2D_flagFromV0ofTracks",   5,  -0.5,  4.5);
    +    m_IP2D_valD0wrtPVofTracks   = book(m_name, "IP2D_valD0wrtPVofTracks"  , "IP2D_valD0wrtPVofTracks", 100,  -2.0,  2.0);
    +    m_IP2D_sigD0wrtPVofTracks   = book(m_name, "IP2D_sigD0wrtPVofTracks"  , "IP2D_sigD0wrtPVofTracks", 100, -15.0, 15.0);
    +    m_IP2D_sigD0wrtPVofTracks_l = book(m_name, "IP2D_sigD0wrtPVofTracks_l", "IP2D_sigD0wrtPVofTracks", 100, -50.0, 50.0);
    +    m_IP2D_errD0wrtPVofTracks   = book(m_name, "IP2D_errD0wrtPVofTracks"  , "IP2D_errD0wrtPVofTracks", 100, 0.0, 1.0);
    +
    +    m_IP2D_weightBofTracks      = book(m_name, "IP2D_weightBofTracks"     , "IP2D_weightBofTracks"   , 100,  -0.1, 1.5);
    +    m_IP2D_weightCofTracks      = book(m_name, "IP2D_weightCofTracks"     , "IP2D_weightCofTracks"   , 100,  -0.1, 1.5);
    +    m_IP2D_weightUofTracks      = book(m_name, "IP2D_weightUofTracks"     , "IP2D_weightUofTracks"   , 100,  -0.1, 1.5);
    +
    +    m_IP3D_pu                   = book(m_name, "IP3D_pu",                   "IP3D_pu" ,                100,  -0.1, 1.1);
    +    m_IP3D_pb                   = book(m_name, "IP3D_pb",                   "IP3D_pb" ,                100,  -0.1, 1.1);
    +    m_IP3D_pc                   = book(m_name, "IP3D_pc",                   "IP3D_pc" ,                100,  -0.1, 1.1);
    +    m_IP3D                      = book(m_name, "IP3D",                      "IP3D" ,                   100, -20,  40);
    +    m_IP3D_c                    = book(m_name, "IP3D_c",                    "IP3D_c" ,                 100, -20,  40);
    +    m_IP3D_cu                   = book(m_name, "IP3D_cu",                   "IP3D_cu" ,                100, -20,  40);
    +    m_nIP3DTracks               = book(m_name, "nIP3DTracks"              , "nIP3DTracks"            ,  20,  -0.5, 19.5);
    +    m_IP3D_gradeOfTracks        = book(m_name, "IP3D_gradeOfTracks"       , "IP3D_gradeOfTracks"     ,  20,  -0.5, 19.5);
    +    m_IP3D_flagFromV0ofTracks   = book(m_name, "IP3D_flagFromV0ofTracks"  , "IP3D_flagFromV0ofTracks",   5,  -0.5,  4.5);
    +    m_IP3D_valD0wrtPVofTracks   = book(m_name, "IP3D_valD0wrtPVofTracks"  , "IP3D_valD0wrtPVofTracks", 100,  -2.0,  2.0);
    +    m_IP3D_sigD0wrtPVofTracks   = book(m_name, "IP3D_sigD0wrtPVofTracks"  , "IP3D_sigD0wrtPVofTracks", 100, -15.0, 15.0);
    +    m_IP3D_sigD0wrtPVofTracks_l = book(m_name, "IP3D_sigD0wrtPVofTracks_l", "IP3D_sigD0wrtPVofTracks", 100, -50.0, 50.0);
    +    m_IP3D_errD0wrtPVofTracks   = book(m_name, "IP3D_errD0wrtPVofTracks"  , "IP3D_errD0wrtPVofTracks", 100, 0.0, 1.0);
    +
    +    m_IP3D_valZ0wrtPVofTracks   = book(m_name, "IP3D_valZ0wrtPVofTracks"  , "IP3D_valZ0wrtPVofTracks", 100,  -2.0,  2.0);
    +    m_IP3D_sigZ0wrtPVofTracks   = book(m_name, "IP3D_sigZ0wrtPVofTracks"  , "IP3D_sigZ0wrtPVofTracks", 100, -15.0, 15.0);
    +    m_IP3D_sigZ0wrtPVofTracks_l = book(m_name, "IP3D_sigZ0wrtPVofTracks_l", "IP3D_sigZ0wrtPVofTracks", 100, -50.0, 50.0);
    +    m_IP3D_errZ0wrtPVofTracks   = book(m_name, "IP3D_errZ0wrtPVofTracks"  , "IP3D_errZ0wrtPVofTracks", 100, 0.0, 1.0);
    +
    +
    +    m_IP3D_weightBofTracks      = book(m_name, "IP3D_weightBofTracks"     , "IP3D_weightBofTracks"   , 100,  -0.1, 1.5);
    +    m_IP3D_weightCofTracks      = book(m_name, "IP3D_weightCofTracks"     , "IP3D_weightCofTracks"   , 100,  -0.1, 1.5);
    +    m_IP3D_weightUofTracks      = book(m_name, "IP3D_weightUofTracks"     , "IP3D_weightUofTracks"   , 100,  -0.1, 1.5);
    +
    +  }
    +
    +  if( m_infoSwitch->m_substructure ){
    +    m_tau1                      = book(m_name, "Tau1", "#Tau_{1}", 100, 0, 1.0);
    +    m_tau2                      = book(m_name, "Tau2", "#Tau_{2}", 100, 0, 1.0);
    +    m_tau3                      = book(m_name, "Tau3", "#Tau_{3}", 100, 0, 1.0);
    +    m_tau21                     = book(m_name, "Tau21", "#Tau_{21}", 100, 0, 1.0);
    +    m_tau32                     = book(m_name, "Tau32", "#Tau_{32}", 100, 0, 1.0);
    +    m_tau1_wta                  = book(m_name, "Tau1_wta", "#Tau_{1}^{wta}", 100, 0, 1.0);
    +    m_tau2_wta                  = book(m_name, "Tau2_wta", "#Tau_{2}^{wta}", 100, 0, 1.0);
    +    m_tau3_wta                  = book(m_name, "Tau3_wta", "#Tau_{3}^{wta}", 100, 0, 1.0);
    +    m_tau21_wta                 = book(m_name, "Tau21_wta", "#Tau_{21}^{wta}", 100, 0, 1.0);
    +    m_tau32_wta                 = book(m_name, "Tau32_wta", "#Tau_{32}^{wta}", 100, 0, 1.0);
    +    m_numConstituents           = book(m_name, "numConstituents", "num. constituents", 501, -0.5, 500.5);
    +  }
    +
    +  //
    +  // Tracks in Jet
    +  //
    +  if( m_infoSwitch->m_tracksInJet ){
    +    m_nTrk                      = book(m_name, "nTrk", "nTrk", 100, -0.5, 99.5);
    +
    +    m_tracksInJet = new TracksInJetHists(m_name+"trk_", "");
    +    m_tracksInJet -> initialize( );
    +  }
    +
    +  if( m_infoSwitch->m_byEta){
    +
    +    m_jetPt_eta_0_1   = book(m_name, "jetPt_eta_0_1",   "p_{T} [GeV]",100, 0, 1000);
    +    m_jetPt_eta_1_2   = book(m_name, "jetPt_eta_1_2",   "p_{T} [GeV]",100, 0, 1000);
    +    m_jetPt_eta_2_2p5 = book(m_name, "jetPt_eta_2_2p5", "p_{T} [GeV]",100, 0, 1000);
    +    m_jetPt_eta_1_2p5 = book(m_name, "jetPt_eta_1_2p5", "p_{T} [GeV]",100, 0, 1000);
    +
    +  }
    +
    +
    +  if( m_infoSwitch->m_onlineBS ){
    +
    +    m_bs_online_vz                  = book(m_name, "bs_online_vz",  "bs_online_vz",   200,   -5,   5);
    +    m_bs_online_vz_l                = book(m_name, "bs_online_vz_l","bs_online_vz_l", 200, -100, 100);
    +    m_bs_online_vy                  = book(m_name, "bs_online_vy",  "bs_online_vy",   200,   -2,   2);
    +    m_bs_online_vx                  = book(m_name, "bs_online_vx",  "bs_online_vx",   200,   -2,   2);
    +
    +    m_eta_bs_online_vz_0_1       = book(m_name, "eta_bs_online_vz_0_1",   "Jet #eta", 80, -4, 4);
    +    m_eta_bs_online_vz_1_1p5     = book(m_name, "eta_bs_online_vz_1_1p5", "Jet #eta", 80, -4, 4);
    +    m_eta_bs_online_vz_1p5_2     = book(m_name, "eta_bs_online_vz_1p5_2", "Jet #eta", 80, -4, 4);
    +
    +  }
    +
    +  if( m_infoSwitch->m_onlineBS || m_infoSwitch->m_hltVtxComp ){
    +
    +    m_vtxClass                       = book(m_name, "vtxClass",      "vtxClass",        3, -0.5, 2.5);
    +
    +  }
    +
    +
    +  if( m_infoSwitch->m_hltVtxComp ){
    +
    +    m_vtx_offline_x0                  = book(m_name, "vtx_offline_x0",  "vtx_offline_x0",   100,  -0.2,  0.2);
    +    m_vtx_offline_y0                  = book(m_name, "vtx_offline_y0",  "vtx_offline_y0",   100,  -0.2,  0.2);
    +    m_vtx_offline_z0                  = book(m_name, "vtx_offline_z0",  "vtx_offline_z0",   100, -200, 200);
    +    m_vtx_offline_z0_s                = book(m_name, "vtx_offline_z0_s",  "vtx_offline_z0_s",   100, -10, 10);
    +
    +    m_vtx_online_x0                  = book(m_name, "vtx_online_x0",  "vtx_online_x0",   100,  -0.2,  0.2);
    +    m_vtx_online_y0                  = book(m_name, "vtx_online_y0",  "vtx_online_y0",   100,  -0.2,  0.2);
    +    m_vtx_online_z0                  = book(m_name, "vtx_online_z0",  "vtx_online_z0",   100, -200, 200);
    +    m_vtx_online_z0_s                = book(m_name, "vtx_online_z0_s","vtx_online_z0_s",   100, -10, 10);
    +
    +    m_vtx_online_x0_raw              = book(m_name, "vtx_online_x0_raw",  "vtx_online_x0_raw",   100,  -0.2,  0.2);
    +    m_vtx_online_y0_raw              = book(m_name, "vtx_online_y0_raw",  "vtx_online_y0_raw",   100,  -0.2,  0.2);
    +    m_vtx_online_z0_raw              = book(m_name, "vtx_online_z0_raw",  "vtx_online_z0_raw",   100, -200, 200);
    +
    +    m_vtxOnlineValid                 = book(m_name, "vtx_online_valid",  "vtx_online_valid",  2, -0.5, 1.5);
    +    m_vtxOfflineValid                = book(m_name, "vtx_offline_valid", "vtx_offline_valid", 2, -0.5, 1.5);
    +
    +    m_vtxDiffx0                      = book(m_name, "vtx_diff_x0",     "vtx_diff_x0",     100,  -0.1,  0.1);
    +    m_vtxDiffx0_l                    = book(m_name, "vtx_diff_x0_l",   "vtx_diff_x0_l",   100, -1, 1);
    +
    +    m_vtxDiffy0                      = book(m_name, "vtx_diff_y0",     "vtx_diff_y0",     100,  -0.1,  0.1);
    +    m_vtxDiffy0_l                    = book(m_name, "vtx_diff_y0_l",   "vtx_diff_y0_l",   100, -1, 1);
    +
    +    m_vtxDiffz0                      = book(m_name, "vtx_diff_z0",   "vtx_diff_z0",   100, -100, 100);
    +    m_vtxDiffz0_m                    = book(m_name, "vtx_diff_z0_m", "vtx_diff_z0_m", 100,  -20,  20);
    +    m_vtxDiffz0_s                    = book(m_name, "vtx_diff_z0_s", "vtx_diff_z0_s", 100,  -5,  5);
    +
    +    m_vtxBkgDiffz0                   = book(m_name, "vtx_bkg_diff_z0",   "vtx_bkg_diff_z0",   100, -100, 100);
    +    m_vtxBkgDiffz0_m                 = book(m_name, "vtx_bkg_diff_z0_m", "vtx_bkg_diff_z0_m", 100,  -20,  20);
    +    m_vtxBkgDiffz0_s                 = book(m_name, "vtx_bkg_diff_z0_s", "vtx_bkg_diff_z0_s", 100,  -5,  5);
    +
    +    m_vtxDiffz0_vs_vtx_offline_z0     = book(m_name, "vtxDiffz0_vs_vtx_offline_z0",
    +                         "vtx_offline_z0",  100, -200, 200,
    +                         "vtx_diff_z0",     100, -100, 100);
    +
    +    m_vtxDiffz0_s_vs_vtx_offline_z0    = book(m_name, "vtxDiffz0_s_vs_vtx_offline_z0",
    +                          "vtx_offline_z0", 100, -200, 200,
    +                          "vtx_diff_z0",    100, -10, 10);
    +
    +    m_vtxDiffz0_s_vs_vtxDiffx0          = book(m_name, "vtxDiffz0_s_vs_vtxDiffx0",
    +                           "vtx_diff_x0",   100,  -0.1,  0.1,
    +                           "vtx_diff_z0",   100, -10, 10);
    +
    +    m_vtxDiffz0_s_vs_vtxDiffy0          = book(m_name, "vtxDiffz0_s_vs_vtxDiffy0",
    +                           "vtx_diff_y0",   100,  -0.1,  0.1,
    +                           "vtx_diff_z0",   100, -10, 10);
    +
    +    m_vtxClass_vs_jetPt            = book(m_name, "vtxClass_vs_jetPt",
    +                         "jetPt",  100, 0, 1000,
    +                         "vtxClass", 4, -1.1, 3.1);
    +
    +    m_vtx_online_y0_vs_vtx_online_z0  = book(m_name, "vtx_online_y0_vs_vtx_online_z0",
    +                         "vtx_online_z0", 100, -50, 50,
    +                         "vtx_online_y0", -50, 50);
    +
    +    m_vtx_online_x0_vs_vtx_online_z0  = book(m_name, "vtx_online_x0_vs_vtx_online_z0",
    +                         "vtx_online_z0", 100, -50, 50,
    +                         "vtx_online_x0", -50, 50);
    +
    +
    +    if(m_infoSwitch->m_vsLumiBlock){
    +      m_vtxDiffx0_vs_lBlock      = book(m_name, "vtxDiffx0_vs_lBlock",    "LumiBlock",  200, 0, 2000, "vtx_diff_x0",    -0.1, 0.1);
    +      m_vtxDiffy0_vs_lBlock      = book(m_name, "vtxDiffy0_vs_lBlock",    "LumiBlock",  200, 0, 2000, "vtx_diff_y0",    -0.1, 0.1);
    +      m_vtxDiffz0_vs_lBlock      = book(m_name, "vtxDiffz0_vs_lBlock",    "LumiBlock",  200, 0, 2000, "vtx_diff_z0",    -5, 5);
    +      m_vtxClass_vs_lBlock    = book(m_name, "vtxClass_vs_lBlock",  "LumiBlock",  200, 0, 2000, "vtxClass", -0.1, 1.1);
    +      m_vtxEff1_vs_lBlock        = book(m_name, "vtxEff1_vs_lBlock",      "LumiBlock",  200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1);
    +      m_vtxEff10_vs_lBlock       = book(m_name, "vtxEff10_vs_lBlock",     "LumiBlock",  200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1);
    +      m_vtxEff1_raw_vs_lBlock    = book(m_name, "vtxEff1_raw_vs_lBlock",  "LumiBlock",  200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1);
    +      m_vtxEff10_raw_vs_lBlock   = book(m_name, "vtxEff10_raw_vs_lBlock", "LumiBlock",  200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1);
    +      m_vtxEff1_noDummy_vs_lBlock    = book(m_name, "vtxEff1_noDummy_vs_lBlock",  "LumiBlock",  200, 0, 2000, "vtx eff (1mm)", -0.1, 1.1);
    +      m_vtxEff10_noDummy_vs_lBlock   = book(m_name, "vtxEff10_noDummy_vs_lBlock", "LumiBlock",  200, 0, 2000, "vtx eff (10mm)", -0.1, 1.1);
    +
    +    }
    +
    +    if(m_infoSwitch->m_lumiB_runN){
    +
    +      Double_t runBins[]= { 297730, 298595, 298609, 298633, 298687, 298690, 298771, 298773, 298862, 298967, 299055, 299144, 299147, 299184, 299243, 299584, 300279, 300345, 300415, 300418, 300487, 300540, 300571, 300600, 300655, 300687, 300784, 300800, 300863, 300908, 301912, 301918, 301932, 301973, 302053, 302137, 302265, 302269, 302300, 302347, 302380, 302391, 302393, 302737, 302831, 302872, 302919, 302925, 302956, 303007, 303079, 303201, 303208, 303264, 303266, 303291, 303304, 303338, 303421, 303499, 303560, 303638, 303832, 303846, 303892, 303943, 304006, 304008, 304128, 304178, 304198, 304211, 304243, 304308, 304337, 304409, 304431, 304494, 305380, 305543, 305571, 305618, 305671, 305674, 305723, 305727, 305735, 305777, 305811, 305920, 306269, 306278, 306310, 306384, 306419, 306442, 306448, 306451, 307126, 307195, 307259, 307306, 307354, 307358, 307394, 307454, 307514, 307539, 307569, 307601, 307619, 307656, 307710, 307716, 307732, 307861, 307935, 308047, 308084, 309375, 309390, 309440, 309516, 309640, 309674, 309759, 310015, 310247, 310249, 310341, 310370, 310405, 310468, 310473, 310634, 310691, 310738, 310809, 310863, 310872, 310969, 311071, 311170, 311244, 311287, 311321, 311365, 311402, 311473, 311481, 311500 };
    +      int nRunBins=150;
    +
    +      m_lumiB_runN              = book(m_name, "lumiB_runN",              "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +      m_lumiB_runN_bs_online_vz = book(m_name, "lumiB_runN_bs_online_vz", "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +      m_lumiB_runN_bs_den       = book(m_name, "lumiB_runN_bs_den",       "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +      m_lumiB_runN_vtxClass     = book(m_name, "lumiB_runN_vtxClass",     "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +      //m_lumiB_runN_vtxDiffz0    = book(m_name, "lumiB_runN_vtxDiffz0",    "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +      m_lumiB_runN_lumiB        = book(m_name, "lumiB_runN_lumiB",        "Lumi Block", 2000, 0, 2000, "Run Number", nRunBins, runBins);
    +    }
    +  }
    +
    +
    +  // trackPV
    +  if(m_infoSwitch->m_trackPV)
    +    {
    +      //m_NumTrkPt1000PV     = book(m_name, "NumTrkPt1000PV",   m_titlePrefix+" jet N_{trk,P_{T}>1 GeV}"     ,  50, -0.5, 49.5);
    +      //m_SumPtTrkPt1000PV   = book(m_name, "SumPtTrkPt1000PV", m_titlePrefix+" jet #sum_{trk,P_{T}>1 GeV}"  , 100,    0, 1000);
    +      //m_TrackWidthPt1000PV = book(m_name, "TrackWidthPt1000P",m_titlePrefix+" jet w_{trk,P_{T}>1 GeV}"     , 100,    0, 0.5);
    +      //m_NumTrkPt500PV      = book(m_name, "NumTrkPt500PV",    m_titlePrefix+" jet N_{trk,P_{T}>500 MeV}"   ,  50, -0.5, 49.5);
    +      //m_SumPtTrkPt500PV    = book(m_name, "SumPtTrkPt500PV",  m_titlePrefix+" jet #sum_{trk,P_{T}>500 MeV}", 100,    0, 1000);
    +      //m_TrackWidthPt500PV  = book(m_name, "TrackWidthPt500P", m_titlePrefix+" jet w_{trk,P_{T}>500 MeV}"   , 100,    0, 0.5);
    +      //m_JVFPV              = book(m_name, "JVFPV",            m_titlePrefix+" jet JVF_{PV}"                , 100,    0, 0.5);
    +    }
    +
    +  // trackAll or trackPV
    +  if(m_infoSwitch->m_trackAll || m_infoSwitch->m_trackPV)
    +    {
    +      //m_Jvt       = book(m_name, "Jvt",        m_titlePrefix+" jet JVT"       , 100, -0.2, 1);
    +      //m_JvtJvfcorr= book(m_name, "JvtJvfcorr", m_titlePrefix+" jet corrJVF"   , 100, -1  , 1);
    +      //m_JvtRpt    = book(m_name, "JvtRpt",     m_titlePrefix+" jet R_{p_{T}}" , 100,  0  , 1.5);
    +    }
    +
    +
    +  // charge
    +  if(m_infoSwitch->m_charge)
    +    {
    +      //m_charge= book(m_name, "charge", m_titlePrefix+"charge", 100, -10, 10);
    +    }
    +
    +  // Average Mu
    +  if(m_infoSwitch->m_byAverageMu){
    +    m_avgMu               = book(m_name, "avgMu",  "Average Mu", 101, -0.5, 100);
    +    m_jetPt_avgMu_00_15   = book(m_name, "jetPt_avgMu_00_15",  "jet p_{T} [GeV]", 120, 0, 600);
    +    m_jetPt_avgMu_15_25   = book(m_name, "jetPt_avgMu_15_25",  "jet p_{T} [GeV]", 120, 0, 600);
    +    m_jetPt_avgMu_25      = book(m_name, "jetPt_avgMu_25",     "jet p_{T} [GeV]", 120, 0, 600);
    +    m_avgMu_vs_jetPt      = book(m_name, "avgMu_vs_jetPt",
    +                 "jet p_{T} [GeV]", 120, 0, 600,
    +                 "Average Mu", 51, -0.5, 50);
    +  }
    +
    +  // Eta-Phi Map
    +  if(m_infoSwitch->m_etaPhiMap)
    +    {
    +      m_etaPhi = book(m_name, "etaPhi", m_titlePrefix+"#eta", 100, -2.5, 2.5,
    +              m_titlePrefix+"#phi", 120, -TMath::Pi(), TMath::Pi() );
    +    }
    +
    +
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +void JetHists::record(EL::IWorker* wk) {
    +  HistogramManager::record(wk);
    +
    +  if(m_infoSwitch->m_tracksInJet){
    +    m_tracksInJet -> record( wk );
    +  }
    +}
    +
    +StatusCode JetHists::execute( const xAOD::Jet* jet, float eventWeight, const xAOD::EventInfo* eventInfo  ) {
    +  return execute(static_cast<const xAOD::IParticle*>(jet), eventWeight, eventInfo);
    +}
    +
    +StatusCode JetHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) {
    +  using namespace msgJetHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo));
    +
    +  if(m_debug) std::cout << "JetHists: in execute " <<std::endl;
    +
    +  const xAOD::Jet* jet=dynamic_cast<const xAOD::Jet*>(particle);
    +  if(m_debug) std::cout << "JetHists: got jet " << jet << std::endl;
    +  if(jet==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Jet" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  // clean
    +  if( m_infoSwitch->m_clean ) {
    +    if(m_debug) std::cout << "JetHists: m_clean " <<std::endl;
    +
    +    static SG::AuxElement::ConstAccessor<float> jetTime ("Timing");
    +    if( jetTime.isAvailable( *jet ) ) {
    +      m_jetTime ->  Fill( jetTime( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> LArQuality ("LArQuality");
    +    if( LArQuality.isAvailable( *jet ) ) {
    +      m_LArQuality ->  Fill( LArQuality( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> hecq ("HECQuality");
    +    if( hecq.isAvailable( *jet ) ) {
    +      m_hecq ->  Fill( hecq( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> negE ("NegativeE");
    +    if( negE.isAvailable( *jet ) ) {
    +      m_negE ->  Fill( negE( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> avLArQF ("AverageLArQF");
    +    if( avLArQF.isAvailable( *jet ) ) {
    +      m_avLArQF ->  Fill( avLArQF( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> bchCorrCell ("BchCorrCell");
    +    if( bchCorrCell.isAvailable( *jet ) ) {
    +      m_bchCorrCell ->  Fill( bchCorrCell( *jet ), eventWeight );
    +    }
    +
    +    // 0062       N90Cells?
    +    static SG::AuxElement::ConstAccessor<float> N90Const ("N90Constituents");
    +    if( N90Const.isAvailable( *jet ) ) {
    +      m_N90Const ->  Fill( N90Const( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> ChargedFraction ("ChargedFraction");
    +    if( ChargedFraction.isAvailable( *jet ) ) {
    +      m_ChargedFraction ->  Fill( ChargedFraction( *jet ), eventWeight );
    +    }
    +
    +
    + // 0030       LArBadHVEnergy,
    + // 0031       LArBadHVRatio,
    + // 0035       NumTowers,
    + // 0057       isBadLoose,
    + // 0058       isBadMedium,
    + // 0059       isBadTight,
    + // 0060       isUgly,
    + // 0063       OotFracClusters10,
    + // 0064       OotFracClusters5,
    + // 0065       OotFracCells5,
    + // 0066       OotFracCells10,
    +
    +  } // fillClean
    +
    +  // Pileup
    +  if(m_infoSwitch->m_vsActualMu){
    +    float actualMu = eventInfo->actualInteractionsPerCrossing();
    +    m_actualMu->Fill(actualMu, eventWeight);
    +  }
    +
    +  if (m_infoSwitch->m_byAverageMu)
    +  {
    +    float averageMu = eventInfo->averageInteractionsPerCrossing();
    +    m_avgMu->Fill(averageMu, eventWeight);
    +  }
    +
    +  // energy
    +  if( m_infoSwitch->m_energy ) {
    +    if(m_debug) std::cout << "JetHists: m_energy " <<std::endl;
    +
    +    static SG::AuxElement::ConstAccessor<float> HECf ("HECFrac");
    +    if( HECf.isAvailable( *jet ) ) {
    +      m_HECf ->  Fill( HECf( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> EMf ("EMFrac");
    +    if( EMf.isAvailable( *jet ) ) {
    +      m_EMf ->  Fill( EMf( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> centroidR ("CentroidR");
    +    if( centroidR.isAvailable( *jet ) ) {
    +      m_centroidR ->  Fill( centroidR( *jet ), eventWeight );
    +    }
    +
    +    /*
    +
    +    static SG::AuxElement::ConstAccessor<float> samplingMax ("SamplingMax");
    +    if( samplingMax.isAvailable( *jet ) ) {
    +      m_samplingMax ->  Fill( samplingMax( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> ePerSamp ("EnergyPerSampling");
    +    if( ePerSamp.isAvailable( *jet ) ) {
    +      m_ePerSamp ->  Fill( ePerSamp( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> fracSampMax ("FracSamplingMax");
    +    if( fracSampMax.isAvailable( *jet ) ) {
    +      m_fracSampMax ->  Fill( fracSampMax( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> lowEtFrac ("LowEtConstituentsFrac");
    +    if( lowEtFrac.isAvailable( *jet ) ) {
    +      m_lowEtFrac ->  Fill( lowEtFrac( *jet ), eventWeight );
    +    }
    +
    + // 0036       Offset,
    + // 0037       OriginIndex    ,
    +    */
    +
    +  }
    +
    +  if( m_infoSwitch->m_layer ){
    +    if(m_debug) std::cout << "JetHists: m_layer " <<std::endl;
    +
    +    static SG::AuxElement::ConstAccessor< vector<float> > ePerSamp ("EnergyPerSampling");
    +    if( ePerSamp.isAvailable( *jet ) ) {
    +      vector<float> ePerSampVals = ePerSamp( *jet );
    +      float jetE = jet->e();
    +      m_PreSamplerB -> Fill( ePerSampVals.at(0) / jetE );
    +      m_EMB1        -> Fill( ePerSampVals.at(1) / jetE );
    +      m_EMB2        -> Fill( ePerSampVals.at(2) / jetE );
    +      m_EMB3        -> Fill( ePerSampVals.at(3) / jetE );
    +      m_PreSamplerE -> Fill( ePerSampVals.at(4) / jetE );
    +      m_EME1        -> Fill( ePerSampVals.at(5) / jetE );
    +      m_EME2        -> Fill( ePerSampVals.at(6) / jetE );
    +      m_EME3        -> Fill( ePerSampVals.at(7) / jetE );
    +      m_HEC0        -> Fill( ePerSampVals.at(8) / jetE );
    +      m_HEC1        -> Fill( ePerSampVals.at(9) / jetE );
    +      m_HEC2        -> Fill( ePerSampVals.at(10) / jetE );
    +      m_HEC3        -> Fill( ePerSampVals.at(11) / jetE );
    +      m_TileBar0    -> Fill( ePerSampVals.at(12) / jetE );
    +      m_TileBar1    -> Fill( ePerSampVals.at(13) / jetE );
    +      m_TileBar2    -> Fill( ePerSampVals.at(14) / jetE );
    +      m_TileGap1    -> Fill( ePerSampVals.at(15) / jetE );
    +      m_TileGap2    -> Fill( ePerSampVals.at(16) / jetE );
    +      m_TileGap3    -> Fill( ePerSampVals.at(17) / jetE );
    +      m_TileExt0    -> Fill( ePerSampVals.at(18) / jetE );
    +      m_TileExt1    -> Fill( ePerSampVals.at(19) / jetE );
    +      m_TileExt2    -> Fill( ePerSampVals.at(20) / jetE );
    +      m_FCAL0       -> Fill( ePerSampVals.at(21) / jetE );
    +      m_FCAL1       -> Fill( ePerSampVals.at(22) / jetE );
    +      m_FCAL2       -> Fill( ePerSampVals.at(23) / jetE );
    +    }
    +  }
    +
    +
    +
    +  // area
    +  /*
    +  if ( m_fillArea ) {
    +
    +    static SG::AuxElement::ConstAccessor<int> actArea ("ActiveArea");
    +    if( actArea.isAvailable( *jet ) ) {
    +      m_actArea ->  Fill( actArea( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> voroniA ("VoronoiArea");
    +    if( voroniA.isAvailable( *jet ) ) {
    +      m_voroniA ->  Fill( voroniA( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> voroniAE ("VoronoiAreaE");
    +    if( voroniAE.isAvailable( *jet ) ) {
    +      m_voroniAE ->  Fill( voroniAE( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> voroniAPx ("VoronoiAreaPx");
    +    if( voroniAPx.isAvailable( *jet ) ) {
    +      m_voroniAPx ->  Fill( voroniAPx( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> voroniAPy ("CentroidR");
    +    if( voroniAPy.isAvailable( *jet ) ) {
    +      m_voroniAPy ->  Fill( voroniAPy( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> voroniAPz ("CentroidR");
    +    if( voroniAPz.isAvailable( *jet ) ) {
    +      m_voroniAPz ->  Fill( voroniAPz( *jet ), eventWeight );
    +    }
    +
    +  }
    +  */
    +
    +
    +  /*
    +  // tracks
    +  if ( m_fillTrks ) {
    + // 0040       TrackMF,
    + // 0041       TrackMFindex,
    + // 0049       WIDTH,
    + // 0067       NumTrkPt1000,
    + // 0068       NumTrkPt500,
    + // 0069       SumPtTrkPt1000,
    + // 0070       SumPtTrkPt500,
    + // 0071       TrackWidthPt1000,
    + // 0072       TrackWidthPt500,
    + // 0012       GhostTrackCount,
    + // 0011       GhostMuonSegmentCount,
    + // 0027       HighestJVFVtx,
    + } */
    +
    +
    +
    +  /*
    +  // isolation
    +  if ( m_fillIso ) {
    + // 0024       IsoKR20Par,
    + // 0025       IsoKR20Perp,
    +  }
    +  */
    +
    +  /*
    +  // substructure
    +  if( m_fillSubstructure) {
    +    // 0029       KtDR,
    +    static SG::AuxElement::ConstAccessor<int> ktDR ("KtDR");
    +    if( ktDR.isAvailable( *jet ) ) {
    +      m_ktDR ->  Fill( ktDR( *jet ), eventWeight );
    +    }
    + // 0050       YFlip12,
    + // 0051       YFlip13,
    + // 0074       Tau1,
    + // 0075       Tau2,
    + // 0076       Tau3,
    + // 0077       Dip12,
    + // 0078       Dip13,
    + // 0079       Dip23,
    + // 0080       DipExcl12,
    + //
    + // 0081       ThrustMin,
    + // 0082       ThrustMaj,
    + //
    + // 0083       FoxWolfram0,
    + // 0084       FoxWolfram1,
    + // 0085       FoxWolfram2,
    + // 0086       FoxWolfram3,
    + // 0087       FoxWolfram4,
    + //
    + // 0088       Sphericity,
    + // 0089       Aplanarity,
    +  }
    +
    +  */
    +
    +  // truth
    + // 0073       PtTruth,
    + // 0013       GhostTruthParticleCount,
    + // 0028       JetLabel,
    + // 0042       TruthMF,
    + // 0043       TruthMFindex,
    +
    +  if( m_infoSwitch->m_truth ) {
    +    if(m_debug) std::cout << "JetHists: m_truth " <<std::endl;
    +
    +    static SG::AuxElement::ConstAccessor<int> TruthLabelID ("TruthLabelID");
    +    if( TruthLabelID.isAvailable( *jet ) ) {
    +      m_truthLabelID ->  Fill( TruthLabelID( *jet ), eventWeight );
    +    }else{
    +      static SG::AuxElement::ConstAccessor<int> PartonTruthLabelID ("PartonTruthLabelID");
    +      if( PartonTruthLabelID.isAvailable( *jet ) ) {
    +    m_truthLabelID ->  Fill( PartonTruthLabelID( *jet ), eventWeight );
    +      }
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> HadronConeExclTruthLabelID ("HadronConeExclTruthLabelID");
    +    if( HadronConeExclTruthLabelID.isAvailable( *jet ) ) {
    +      m_hadronConeExclTruthLabelID ->  Fill( HadronConeExclTruthLabelID( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> TruthCount ("TruthCount");
    +    if( TruthCount.isAvailable( *jet ) ) {
    +      m_truthCount ->  Fill( TruthCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthPt ("TruthPt");
    +    if( TruthPt.isAvailable( *jet ) ) {
    +      m_truthPt ->  Fill( TruthPt( *jet )/1000, eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_B ("TruthLabelDeltaR_B");
    +    if( TruthLabelDeltaR_B.isAvailable( *jet ) ) {
    +      m_truthDr_B ->  Fill( TruthLabelDeltaR_B( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_C ("TruthLabelDeltaR_C");
    +    if( TruthLabelDeltaR_C.isAvailable( *jet ) ) {
    +      m_truthDr_C ->  Fill( TruthLabelDeltaR_C( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> TruthLabelDeltaR_T ("TruthLabelDeltaR_T");
    +    if( TruthLabelDeltaR_T.isAvailable( *jet ) ) {
    +      m_truthDr_T ->  Fill( TruthLabelDeltaR_T( *jet ), eventWeight );
    +    }
    +
    +  }
    +
    +
    +  if( m_infoSwitch->m_truthDetails ) {
    +    if(m_debug) std::cout << "JetHists: m_truthDetails " <<std::endl;
    +
    +    //
    +    // B-Hadron Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostBHadronsFinalCount ("GhostBHadronsFinalCount");
    +    if( GhostBHadronsFinalCount.isAvailable( *jet ) ) {
    +      m_truthCount_BhadFinal ->  Fill( GhostBHadronsFinalCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostBHadronsInitialCount ("GhostBHadronsInitialCount");
    +    if( GhostBHadronsInitialCount.isAvailable( *jet ) ) {
    +      m_truthCount_BhadInit ->  Fill( GhostBHadronsInitialCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostBQuarksFinalCount ("GhostBQuarksFinalCount");
    +    if( GhostBQuarksFinalCount.isAvailable( *jet ) ) {
    +      m_truthCount_BQFinal ->  Fill( GhostBQuarksFinalCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBHadronsFinalPt ("GhostBHadronsFinalPt");
    +    if( GhostBHadronsFinalPt.isAvailable( *jet ) ) {
    +      m_truthPt_BhadFinal ->  Fill( GhostBHadronsFinalPt( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBHadronsInitialPt ("GhostBHadronsInitialPt");
    +    if( GhostBHadronsInitialPt.isAvailable( *jet ) ) {
    +      m_truthPt_BhadInit ->  Fill( GhostBHadronsInitialPt( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostBQuarksFinalPt ("GhostBQuarksFinalPt");
    +    if( GhostBQuarksFinalPt.isAvailable( *jet ) ) {
    +      m_truthPt_BQFinal ->  Fill( GhostBQuarksFinalPt( *jet ), eventWeight );
    +    }
    +
    +
    +    //
    +    // C-Hadron Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostCHadronsFinalCount ("GhostCHadronsFinalCount");
    +    if( GhostCHadronsFinalCount.isAvailable( *jet ) ) {
    +      m_truthCount_ChadFinal ->  Fill( GhostCHadronsFinalCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostCHadronsInitialCount ("GhostCHadronsInitialCount");
    +    if( GhostCHadronsInitialCount.isAvailable( *jet ) ) {
    +      m_truthCount_ChadInit ->  Fill( GhostCHadronsInitialCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<int> GhostCQuarksFinalCount ("GhostCQuarksFinalCount");
    +    if( GhostCQuarksFinalCount.isAvailable( *jet ) ) {
    +      m_truthCount_CQFinal ->  Fill( GhostCQuarksFinalCount( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCHadronsFinalPt ("GhostCHadronsFinalPt");
    +    if( GhostCHadronsFinalPt.isAvailable( *jet ) ) {
    +      m_truthPt_ChadFinal ->  Fill( GhostCHadronsFinalPt( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCHadronsInitialPt ("GhostCHadronsInitialPt");
    +    if( GhostCHadronsInitialPt.isAvailable( *jet ) ) {
    +      m_truthPt_ChadInit ->  Fill( GhostCHadronsInitialPt( *jet ), eventWeight );
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostCQuarksFinalPt ("GhostCQuarksFinalPt");
    +    if( GhostCQuarksFinalPt.isAvailable( *jet ) ) {
    +      m_truthPt_CQFinal ->  Fill( GhostCQuarksFinalPt( *jet ), eventWeight );
    +    }
    +
    +
    +    //
    +    // Tau Details
    +    //
    +    static SG::AuxElement::ConstAccessor<int> GhostTausFinalCount ("GhostTausFinalCount");
    +    if( GhostTausFinalCount.isAvailable( *jet ) ) {
    +      m_truthCount_TausFinal ->  Fill( GhostTausFinalCount( *jet ), eventWeight );
    +    }
    +
    +
    +    static SG::AuxElement::ConstAccessor<float> GhostTausFinalPt ("GhostTausFinalPt");
    +    if( GhostTausFinalPt.isAvailable( *jet ) ) {
    +      m_truthPt_TausFinal ->  Fill( GhostTausFinalPt( *jet ), eventWeight );
    +    }
    +
    +
    +  }
    +
    +  //
    +  // JVC
    +  //
    +  // if(m_infoSwitch->m_JVC) {
    +  //   if(m_debug) std::cout << "JetHists: m_JVC " << std::endl;
    +  //   m_JVC->Fill(jet->JVC, eventWeight);
    +  // }
    +
    +  //
    +  // BTagging
    +  //
    +  if( m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT ) {
    +    if(m_debug) std::cout << "JetHists: m_flavorTag " <<std::endl;
    +    const xAOD::BTagging *btag_info(0);
    +    if(m_infoSwitch->m_flavorTag){
    +      btag_info = xAOD::BTaggingUtilities::getBTagging(*jet);
    +    }else if(m_infoSwitch->m_flavorTagHLT){
    +      btag_info = jet->auxdata< const xAOD::BTagging* >("HLTBTag");
    +    }
    +
    +    static SG::AuxElement::ConstAccessor<double> SV0_significance3DAcc ("SV0_significance3D");
    +    if ( SV0_significance3DAcc.isAvailable(*btag_info) ) {
    +      m_COMB            ->  Fill( btag_info->SV1_loglikelihoodratio() + btag_info->IP3D_loglikelihoodratio() , eventWeight );
    +      m_JetFitter       ->  Fill( btag_info->JetFitter_loglikelihoodratio() , eventWeight );
    +    }
    +
    +    if(m_infoSwitch->m_btag_jettrk){
    +      if(m_debug) std::cout << "JetHists: m_btag_jettrk " <<std::endl;
    +      unsigned trkSum_ntrk   = btag_info->isAvailable<unsigned>("trkSum_ntrk") ? btag_info->auxdata<unsigned>("trkSum_ntrk") : -1;
    +      float    trkSum_sPt    = btag_info->isAvailable<float   >("trkSum_SPt" ) ? btag_info->auxdata<float   >("trkSum_SPt" ) : -1000;//<== -1 GeV
    +      float trkSum_vPt    = 0;
    +      float trkSum_vAbsEta= -10;
    +      if (trkSum_ntrk>0) {
    +    trkSum_vPt    = btag_info->isAvailable<float>("trkSum_VPt" ) ?      btag_info->auxdata<float>("trkSum_VPt" )  : -1000;
    +    trkSum_vAbsEta= btag_info->isAvailable<float>("trkSum_VEta") ? fabs(btag_info->auxdata<float>("trkSum_VEta")) : -10  ;
    +      }
    +
    +      m_trkSum_ntrk     ->  Fill( trkSum_ntrk     , eventWeight );
    +      m_trkSum_sPt      ->  Fill( trkSum_sPt/1000 , eventWeight );
    +      m_trkSum_vPt      ->  Fill( trkSum_vPt/1000 , eventWeight );
    +      m_trkSum_vAbsEta  ->  Fill( trkSum_vAbsEta  , eventWeight );
    +
    +      /*** Generating MVb variables ***/
    +      std::vector< ElementLink< xAOD::TrackParticleContainer > > associationLinks;
    +      bool trksOK=btag_info->variable<std::vector<ElementLink<xAOD::TrackParticleContainer> > > ("IP3D", "TrackParticleLinks", associationLinks );
    +
    +      std::vector<float> vectD0, vectD0Signi, vectZ0, vectZ0Signi;    vectD0.clear(), vectD0Signi.clear(), vectZ0.clear(), vectZ0Signi.clear();
    +      trksOK &= btag_info->variable< std::vector<float> > ("IP3D", "valD0wrtPVofTracks", vectD0     );
    +      trksOK &= btag_info->variable< std::vector<float> > ("IP3D", "sigD0wrtPVofTracks", vectD0Signi);
    +      trksOK &= btag_info->variable< std::vector<float> > ("IP3D", "valZ0wrtPVofTracks", vectZ0     );
    +      trksOK &= btag_info->variable< std::vector<float> > ("IP3D", "sigZ0wrtPVofTracks", vectZ0Signi);
    +      if (vectD0.size() and vectD0Signi.size() and vectZ0.size() and vectZ0Signi.size()) {
    +    trksOK &= associationLinks.size() == vectD0.size();
    +    trksOK &= associationLinks.size() == vectZ0.size();
    +    trksOK &= associationLinks.size() == vectD0Signi.size();
    +    trksOK &= associationLinks.size() == vectZ0Signi.size();
    +      }
    +
    +      int ntrks = associationLinks.size();
    +      int n_trk_d0cut = 0;
    +      if (trksOK) {
    +
    +    float sum_pt = 0., sum_pt_dr = 0.;
    +
    +    std::vector<std::pair<float, float> > trk_d0_z0;
    +    trk_d0_z0.reserve(associationLinks.size());
    +
    +    unsigned trkIndex=0;
    +    for(auto trkIter = associationLinks.begin(); trkIter != associationLinks.end(); ++trkIter) {
    +      const xAOD::TrackParticle* aTemp = **trkIter;
    +      TLorentzVector trk;
    +      trk.SetPtEtaPhiM(aTemp->pt(), aTemp->eta(), aTemp->phi(), 0.);
    +      // no need for a dedicated selection here, the tracks are already
    +      // selected by the IP3D algorithm
    +      const float d0sig = vectD0Signi.at(trkIndex);
    +      const float z0sig = vectZ0Signi.at(trkIndex);
    +      trkIndex++;
    +
    +      if (std::fabs(d0sig) > 1.8)
    +        n_trk_d0cut++;
    +      // track width components
    +      sum_pt += trk.Pt();
    +      const float dRtoJet = trk.DeltaR(jet->p4());
    +      sum_pt_dr += dRtoJet * trk.Pt();
    +
    +      // for 3rd higest d0/z0 significance
    +      trk_d0_z0.push_back(std::make_pair(d0sig, z0sig));
    +    } //end of trk loop
    +
    +    // sort by highest signed d0 sig
    +    std::sort(trk_d0_z0.begin(), trk_d0_z0.end(), [](const std::pair<float, float>& a, const std::pair<float, float>& b) {
    +        return a.first > b.first;
    +      } );
    +
    +    //Assign MVb variables
    +    float width          = sum_pt > 0 ? sum_pt_dr / sum_pt : 0;
    +    int   n_trk_sigd0cut = n_trk_d0cut;
    +    float trk3_d0sig     = trk_d0_z0.size() > 2 ? trk_d0_z0[2].first : -100;
    +    float trk3_z0sig     = trk_d0_z0.size() > 2 ? trk_d0_z0[2].second : -100;
    +
    +    m_width          -> Fill(width,          eventWeight);
    +    m_n_trk_sigd0cut -> Fill(n_trk_sigd0cut, eventWeight);
    +    m_trk3_d0sig     -> Fill(trk3_d0sig,     eventWeight);
    +    m_trk3_z0sig     -> Fill(trk3_z0sig,     eventWeight);
    +
    +    int sv1_ntkv;   btag_info->variable<int>  ("SV1", "NGTinSvx", sv1_ntkv);
    +        float sv1_efrc; btag_info->variable<float>("SV1", "efracsvx", sv1_efrc);
    +    float sv_scaled_efc  = sv1_ntkv>0               ? sv1_efrc * (static_cast<float>(ntrks) / sv1_ntkv)  : -1;
    +
    +        int jf_ntrkv;  btag_info->variable<int>("JetFitter",   "nTracksAtVtx",  jf_ntrkv);
    +        int jf_nvtx1t; btag_info->variable<int>("JetFitter",   "nSingleTracks", jf_nvtx1t);
    +    float jf_efrc; btag_info->variable<float>("JetFitter", "energyFraction", jf_efrc);
    +    float jf_scaled_efc  = (jf_ntrkv + jf_nvtx1t)>0 ? jf_efrc * (static_cast<float>(ntrks) / (jf_ntrkv + jf_nvtx1t)) : -1;
    +
    +    m_sv_scaled_efc->Fill(sv_scaled_efc, eventWeight);
    +    m_jf_scaled_efc->Fill(jf_scaled_efc, eventWeight);
    +      }//trkOK
    +
    +    }
    +
    +
    +    if(m_infoSwitch->m_jetFitterDetails){
    +      if(m_debug) std::cout << "JetHists: m_jetFitterDetails " <<std::endl;
    +      static SG::AuxElement::ConstAccessor< int   > jf_nVTXAcc       ("JetFitter_nVTX");
    +      static SG::AuxElement::ConstAccessor< int   > jf_nSingleTracks ("JetFitter_nSingleTracks");
    +      static SG::AuxElement::ConstAccessor< int   > jf_nTracksAtVtx  ("JetFitter_nTracksAtVtx");
    +      static SG::AuxElement::ConstAccessor< float > jf_mass          ("JetFitter_mass");
    +      static SG::AuxElement::ConstAccessor< float > jf_energyFraction("JetFitter_energyFraction");
    +      static SG::AuxElement::ConstAccessor< float > jf_significance3d("JetFitter_significance3d");
    +      static SG::AuxElement::ConstAccessor< float > jf_deltaeta      ("JetFitter_deltaeta");
    +      static SG::AuxElement::ConstAccessor< float > jf_deltaphi      ("JetFitter_deltaphi");
    +      static SG::AuxElement::ConstAccessor< int   > jf_N2Tpar        ("JetFitter_N2Tpair");
    +      static SG::AuxElement::ConstAccessor< double > jf_pb           ("JetFitterCombNN_pb");
    +      static SG::AuxElement::ConstAccessor< double > jf_pc           ("JetFitterCombNN_pc");
    +      static SG::AuxElement::ConstAccessor< double > jf_pu           ("JetFitterCombNN_pu");
    +
    +      if(jf_nVTXAcc.isAvailable       (*btag_info)) m_jf_nVTX           ->Fill(jf_nVTXAcc       (*btag_info), eventWeight);
    +      if(jf_nSingleTracks.isAvailable (*btag_info)) m_jf_nSingleTracks  ->Fill(jf_nSingleTracks (*btag_info), eventWeight);
    +      if(jf_nTracksAtVtx.isAvailable  (*btag_info)) m_jf_nTracksAtVtx   ->Fill(jf_nTracksAtVtx  (*btag_info), eventWeight);
    +      if(jf_mass.isAvailable          (*btag_info)) m_jf_mass           ->Fill(jf_mass          (*btag_info)/1000, eventWeight);
    +      if(jf_energyFraction.isAvailable(*btag_info)) m_jf_energyFraction ->Fill(jf_energyFraction(*btag_info), eventWeight);
    +      if(jf_significance3d.isAvailable(*btag_info)) m_jf_significance3d ->Fill(jf_significance3d(*btag_info), eventWeight);
    +      if(jf_deltaeta.isAvailable      (*btag_info)){
    +    m_jf_deltaeta       ->Fill(jf_deltaeta      (*btag_info), eventWeight);
    +    m_jf_deltaeta_l     ->Fill(jf_deltaeta      (*btag_info), eventWeight);
    +      }
    +      if(jf_deltaphi.isAvailable      (*btag_info)){
    +    m_jf_deltaR         ->Fill(hypot(jf_deltaphi(*btag_info),jf_deltaeta(*btag_info)), eventWeight);
    +    m_jf_deltaphi       ->Fill(jf_deltaphi      (*btag_info), eventWeight);
    +    m_jf_deltaphi_l     ->Fill(jf_deltaphi      (*btag_info), eventWeight);
    +      }
    +      if(jf_N2Tpar.isAvailable        (*btag_info)) m_jf_N2Tpar         ->Fill(jf_N2Tpar        (*btag_info), eventWeight);
    +      if(jf_pb.isAvailable            (*btag_info)) m_jf_pb             ->Fill(jf_pb            (*btag_info), eventWeight);
    +      if(jf_pc.isAvailable            (*btag_info)) m_jf_pc             ->Fill(jf_pc            (*btag_info), eventWeight);
    +      if(jf_pu.isAvailable            (*btag_info)) m_jf_pu             ->Fill(jf_pu            (*btag_info), eventWeight);
    +
    +
    +      float jf_mass_unco; btag_info->variable<float>("JetFitter", "massUncorr" , jf_mass_unco);
    +      float jf_dR_flight; btag_info->variable<float>("JetFitter", "dRFlightDir", jf_dR_flight);
    +
    +      m_jf_mass_unco->Fill(jf_mass_unco/1000, eventWeight);
    +      m_jf_dR_flight->Fill(jf_dR_flight, eventWeight);
    +
    +
    +    }
    +
    +    if(m_infoSwitch->m_svDetails){
    +      if(m_debug) std::cout << "JetHists: m_svDetails " <<std::endl;
    +      //
    +      // SV0
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< int   >   sv0_NGTinSvxAcc     ("SV0_NGTinSvx");
    +      // @brief SV0 : Number of 2-track pairs
    +      static SG::AuxElement::ConstAccessor< int   >   sv0_N2TpairAcc      ("SV0_N2Tpair");
    +      static SG::AuxElement::ConstAccessor< float   > sv0_masssvxAcc      ("SV0_masssvx");
    +      static SG::AuxElement::ConstAccessor< float   > sv0_efracsvxAcc     ("SV0_efracsvx");
    +      static SG::AuxElement::ConstAccessor< float   > sv0_normdistAcc     ("SV0_normdist");
    +
    +
    +      if(sv0_NGTinSvxAcc .isAvailable(*btag_info)) m_sv0_NGTinSvx -> Fill( sv0_NGTinSvxAcc (*btag_info), eventWeight);
    +      if(sv0_N2TpairAcc  .isAvailable(*btag_info)) m_sv0_N2Tpair  -> Fill( sv0_N2TpairAcc  (*btag_info), eventWeight);
    +      if(sv0_masssvxAcc  .isAvailable(*btag_info)) m_sv0_massvx   -> Fill( sv0_masssvxAcc  (*btag_info)/1000, eventWeight);
    +      if(sv0_efracsvxAcc .isAvailable(*btag_info)) m_sv0_efracsvx -> Fill( sv0_efracsvxAcc (*btag_info), eventWeight);
    +      if(sv0_normdistAcc .isAvailable(*btag_info)) m_sv0_normdist -> Fill( sv0_normdistAcc (*btag_info), eventWeight);
    +
    +      double sv0;
    +      btag_info->variable<double>("SV0", "significance3D", sv0);
    +      m_SV0             ->  Fill( sv0 , eventWeight );
    +
    +
    +      //
    +      // SV1
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< int   >   sv1_NGTinSvxAcc     ("SV1_NGTinSvx");
    +      // @brief SV1 : Number of 2-track pairs
    +      static SG::AuxElement::ConstAccessor< int   >   sv1_N2TpairAcc      ("SV1_N2Tpair");
    +      static SG::AuxElement::ConstAccessor< float   > sv1_masssvxAcc      ("SV1_masssvx");
    +      static SG::AuxElement::ConstAccessor< float   > sv1_efracsvxAcc     ("SV1_efracsvx");
    +      static SG::AuxElement::ConstAccessor< float   > sv1_normdistAcc     ("SV1_normdist");
    +
    +      if(sv1_NGTinSvxAcc .isAvailable(*btag_info)) m_sv1_NGTinSvx -> Fill( sv1_NGTinSvxAcc (*btag_info), eventWeight);
    +      if(sv1_N2TpairAcc  .isAvailable(*btag_info)) m_sv1_N2Tpair  -> Fill( sv1_N2TpairAcc  (*btag_info), eventWeight);
    +      if(sv1_masssvxAcc  .isAvailable(*btag_info)) m_sv1_massvx   -> Fill( sv1_masssvxAcc  (*btag_info)/1000, eventWeight);
    +      if(sv1_efracsvxAcc .isAvailable(*btag_info)) m_sv1_efracsvx -> Fill( sv1_efracsvxAcc (*btag_info), eventWeight);
    +      if(sv1_normdistAcc .isAvailable(*btag_info)) m_sv1_normdist -> Fill( sv1_normdistAcc (*btag_info), eventWeight);
    +
    +      double sv1_pu = -30;  btag_info->variable<double>("SV1", "pu", sv1_pu);
    +      double sv1_pb = -30;  btag_info->variable<double>("SV1", "pb", sv1_pb);
    +      double sv1_pc = -30;  btag_info->variable<double>("SV1", "pc", sv1_pc);
    +
    +      m_SV1_pu         ->  Fill(sv1_pu  , eventWeight );
    +      m_SV1_pb         ->  Fill(sv1_pb  , eventWeight );
    +      m_SV1_pc         ->  Fill(sv1_pc  , eventWeight );
    +
    +      m_SV1            ->  Fill( btag_info->calcLLR(sv1_pb,sv1_pu) , eventWeight );
    +      m_SV1_c          ->  Fill( btag_info->calcLLR(sv1_pb,sv1_pc) , eventWeight );
    +      m_SV1_cu         ->  Fill( btag_info->calcLLR(sv1_pc,sv1_pu) , eventWeight );
    +
    +      float sv1_Lxy;        btag_info->variable<float>("SV1", "Lxy"             , sv1_Lxy);
    +      float sv1_sig3d;      btag_info->variable<float>("SV1", "significance3d"  , sv1_sig3d);
    +      float sv1_L3d;        btag_info->variable<float>("SV1", "L3d"             , sv1_L3d);
    +      float sv1_distmatlay; btag_info->variable<float>("SV1", "dstToMatLay"     , sv1_distmatlay);
    +      float sv1_dR;         btag_info->variable<float>("SV1", "deltaR"          , sv1_dR );
    +
    +      m_SV1_Lxy        -> Fill(sv1_Lxy,         eventWeight);
    +      m_SV1_sig3d      -> Fill(sv1_sig3d,       eventWeight);
    +      m_SV1_L3d        -> Fill(sv1_L3d,         eventWeight);
    +      m_SV1_distmatlay -> Fill(sv1_distmatlay,  eventWeight);
    +      m_SV1_dR         -> Fill(sv1_dR,          eventWeight);
    +
    +    }
    +
    +
    +    if(m_infoSwitch->m_ipDetails){
    +      if(m_debug) std::cout << "JetHists: m_ipDetails " <<std::endl;
    +      //
    +      // IP2D
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< vector<int>   >   IP2D_gradeOfTracksAcc     ("IP2D_gradeOfTracks");
    +      static SG::AuxElement::ConstAccessor< vector<bool>   >  IP2D_flagFromV0ofTracksAcc("IP2D_flagFromV0ofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP2D_valD0wrtPVofTracksAcc("IP2D_valD0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP2D_sigD0wrtPVofTracksAcc("IP2D_sigD0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP2D_weightBofTracksAcc   ("IP2D_weightBofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP2D_weightCofTracksAcc   ("IP2D_weightCofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP2D_weightUofTracksAcc   ("IP2D_weightUofTracks");
    +
    +      if(IP2D_gradeOfTracksAcc .isAvailable(*btag_info)){
    +    unsigned int nIP2DTracks = IP2D_gradeOfTracksAcc(*btag_info).size();
    +    m_nIP2DTracks -> Fill( nIP2DTracks, eventWeight);
    +    for(int grade : IP2D_gradeOfTracksAcc(*btag_info))        m_IP2D_gradeOfTracks->Fill(grade, eventWeight);
    +      }
    +
    +      if(IP2D_flagFromV0ofTracksAcc .isAvailable(*btag_info)){
    +    for(bool flag : IP2D_flagFromV0ofTracksAcc(*btag_info))   m_IP2D_flagFromV0ofTracks->Fill(flag, eventWeight);
    +      }
    +
    +      if(IP2D_valD0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float d0 : IP2D_valD0wrtPVofTracksAcc(*btag_info))    m_IP2D_valD0wrtPVofTracks->Fill(d0, eventWeight);
    +      }
    +
    +      if(IP2D_sigD0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float d0Sig : IP2D_sigD0wrtPVofTracksAcc(*btag_info)) {
    +      m_IP2D_sigD0wrtPVofTracks  ->Fill(d0Sig, eventWeight);
    +      m_IP2D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight);
    +
    +
    +    }
    +      }
    +
    +      if(IP2D_weightBofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightB : IP2D_weightBofTracksAcc(*btag_info))  m_IP2D_weightBofTracks->Fill(weightB, eventWeight);
    +      }
    +
    +      if(IP2D_weightCofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightC : IP2D_weightCofTracksAcc(*btag_info))  m_IP2D_weightCofTracks->Fill(weightC, eventWeight);
    +      }
    +
    +      if(IP2D_weightUofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightU : IP2D_weightUofTracksAcc(*btag_info))  m_IP2D_weightUofTracks->Fill(weightU, eventWeight);
    +      }
    +
    +      double ip2_pu = -30;  btag_info->variable<double>("IP2D", "pu", ip2_pu);
    +      double ip2_pb = -30;  btag_info->variable<double>("IP2D", "pb", ip2_pb);
    +      double ip2_pc = -30;  btag_info->variable<double>("IP2D", "pc", ip2_pc);
    +
    +      m_IP2D_pu         ->  Fill(ip2_pu  , eventWeight );
    +      m_IP2D_pb         ->  Fill(ip2_pb  , eventWeight );
    +      m_IP2D_pc         ->  Fill(ip2_pc  , eventWeight );
    +
    +      m_IP2D            ->  Fill( btag_info->calcLLR(ip2_pb,ip2_pu) , eventWeight );
    +      m_IP2D_c          ->  Fill( btag_info->calcLLR(ip2_pb,ip2_pc) , eventWeight );
    +      m_IP2D_cu         ->  Fill( btag_info->calcLLR(ip2_pc,ip2_pu) , eventWeight );
    +
    +
    +      //
    +      // IP3D
    +      //
    +
    +      static SG::AuxElement::ConstAccessor< vector<int>   >   IP3D_gradeOfTracksAcc     ("IP3D_gradeOfTracks");
    +      static SG::AuxElement::ConstAccessor< vector<bool>   >  IP3D_flagFromV0ofTracksAcc("IP3D_flagFromV0ofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_valD0wrtPVofTracksAcc("IP3D_valD0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_sigD0wrtPVofTracksAcc("IP3D_sigD0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_valZ0wrtPVofTracksAcc("IP3D_valZ0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_sigZ0wrtPVofTracksAcc("IP3D_sigZ0wrtPVofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_weightBofTracksAcc   ("IP3D_weightBofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_weightCofTracksAcc   ("IP3D_weightCofTracks");
    +      static SG::AuxElement::ConstAccessor< vector<float>   > IP3D_weightUofTracksAcc   ("IP3D_weightUofTracks");
    +
    +      if(IP3D_gradeOfTracksAcc .isAvailable(*btag_info)){
    +    unsigned int nIP3DTracks = IP3D_gradeOfTracksAcc(*btag_info).size();
    +    m_nIP3DTracks -> Fill( nIP3DTracks, eventWeight);
    +    for(int grade : IP3D_gradeOfTracksAcc(*btag_info))        m_IP3D_gradeOfTracks->Fill(grade, eventWeight);
    +      }
    +
    +      if(IP3D_flagFromV0ofTracksAcc .isAvailable(*btag_info)){
    +    for(bool flag : IP3D_flagFromV0ofTracksAcc(*btag_info))   m_IP3D_flagFromV0ofTracks->Fill(flag, eventWeight);
    +      }
    +
    +      if(IP3D_valD0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float d0 : IP3D_valD0wrtPVofTracksAcc(*btag_info))    m_IP3D_valD0wrtPVofTracks->Fill(d0, eventWeight);
    +      }
    +
    +      if(IP3D_sigD0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float d0Sig : IP3D_sigD0wrtPVofTracksAcc(*btag_info)){
    +      m_IP3D_sigD0wrtPVofTracks  ->Fill(d0Sig, eventWeight);
    +      m_IP3D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight);
    +    }
    +      }
    +
    +      if(IP3D_valZ0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float z0 : IP3D_valZ0wrtPVofTracksAcc(*btag_info))    m_IP3D_valZ0wrtPVofTracks->Fill(z0, eventWeight);
    +      }
    +
    +      if(IP3D_sigZ0wrtPVofTracksAcc .isAvailable(*btag_info)){
    +    for(float z0Sig : IP3D_sigZ0wrtPVofTracksAcc(*btag_info)){
    +      m_IP3D_sigZ0wrtPVofTracks  ->Fill(z0Sig, eventWeight);
    +      m_IP3D_sigZ0wrtPVofTracks_l->Fill(z0Sig, eventWeight);
    +    }
    +      }
    +
    +      if(IP3D_weightBofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightB : IP3D_weightBofTracksAcc(*btag_info))  m_IP3D_weightBofTracks->Fill(weightB, eventWeight);
    +      }
    +
    +      if(IP3D_weightCofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightC : IP3D_weightCofTracksAcc(*btag_info))  m_IP3D_weightCofTracks->Fill(weightC, eventWeight);
    +      }
    +
    +      if(IP3D_weightUofTracksAcc .isAvailable(*btag_info)){
    +    for(float weightU : IP3D_weightUofTracksAcc(*btag_info))  m_IP3D_weightUofTracks->Fill(weightU, eventWeight);
    +      }
    +
    +      double ip3_pu = -30;  btag_info->variable<double>("IP3D", "pu", ip3_pu);
    +      double ip3_pb = -30;  btag_info->variable<double>("IP3D", "pb", ip3_pb);
    +      double ip3_pc = -30;  btag_info->variable<double>("IP3D", "pc", ip3_pc);
    +
    +      m_IP3D_pu         ->  Fill(ip3_pu  , eventWeight );
    +      m_IP3D_pb         ->  Fill(ip3_pb  , eventWeight );
    +      m_IP3D_pc         ->  Fill(ip3_pc  , eventWeight );
    +
    +      m_IP3D            ->  Fill( btag_info->calcLLR(ip3_pb,ip3_pu) , eventWeight );
    +      m_IP3D_c          ->  Fill( btag_info->calcLLR(ip3_pb,ip3_pc) , eventWeight );
    +      m_IP3D_cu         ->  Fill( btag_info->calcLLR(ip3_pc,ip3_pu) , eventWeight );
    +
    +
    +    }
    +  }
    +
    +
    +
    +
    +  /*
    +  vector<float> chfs = jet->getAttribute< vector<float> >(xAOD::JetAttribute::SumPtTrkPt1000);
    +  float chf(-1);
    +  if( pvLoc >= 0 && pvLoc < (int)chfs.size() ) {
    +    m_chf ->  Fill( chfs.at( pvLoc ) , eventWeight );
    +  }
    +  */
    +
    +
    +  // testing
    +  if( m_infoSwitch->m_resolution ) {
    +    if(m_debug) std::cout << "JetHists: m_resolution " <<std::endl;
    +    //float ghostTruthPt = jet->getAttribute( xAOD::JetAttribute::GhostTruthPt );
    +    float ghostTruthPt = jet->auxdata< float >( "GhostTruthPt" );
    +    m_jetGhostTruthPt -> Fill( ghostTruthPt/1e3, eventWeight );
    +    float resolution = jet->pt()/ghostTruthPt - 1;
    +    m_jetPt_vs_resolution -> Fill( jet->pt()/1e3, resolution, eventWeight );
    +    m_jetGhostTruthPt_vs_resolution -> Fill( ghostTruthPt/1e3, resolution, eventWeight );
    +  }
    +
    +  if( m_infoSwitch->m_substructure ){
    +    if(m_debug) std::cout << "JetHists: m_substructure " <<std::endl;
    +    static SG::AuxElement::ConstAccessor<float> Tau1("Tau1");
    +    static SG::AuxElement::ConstAccessor<float> Tau2("Tau2");
    +    static SG::AuxElement::ConstAccessor<float> Tau3("Tau3");
    +    static SG::AuxElement::ConstAccessor<float> Tau1_wta("Tau1_wta");
    +    static SG::AuxElement::ConstAccessor<float> Tau2_wta("Tau2_wta");
    +    static SG::AuxElement::ConstAccessor<float> Tau3_wta("Tau3_wta");
    +
    +    if(Tau1.isAvailable(*jet)) m_tau1->Fill( Tau1(*jet), eventWeight );
    +    if(Tau2.isAvailable(*jet)) m_tau2->Fill( Tau2(*jet), eventWeight );
    +    if(Tau3.isAvailable(*jet)) m_tau3->Fill( Tau3(*jet), eventWeight );
    +    if(Tau1.isAvailable(*jet) && Tau2.isAvailable(*jet)) m_tau21->Fill( Tau2(*jet)/Tau1(*jet), eventWeight );
    +    if(Tau2.isAvailable(*jet) && Tau3.isAvailable(*jet)) m_tau32->Fill( Tau3(*jet)/Tau2(*jet), eventWeight );
    +    if(Tau1_wta.isAvailable(*jet)) m_tau1_wta->Fill( Tau1_wta(*jet), eventWeight );
    +    if(Tau2_wta.isAvailable(*jet)) m_tau2_wta->Fill( Tau2_wta(*jet), eventWeight );
    +    if(Tau3_wta.isAvailable(*jet)) m_tau3_wta->Fill( Tau3_wta(*jet), eventWeight );
    +    if(Tau1_wta.isAvailable(*jet) && Tau2_wta.isAvailable(*jet)) m_tau21_wta->Fill( Tau2_wta(*jet)/Tau1_wta(*jet), eventWeight );
    +    if(Tau2_wta.isAvailable(*jet) && Tau3_wta.isAvailable(*jet)) m_tau32_wta->Fill( Tau3_wta(*jet)/Tau2_wta(*jet), eventWeight );
    +
    +    m_numConstituents->Fill( jet->numConstituents(), eventWeight );
    +
    +  }
    +
    +  if(m_debug) std::cout << m_name << "::Matching tracks in Jet: " << m_infoSwitch->m_tracksInJet << std::endl;
    +
    +  if( m_infoSwitch->m_tracksInJet ){
    +    if(m_debug) std::cout << "JetHists: m_tracksInJet " <<std::endl;
    +    const vector<const xAOD::TrackParticle*> matchedTracks = jet->auxdata< vector<const xAOD::TrackParticle*>  >(m_infoSwitch->m_trackName);
    +    const xAOD::Vertex *pvx  = jet->auxdata<const xAOD::Vertex*>(m_infoSwitch->m_trackName+"_vtx");
    +
    +    m_nTrk->Fill(matchedTracks.size(), eventWeight);
    +
    +    if(m_debug) std::cout << "Track Size " << matchedTracks.size() << std::endl;
    +    for(auto& trkPtr: matchedTracks){
    +      ANA_CHECK( m_tracksInJet->execute(trkPtr, jet, pvx, eventWeight, eventInfo));
    +    }
    +  }
    +
    +  if(  m_infoSwitch->m_byEta ){
    +    if (fabs(jet->eta()) < 1)           m_jetPt_eta_0_1   -> Fill(jet->pt()/1e3, eventWeight);
    +    else if ( fabs(jet->eta()) < 2 ){   m_jetPt_eta_1_2   -> Fill(jet->pt()/1e3, eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->pt()/1e3, eventWeight);}
    +    else if ( fabs(jet->eta()) < 2.5 ){ m_jetPt_eta_2_2p5 -> Fill(jet->pt()/1e3, eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->pt()/1e3, eventWeight);}
    +  }
    +
    +  if(  m_infoSwitch->m_onlineBS ){
    +
    +    float bs_online_vx = jet->auxdata< float >("bs_online_vx");
    +    float bs_online_vy = jet->auxdata< float >("bs_online_vy");
    +    float bs_online_vz = jet->auxdata< float >("bs_online_vz");
    +
    +    if( m_infoSwitch->m_onlineBSTool ){
    +      // Over-ride with onlineBSToolInfo
    +      bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx);
    +      bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy);
    +      bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz);
    +    }
    +
    +    m_bs_online_vy -> Fill( bs_online_vy , eventWeight);
    +    m_bs_online_vx -> Fill( bs_online_vx , eventWeight);
    +    m_bs_online_vz   -> Fill( bs_online_vz , eventWeight);
    +    m_bs_online_vz_l -> Fill( bs_online_vz , eventWeight);
    +
    +    if (fabs(bs_online_vz) < 1)          { m_eta_bs_online_vz_0_1   -> Fill( jet->eta(), eventWeight); }
    +    else if ( fabs(bs_online_vz) < 1.5 ) { m_eta_bs_online_vz_1_1p5 -> Fill( jet->eta(), eventWeight); }
    +    else if ( fabs(bs_online_vz) < 2   ) { m_eta_bs_online_vz_1p5_2 -> Fill( jet->eta(), eventWeight); }
    +
    +
    +
    +    if(m_infoSwitch->m_lumiB_runN){
    +      uint32_t lumiBlock = eventInfo->lumiBlock();
    +      uint32_t runNumber = eventInfo->runNumber();
    +
    +      if( fabs(bs_online_vz) < 900){
    +    m_lumiB_runN_bs_online_vz -> Fill(lumiBlock, runNumber, eventWeight * bs_online_vz);
    +    m_lumiB_runN_bs_den       -> Fill(lumiBlock, runNumber, eventWeight );
    +      }
    +
    +    }
    +  }
    +
    +
    +  if( m_infoSwitch->m_hltVtxComp || m_infoSwitch->m_onlineBS ){
    +    const xAOD::Vertex *online_pvx     = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx");
    +    const xAOD::Vertex *online_pvx_bkg = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx_bkg");
    +    const xAOD::Vertex *offline_pvx    = jet->auxdata<const xAOD::Vertex*>("offline_vtx");
    +
    +    // Use of vtxClass is new, hadDummyPV is old but need backward compatibility.
    +    char vtxClass = jet->auxdata< char >("hadDummyPV");
    +    int vtxClassInt = int(vtxClass);
    +
    +    if( vtxClass == '0')  vtxClassInt = 0;
    +    if( vtxClass == '1')  vtxClassInt = 1;
    +    if( vtxClass == '2')  vtxClassInt = 2;
    +
    +    m_vtxClass -> Fill(vtxClassInt, eventWeight);
    +
    +    if(m_infoSwitch->m_hltVtxComp){
    +
    +      if(online_pvx)  m_vtxOnlineValid ->Fill(1.0, eventWeight);
    +      else            m_vtxOnlineValid ->Fill(0.0, eventWeight);
    +
    +      if(offline_pvx) m_vtxOfflineValid->Fill(1.0, eventWeight);
    +      else            m_vtxOfflineValid->Fill(0.0, eventWeight);
    +
    +
    +      //if(hadDummyPV)  m_vtxClass ->Fill(1.0, eventWeight);
    +      //else            m_vtxClass ->Fill(0.0, eventWeight);
    +
    +      if(offline_pvx && online_pvx && online_pvx_bkg){
    +    float online_x0_raw = online_pvx->x();
    +    float online_y0_raw = online_pvx->y();
    +    float online_z0_raw = online_pvx->z();
    +    if(vtxClass!='0'){
    +      online_x0_raw = 0;
    +      online_y0_raw = 0;
    +      online_z0_raw = 0;
    +    }
    +
    +    m_vtx_offline_x0    -> Fill(offline_pvx->x(), eventWeight);
    +    m_vtx_online_x0     -> Fill(online_pvx->x(), eventWeight);
    +    m_vtx_online_x0_raw -> Fill(online_x0_raw, eventWeight);
    +    float vtxDiffx0 = online_pvx->x() - offline_pvx->x();
    +    m_vtxDiffx0  ->Fill(vtxDiffx0, eventWeight);
    +    m_vtxDiffx0_l->Fill(vtxDiffx0, eventWeight);
    +
    +    m_vtx_offline_y0    -> Fill(offline_pvx->y(), eventWeight);
    +    m_vtx_online_y0     -> Fill(online_pvx->y(), eventWeight);
    +    m_vtx_online_y0_raw -> Fill(online_y0_raw, eventWeight);
    +    float vtxDiffy0 = online_pvx->y() - offline_pvx->y();
    +    m_vtxDiffy0  ->Fill(vtxDiffy0, eventWeight);
    +    m_vtxDiffy0_l->Fill(vtxDiffy0, eventWeight);
    +
    +    m_vtx_offline_z0    -> Fill(offline_pvx->z(), eventWeight);
    +    m_vtx_online_z0     -> Fill(online_pvx->z(), eventWeight);
    +    m_vtx_online_z0_raw -> Fill(online_z0_raw, eventWeight);
    +    float vtxDiffz0     = online_pvx->z() - offline_pvx->z();
    +    float vtxDiffz0_raw = online_z0_raw - offline_pvx->z();
    +    m_vtxDiffz0  ->Fill(vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_m->Fill(vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_s->Fill(vtxDiffz0, eventWeight);
    +
    +    float vtxBkgDiffz0     = online_pvx_bkg->z() - offline_pvx->z();
    +    m_vtxBkgDiffz0  ->Fill(vtxBkgDiffz0, eventWeight);
    +    m_vtxBkgDiffz0_m->Fill(vtxBkgDiffz0, eventWeight);
    +    m_vtxBkgDiffz0_s->Fill(vtxBkgDiffz0, eventWeight);
    +
    +    m_vtxDiffz0_s_vs_vtx_offline_z0->Fill(offline_pvx->z(), vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_vs_vtx_offline_z0  ->Fill(offline_pvx->z(), vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_s_vs_vtxDiffx0      ->Fill(vtxDiffx0, vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_s_vs_vtxDiffy0      ->Fill(vtxDiffy0, vtxDiffz0, eventWeight);
    +
    +    m_vtxClass_vs_jetPt        ->Fill(jet->pt()/1e3, vtxClassInt, eventWeight);
    +
    +    m_vtx_online_y0_vs_vtx_online_z0 -> Fill(online_pvx->z(), online_pvx->y(), eventWeight);
    +    m_vtx_online_x0_vs_vtx_online_z0 -> Fill(online_pvx->z(), online_pvx->x(), eventWeight);
    +
    +
    +    if(m_infoSwitch->m_vsLumiBlock){
    +      uint32_t lumiBlock = eventInfo->lumiBlock();
    +
    +      m_vtxDiffx0_vs_lBlock     ->Fill(lumiBlock, vtxDiffx0          , eventWeight);
    +      m_vtxDiffy0_vs_lBlock     ->Fill(lumiBlock, vtxDiffy0          , eventWeight);
    +      m_vtxDiffz0_vs_lBlock     ->Fill(lumiBlock, vtxDiffz0          , eventWeight);
    +      m_vtxClass_vs_lBlock   ->Fill(lumiBlock, vtxClassInt,    eventWeight);
    +
    +      bool correctVtx1 = (fabs(vtxDiffz0) < 1);
    +      bool correctVtx10 = (fabs(vtxDiffz0) < 10);
    +      m_vtxEff1_vs_lBlock   ->Fill(lumiBlock, correctVtx1,    eventWeight);
    +      m_vtxEff10_vs_lBlock  ->Fill(lumiBlock, correctVtx10,    eventWeight);
    +
    +      if(!vtxClass){
    +        m_vtxEff1_noDummy_vs_lBlock   ->Fill(lumiBlock, correctVtx1,    eventWeight);
    +        m_vtxEff10_noDummy_vs_lBlock  ->Fill(lumiBlock, correctVtx10,    eventWeight);
    +      }
    +
    +      bool correctVtx1_raw  = (fabs(vtxDiffz0_raw) < 1);
    +      bool correctVtx10_raw = (fabs(vtxDiffz0_raw) < 10);
    +      m_vtxEff1_raw_vs_lBlock   ->Fill(lumiBlock, correctVtx1_raw,    eventWeight);
    +      m_vtxEff10_raw_vs_lBlock  ->Fill(lumiBlock, correctVtx10_raw,    eventWeight);
    +
    +    }
    +
    +
    +    if(m_infoSwitch->m_lumiB_runN){
    +      uint32_t lumiBlock = eventInfo->lumiBlock();
    +      uint32_t runNumber = eventInfo->runNumber();
    +      m_lumiB_runN              -> Fill(lumiBlock, runNumber, eventWeight);
    +      m_lumiB_runN_vtxClass     -> Fill(lumiBlock, runNumber, eventWeight * vtxClassInt);
    +      m_lumiB_runN_lumiB        -> Fill(lumiBlock, runNumber, eventWeight * lumiBlock);
    +
    +
    +    //if(offline_pvx && online_pvx){
    +        //  float vtxDiffz0     = online_pvx->z() - offline_pvx->z();
    +    //  m_lumiB_runN_vtxDiffz0  -> Fill(lumiBlock, runNumber, eventWeight * vtxDiffz0);
    +    //}
    +
    +    }
    +      }
    +    }
    +  }
    +
    +  if(m_debug) std::cout << "JetHists: leave " <<std::endl;
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode JetHists::execute( const xAH::Jet* jet, float eventWeight, const xAH::EventInfo* eventInfo ) {
    +  return execute(static_cast<const xAH::Particle*>(jet), eventWeight, eventInfo);
    +}
    +
    +StatusCode JetHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo ) {
    +  using namespace msgJetHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight));
    +
    +  if(m_debug) std::cout << "JetHists: in execute " <<std::endl;
    +
    +  const xAH::Jet* jet = dynamic_cast<const xAH::Jet*>(particle);
    +  if(m_debug) std::cout << "JetHists: got jet " << jet << std::endl;
    +  if(jet==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Jet" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  if(m_infoSwitch->m_clean)
    +    {
    +      m_jetTime                   ->Fill(jet->Timing                    ,eventWeight);
    +      m_LArQuality                ->Fill(jet->LArQuality                ,eventWeight);
    +      m_hecq                      ->Fill(jet->HECQuality                ,eventWeight);
    +      m_negE                      ->Fill(jet->NegativeE                 ,eventWeight);
    +      m_avLArQF                   ->Fill(jet->AverageLArQF              ,eventWeight);
    +      m_bchCorrCell               ->Fill(jet->BchCorrCell               ,eventWeight);
    +      m_N90Const                  ->Fill(jet->N90Constituents           ,eventWeight);
    +      //m_LArQmean                  ->Fill(jet->AverageLArQF/65535        ,eventWeight);
    +      //m_LArBadHVEFrac             ->Fill(jet->LArBadHVEFrac             ,eventWeight);
    +      //m_LArBadHVNCell             ->Fill(jet->LArBadHVNCell             ,eventWeight);
    +      m_ChargedFraction           ->Fill(jet->ChargedFraction           ,eventWeight);
    +      //m_OotFracClusters5          ->Fill(jet->OotFracClusters5          ,eventWeight);
    +      //m_OotFracClusters10         ->Fill(jet->OotFracClusters10         ,eventWeight);
    +      //m_LeadingClusterPt          ->Fill(jet->LeadingClusterPt          ,eventWeight);
    +      //m_LeadingClusterSecondLambda->Fill(jet->LeadingClusterSecondLambda,eventWeight);
    +      //m_LeadingClusterCenterLambda->Fill(jet->LeadingClusterCenterLambda,eventWeight);
    +      //m_LeadingClusterSecondR     ->Fill(jet->LeadingClusterSecondR     ,eventWeight);
    +      //m_clean_passLooseBad        ->Fill(jet->clean_passLooseBad        ,eventWeight);
    +      //m_clean_passLooseBadUgly    ->Fill(jet->clean_passLooseBadUgly    ,eventWeight);
    +      //m_clean_passTightBad        ->Fill(jet->clean_passTightBad        ,eventWeight);
    +      //m_clean_passTightBadUgly    ->Fill(jet->clean_passTightBadUgly    ,eventWeight);
    +    }
    +
    +
    +  if(m_infoSwitch->m_energy)
    +    {
    +      m_HECf              ->Fill(jet->HECFrac,              eventWeight);
    +      m_EMf               ->Fill(jet->EMFrac,               eventWeight);
    +      m_centroidR         ->Fill(jet->CentroidR,            eventWeight);
    +      //m_FracSamplingMax      ->Fill(jet->FracSamplingMax,      eventWeight);
    +      //m_FracSamplingMaxIndex ->Fill(jet->FracSamplingMaxIndex, eventWeight);
    +      //m_LowEtConstituentsFrac->Fill(jet->LowEtConstituentsFrac,eventWeight);
    +      //m_GhostMuonSegmentCount->Fill(jet->GhostMuonSegmentCount,eventWeight);
    +      //m_Width                ->Fill(jet->Width,                eventWeight);
    +    }
    +
    +  if(m_infoSwitch->m_trackPV)
    +    {
    +//      m_NumTrkPt1000PV    ->Fill(jet->NumTrkPt1000PV    , eventWeight);
    +//      m_SumPtTrkPt1000PV  ->Fill(jet->SumPtTrkPt1000PV  , eventWeight);
    +//      m_TrackWidthPt1000PV->Fill(jet->TrackWidthPt1000PV, eventWeight);
    +//      m_NumTrkPt500PV     ->Fill(jet->NumTrkPt500PV     , eventWeight);
    +//      m_SumPtTrkPt500PV   ->Fill(jet->SumPtTrkPt500PV   , eventWeight);
    +//      m_TrackWidthPt500PV ->Fill(jet->TrackWidthPt500PV , eventWeight);
    +//      m_JVFPV             ->Fill(jet->JVFPV             , eventWeight);
    +    }
    +
    +
    +
    +  if(m_infoSwitch->m_trackPV || m_infoSwitch->m_trackAll)
    +    {
    +//      m_Jvt       ->Fill(jet->Jvt        , eventWeight);
    +//      m_JvtJvfcorr->Fill(jet->JvtJvfcorr , eventWeight);
    +//      m_JvtRpt    ->Fill(jet->JvtRpt     , eventWeight);
    +    }
    +
    +  if(m_infoSwitch->m_JVC)
    +    {
    +      m_JVC->Fill(jet->JVC, eventWeight);
    +    }
    +
    +
    +  if(m_infoSwitch->m_flavorTag || m_infoSwitch->m_flavorTagHLT)
    +    {
    +//      h_SV0                       ->Fill(jet->SV0                  , eventWeight);
    +//      h_SV1                       ->Fill(jet->SV1                  , eventWeight);
    +//      h_IP3D                      ->Fill(jet->IP3D                 , eventWeight);
    +
    +      m_COMB                      ->Fill(jet->SV1IP3D              , eventWeight);
    +      //m_JetFitter               ->Fill(jet->JetFitter            , eventWeight);
    +
    +//
    +
    +    }
    +
    +  if(  m_infoSwitch->m_byEta ){
    +    if (fabs(jet->p4.Eta()) < 1)           m_jetPt_eta_0_1   -> Fill(jet->p4.Pt(), eventWeight);
    +    else if ( fabs(jet->p4.Eta()) < 2 )   {m_jetPt_eta_1_2   -> Fill(jet->p4.Pt(), eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->p4.Pt(), eventWeight);}
    +    else if ( fabs(jet->p4.Eta()) < 2.5 ) {m_jetPt_eta_2_2p5 -> Fill(jet->p4.Pt(), eventWeight); m_jetPt_eta_1_2p5 -> Fill(jet->p4.Pt(), eventWeight);}
    +  }
    +
    +  if(  m_infoSwitch->m_onlineBS ){
    +
    +      float bs_online_vx = jet->bs_online_vx;
    +      float bs_online_vy = jet->bs_online_vy;
    +      float bs_online_vz = jet->bs_online_vz;
    +
    +      if( m_infoSwitch->m_onlineBSTool ){
    +    // Over-ride with onlineBSToolInfo
    +
    +    bs_online_vx = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSx);
    +    bs_online_vy = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSy);
    +    bs_online_vz = m_onlineBSTool.getOnlineBSInfo(eventInfo, xAH::OnlineBeamSpotTool::BSData::BSz);
    +
    +      }
    +
    +      m_bs_online_vx -> Fill( bs_online_vx , eventWeight);
    +      m_bs_online_vy -> Fill( bs_online_vy , eventWeight);
    +      m_bs_online_vz   -> Fill( bs_online_vz , eventWeight);
    +      m_bs_online_vz_l -> Fill( bs_online_vz , eventWeight);
    +
    +      if (fabs(bs_online_vz) < 1)          { m_eta_bs_online_vz_0_1   -> Fill( jet->p4.Eta(), eventWeight); }
    +      else if ( fabs(bs_online_vz) < 1.5 ) { m_eta_bs_online_vz_1_1p5 -> Fill( jet->p4.Eta(), eventWeight); }
    +      else if ( fabs(bs_online_vz) < 2   ) { m_eta_bs_online_vz_1p5_2 -> Fill( jet->p4.Eta(), eventWeight); }
    +
    +      if(m_infoSwitch->m_lumiB_runN){
    +    uint32_t lumiBlock = eventInfo->m_lumiBlock;
    +    uint32_t runNumber = eventInfo->m_runNumber;
    +    if( fabs(bs_online_vz) < 900 ){
    +        m_lumiB_runN_bs_online_vz  -> Fill(lumiBlock, runNumber, eventWeight * bs_online_vz);
    +        m_lumiB_runN_bs_den        -> Fill(lumiBlock, runNumber, eventWeight );
    +    }
    +
    +
    +      }
    +  }
    +
    +  if(m_infoSwitch->m_hltVtxComp ||  m_infoSwitch->m_onlineBS )
    +    {
    +
    +      // vtxHadDummy is an old var. I am moving to a new variable name here.
    +      float vtxClass=jet->vtxHadDummy;
    +
    +      m_vtxClass               ->Fill(vtxClass          , eventWeight);
    +
    +      if(m_infoSwitch->m_hltVtxComp){
    +
    +    float online_x0_raw = jet->vtx_online_x0;
    +    float online_y0_raw = jet->vtx_online_y0;
    +    float online_z0_raw = jet->vtx_online_z0;
    +    if(vtxClass){
    +      online_x0_raw = 0;
    +      online_y0_raw = 0;
    +      online_z0_raw = 0;
    +    }
    +
    +
    +    //if( fabs(bs_online_vy) < 0.1 ){
    +    //   std::cout << " -> bs_online_vx" << bs_online_vx << "bs_online_vy" << bs_online_vy << "bs_online_vz" << bs_online_vz << std::endl;
    +    //}
    +
    +    float vtxDiffx0      = jet->vtx_online_x0 - jet->vtx_offline_x0;
    +
    +    m_vtx_offline_x0             ->Fill(jet->vtx_offline_x0 , eventWeight);
    +    m_vtx_online_x0             ->Fill(jet->vtx_online_x0 , eventWeight);
    +    m_vtx_online_x0_raw         ->Fill(online_x0_raw      , eventWeight);
    +    m_vtxDiffx0                 ->Fill(vtxDiffx0          , eventWeight);
    +    m_vtxDiffx0_l               ->Fill(vtxDiffx0          , eventWeight);
    +
    +    m_vtx_offline_y0             ->Fill(jet->vtx_offline_y0 , eventWeight);
    +    m_vtx_online_y0             ->Fill(jet->vtx_online_y0 , eventWeight);
    +    m_vtx_online_y0_raw         ->Fill(online_y0_raw      , eventWeight);
    +    float vtxDiffy0 = jet->vtx_online_y0 - jet->vtx_offline_y0;
    +    m_vtxDiffy0                 ->Fill(vtxDiffy0          , eventWeight);
    +    m_vtxDiffy0_l               ->Fill(vtxDiffy0          , eventWeight);
    +
    +    m_vtx_offline_z0             ->Fill(jet->vtx_offline_z0 , eventWeight);
    +    m_vtx_online_z0              ->Fill(jet->vtx_online_z0 , eventWeight);
    +    m_vtx_offline_z0_s           ->Fill(jet->vtx_offline_z0 , eventWeight);
    +    m_vtx_online_z0_s            ->Fill(jet->vtx_online_z0 , eventWeight);
    +    m_vtx_online_z0_raw          ->Fill(online_z0_raw      , eventWeight);
    +    float vtxDiffz0     = jet->vtx_online_z0  - jet->vtx_offline_z0;
    +    float vtxDiffz0_raw = online_z0_raw       - jet->vtx_offline_z0;
    +    m_vtxDiffz0                 ->Fill(vtxDiffz0          , eventWeight);
    +    m_vtxDiffz0_m               ->Fill(vtxDiffz0          , eventWeight);
    +    m_vtxDiffz0_s               ->Fill(vtxDiffz0          , eventWeight);
    +    //m_vtx_offline_z                 ->Fill(jet->vtx_offline_z0          , eventWeight);
    +    //m_vtx_online_z                 ->Fill(jet->vtx_online_z0          , eventWeight);
    +
    +
    +    float vtxBkgDiffz0     = jet->vtx_online_bkg_z0  - jet->vtx_offline_z0;
    +    m_vtxBkgDiffz0                 ->Fill(vtxBkgDiffz0          , eventWeight);
    +    m_vtxBkgDiffz0_m               ->Fill(vtxBkgDiffz0          , eventWeight);
    +    m_vtxBkgDiffz0_s               ->Fill(vtxBkgDiffz0          , eventWeight);
    +
    +
    +    m_vtxDiffz0_s_vs_vtx_offline_z0->Fill(jet->vtx_offline_z0, vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_vs_vtx_offline_z0  ->Fill(jet->vtx_offline_z0, vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_s_vs_vtxDiffx0      ->Fill(vtxDiffx0, vtxDiffz0, eventWeight);
    +    m_vtxDiffz0_s_vs_vtxDiffy0      ->Fill(vtxDiffy0, vtxDiffz0, eventWeight);
    +
    +    m_vtxClass_vs_jetPt   ->Fill(jet->p4.Pt(), vtxClass,    eventWeight);
    +
    +    m_vtx_online_y0_vs_vtx_online_z0 ->Fill(jet->vtx_online_z0, jet->vtx_online_y0, eventWeight);
    +    m_vtx_online_x0_vs_vtx_online_z0 ->Fill(jet->vtx_online_z0, jet->vtx_online_x0, eventWeight);
    +
    +    if(m_infoSwitch->m_vsLumiBlock && eventInfo){
    +      uint32_t lumiBlock = eventInfo->m_lumiBlock;
    +
    +      m_vtxDiffx0_vs_lBlock     ->Fill(lumiBlock, vtxDiffx0          , eventWeight);
    +      m_vtxDiffy0_vs_lBlock     ->Fill(lumiBlock, vtxDiffy0          , eventWeight);
    +      m_vtxDiffz0_vs_lBlock     ->Fill(lumiBlock, vtxDiffz0          , eventWeight);
    +      m_vtxClass_vs_lBlock   ->Fill(lumiBlock, vtxClass,    eventWeight);
    +
    +      bool correctVtx1  = (fabs(vtxDiffz0) < 1);
    +      bool correctVtx10 = (fabs(vtxDiffz0) < 10);
    +      m_vtxEff1_vs_lBlock   ->Fill(lumiBlock, correctVtx1,    eventWeight);
    +      m_vtxEff10_vs_lBlock  ->Fill(lumiBlock, correctVtx10,    eventWeight);
    +
    +      if(!vtxClass){
    +        m_vtxEff1_noDummy_vs_lBlock   ->Fill(lumiBlock, correctVtx1,    eventWeight);
    +        m_vtxEff10_noDummy_vs_lBlock  ->Fill(lumiBlock, correctVtx10,    eventWeight);
    +      }
    +
    +      bool correctVtx1_raw  = (fabs(vtxDiffz0_raw) < 1);
    +      bool correctVtx10_raw = (fabs(vtxDiffz0_raw) < 10);
    +      m_vtxEff1_raw_vs_lBlock   ->Fill(lumiBlock, correctVtx1_raw,    eventWeight);
    +      m_vtxEff10_raw_vs_lBlock  ->Fill(lumiBlock, correctVtx10_raw,    eventWeight);
    +
    +    }
    +
    +    if(m_infoSwitch->m_lumiB_runN){
    +      uint32_t lumiBlock = eventInfo->m_lumiBlock;
    +      uint32_t runNumber = eventInfo->m_runNumber;
    +      m_lumiB_runN               -> Fill(lumiBlock, runNumber, eventWeight);
    +      m_lumiB_runN_vtxClass      -> Fill(lumiBlock, runNumber, eventWeight * vtxClass);
    +      m_lumiB_runN_lumiB      -> Fill(lumiBlock, runNumber, eventWeight*lumiBlock);
    +
    +    }
    +
    +      }
    +
    +    }
    +
    +  if(m_infoSwitch->m_jetFitterDetails){
    +
    +    m_jf_nVTX           ->Fill(jet->JetFitter_nVTX           ,      eventWeight);
    +    m_jf_nSingleTracks  ->Fill(jet->JetFitter_nSingleTracks  ,      eventWeight);
    +    m_jf_nTracksAtVtx   ->Fill(jet->JetFitter_nTracksAtVtx   ,      eventWeight);
    +    m_jf_mass           ->Fill(jet->JetFitter_mass           /1000, eventWeight);
    +    m_jf_energyFraction ->Fill(jet->JetFitter_energyFraction ,      eventWeight);
    +    m_jf_significance3d ->Fill(jet->JetFitter_significance3d ,      eventWeight);
    +    m_jf_deltaeta       ->Fill(jet->JetFitter_deltaeta       ,      eventWeight);
    +    m_jf_deltaeta_l     ->Fill(jet->JetFitter_deltaeta       ,      eventWeight);
    +    m_jf_deltaR         ->Fill(hypot(jet->JetFitter_deltaphi         ,jet->JetFitter_deltaeta), eventWeight);
    +    m_jf_deltaphi       ->Fill(jet->JetFitter_deltaphi       ,      eventWeight);
    +    m_jf_deltaphi_l     ->Fill(jet->JetFitter_deltaphi       ,      eventWeight);
    +    m_jf_N2Tpar         ->Fill(jet->JetFitter_N2Tpar         ,      eventWeight);
    +  }
    +
    +  if(m_infoSwitch->m_svDetails){
    +    //
    +    // SV0
    +    //
    +    m_sv0_NGTinSvx -> Fill( jet->sv0_NGTinSvx, eventWeight);
    +    m_sv0_N2Tpair  -> Fill( jet->sv0_N2Tpair , eventWeight);
    +    m_sv0_massvx   -> Fill( jet->sv0_massvx  /1000, eventWeight);
    +    m_sv0_efracsvx -> Fill( jet->sv0_efracsvx, eventWeight);
    +    m_sv0_normdist -> Fill( jet->sv0_normdist, eventWeight);
    +
    +    //
    +    // SV1
    +    //
    +    m_sv1_NGTinSvx -> Fill( jet->sv1_NGTinSvx, eventWeight);
    +    m_sv1_N2Tpair  -> Fill( jet->sv1_N2Tpair , eventWeight);
    +    m_sv1_massvx   -> Fill( jet->sv1_massvx  /1000, eventWeight);
    +    m_sv1_efracsvx -> Fill( jet->sv1_efracsvx, eventWeight);
    +    m_sv1_normdist -> Fill( jet->sv1_normdist, eventWeight);
    +
    +
    +    m_SV1_pu         ->  Fill(jet->sv1_pu  , eventWeight );
    +    m_SV1_pb         ->  Fill(jet->sv1_pb  , eventWeight );
    +    m_SV1_pc         ->  Fill(jet->sv1_pc  , eventWeight );
    +
    +    m_SV1_c          ->  Fill(jet->sv1_c  , eventWeight );
    +    m_SV1_cu         ->  Fill(jet->sv1_cu , eventWeight );
    +
    +    m_SV1_Lxy        -> Fill(jet->sv1_Lxy,         eventWeight);
    +    m_SV1_sig3d      -> Fill(jet->sv1_sig3d,       eventWeight);
    +    m_SV1_L3d        -> Fill(jet->sv1_L3d,         eventWeight);
    +    m_SV1_distmatlay -> Fill(jet->sv1_distmatlay,  eventWeight);
    +    m_SV1_dR         -> Fill(jet->sv1_dR,          eventWeight);
    +
    +  }
    +
    +
    +  if(m_infoSwitch->m_ipDetails){
    +    //
    +    // IP2D
    +    //
    +    m_nIP2DTracks -> Fill( jet->nIP2DTracks, eventWeight);
    +    for(float grade : jet->IP2D_gradeOfTracks)        m_IP2D_gradeOfTracks->Fill(grade, eventWeight);
    +    for(float flag  : jet->IP2D_flagFromV0ofTracks)   m_IP2D_flagFromV0ofTracks->Fill(flag, eventWeight);
    +
    +    if(jet->IP2D_sigD0wrtPVofTracks.size()  == jet->IP2D_valD0wrtPVofTracks.size()){
    +      for(unsigned int i=0; i<jet->IP2D_sigD0wrtPVofTracks.size(); i++){
    +    float d0Sig=jet->IP2D_sigD0wrtPVofTracks[i];
    +    float d0Val=jet->IP2D_valD0wrtPVofTracks[i];
    +    float d0Err=d0Val/d0Sig;
    +    m_IP2D_errD0wrtPVofTracks->Fill  (d0Err, eventWeight);
    +    m_IP2D_sigD0wrtPVofTracks->Fill  (d0Sig, eventWeight);
    +    m_IP2D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight);
    +    m_IP2D_valD0wrtPVofTracks->Fill  (d0Val, eventWeight);
    +      }
    +    }
    +
    +    for(float weightB : jet->IP2D_weightBofTracks)  m_IP2D_weightBofTracks->Fill(weightB, eventWeight);
    +    for(float weightC : jet->IP2D_weightCofTracks)  m_IP2D_weightCofTracks->Fill(weightC, eventWeight);
    +    for(float weightU : jet->IP2D_weightUofTracks)  m_IP2D_weightUofTracks->Fill(weightU, eventWeight);
    +
    +
    +    m_IP2D_pu         ->  Fill(jet->IP2D_pu  , eventWeight );
    +    m_IP2D_pb         ->  Fill(jet->IP2D_pb  , eventWeight );
    +    m_IP2D_pc         ->  Fill(jet->IP2D_pc  , eventWeight );
    +
    +    m_IP2D            ->  Fill( jet->IP2D    , eventWeight );
    +    m_IP2D_c          ->  Fill( jet->IP2D_c  , eventWeight );
    +    m_IP2D_cu         ->  Fill( jet->IP2D_cu , eventWeight );
    +
    +
    +    //
    +    // IP3D
    +    //
    +    m_nIP3DTracks -> Fill( jet->nIP3DTracks, eventWeight);
    +    for(float grade : jet->IP3D_gradeOfTracks     )   m_IP3D_gradeOfTracks->Fill(grade, eventWeight);
    +    for(float flag  : jet->IP3D_flagFromV0ofTracks)   m_IP3D_flagFromV0ofTracks->Fill(flag, eventWeight);
    +
    +    for(unsigned int i=0; i<jet->IP3D_sigD0wrtPVofTracks.size(); i++){
    +      float d0Sig=jet->IP3D_sigD0wrtPVofTracks[i];
    +      float d0Val=jet->IP3D_valD0wrtPVofTracks[i];
    +      float d0Err=d0Val/d0Sig;
    +      m_IP3D_errD0wrtPVofTracks->Fill  (d0Err, eventWeight);
    +      m_IP3D_sigD0wrtPVofTracks->Fill  (d0Sig, eventWeight);
    +      m_IP3D_sigD0wrtPVofTracks_l->Fill(d0Sig, eventWeight);
    +      m_IP3D_valD0wrtPVofTracks->Fill  (d0Val, eventWeight);
    +    }
    +
    +    for(unsigned int i=0; i<jet->IP3D_sigZ0wrtPVofTracks.size(); i++){
    +      float z0Sig=jet->IP3D_sigZ0wrtPVofTracks[i];
    +      float z0Val=jet->IP3D_valZ0wrtPVofTracks[i];
    +      float z0Err=z0Val/z0Sig;
    +      m_IP3D_errZ0wrtPVofTracks->Fill  (z0Err, eventWeight);
    +      m_IP3D_sigZ0wrtPVofTracks->Fill  (z0Sig, eventWeight);
    +      m_IP3D_sigZ0wrtPVofTracks_l->Fill(z0Sig, eventWeight);
    +      m_IP3D_valZ0wrtPVofTracks->Fill  (z0Val, eventWeight);
    +    }
    +
    +    for(float weightB : jet->IP3D_weightBofTracks)  m_IP3D_weightBofTracks->Fill(weightB, eventWeight);
    +    for(float weightC : jet->IP3D_weightCofTracks)  m_IP3D_weightCofTracks->Fill(weightC, eventWeight);
    +    for(float weightU : jet->IP3D_weightUofTracks)  m_IP3D_weightUofTracks->Fill(weightU, eventWeight);
    +
    +    m_IP3D_pu         ->  Fill(jet->IP3D_pu  , eventWeight );
    +    m_IP3D_pb         ->  Fill(jet->IP3D_pb  , eventWeight );
    +    m_IP3D_pc         ->  Fill(jet->IP3D_pc  , eventWeight );
    +
    +    m_IP3D            ->  Fill( jet->IP3D   , eventWeight );
    +    m_IP3D_c          ->  Fill( jet->IP3D_c , eventWeight );
    +    m_IP3D_cu         ->  Fill( jet->IP3D_cu, eventWeight );
    +
    +  }
    +
    +
    +
    +
    +  // truth
    +  if(m_infoSwitch->m_truth)
    +    {
    +      m_truthLabelID  ->Fill(jet->ConeTruthLabelID  , eventWeight);
    +      m_truthCount        ->Fill(jet->TruthCount        , eventWeight);
    +      m_truthDr_B->Fill(jet->TruthLabelDeltaR_B, eventWeight);
    +      m_truthDr_C->Fill(jet->TruthLabelDeltaR_C, eventWeight);
    +      m_truthDr_T->Fill(jet->TruthLabelDeltaR_T, eventWeight);
    +      //m_PartonTruthLabelID->Fill(jet->PartonTruthLabelID, eventWeight);
    +      //m_GhostTruthAssociationFraction->Fill(jet->GhostTruthAssociationFraction, eventWeight);
    +      m_hadronConeExclTruthLabelID->Fill(jet->HadronConeExclTruthLabelID, eventWeight);
    +
    +      m_truthPt   ->Fill(jet->truth_p4.Pt(),  eventWeight);
    +      //m_truth_pt_m ->Fill(jet->truth_p4.Pt(),  eventWeight);
    +      //m_truth_pt_l ->Fill(jet->truth_p4.Pt(),  eventWeight);
    +      //
    +      //m_truth_eta  ->Fill(jet->truth_p4.Eta(), eventWeight);
    +      //m_truth_phi  ->Fill(jet->truth_p4.Phi(), eventWeight);
    +    }
    +
    +
    +  // charge
    +  if(m_infoSwitch->m_charge)
    +    {
    +      //h_charge->Fill(jet->charge, eventWeight);
    +    }
    +
    +
    +
    +  if(m_infoSwitch->m_byAverageMu)
    +    {
    +
    +      float avg_mu=-99;
    +      avg_mu = eventInfo->m_averageMu;
    +      m_avgMu->Fill(avg_mu, eventWeight);
    +      if(avg_mu <  15.0)                  m_jetPt_avgMu_00_15 -> Fill(jet->p4.Pt(), eventWeight);
    +      if(avg_mu >= 15.0 && avg_mu < 25.0) m_jetPt_avgMu_15_25 -> Fill(jet->p4.Pt(), eventWeight);
    +      if(avg_mu >= 25.0)                  m_jetPt_avgMu_25    -> Fill(jet->p4.Pt(), eventWeight);
    +      m_avgMu_vs_jetPt->Fill(jet->p4.Pt(), avg_mu, eventWeight);
    +
    +    }
    +
    +  if (m_infoSwitch->m_vsActualMu)
    +    {
    +         float actualMu = eventInfo->m_actualMu;
    +          m_actualMu->Fill(actualMu, eventWeight);
    +    }
    +
    +
    +  if(m_infoSwitch->m_etaPhiMap)
    +    {
    +      m_etaPhi->Fill(jet->p4.Eta(), jet->p4.Phi(), eventWeight);
    +
    +    }
    +
    +
    +  return StatusCode::SUCCESS;
    +
    +
    +}
    +
    +
    +StatusCode JetHists::finalize() {
    +    if(m_tracksInJet){
    +        m_tracksInJet->finalize();
    +        delete m_tracksInJet;
    +    }
    +    return IParticleHists::finalize();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_JetHistsAlgo.cxx.html b/api/program_listing_file_Root_JetHistsAlgo.cxx.html new file mode 100644 index 0000000000..7b2a830f6c --- /dev/null +++ b/api/program_listing_file_Root_JetHistsAlgo.cxx.html @@ -0,0 +1,244 @@ + + + + + + + + + + + Program Listing for File JetHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetHistsAlgo.cxx

    +

    Return to documentation for file (Root/JetHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <xAODJet/JetContainer.h>
    +
    +#include <xAODAnaHelpers/JetHistsAlgo.h>
    +#include <xAODAnaHelpers/JetHists.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(JetHistsAlgo)
    +
    +JetHistsAlgo :: JetHistsAlgo () :
    +IParticleHistsAlgo("JetHistsAlgo")
    +{ }
    +
    +EL::StatusCode JetHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("JetHistsAlgo").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode JetHistsAlgo::AddHists( std::string name ) {
    +  return IParticleHistsAlgo::AddHists<JetHists>(name);
    +}
    +
    +EL::StatusCode JetHistsAlgo :: execute ()
    +{
    +  return IParticleHistsAlgo::execute<JetHists, xAOD::JetContainer>();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_JetSelector.cxx.html b/api/program_listing_file_Root_JetSelector.cxx.html new file mode 100644 index 0000000000..87501715ee --- /dev/null +++ b/api/program_listing_file_Root_JetSelector.cxx.html @@ -0,0 +1,1646 @@ + + + + + + + + + + + Program Listing for File JetSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetSelector.cxx

    +

    Return to documentation for file (Root/JetSelector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include <xAODJet/JetContainer.h>
    +#include <xAODJet/JetAuxContainer.h>
    +#include <xAODCore/AuxContainerBase.h>
    +#include "xAODCore/ShallowCopy.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/SystematicRegistry.h"
    +
    +// package include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/JetSelector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +// external tools include(s):
    +#include "JetMomentTools/JetForwardJvtTool.h"
    +#include "xAODBTaggingEfficiency/BTaggingSelectionTool.h"
    +#include "TriggerMatchingTool/MatchingTool.h"
    +#include "TriggerMatchingTool/MatchFromCompositeTool.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(JetSelector)
    +
    +
    +JetSelector :: JetSelector () :
    +    Algorithm("JetSelector")
    +{
    +}
    +
    +EL::StatusCode JetSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_DEBUG( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "JetSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_DEBUG( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_DEBUG( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_DEBUG( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_DEBUG( "Calling initialize");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  if ( m_useCutFlow ) {
    +
    +   // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_jet_cutflowHist_1 = (TH1D*)file->Get("cutflow_jets_1");
    +
    +    m_jet_cutflow_all             = m_jet_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_jet_cutflow_ptmax_cut       = m_jet_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut");
    +    m_jet_cutflow_ptmin_cut       = m_jet_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut");
    +    m_jet_cutflow_etmax_cut       = m_jet_cutflowHist_1->GetXaxis()->FindBin("etmax_cut");
    +    m_jet_cutflow_etmin_cut       = m_jet_cutflowHist_1->GetXaxis()->FindBin("etmin_cut");
    +    m_jet_cutflow_eta_cut         = m_jet_cutflowHist_1->GetXaxis()->FindBin("eta_cut");
    +    m_jet_cutflow_jvt_cut         = m_jet_cutflowHist_1->GetXaxis()->FindBin("JVT_cut");
    +    m_jet_cutflow_timing_cut      = m_jet_cutflowHist_1->GetXaxis()->FindBin("timing_cut");
    +    m_jet_cutflow_btag_cut        = m_jet_cutflowHist_1->GetXaxis()->FindBin("BTag_cut");
    +    m_jet_cutflow_cleaning_cut    = m_jet_cutflowHist_1->GetXaxis()->FindBin("cleaning_cut");
    +
    +  }
    +
    +  //If not set, find default from input container name
    +  if (m_jetScaleType.size() == 0){
    +    if( m_inContainerName.find("EMTopo") != std::string::npos){
    +      m_jetScaleType = "JetEMScaleMomentum";
    +    }else{
    +      m_jetScaleType = "JetConstitScaleMomentum";
    +    }
    +  }
    +
    +
    +  if ( m_outputAlgo.empty() ) {
    +    m_outputAlgo = m_inputAlgo + "_JetSelect";
    +  }
    +
    +  m_isEMjet = m_inContainerName.find("EMTopoJets") != std::string::npos;
    +  m_isLCjet = m_inContainerName.find("LCTopoJets") != std::string::npos;
    +
    +  // parse and split by comma
    +  std::string token;
    +
    +  std::istringstream ss(m_passAuxDecorKeys);
    +  while ( std::getline(ss, token, ',') ) {
    +    m_passKeys.push_back(token);
    +  }
    +
    +  ss.clear();
    +  ss.str(m_failAuxDecorKeys);
    +  while ( std::getline(ss, token, ',') ) {
    +    ANA_MSG_INFO(token);
    +    m_failKeys.push_back(token);
    +  }
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  bool allOK(true);
    +  if (!m_operatingPt.empty() || m_doBTagCut ) { allOK = false; }
    +  if (m_operatingPt == "FixedCutBEff_30") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_50") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_60") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_70") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_77") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_80") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_85") { allOK = true; }
    +  if (m_operatingPt == "FixedCutBEff_90") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_30") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_40") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_50") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_60") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_70") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_77") { allOK = true; }
    +  if (m_operatingPt == "FlatCutBEff_85") { allOK = true; }
    +
    +  if( !allOK ) {
    +    ANA_MSG_ERROR( "Requested operating point is not known to xAH. Arrow v Indian? " << m_operatingPt);
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( m_decorateSelectedObjects ) {
    +    ANA_MSG_INFO(" Decorate Jets with " << m_decor);
    +  }
    +
    +  // if applying cut on nr. bjets, configure it
    +  //
    +  if ( m_doBTagCut ) {
    +
    +    // initialize the BJetSelectionTool
    +    // A few which are not configurable as of yet....
    +    // is there a reason to have this configurable here??...I think no (GF to self)
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("MaxEta",m_b_eta_max));
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("MinPt",m_b_pt_min));
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("FlvTagCutDefinitionsFileName", m_corrFileName));
    +    // configurable parameters
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("TaggerName",          m_taggerName));
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("OperatingPoint",      m_operatingPt));
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("JetAuthor",       m_jetAuthor));
    +    ANA_CHECK( m_BJetSelectTool_handle.setProperty("OutputLevel",  msg().level()));
    +    ANA_CHECK( m_BJetSelectTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_BJetSelectTool_handle);
    +
    +  }
    +
    +  // initialize the JetPileupLabelingTool to (re-)evaluate decorators using in Jvt efficiency tools
    +  if ( m_doTruthJetTagging ) {
    +    m_jetPileupLabelingTool.setTypeAndName("JetPileupLabelingTool/PileupLabelingTool");
    +    ATH_CHECK( m_jetPileupLabelingTool.setProperty("RecoJetContainer", m_outContainerName) );
    +    ATH_CHECK( m_jetPileupLabelingTool.setProperty("TruthJetContainer", m_truthJetContainer) );
    +  #ifndef XAOD_STANDALONE
    +    ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressInputDependence", true) );
    +    ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressOutputDependence", true) );
    +  #endif
    +    ATH_CHECK( m_jetPileupLabelingTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetPileupLabelingTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetPileupLabelingTool);
    +  }
    +
    +  // initialize CP tools related to NNJvt
    +  if (m_doJVT) {
    +
    +    // initialize jet NNJvt moment tool
    +    m_jetNNJvtMomentTool.setTypeAndName("JetPileupTag::JetVertexNNTagger/NNJvtMomentTool");
    +    ATH_CHECK( m_jetNNJvtMomentTool.setProperty("JetContainer", m_outContainerName) );
    +  #ifndef XAOD_STANDALONE
    +    ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressInputDependence", true) );
    +    ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressOutputDependence", true) );
    +  #endif
    +    ATH_CHECK( m_jetNNJvtMomentTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetNNJvtMomentTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtMomentTool);
    +
    +    // initialize jet NNJvt selection tool
    +    m_jetNNJvtSelectionTool.setTypeAndName("CP::NNJvtSelectionTool/NNJvtSelectionTool");
    +    ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("JetContainer", m_outContainerName) );
    +    ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("WorkingPoint", m_WorkingPointJVT) );
    +    ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetNNJvtSelectionTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtSelectionTool);
    +
    +    // initialize jet NNJvt efficiency tool (scale factors)
    +    m_jetNNJvtEfficiencyTool.setTypeAndName("CP::NNJvtEfficiencyTool/NNJvtEfficiencyTool");
    +    ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("JetContainer", m_outContainerName) );
    +    ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("WorkingPoint", m_WorkingPointJVT) );
    +    ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("SFFile", m_SFFileJVT) );
    +    ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetNNJvtEfficiencyTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetNNJvtEfficiencyTool);
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    m_outputSystNamesJVT = m_outputSystNamesJVT + "_JVT_" + m_WorkingPointJVT;
    +    //  Create a passed label for JVT cut
    +    m_outputJVTPassed = m_outputJVTPassed + "_" + m_WorkingPointJVT;
    +
    +    CP::SystematicSet affectSystsJVT = m_jetNNJvtEfficiencyTool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsJVT ) { ANA_MSG_DEBUG("NNJvtEfficiencyTool can be affected by NNJvt efficiency systematic: " << syst_it.name()); }
    +
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +
    +    const CP::SystematicSet recSystsJVT = m_jetNNJvtEfficiencyTool->recommendedSystematics();
    +    m_systListJVT = HelperFunctions::getListofSystematics( recSystsJVT, m_systNameJVT, m_systValJVT, msg() );
    +
    +    ANA_MSG_INFO("Will be using NNJvtEfficiencyTool tool JVT efficiency systematic:");
    +    for ( const auto& syst_it : m_systListJVT ) {
    +      if ( m_systNameJVT.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // initialize CP tools related to fJvt
    +  if (m_dofJVT) {
    +
    +    // initialize jet fJvt selection tool
    +    m_jetfJvtSelectionTool.setTypeAndName("CP::FJvtSelectionTool/fJvtSelectionTool");
    +    ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JetContainer", m_outContainerName) );
    +    ATH_CHECK( m_jetfJvtSelectionTool.setProperty("WorkingPoint", m_WorkingPointfJVT) );
    +    ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JvtMomentName", "DFCommonJets_fJvt") );
    +    ATH_CHECK( m_jetfJvtSelectionTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetfJvtSelectionTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetfJvtSelectionTool);
    +
    +    // initialize jet fJvt efficiency tool (scale factors)
    +    m_jetfJvtEfficiencyTool.setTypeAndName("CP::FJvtEfficiencyTool/fJvtEfficiencyTool");
    +    ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("JetContainer", m_outContainerName) );
    +    ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("WorkingPoint", m_WorkingPointfJVT) );
    +    ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("SFFile", m_SFFilefJVT) );
    +    ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("OutputLevel", msg().level()) );
    +    ATH_CHECK( m_jetfJvtEfficiencyTool.retrieve() );
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_jetfJvtEfficiencyTool);
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    m_outputSystNamesfJVT = m_outputSystNamesfJVT + "_fJVT_" + m_WorkingPointfJVT;
    +    //  Create a passed label for JVT cut
    +    m_outputfJVTPassed = m_outputfJVTPassed + "_" + m_WorkingPointfJVT;
    +
    +    CP::SystematicSet affectSystsfJVT = m_jetfJvtEfficiencyTool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsfJVT ) { ANA_MSG_DEBUG("FJvtSelectionTool can be affected by fJVT efficiency systematic: " << syst_it.name()); }
    +
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +
    +    const CP::SystematicSet recSystsfJVT = m_jetfJvtEfficiencyTool->recommendedSystematics();
    +    m_systListfJVT = HelperFunctions::getListofSystematics( recSystsfJVT, m_systNamefJVT, m_systValfJVT, msg() );
    +
    +    ANA_MSG_INFO("Will be using FJvtEfficiencyTool tool fJvt efficiency systematic:");
    +    for ( const auto& syst_it : m_systListfJVT ) {
    +      if ( m_systNamefJVT.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systListJVT, m_outputSystNamesJVT, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListfJVT, m_outputSystNamesfJVT, fileMD);
    +  }
    +
    +  ANA_MSG_DEBUG( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +
    +  // **************************************
    +  //
    +  // Initialise Trig::MatchingTool
    +  //
    +  // **************************************
    +  if( !( m_singleJetTrigChains.empty() && m_diJetTrigChains.empty() ) ) {
    +
    +    if( !isPHYS() ) {
    +      // Grab the TrigDecTool from the ToolStore
    +      if(!m_trigDecTool_handle.isUserConfigured()){
    +        ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_CHECK( m_trigDecTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +
    +      ANA_CHECK( m_scoreTool.retrieve());
    +
    +      //  everything went fine, let's initialise the tool!
    +      m_trigJetMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchingTool/MatchingTool");
    +      ANA_CHECK( m_trigJetMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +      ANA_CHECK( m_trigJetMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +      ANA_CHECK( m_trigJetMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigJetMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigJetMatchTool_handle);
    +    } else { // For DAOD_PHYS samples
    +      m_trigJetMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchFromCompositeTool/MatchFromCompositeTool");
    +      ANA_CHECK( m_trigJetMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigJetMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigJetMatchTool_handle);
    +    }
    +
    +  } else {
    +
    +    m_doTrigMatch = false;
    +
    +    ANA_MSG_WARNING("***********************************************************");
    +    ANA_MSG_WARNING( "Will not perform any jet trigger matching at this stage b/c :");
    +    ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore");
    +    ANA_MSG_WARNING("\t AND/OR");
    +    ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty");
    +    ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!");
    +    ANA_MSG_WARNING("***********************************************************");
    +  }
    +
    +  // Check MC cleaning option
    +  if ( m_doMCCleaning && (m_mcCleaningCut < 1.0) ) {
    +    ANA_MSG_WARNING("***********************************************************");
    +    ANA_MSG_WARNING( "(MC-only) pileup overlay event cleaning has been set :" );
    +    ANA_MSG_WARNING( "\t reconstructed jet avg(pT1,pT2) > x*(truth jet pT1), x = " << m_mcCleaningCut );
    +    ANA_MSG_WARNING( "As the specified cut < 1.0 is not the intended use of this procedure, will be reset to default = 1.4!" );
    +    ANA_MSG_WARNING("***********************************************************");
    +    m_mcCleaningCut = 1.4;
    +  }
    +
    +  ANA_MSG_DEBUG( "JetSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Jet Selection... " << m_name);
    +
    +  // retrieve event
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  float mcEvtWeight(1.0);
    +  if(eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ) ){
    +    static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +    if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +      ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +  }
    +
    +  m_numEvent++;
    +
    +  // QUESTION: why this must be done in execute(), and does not work in initialize()?
    +  //
    +  if ( m_numEvent == 1 && m_trigJetMatchTool_handle.isInitialized() ) {
    +
    +    // parse input jet trigger chain list, split by comma and fill vector
    +    //
    +    std::string singlejet_trig;
    +    std::istringstream ss_singlejet_trig(m_singleJetTrigChains);
    +
    +    while ( std::getline(ss_singlejet_trig, singlejet_trig, ',') ) {
    +    m_singleJetTrigChainsList.push_back(singlejet_trig);
    +    }
    +
    +    std::string dijet_trig;
    +    std::istringstream ss_dijet_trig(m_diJetTrigChains);
    +
    +    while ( std::getline(ss_dijet_trig, dijet_trig, ',') ) {
    +    m_diJetTrigChainsList.push_back(dijet_trig);
    +    }
    +
    +    ANA_MSG_INFO( "Input single jet trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_singleJetTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +    ANA_MSG_INFO( "Input di-jet trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_diJetTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +  }
    +
    +  // did any collection pass the cuts?
    +  bool pass(false);
    +  bool count(true); // count for the 1st collection in the container - could be better as
    +                    // shoudl only count for the nominal
    +  const xAOD::JetContainer* inJets(nullptr);
    +
    +  const xAOD::JetContainer *truthJets = nullptr;
    +  if ( isMC() && (m_doJVT || m_dofJVT || m_doMCCleaning ) && m_haveTruthJets) ANA_CHECK( HelperFunctions::retrieve(truthJets, m_truthJetContainer, m_event, m_store, msg()) );
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  if ( m_inputAlgo.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // Check against pile-up only jets:
    +    if ( isMC() && m_doMCCleaning && m_haveTruthJets ){
    +      float pTAvg = (inJets->size() > 0) ? inJets->at(0)->pt() : 0;
    +      if ( inJets->size() > 1 ) pTAvg = ( inJets->at(0)->pt() + inJets->at(1)->pt() ) / 2.0;
    +      if( truthJets->size() == 0 || ( pTAvg / truthJets->at(0)->pt() ) > m_mcCleaningCut ) {
    +        ANA_MSG_DEBUG("Failed MC cleaning, skipping event");
    +        wk()->skipEvent();
    +      }
    +    }
    +
    +    pass = executeSelection( inJets, mcEvtWeight, count, m_outContainerName, true );
    +
    +  }  else { // get the list of systematics to run over
    +
    +    // get vector of string giving the names
    +    std::vector<std::string>* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) );
    +
    +    // loop over systematics
    +    auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +    bool passOne(false);
    +    bool passMCcleaning(true);
    +    for ( auto systName : *systNames ) {
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName+systName, m_event, m_store, msg()) );
    +
    +      // Check against pile-up only jets (if nominal do not pass the selection then throw the event for all systs too)
    +      if ( isMC() && m_doMCCleaning && m_haveTruthJets && systName.empty() ){
    +        float pTAvg = (inJets->size() > 0) ? inJets->at(0)->pt() : 0;
    +        if ( inJets->size() > 1 ) pTAvg = ( inJets->at(0)->pt() + inJets->at(1)->pt() ) / 2.0;
    +        if( truthJets->size() == 0 || ( pTAvg / truthJets->at(0)->pt() ) > m_mcCleaningCut ) {
    +          passMCcleaning = false;
    +        }
    +      }
    +
    +      passOne = executeSelection( inJets, mcEvtWeight, count, m_outContainerName+systName, systName.empty() );
    +      if ( count ) { count = false; } // only count for 1 collection
    +      // save the string if passing the selection
    +      if ( passOne ) {
    +        vecOutContainerNames->push_back( systName );
    +      }
    +      // the final decision - if at least one passes keep going!
    +      pass = pass || passOne;
    +      pass = (passMCcleaning) ? pass : false; // if nominal do not pass MC cleaning then event should be skip for all systs
    +    }
    +
    +    // save list of systs that should be considered down stream
    +    ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgo));
    +    //delete vecOutContainerNames;
    +
    +  }
    +
    +  // look what we have in TStore
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if ( !pass ) {
    +    wk()->skipEvent();
    +  }
    +
    +  ANA_MSG_DEBUG( "Leave Jet Selection... ");
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool JetSelector :: executeSelection ( const xAOD::JetContainer* inJets,
    +    float mcEvtWeight,
    +    bool count,
    +    std::string outContainerName,
    +    bool isNominal
    +    )
    +{
    +  ANA_MSG_DEBUG("in executeSelection... " << m_name);
    +
    +  // create output container (if requested)
    +  ConstDataVector<xAOD::JetContainer>* selectedJets(nullptr);
    +  if ( m_createSelectedContainer ) {
    +    selectedJets = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +  }
    +
    +  // if doing JVF or JVT get PV location
    +  if ( m_doJVF ) {
    +    const xAOD::VertexContainer* vertices(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +    m_pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices, msg() );
    +  }
    +
    +  int nPass(0); int nObj(0);
    +  bool passEventClean(true);
    +
    +  static SG::AuxElement::Accessor< int > isCleanAcc("cleanJet");
    +
    +  //
    +  // This cannot be static as multiple instance of Jet Selector would
    +  //   then share the same passSelDecor, including the m_decor name
    +  //
    +  SG::AuxElement::Decorator< char > passSelDecor( m_decor );
    +
    +
    +  // identify duplicates
    +  std::vector<int> badIndices;
    +  badIndices.clear();
    +  int i_jet = 0;
    +  if(m_removeDuplicates) {
    +    ANA_MSG_DEBUG("removing duplicates");
    +
    +    // fill pairs with jet eta and index
    +    std::vector< std::pair<float, int> > etaPairs;
    +    ANA_MSG_DEBUG("All jets:");
    +    i_jet = 0;
    +    for ( auto jet_itr : *inJets ) {
    +      ANA_MSG_DEBUG( "  jet " << i_jet << ": " << jet_itr->pt() << ", " <<  jet_itr->eta() << ", " << jet_itr->phi() );
    +      etaPairs.push_back( std::make_pair(jet_itr->eta(), i_jet) );
    +      i_jet++;
    +    }
    +
    +    // sort pairs by eta
    +    sort(etaPairs.begin(), etaPairs.end());
    +
    +    bool allChecked = false;
    +    if(int(etaPairs.size())<=1) allChecked = true;
    +    while(!allChecked) {
    +      for(int i_etaPair=1; i_etaPair < int(etaPairs.size()); i_etaPair++) { // start with second jet
    +
    +        // if i and i-1 have identical etas then remove i, and add the relevant index to badIndices
    +        if(etaPairs[i_etaPair].first == etaPairs[i_etaPair-1].first) {
    +          badIndices.push_back(etaPairs[i_etaPair].second);
    +          etaPairs.erase(etaPairs.begin()+i_etaPair);
    +          break;
    +        }
    +
    +        // if made it to the end with no duplicates, then we're done
    +        if(i_etaPair==int(etaPairs.size())-1)
    +          allChecked = true;
    +      }
    +    }
    +
    +    ANA_MSG_DEBUG( "duplicates removed:" );
    +    i_jet = 0;
    +    for ( auto jet_itr : *inJets ) {
    +      if(std::find(badIndices.begin(), badIndices.end(), i_jet) != badIndices.end()) {
    +        continue;
    +      }
    +      ANA_MSG_DEBUG( "  jet " << i_jet << ": " << jet_itr->pt() << ", " <<  jet_itr->eta() << ", " << jet_itr->phi() );
    +      i_jet++;
    +    }
    +    if(!badIndices.empty())
    +      m_count_events_with_duplicates++;
    +  }
    +
    +  // add isHS labels to jets (required for Jvt efficiency tools)
    +  if (m_doTruthJetTagging && isMC()) {
    +    ATH_CHECK(m_jetPileupLabelingTool->decorate(*inJets));
    +  }
    +
    +  // recalculate the NNJvt scores and decisions
    +  if (m_doJVT && m_recalculateJvtScores) {
    +    ATH_CHECK(m_jetNNJvtMomentTool->decorate(*inJets));
    +  }
    +
    +  i_jet = 0;
    +
    +  for ( auto jet_itr : *inJets ) { // duplicated of basic loop
    +
    +    // removing of duplicates
    +    if(m_removeDuplicates) {
    +      if(!badIndices.empty()) {
    +        if(std::find(badIndices.begin(), badIndices.end(), i_jet) != badIndices.end()) {
    +          continue;
    +        }
    +      }
    +      i_jet++;
    +    }
    +
    +    // if only looking at a subset of jets make sure all are decorated
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *jet_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    // All selections but Cleaning
    +    int passSel = this->PassCuts( jet_itr );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *jet_itr ) = passSel;
    +    }
    +
    +    // Cleaning Selection must come after kinematic and JVT selections
    +    if ( m_cleanJets && passSel && isCleanAcc.isAvailable( *jet_itr ) ) {
    +      if( !isCleanAcc( *jet_itr ) ) {
    +        passSel = false;
    +        if ( m_decorateSelectedObjects )
    +          passSelDecor( *jet_itr ) = passSel;
    +
    +        // If any of the passing jets fail the recommendation is to remove the jet (and MET is wrong)
    +        // If any of the N leading jets are not clean the event should be removed
    +        if( m_markCleanEvent || m_cleanEvent || nObj <= m_cleanEvtLeadJets ){
    +          passEventClean = false;
    +          ANA_MSG_DEBUG("Remove event due to bad jet with pt " << jet_itr->pt() );
    +        }// if cleaning the event
    +
    +      }// if jet is not clean
    +    }// if jet clean aux missing
    +    if( m_useCutFlow && passSel )
    +      m_jet_cutflowHist_1->Fill( m_jet_cutflow_cleaning_cut, 1 );
    +
    +
    +
    +    if ( passSel ) {
    +      ANA_MSG_DEBUG("passSel");
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedJets->push_back( jet_itr );
    +      }
    +    }
    +  }
    +
    +  // decorator with flag if it is a hard-scatter jet
    +  static const SG::AuxElement::Decorator<char> isJvtHS("isJvtHS");
    +
    +  // Loop over selected jets and decorate with JVT efficiency SF
    +  // Do it only for MC
    +  //
    +  if ( isMC() && !m_haveTruthJets && m_getJVTSF && m_doJVT) {
    +    ANA_MSG_ERROR("Truth jets are needed to retrieve JVT SFs (set m_haveTruthJets to True to retrieve SFs OR set m_getJVTSF to False not to retrieve SFs");
    +    return EL::StatusCode::FAILURE;
    +  }
    +  if ( isMC() && m_doJVT) {
    +
    +    auto sysVariationNamesJVT = std::make_unique< std::vector< std::string > >();
    +
    +    // Do it only if a tool with *this* name hasn't already been used
    +    //
    +    if ( m_jetNNJvtSelectionTool.isInitialized() && !m_jvtUsedBefore) {
    +      //
    +      //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* jet)
    +      //
    +      static const SG::AuxElement::Decorator< std::vector<float> > dec_sfJVT( m_outputSystNamesJVT );
    +
    +      // Create the name of the SF weight to be recorded
    +      //   template:  SYSNAME_JVTEff_SF
    +      //   Only need to do it once per call of executeSelection()
    +      for ( const auto& syst_it : m_systListJVT ) {
    +    std::string sfName = "JVTEff_SF_" + m_WorkingPointJVT;
    +    if ( !syst_it.name().empty() ) {
    +      std::string prepend = syst_it.name() + "_";
    +      sfName.insert( 0, prepend );
    +    }
    +    ANA_MSG_DEBUG("JVT SF sys name (to be recorded in xAOD::TStore) is: " << sfName);
    +    sysVariationNamesJVT->push_back(sfName);
    +      }
    +
    +      unsigned int idx(0);
    +      for ( auto jet : *(selectedJets) ) {
    +    // Create Scale Factor aux for all jets
    +    std::vector<float > sfVecJVT;
    +
    +    for ( const auto& syst_it : m_systListJVT ) {
    +      // we do not need all SF for non-nominal trees
    +      if ( !syst_it.name().empty() && !isNominal )
    +        continue;
    +
    +      // apply syst
    +
    +      if ( m_jetNNJvtEfficiencyTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR( "Failed to configure CP::NNJvtEfficiencyTool for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG("Successfully applied systematic: " << syst_it.name());
    +
    +      // and now apply JVT SF!
    +      //
    +          ANA_MSG_DEBUG("Applying JVT SF" );
    +
    +          // create passed JVT decorator
    +          static const SG::AuxElement::Decorator<char> passedJVT( m_outputJVTPassed );
    +          if ( syst_it.name().empty() ) {
    +            passedJVT( *jet ) = 1; // passes by default
    +          }
    +          // obtain JVT SF as a float (to be stored away separately)
    +          float jvtSF(1.0);
    +          CP::CorrectionCode result_code;
    +          // If we do not enforce JVT veto and the jet hasn't passed the JVT cut, we need to calculate the inefficiency scale factor for it
    +          if ( m_noJVTVeto && !bool(m_jetNNJvtSelectionTool->accept(jet)) ) {
    +            if ( syst_it.name().empty() ) {
    +              passedJVT( *jet ) = 0; // mark as not passed
    +            }
    +            if ( m_getJVTSF ){
    +              result_code = m_jetNNJvtEfficiencyTool->getInefficiencyScaleFactor( *jet, jvtSF );
    +              if (result_code == CP::CorrectionCode::OutOfValidityRange) {
    +                  jvtSF = 1;
    +              } else if (result_code != CP::CorrectionCode::Ok and result_code != CP::CorrectionCode::OutOfValidityRange) {
    +                  ANA_MSG_ERROR( "Error in JNNJvtEfficiencyTool getInefficiencyScaleFactor");
    +                  return EL::StatusCode::FAILURE;
    +              }
    +            }
    +          } else { // otherwise classic efficiency scale factor
    +            if ( syst_it.name().empty() ) {
    +              passedJVT( *jet ) = 1;
    +            }
    +            if ( m_getJVTSF ){
    +              result_code = m_jetNNJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, jvtSF );
    +              if (result_code == CP::CorrectionCode::OutOfValidityRange) {
    +                  jvtSF = 1;
    +              } else if (result_code != CP::CorrectionCode::Ok and result_code != CP::CorrectionCode::OutOfValidityRange) {
    +                  ANA_MSG_ERROR( "Error in NNJvtEfficiencyTool getEfficiencyScaleFactor");
    +                  return EL::StatusCode::FAILURE;
    +              }
    +            }
    +          }
    +          sfVecJVT.push_back(jvtSF);
    +
    +          ANA_MSG_DEBUG( "===>>>");
    +          ANA_MSG_DEBUG( "Jet " << idx << ", pt = " << jet->pt()*1e-3 << " GeV, |eta| = " << std::fabs(jet->eta()) << " isJvtHS " << bool(isJvtHS(*jet)) );
    +          ANA_MSG_DEBUG( "JVT SF decoration: " << m_outputSystNamesJVT );
    +          ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +          ANA_MSG_DEBUG( "JVT SF:");
    +          ANA_MSG_DEBUG( "\t " << jvtSF << " (from getEfficiencyScaleFactor())" );
    +          ANA_MSG_DEBUG( "--------------------------------------");
    +    }
    +    ++idx;
    +    //
    +    // Add it to decoration vector
    +    //
    +    dec_sfJVT( *jet ) = sfVecJVT;
    +      }
    +    }
    +
    +    // Add list of JVT systematics names to TStore
    +    //
    +    // NB: we need to make sure that this is not pushed more than once in TStore!
    +    // This will be the case when this executeSelection() function gets called for every syst varied input container,
    +    // e.g. the different SC containers w/ calibration systematics upstream.
    +    //
    +    if ( !m_store->contains<std::vector<std::string> >(m_outputSystNamesJVT) ) { ANA_CHECK( m_store->record( std::move(sysVariationNamesJVT), m_outputSystNamesJVT)); }
    +  } else if ( !isMC() && m_doJVT ) {
    +    // Loop over selected jets and decorate with JVT passed status
    +    for ( auto jet : *(selectedJets) ) {
    +      // create passed JVT decorator
    +      static const SG::AuxElement::Decorator<char> passedJVT( m_outputJVTPassed );
    +      passedJVT( *jet ) = 1; // passes by default
    +
    +      if ( m_noJVTVeto && !bool(m_jetNNJvtSelectionTool->accept(jet)) ) {
    +        passedJVT( *jet ) = 0; // mark as not passed
    +      } else {
    +        passedJVT( *jet ) = 1;
    +      }
    +    }
    +  }
    +
    +  // Loop over selected jets and decorate with fJVT efficiency SF
    +  // Do it only for MC
    +  //
    +  if ( isMC() && m_dofJVT ) {
    +
    +    auto sysVariationNamesfJVT = std::make_unique< std::vector< std::string > >();
    +
    +    // Do it only if a tool with *this* name hasn't already been used
    +    //
    +    if (m_jetfJvtEfficiencyTool.isInitialized() && !m_fjvtUsedBefore)
    +    {
    +      //
    +      //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* jet)
    +      //
    +      static const SG::AuxElement::Decorator<std::vector<float>> dec_sffJVT(m_outputSystNamesfJVT);
    +
    +      // Create the name of the SF weight to be recorded
    +      //   template:  SYSNAME_fJVTEff_SF
    +      //   Only need to do it once per call of executeSelection()
    +      for (const auto &syst_it : m_systListfJVT)
    +      {
    +        std::string sfName = "fJVTEff_SF";
    +        if (!syst_it.name().empty())
    +        {
    +          std::string prepend = syst_it.name() + "_";
    +          sfName.insert(0, prepend);
    +        }
    +        ANA_MSG_DEBUG("fJVT SF sys name (to be recorded in xAOD::TStore) is: " << sfName);
    +        sysVariationNamesfJVT->push_back(sfName);
    +      }
    +
    +      unsigned int idx(0);
    +      for (auto jet : *(selectedJets))
    +      {
    +        // Create Scale Factor aux for all jets
    +        std::vector<float> sfVecfJVT;
    +
    +        for (const auto &syst_it : m_systListfJVT)
    +        {
    +          // we do not need all SF for non-nominal trees
    +          if (!syst_it.name().empty() && !isNominal)
    +            continue;
    +
    +          // apply syst
    +          //
    +          if (m_jetfJvtEfficiencyTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS)
    +          {
    +            ANA_MSG_ERROR("Failed to configure CP::FJvtEfficiencyTool for systematic " << syst_it.name());
    +            return EL::StatusCode::FAILURE;
    +          }
    +          ANA_MSG_DEBUG("Successfully applied systematic: " << syst_it.name());
    +
    +          // and now apply fJVT SF!
    +          //
    +          ANA_MSG_DEBUG("Applying fJVT SF");
    +
    +          static const SG::AuxElement::Decorator<char> passedfJVT(m_outputfJVTPassed);
    +          if (syst_it.name().empty())
    +          {
    +            passedfJVT(*jet) = bool(m_jetfJvtSelectionTool->accept(jet));
    +          }
    +
    +          float fjvtSF(1.0);
    +          CP::CorrectionCode result_code;
    +          // If we do not enforce JVT veto and the jet hasn't passed the JVT cut, we need to calculate the inefficiency scale factor for it
    +          if ( !m_dofJVTVeto && !bool(m_jetfJvtSelectionTool->accept(jet)) ) {
    +            result_code = m_jetfJvtEfficiencyTool->getInefficiencyScaleFactor( *jet, fjvtSF );
    +            if ( result_code == CP::CorrectionCode::OutOfValidityRange) {
    +                fjvtSF = 1;
    +            } else if ( result_code != CP::CorrectionCode::Ok ) {
    +              ANA_MSG_ERROR( "Error in fJVT Tool getInefficiencyScaleFactor");
    +              return EL::StatusCode::FAILURE;
    +            }
    +          } else { // otherwise classic efficiency scale factor
    +            result_code = m_jetfJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, fjvtSF );
    +            if ( result_code == CP::CorrectionCode::OutOfValidityRange) {
    +                fjvtSF = 1;
    +            } else if ( m_jetfJvtEfficiencyTool->getEfficiencyScaleFactor( *jet, fjvtSF ) != CP::CorrectionCode::Ok ) {
    +              ANA_MSG_ERROR( "Error in fJVT Tool getEfficiencyScaleFactor");
    +              return EL::StatusCode::FAILURE;
    +            }
    +          }
    +          sfVecfJVT.push_back(fjvtSF);
    +
    +          ANA_MSG_DEBUG("===>>>");
    +          ANA_MSG_DEBUG("Jet " << idx << ", pt = " << jet->pt() * 1e-3 << " GeV, |eta| = " << std::fabs(jet->eta()) << " isJvtHS " << bool(isJvtHS(*jet)) );
    +          ANA_MSG_DEBUG("fJVT SF decoration: " << m_outputSystNamesfJVT);
    +          ANA_MSG_DEBUG("Systematic: " << syst_it.name());
    +          ANA_MSG_DEBUG("fJVT SF:");
    +          ANA_MSG_DEBUG("\t " << fjvtSF << " (from getEfficiencyScaleFactor())");
    +          ANA_MSG_DEBUG("--------------------------------------");
    +        }
    +        ++idx;
    +        //
    +        // Add it to decoration vector
    +        //
    +        dec_sffJVT(*jet) = sfVecfJVT;
    +      }
    +
    +      // Add list of fJVT systematics names to TStore
    +      //
    +      // NB: we need to make sure that this is not pushed more than once in TStore!
    +      // This will be the case when this executeSelection() function gets called for every syst varied input container,
    +      // e.g. the different SC containers w/ calibration systematics upstream.
    +      //
    +      if (!m_store->contains<std::vector<std::string>>(m_outputSystNamesfJVT))
    +      {
    +        ANA_CHECK(m_store->record(std::move(sysVariationNamesfJVT), m_outputSystNamesfJVT));
    +      }
    +    }
    +    else if (!isMC() && m_dofJVT)
    +    {
    +      // Loop over selected jets and decorate with fJVT passed status
    +      for (auto jet : *(selectedJets))
    +      {
    +        // create passed fJVT decorator
    +        static const SG::AuxElement::Decorator<char> passedfJVT(m_outputfJVTPassed);
    +        passedfJVT(*jet) = bool(m_jetfJvtSelectionTool->accept(jet));
    +      }
    +    }
    +  }
    +
    +  // add ConstDataVector to TStore
    +  if ( m_createSelectedContainer ) {
    +    ANA_CHECK( m_store->record( selectedJets, outContainerName ));
    +  }
    +
    +  if ( count ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  //
    +  //  Mark Event as pass/fail cleaning for nominal selection
    +  //
    +  if ( m_markCleanEvent && count ) {
    +    ANA_MSG_DEBUG("Marking Clean");
    +    // Decorator
    +    SG::AuxElement::Decorator< char > isCleanEventDecor( "cleanEvent_"+m_name );
    +    const xAOD::EventInfo* eventInfo(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +    isCleanEventDecor(*eventInfo) = passEventClean;
    +  }
    +
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  if ( m_cleanEvent && !passEventClean ) { return false; }
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    return false;
    +  }
    +
    +  if ( count ) {
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +  // Perform trigger matching on the "good" (selected) jets
    +  //
    +  // NB: this part will be skipped if:
    +  //
    +  //  1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!)
    +  //  2. there are no selected jets in the event
    +  //
    +  if ( m_doTrigMatch && selectedJets ) {
    +
    +    unsigned int nSelectedJets = selectedJets->size();
    +
    +    static SG::AuxElement::Decorator< std::map<std::string,char> > isTrigMatchedMapJetDecor( "isTrigMatchedMapJet" );
    +
    +    if ( nSelectedJets > 0 ) {
    +
    +      ANA_MSG_DEBUG( "Doing single jet trigger matching...");
    +
    +      for ( auto const &chain : m_singleJetTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        for ( auto const jet : *selectedJets ) {
    +
    +          //  For each jet, decorate w/ a map<string,char> with the 'isMatched' info associated
    +          //  to each trigger chain in the input list.
    +          //  If decoration map doesn't exist for this jet yet, create it (will be done only for the 1st iteration on the chain names)
    +          //
    +          if ( !isTrigMatchedMapJetDecor.isAvailable( *jet ) ) {
    +            isTrigMatchedMapJetDecor( *jet ) = std::map<std::string,char>();
    +          }
    +
    +          // check whether the pair is matched (NOTE: no DR is needed for jets)
    +          //
    +          char matched = ( m_trigJetMatchTool_handle->match( *jet, chain ) );
    +
    +          ANA_MSG_DEBUG( "\t\t is jet trigger matched? " << matched);
    +
    +          ( isTrigMatchedMapJetDecor( *jet ) )[chain] = matched;
    +        }
    +      }
    +
    +    }
    +
    +    // If checking dijet trigger, form jet pairs and test matching for each one.
    +    // Save a:
    +    //
    +    // multimap< chain, pair< pair<idx_i, idx_j>, ismatched > >
    +    //
    +    // as *event* decoration to store which
    +    // pairs are matched (to a given chain) and which aren't.
    +    // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trijet events.
    +    //
    +    // By retrieving this map later on, user can decide what to do with the event
    +    // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain)
    +
    +    if ( nSelectedJets > 1 && !m_diJetTrigChains.empty() ) {
    +
    +      ANA_MSG_DEBUG( "Doing di-jet trigger matching...");
    +
    +      const xAOD::EventInfo* eventInfo(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +      typedef std::pair< std::pair<unsigned int,unsigned int>, char> dijet_trigmatch_pair;
    +      typedef std::multimap< std::string, dijet_trigmatch_pair >    dijet_trigmatch_pair_map;
    +      static SG::AuxElement::Decorator< dijet_trigmatch_pair_map >  diJetTrigMatchPairMapDecor( "diJetTrigMatchPairMap" );
    +
    +      for ( auto const &chain : m_diJetTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        //  If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names)
    +        //
    +        if ( !diJetTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) {
    +          diJetTrigMatchPairMapDecor( *eventInfo ) = dijet_trigmatch_pair_map();
    +        }
    +
    +        std::vector<const xAOD::IParticle*> myJets;
    +
    +        for ( unsigned int imu = 0; imu < selectedJets->size()-1; ++imu ) {
    +
    +          for ( unsigned int jmu = imu+1; jmu < selectedJets->size(); ++jmu ) {
    +
    +            // test a new pair
    +            //
    +            myJets.clear();
    +            myJets.push_back( selectedJets->at(imu) );
    +            myJets.push_back( selectedJets->at(jmu) );
    +
    +            // check whether the pair is matched (NOTE: no DR is needed for jets)
    +            //
    +            char matched = m_trigJetMatchTool_handle->match( myJets, chain );
    +
    +            ANA_MSG_DEBUG( "\t\t is the jet pair ("<<imu<<","<<jmu<<") trigger matched? " << matched);
    +
    +            // set basic matching information
    +            ( isTrigMatchedMapJetDecor( *myJets[0] ) )[chain] = matched;
    +            ( isTrigMatchedMapJetDecor( *myJets[1] ) )[chain] = matched;
    +
    +            // set pair decision information
    +            std::pair <unsigned int, unsigned int>  chain_idxs = std::make_pair(imu,jmu);
    +            dijet_trigmatch_pair  chain_decision = std::make_pair(chain_idxs,matched);
    +            diJetTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dijet_trigmatch_pair >(chain,chain_decision) );
    +
    +          }
    +        }
    +      } //for m_diJetTrigChainsList
    +    } //if nSelectedJets > 1 && !m_diJetTrigChains.empty()
    +  } //if m_doTrigMatch && selectedJets
    +
    +  if(m_sort) {
    +    std::sort( selectedJets->begin(), selectedJets->end(), HelperFunctions::sort_pt );
    +  }
    +
    +  ANA_MSG_DEBUG("leave executeSelection... ");
    +  return true;
    +}
    +
    +
    +EL::StatusCode JetSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_DEBUG( m_name );
    +
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_DEBUG( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  if(m_removeDuplicates) {
    +    ANA_MSG_INFO("removed duplicate " << m_inContainerName << " from " << m_count_events_with_duplicates << " events");
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode JetSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_DEBUG( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int JetSelector :: PassCuts( const xAOD::Jet* jet ) {
    +  ANA_MSG_DEBUG("In pass cuts");
    +
    +  double jetPt       = 0;
    +  double jetET       = 0;
    +  double jetEta      = 0;
    +  double jetPhi      = 0;
    +  double jetM        = 0;
    +  double jetRapidity = 0;
    +  if(m_jetScale4Selection=="Final"){ // default
    +    jetPt       = jet->pt();
    +    jetET       = jet->p4().Et();
    +    jetEta      = jet->eta();
    +    jetPhi      = jet->phi();
    +    jetM        = jet->m();
    +    jetRapidity = jet->rapidity();
    +  } else { // retrieve chosen jet momentum scale
    +    xAOD::JetFourMom_t tmp;
    +    if(!jet->getAttribute<xAOD::JetFourMom_t>(m_jetScale4Selection.c_str(),tmp)){
    +      ATH_MSG_ERROR("Jet does not have the requested momentum state: " << m_jetScale4Selection);
    +      return 0;
    +    } else {
    +      jetPt       = jet->jetP4(m_jetScale4Selection.c_str()).Pt();
    +      jetET       = jet->jetP4(m_jetScale4Selection.c_str()).Et();
    +      jetEta      = jet->jetP4(m_jetScale4Selection.c_str()).Eta();
    +      jetPhi      = jet->jetP4(m_jetScale4Selection.c_str()).Phi();
    +      jetM        = jet->jetP4(m_jetScale4Selection.c_str()).M();
    +      jetRapidity = jet->jetP4(m_jetScale4Selection.c_str()).Rapidity();
    +    }
    +  }
    +
    +  // fill cutflow bin 'all' before any cut
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_all, 1 );
    +
    +  // pT
    +  if ( m_pT_max != 1e8 ) {
    +    if ( jetPt > m_pT_max ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_ptmax_cut, 1 );
    +
    +  if ( m_pT_min != 1e8 ) {
    +    if ( jetPt < m_pT_min ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_ptmin_cut, 1 );
    +
    +  // ET
    +  if ( m_ET_max != 1e8 ) {
    +    if ( jetET > m_ET_max ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_etmax_cut, 1 );
    +
    +  if ( m_ET_min != 1e8 ) {
    +    if ( jetET < m_ET_min ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_etmin_cut, 1 );
    +
    +  // eta
    +  if ( m_eta_max != 1e8 ) {
    +    if ( fabs(jetEta) > m_eta_max ) { return 0; }
    +  }
    +  if ( m_eta_min != 1e8 ) {
    +    if ( fabs(jetEta) < m_eta_min ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_eta_cut, 1 );
    +
    +  // detEta
    +  if ( m_detEta_max != 1e8 ) {
    +    if ( fabs( ( jet->getAttribute<xAOD::JetFourMom_t>(m_jetScaleType.c_str()) ).eta() ) > m_detEta_max ) { return 0; }
    +  }
    +  if ( m_detEta_min != 1e8 ) {
    +    if ( fabs( ( jet->getAttribute<xAOD::JetFourMom_t>(m_jetScaleType.c_str()) ).eta() ) < m_detEta_min ) { return 0; }
    +  }
    +
    +  // mass
    +  if ( m_mass_max != 1e8 ) {
    +    if ( jetM > m_mass_max ) { return 0; }
    +  }
    +  if ( m_mass_min != 1e8 ) {
    +    if ( jetM < m_mass_min ) { return 0; }
    +  }
    +
    +  // rapidity
    +  if ( m_rapidity_max != 1e8 ) {
    +    if ( jetRapidity > m_rapidity_max ) { return 0; }
    +  }
    +  if ( m_rapidity_min != 1e8 ) {
    +    if ( jetRapidity < m_rapidity_min ) { return 0; }
    +  }
    +
    +  // JVF pileup cut
    +  if ( m_doJVF ){
    +    ANA_MSG_DEBUG("Doing JVF");
    +    ANA_MSG_DEBUG("Jet Pt " << jetPt);
    +    if ( jetPt < m_pt_max_JVF ) {
    +      xAOD::JetFourMom_t jetScaleP4 = jet->getAttribute< xAOD::JetFourMom_t >( m_jetScaleType.c_str() );
    +      if ( fabs(jetScaleP4.eta()) < m_eta_max_JVF ){
    +        if ( m_pvLocation < 0 )
    +          return 0;
    +        if ( jet->getAttribute< std::vector<float> >( "JVF" ).at( m_pvLocation ) < m_JVFCut ) {
    +          return 0;
    +        }
    +      }
    +    }
    +  } // m_doJVF
    +
    +  if(m_dofJVT){
    +    if (!bool(m_jetfJvtSelectionTool->accept(jet))){
    +      ANA_MSG_DEBUG("jet pt = "<<jetPt<<",eta = "<<jetEta<<",phi = "<<jetPhi);
    +      ANA_MSG_DEBUG("Failed forward JVT");
    +      if(m_dofJVTVeto)return 0;
    +    }
    +    else if (TMath::Abs(jet->eta()>2.5) ) {
    +      ANA_MSG_DEBUG("jet pt = " << jetPt << ",eta = "<<jetEta<<",phi = "<<jetPhi);
    +      ANA_MSG_DEBUG("Passed forward JVT");
    +    }
    +
    +  }//do forward JVT
    +
    +  // JVT pileup cut
    +  if ( m_doJVT ) {
    +    bool result = false;
    +
    +    // if non-negative, the user wants to apply a custom jvt cut
    +    if( m_JVTCut > 0 ){
    +      // NB: origin-correction is applied at constituent level. Eta for Jvt needs to be the DetectorEta explicitly.
    +      float jet_eta = jet->getAttribute<float>("DetectorEta");
    +      float jet_jvt = jet->getAttribute<float>("NNJvt");
    +      ANA_MSG_DEBUG("Checking Jvt cut for jet pT=" << jetPt << " MeV, DetectorEta=" << jet_eta <<", and Jvt="<< jet_jvt );
    +      ANA_MSG_DEBUG("Custom JVT working point with pT<" << m_pt_max_JVT << ", |eta|<" << m_eta_max_JVT << ", Jvt<" << m_JVTCut);
    +      // JVT should only be applied at low pt and central eta. If outside this, result = true.
    +      if (jetPt < m_pt_max_JVT && std::fabs(jet_eta) < m_eta_max_JVT) {
    +        result = (jet_jvt > m_JVTCut);
    +      } else {
    +        result = true;
    +      }
    +    } else {
    +      result = bool(m_jetNNJvtSelectionTool->accept(jet));
    +    }
    +
    +    if(result) ANA_MSG_DEBUG(" ... jet passes Jvt cut");
    +    else       ANA_MSG_DEBUG(" ... jet does not pass Jvt cut");
    +    if ( !m_noJVTVeto && !result ) return 0;
    +  }
    +  if ( m_useCutFlow ) m_jet_cutflowHist_1->Fill( m_jet_cutflow_jvt_cut, 1 );
    +
    +  if ( m_doJetTimingCut ) {
    +    ANA_MSG_DEBUG("Doing Jet Timing cut");
    +    float jet_timing;
    +    if (jet->getAttribute("Timing", jet_timing)) {
    +      if ( std::fabs(jet_timing) > m_jetTiming_max) { return 0; }
    +      if ( m_useCutFlow ) m_jet_cutflowHist_1->Fill( m_jet_cutflow_timing_cut, 1 );
    +    } else {
    +      ANA_MSG_ERROR("Jet timing decoration doesn't exist for this jet collection!");
    +      return 0;
    +    }
    +  }
    +
    +  //
    +  //  BTagging
    +  //
    +  if ( m_doBTagCut ) {
    +    ANA_MSG_DEBUG("Doing BTagging");
    +    if ( m_BJetSelectTool_handle->accept( jet ) ) {
    +      if(m_useCutFlow) m_jet_cutflowHist_1->Fill( m_jet_cutflow_btag_cut, 1 );
    +    } else {
    +      return 0;
    +    }
    +  }
    +
    +
    +  //
    +  //  HLT BTagging
    +  //
    +  if ( m_doHLTBTagCut ) {
    +    const xAOD::BTagging *btag_info = jet->auxdata< const xAOD::BTagging* >("HLTBTag");
    +    double tagValue = -99;
    +    if(m_HLTBTagTaggerName=="COMB"){
    +      float wIP3D = btag_info->IP3D_loglikelihoodratio();
    +      float wSV1  = btag_info->SV1_loglikelihoodratio();
    +      tagValue = wIP3D + wSV1;
    +    }
    +
    +    if(tagValue < m_HLTBTagCutValue){return 0;}
    +  }
    +
    +  //
    +  // HLT Valid Vtx
    +  //
    +  if ( m_requireHLTVtx ) {
    +    const xAOD::Vertex *online_pvx   = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx");
    +    if(!online_pvx) {return 0;}
    +  }
    +
    +  if ( m_requireNoHLTVtx ) {
    +    const xAOD::Vertex *online_pvx   = jet->auxdata<const xAOD::Vertex*>("HLTBJetTracks_vtx");
    +    if(online_pvx) {return 0;}
    +  }
    +
    +
    +  //
    +  //  Pass Keys
    +  //
    +  for ( auto& passKey : m_passKeys ) {
    +    if ( !(jet->auxdata< char >(passKey) == '1') ) { return 0;}
    +  }
    +
    +  //
    +  //  Fail Keys
    +  //
    +  for ( auto& failKey : m_failKeys ){
    +    if ( !(jet->auxdata< char >(failKey) == '0') ) { return 0;}
    +  }
    +
    +  //
    +  //  Truth Label
    +  //
    +  if ( m_truthLabel != -1 ) {
    +    ANA_MSG_DEBUG("Doing Truth Label");
    +    int this_TruthLabel = 0;
    +
    +    static SG::AuxElement::ConstAccessor<int> HadronConeExclTruthLabelID ("HadronConeExclTruthLabelID");
    +    static SG::AuxElement::ConstAccessor<int> TruthLabelID ("TruthLabelID");
    +    static SG::AuxElement::ConstAccessor<int> PartonTruthLabelID ("PartonTruthLabelID");
    +
    +    if( m_useHadronConeExcl && HadronConeExclTruthLabelID.isAvailable( *jet) ){
    +      this_TruthLabel = HadronConeExclTruthLabelID(( *jet) );
    +    } else if ( TruthLabelID.isAvailable( *jet) ) {
    +      this_TruthLabel = TruthLabelID( *jet );
    +      if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0;
    +    } else {
    +      this_TruthLabel = PartonTruthLabelID( *jet );
    +      if (this_TruthLabel == 21 || this_TruthLabel<4) this_TruthLabel = 0;
    +    }
    +
    +    if ( this_TruthLabel == -1 ) {return 0;}
    +    if ( (m_truthLabel == 5) && this_TruthLabel != 5 ) { return 0;}
    +    if ( (m_truthLabel == 4) && this_TruthLabel != 4 ) { return 0;}
    +    if ( (m_truthLabel == 0) && this_TruthLabel != 0 ) { return 0;}
    +
    +  }
    +
    +  ANA_MSG_DEBUG("Passed Cuts");
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_L1JetContainer.cxx.html b/api/program_listing_file_Root_L1JetContainer.cxx.html new file mode 100644 index 0000000000..b7bbdae4cd --- /dev/null +++ b/api/program_listing_file_Root_L1JetContainer.cxx.html @@ -0,0 +1,290 @@ + + + + + + + + + + + Program Listing for File L1JetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File L1JetContainer.cxx

    +

    Return to documentation for file (Root/L1JetContainer.cxx)

    +
    #include "xAODAnaHelpers/L1JetContainer.h"
    +#include <iostream>
    +
    +using namespace xAH;
    +
    +L1JetContainer::L1JetContainer(const std::string& name, float units, bool mc)
    +  : ParticleContainer(name,"",units,mc)
    +{
    +  m_l1Jet_et                =new std::vector<float>();
    +  m_l1Jet_eta               =new std::vector<float>();
    +  m_l1Jet_phi               =new std::vector<float>();
    +}
    +
    +L1JetContainer::~L1JetContainer()
    +{
    +  if(m_debug) std::cout << " Deleting L1JetContainer "  << std::endl;
    +  delete m_l1Jet_et;
    +  delete m_l1Jet_eta;
    +  delete m_l1Jet_phi;
    +}
    +
    +void L1JetContainer::setTree(TTree *tree)
    +{
    +  ParticleContainer::setTree(tree);
    +  connectBranch<float>(tree,"et",&m_l1Jet_et);
    +  connectBranch<float>(tree,"eta",  &m_l1Jet_eta);
    +  connectBranch<float>(tree,"phi",  &m_l1Jet_phi);
    +}
    +
    +void L1JetContainer::updateParticle(uint idx, Jet& jet)
    +{
    +  ParticleContainer::updateParticle(idx,jet);
    +}
    +
    +void L1JetContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +  setBranch<float>(tree,"et",m_l1Jet_et); // et8x8 for the case of Legacy L1 jet RoIs
    +  setBranch<float>(tree,"eta",  m_l1Jet_eta);
    +  setBranch<float>(tree,"phi",  m_l1Jet_phi);
    +  return;
    +}
    +
    +void L1JetContainer::clear()
    +{
    +  ParticleContainer::clear();
    +  m_l1Jet_et->clear();
    +  m_l1Jet_eta  ->clear();
    +  m_l1Jet_phi  ->clear();
    +  return;
    +}
    +
    +void L1JetContainer::FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, bool sort){
    +  if(!sort) {
    +    for( auto jet_itr : *jets ) {
    +      m_l1Jet_et->push_back ( jet_itr->et8x8() / m_units );
    +      m_l1Jet_eta->push_back( jet_itr->eta() );
    +      m_l1Jet_phi->push_back( jet_itr->phi() );
    +    }
    +  } else {
    +    std::vector< std::vector<float> > vec;
    +    for( auto jet_itr : *jets ) {
    +      std::vector<float> row;
    +      row.clear();
    +      row.push_back(jet_itr->et8x8());
    +      row.push_back(jet_itr->eta());
    +      row.push_back(jet_itr->phi());
    +      vec.push_back(row);
    +    }
    +
    +    std::sort(vec.begin(), vec.end(), [&](const std::vector<float> a, const std::vector<float> b) { return a.at(0) < b.at(0);});
    +    for (int i = int(vec.size())-1; i >= 0; i--) {
    +      m_l1Jet_et->push_back((vec.at(i)).at(0) / m_units);
    +      m_l1Jet_eta->push_back((vec.at(i)).at(1));
    +      m_l1Jet_phi->push_back((vec.at(i)).at(2));
    +    }
    +    vec.clear();
    +  }
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_LinkDef.h.html b/api/program_listing_file_Root_LinkDef.h.html new file mode 100644 index 0000000000..0cdb487756 --- /dev/null +++ b/api/program_listing_file_Root_LinkDef.h.html @@ -0,0 +1,329 @@ + + + + + + + + + + + Program Listing for File LinkDef.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File LinkDef.h

    +

    Return to documentation for file (Root/LinkDef.h)

    +
    /* Algorithm Wrapper */
    +#include <xAODAnaHelpers/Algorithm.h>
    +
    +/* Event and Jet Selectors */
    +#include <xAODAnaHelpers/BasicEventSelection.h>
    +#include <xAODAnaHelpers/ElectronSelector.h>
    +#include <xAODAnaHelpers/PhotonSelector.h>
    +#include <xAODAnaHelpers/TauSelector.h>
    +#include <xAODAnaHelpers/JetSelector.h>
    +#include <xAODAnaHelpers/DebugTool.h>
    +#include <xAODAnaHelpers/TruthSelector.h>
    +#include <xAODAnaHelpers/TrackSelector.h>
    +#include <xAODAnaHelpers/MuonSelector.h>
    +
    +/* Calibrations */
    +#include <xAODAnaHelpers/ElectronCalibrator.h>
    +#include <xAODAnaHelpers/PhotonCalibrator.h>
    +#include <xAODAnaHelpers/JetCalibrator.h>
    +#include <xAODAnaHelpers/MuonCalibrator.h>
    +#include <xAODAnaHelpers/TauCalibrator.h>
    +/*#include <xAODAnaHelpers/GroomedFatJets.h>*/
    +#include <xAODAnaHelpers/HLTJetRoIBuilder.h>
    +#include <xAODAnaHelpers/HLTJetGetter.h>
    +
    +/* Missing Energy Reconstruction */
    +#include <xAODAnaHelpers/METConstructor.h>
    +
    +/* Scale Factors */
    +#include <xAODAnaHelpers/ElectronEfficiencyCorrector.h>
    +#include <xAODAnaHelpers/MuonEfficiencyCorrector.h>
    +#include <xAODAnaHelpers/TauEfficiencyCorrector.h>
    +#include <xAODAnaHelpers/BJetEfficiencyCorrector.h>
    +
    +/* Plotting Tools */
    +#include <xAODAnaHelpers/IParticleHistsAlgo.h>
    +#include <xAODAnaHelpers/JetHistsAlgo.h>
    +#include <xAODAnaHelpers/MuonHistsAlgo.h>
    +#include <xAODAnaHelpers/PhotonHistsAlgo.h>
    +#include <xAODAnaHelpers/ElectronHistsAlgo.h>
    +#include <xAODAnaHelpers/MetHistsAlgo.h>
    +#include <xAODAnaHelpers/TrackHistsAlgo.h>
    +#include <xAODAnaHelpers/ClusterHistsAlgo.h>
    +
    +/* Tree */
    +#include <xAODAnaHelpers/TreeAlgo.h>
    +
    +/* Mini xAOD */
    +#include <xAODAnaHelpers/MinixAOD.h>
    +
    +/* Other */
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/OverlapRemover.h>
    +#include <xAODAnaHelpers/TrigMatcher.h>
    +#include <xAODAnaHelpers/TauJetMatching.h>
    +#include <xAODAnaHelpers/Writer.h>
    +#include <xAODAnaHelpers/MessagePrinterAlgo.h>
    +#include <xAODAnaHelpers/MuonInFatJetCorrector.h>
    +
    +#ifdef __CINT__
    +
    +#pragma link off all globals;
    +#pragma link off all classes;
    +#pragma link off all functions;
    +#pragma link C++ nestedclass;
    +
    +#pragma link C++ namespace xAH;
    +#pragma link C++ function xAH::addRucio;
    +
    +#pragma link C++ class xAH::Algorithm+;
    +
    +#pragma link C++ class BasicEventSelection+;
    +#pragma link C++ class ElectronSelector+;
    +#pragma link C++ class PhotonSelector+;
    +#pragma link C++ class TauSelector+;
    +#pragma link C++ class JetSelector+;
    +#pragma link C++ class DebugTool+;
    +#pragma link C++ class TruthSelector+;
    +#pragma link C++ class TrackSelector+;
    +#pragma link C++ class MuonSelector+;
    +
    +#pragma link C++ class ElectronCalibrator+;
    +#pragma link C++ class PhotonCalibrator+;
    +#pragma link C++ class JetCalibrator+;
    +#pragma link C++ class HLTJetRoIBuilder+;
    +#pragma link C++ class MuonCalibrator+;
    +#pragma link C++ class TauCalibrator+;
    +#pragma link C++ class HLTJetGetter+;
    +/*#pragma link C++ class GroomedFatJets+;*/
    +
    +#pragma link C++ class METConstructor+;
    +
    +#pragma link C++ class ElectronEfficiencyCorrector+;
    +#pragma link C++ class MuonEfficiencyCorrector+;
    +#pragma link C++ class TauEfficiencyCorrector+;
    +#pragma link C++ class BJetEfficiencyCorrector+;
    +
    +#pragma link C++ class IParticleHistsAlgo+;
    +#pragma link C++ class JetHistsAlgo+;
    +#pragma link C++ class MuonHistsAlgo+;
    +#pragma link C++ class PhotonHistsAlgo+;
    +#pragma link C++ class ElectronHistsAlgo+;
    +#pragma link C++ class MetHistsAlgo+;
    +#pragma link C++ class TrackHistsAlgo+;
    +#pragma link C++ class ClusterHistsAlgo+;
    +
    +#pragma link C++ class TreeAlgo+;
    +
    +#pragma link C++ class MinixAOD+;
    +
    +#pragma link C++ class OverlapRemover+;
    +#pragma link C++ class IsoCloseByCorr+;
    +#pragma link C++ class TrigMatcher+;
    +#pragma link C++ class TauJetMatching+;
    +#pragma link C++ class Writer+;
    +#pragma link C++ class MessagePrinterAlgo+;
    +#pragma link C++ class MuonInFatJetCorrector+;
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_METConstructor.cxx.html b/api/program_listing_file_Root_METConstructor.cxx.html new file mode 100644 index 0000000000..15ebe28931 --- /dev/null +++ b/api/program_listing_file_Root_METConstructor.cxx.html @@ -0,0 +1,858 @@ + + + + + + + + + + + Program Listing for File METConstructor.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File METConstructor.cxx

    +

    Return to documentation for file (Root/METConstructor.cxx)

    +
    #include <iostream>
    +
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include "xAODAnaHelpers/METConstructor.h"
    +
    +#include "METUtilities/CutsMETMaker.h"
    +#include "METUtilities/METHelpers.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODJet/JetContainer.h"
    +
    +#include "xAODCore/ShallowCopy.h"
    +
    +#include "xAODMissingET/MissingETContainer.h"
    +#include "xAODMissingET/MissingETAuxContainer.h"
    +#include "xAODMissingET/MissingETComposition.h"
    +#include "xAODMissingET/MissingETAssociationMap.h"
    +
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +#include "TEnv.h"
    +#include "TSystem.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(METConstructor)
    +
    +
    +METConstructor :: METConstructor () :
    +    Algorithm("METConstructor")
    +{
    +}
    +
    +EL::StatusCode METConstructor :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "METConstructor" ).ignore(); // call before opening first file
    +
    +   // to validate and check:
    +   //enable status code failures
    +   //CP::CorrectionCode::enableFailure();
    +   //CP::SystematicCode::enableFailure();
    +   //StatusCode::enableFailure();// do not decomment this, maybe an unchecked status code gives a crash...
    +
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing METConstructor Interface...");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_DEBUG( "Is MC? " << isMC() );
    +
    +  if ( m_dofJVTCut ) {
    +    ANA_CHECK(m_metmaker_handle.setProperty("JetRejectionDec", m_fJVTdecorName));
    +  }
    +  if ( m_doPFlow ) {
    +    ANA_CHECK(m_metmaker_handle.setProperty("DoPFlow", true));
    +  }
    +  if ( !m_METWorkingPoint.empty() ){
    +    ANA_CHECK(m_metmaker_handle.setProperty("JetSelection", m_METWorkingPoint));
    +  }
    +  ANA_CHECK(m_metmaker_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_metmaker_handle);
    +
    +  if (!m_systConfigPrefix.empty()) {
    +    ANA_CHECK(m_metSyst_handle.setProperty("ConfigPrefix", m_systConfigPrefix));
    +  }
    +  if (!m_systConfigSoftTrkFile.empty()) {
    +    ANA_CHECK(m_metSyst_handle.setProperty("ConfigSoftTrkFile", m_systConfigSoftTrkFile));
    +  }
    +  ANA_CHECK(m_metSyst_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_metSyst_handle);
    +
    +  ANA_CHECK(m_tauSelTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_tauSelTool_handle);
    +
    +  if ( m_calculateSignificance ) {
    +    ANA_CHECK( m_metSignificance_handle.setProperty("TreatPUJets", m_significanceTreatPUJets) );
    +    ANA_CHECK( m_metSignificance_handle.setProperty("SoftTermReso", m_significanceSoftTermReso) );
    +
    +    // For AFII samples
    +    if ( isFastSim() ){
    +      ANA_MSG_INFO( "Setting simulation flavour to AFII");
    +      ANA_CHECK( m_metSignificance_handle.setProperty("IsAFII", true));
    +    }
    +    ANA_CHECK( m_metSignificance_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_metSignificance_handle);
    +  }
    +
    +  ANA_MSG_INFO( "METConstructor Interface " << m_name << " succesfully initialized!");
    +
    +  //use the helper function getlistofsystematics:
    +
    +  // run syst
    +  if ( !m_runNominal && !m_systName.empty() ) { //  m_systName is set by default to m_systName= "All", do not change it
    +    // get the syst from met syst tool
    +    const CP::SystematicSet recSyst = m_metSyst_handle->recommendedSystematics();
    +    m_sysList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +  } else { //run nominal
    +    m_sysList.push_back(CP::SystematicSet()); // add empty systematic (Nominal case)
    +  }
    +
    +  ANA_MSG_INFO("Will be using METSystematicsTool systematic:");
    +  for ( const auto& syst_it : m_sysList ) {
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +  m_numEvent = 0; //just as a check
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_sysList, m_name, fileMD);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode METConstructor :: execute ()
    +{
    +   // Here you do everything that needs to be done on every single
    +   // events, e.g. read input variables, apply cuts, and fill
    +   // histograms and trees.  This is where most of your actual analysis
    +   // code will go.
    +
    +   ANA_MSG_DEBUG( "Performing MET reconstruction...");
    +
    +   m_numEvent ++ ;
    +   //ANA_MSG_DEBUG("number of processed events now is : "<< m_numEvent);
    +
    +   const xAOD::EventInfo* eventInfo(nullptr);
    +   ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()));
    +
    +   const xAOD::MissingETContainer* coreMet(0);
    +   ANA_CHECK( HelperFunctions::retrieve(coreMet, m_coreName, m_event, m_store, msg()));
    +
    +   const xAOD::MissingETAssociationMap* metMap = 0;
    +   ANA_CHECK( HelperFunctions::retrieve(metMap, m_mapName, m_event, m_store, msg()));
    +   xAOD::MissingETAssociationHelper metHelper(metMap);
    +
    +   std::vector<CP::SystematicSet>::const_iterator sysListItr;
    +   auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +   //
    +   // get vector of string giving the Systematic names:
    +   //
    +   // load each object systematic. This is done at the execution level
    +   // as systematic containers have to exist. To avoid adding several
    +   // times the same systematic a check has to be performed on sysList
    +   //
    +
    +   //add the syst for jets
    +   std::vector<std::string>* sysJetsNames(nullptr);
    +   if(!m_runNominal && !m_jetSystematics.empty()){
    +     ANA_CHECK( HelperFunctions::retrieve(sysJetsNames, m_jetSystematics, 0, m_store, msg()));
    +
    +     for ( auto systName : *sysJetsNames ) {
    +       if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) {
    +         m_sysList.push_back(CP::SystematicSet(systName));
    +         ANA_MSG_DEBUG("jet syst added is = "<< systName);
    +       }
    +     }
    +   }
    +
    +   //add the syst for electrons
    +   std::vector<std::string>* sysElectronsNames(nullptr);
    +   if(!m_runNominal && !m_eleSystematics.empty()){
    +     ANA_CHECK( HelperFunctions::retrieve(sysElectronsNames, m_eleSystematics, 0, m_store, msg()));
    +
    +     for ( auto systName : *sysElectronsNames ) {
    +       if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) {
    +         m_sysList.push_back(CP::SystematicSet(systName));
    +         ANA_MSG_DEBUG("ele syst added is = "<< systName);
    +       }
    +     }
    +   }
    +
    +   //add the syst for muons
    +   std::vector<std::string>* sysMuonsNames(nullptr);
    +   if(!m_runNominal && !m_muonSystematics.empty()){
    +     ANA_CHECK( HelperFunctions::retrieve(sysMuonsNames, m_muonSystematics, 0, m_store, msg()));
    +
    +     for ( auto systName : *sysMuonsNames ) {
    +       if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) {
    +         m_sysList.push_back(CP::SystematicSet(systName));
    +         ANA_MSG_DEBUG("muon syst added is = "<< systName);
    +       }
    +     }
    +   }
    +
    +   //add the syst for tau
    +   std::vector<std::string>* sysTausNames(nullptr);
    +   if(!m_runNominal && !m_tauSystematics.empty()){
    +     ANA_CHECK( HelperFunctions::retrieve(sysTausNames, m_tauSystematics, 0, m_store, msg()));
    +
    +     for ( auto systName : *sysTausNames ) {
    +       if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) {
    +         m_sysList.push_back(CP::SystematicSet(systName));
    +         ANA_MSG_DEBUG("tau syst added is = "<< systName);
    +       }
    +     }
    +   }
    +
    +   //add the syst for photons
    +   std::vector<std::string>* sysPhotonsNames(nullptr);
    +   if(!m_runNominal && !m_phoSystematics.empty()){
    +     ANA_CHECK( HelperFunctions::retrieve(sysPhotonsNames, m_phoSystematics, 0, m_store, msg()));
    +
    +     for ( auto systName : *sysPhotonsNames ) {
    +       if (systName != "" && !(std::find(m_sysList.begin(), m_sysList.end(), CP::SystematicSet(systName)) != m_sysList.end())) {
    +         m_sysList.push_back(CP::SystematicSet(systName));
    +         ANA_MSG_DEBUG("photon syst added is = "<< systName);
    +       }
    +     }
    +   }
    +
    +   // now start the loop over systematics
    +   for (sysListItr = m_sysList.begin(); sysListItr != m_sysList.end(); ++sysListItr) {  // loop over systematics
    +
    +      //this is kind of annoying, but applySystematicVariation only takes a SystematicSet, but *sysListItr is a SystematicVariation.
    +      //We use the SystematicSet constructor which just takes a SystematicVariation
    +      //CP::SystematicSet systSet({systName});
    +      //tell the tool that we are using this SystematicSet (of one SystematicVariation for now)
    +      //after this call, when we use applyCorrection, the given met term will be adjusted with this systematic applied
    +      //assert(    m_metSyst_handle->applySystematicVariation(sysList) );
    +      //
    +      // info from https://svnweb.cern.ch/trac/atlasoff/browser/Reconstruction/MET/METUtilities/trunk/util/example_METMaker_METSystematicsTool.cxx
    +
    +      // just for convenience, to retrieve the containers
    +      std::string systName = (*sysListItr).name();
    +
    +      ANA_MSG_DEBUG(" loop over systematic = " << systName);
    +
    +      vecOutContainerNames->push_back( systName );
    +
    +      // Reset all the met map associations
    +      metHelper.resetObjSelectionFlags();
    +
    +      //create a met container, one for each syst
    +      auto newMet = std::make_unique<xAOD::MissingETContainer>();
    +      auto metAuxCont = std::make_unique<xAOD::MissingETAuxContainer>();
    +      newMet->setStore(metAuxCont.get());
    +
    +      // now retrieve the object containers and build the met
    +      // if the syst varied container exists take it, otherwise take the nominal one
    +
    +
    +      if ( !m_inputElectrons.empty() ) {
    +         const xAOD::ElectronContainer* eleCont(0);
    +         std::string suffix = "";
    +         if (sysElectronsNames && std::find(std::begin(*sysElectronsNames), std::end(*sysElectronsNames), systName) != std::end(*sysElectronsNames)) {
    +           if (systName != "") ANA_MSG_DEBUG("doing electron systematics");
    +           suffix = systName;
    +         }
    +
    +         if ( m_store->contains<xAOD::ElectronContainer>(m_inputElectrons + suffix) || m_event->contains<xAOD::ElectronContainer>(m_inputElectrons + suffix) ) {
    +           ANA_CHECK( HelperFunctions::retrieve(eleCont, m_inputElectrons + suffix, m_event, m_store, msg()));
    +           ANA_MSG_DEBUG("retrieving ele container " << m_inputElectrons + suffix << " to be added to the MET");
    +         } else {
    +           ANA_MSG_DEBUG("container " << m_inputElectrons + suffix << " not available upstream - skipping systematics");
    +           continue;
    +         }
    +
    +         ANA_MSG_DEBUG("rebuilding MET term: RefEle");
    +         if (m_doElectronCuts) {
    +           ConstDataVector<xAOD::ElectronContainer> metElectrons(SG::VIEW_ELEMENTS);
    +           for (const auto& el : *eleCont) if (CutsMETMaker::accept(el)) metElectrons.push_back(el);
    +           ANA_CHECK( m_metmaker_handle->rebuildMET("RefEle", xAOD::Type::Electron, newMet.get(), metElectrons.asDataVector(), metHelper));
    +         } else {
    +           ANA_CHECK( m_metmaker_handle->rebuildMET("RefEle", xAOD::Type::Electron, newMet.get(), eleCont, metHelper));
    +         }
    +      } // close "if( m_inputElectrons.Length() > 0 )"
    +
    +
    +
    +      if ( !m_inputPhotons.empty() ) {
    +         const xAOD::PhotonContainer* phoCont(0);
    +         std::string suffix = "";
    +         if (sysPhotonsNames && std::find(std::begin(*sysPhotonsNames), std::end(*sysPhotonsNames), systName) != std::end(*sysPhotonsNames)) {
    +           if (systName != "") ANA_MSG_DEBUG("doing photon systematics");
    +           suffix = systName;
    +         }
    +
    +         if ( m_store->contains<xAOD::PhotonContainer>(m_inputPhotons + suffix) || m_event->contains<xAOD::PhotonContainer>(m_inputPhotons + suffix) ) {
    +           ANA_CHECK( HelperFunctions::retrieve(phoCont, m_inputPhotons + suffix, m_event, m_store, msg()));
    +           ANA_MSG_DEBUG("retrieving ph container " << m_inputPhotons + suffix << " to be added to the MET");
    +         } else {
    +           ANA_MSG_DEBUG("container " << m_inputPhotons + suffix << " not available upstream - skipping systematics");
    +           continue;
    +         }
    +
    +      ANA_MSG_DEBUG("rebuilding MET term: RefGamma");
    +      if (m_doPhotonCuts) {
    +        ConstDataVector<xAOD::PhotonContainer> metPhotons(SG::VIEW_ELEMENTS);
    +        for (const auto& ph : *phoCont) {
    +
    +          bool testPID = 0;
    +          ph->passSelection(testPID, "Tight");
    +          if( !testPID ) continue;
    +
    +          //ANA_MSG_VERBOSE("Photon author = " << ph->author() << " test " << (ph->author()&20));
    +          if (!(ph->author() & 20)) continue;
    +
    +          if (ph->pt() < 25e3) continue;
    +
    +          float feta = fabs(ph->eta());
    +          if (feta > 2.37 || (1.37 < feta && feta < 1.52)) continue;
    +
    +          metPhotons.push_back(ph);
    +        }
    +
    +        ANA_CHECK( m_metmaker_handle->rebuildMET("RefGamma", xAOD::Type::Photon, newMet.get(), metPhotons.asDataVector(), metHelper));
    +
    +      } else {
    +        ANA_CHECK( m_metmaker_handle->rebuildMET("RefGamma", xAOD::Type::Photon, newMet.get(), phoCont, metHelper));
    +       }
    +     }
    +
    +
    +     if ( !m_inputTaus.empty() ) {
    +        const xAOD::TauJetContainer* tauCont(0);
    +        std::string suffix = "";
    +        if (sysTausNames && std::find(std::begin(*sysTausNames), std::end(*sysTausNames), systName) != std::end(*sysTausNames)) {
    +          if (systName != "") ANA_MSG_DEBUG("doing tau systematics");
    +          suffix = systName;
    +        }
    +
    +        if ( m_store->contains<xAOD::TauJetContainer>(m_inputTaus + suffix) || m_event->contains<xAOD::TauJetContainer>(m_inputTaus + suffix) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(tauCont, m_inputTaus + suffix, m_event, m_store, msg()));
    +          ANA_MSG_DEBUG("retrieving tau container " << m_inputTaus + suffix << " to be added to the MET");
    +        } else {
    +            ANA_MSG_DEBUG("container " << m_inputTaus + suffix << " not available upstream - skipping systematics");
    +            continue;
    +      }
    +
    +      ANA_MSG_DEBUG("rebuilding MET term: RefTau");
    +       if (m_doTauCuts) {
    +         ConstDataVector<xAOD::TauJetContainer> metTaus(SG::VIEW_ELEMENTS);
    +         for (const auto& tau : *tauCont) {
    +
    +           if (tau->pt() < 20e3) continue;
    +           if (fabs(tau->eta()) > 2.37) continue;
    +           if (!m_tauSelTool_handle->accept(tau)) continue;
    +
    +           metTaus.push_back(tau);
    +         }
    +         ANA_CHECK( m_metmaker_handle->rebuildMET("RefTau", xAOD::Type::Tau, newMet.get(), metTaus.asDataVector(), metHelper));
    +       } else {
    +         ANA_CHECK( m_metmaker_handle->rebuildMET("RefTau", xAOD::Type::Tau, newMet.get(), tauCont, metHelper));
    +       }
    +     }
    +
    +
    +     if ( !m_inputMuons.empty() ) {
    +        const xAOD::MuonContainer* muonCont(0);
    +        std::string suffix = "";
    +        if (sysMuonsNames && std::find(std::begin(*sysMuonsNames), std::end(*sysMuonsNames), systName) != std::end(*sysMuonsNames)) {
    +          if (systName != "") ANA_MSG_DEBUG("doing muon systematics");
    +          suffix = systName;
    +        }
    +
    +        if ( m_store->contains<xAOD::MuonContainer>(m_inputMuons + suffix) || m_event->contains<xAOD::MuonContainer>(m_inputMuons + suffix) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(muonCont, m_inputMuons + suffix, m_event, m_store, msg()));
    +          ANA_MSG_DEBUG("retrieving muon container " << m_inputMuons + suffix << " to be added to the MET");
    +        } else {
    +          ANA_MSG_DEBUG("container " << m_inputMuons + suffix << " not available upstream - skipping systematics");
    +          continue;
    +        }
    +
    +        ANA_MSG_DEBUG("rebuilding MET term: Muons");
    +        if (m_doMuonCuts) {
    +          ConstDataVector<xAOD::MuonContainer> metMuons(SG::VIEW_ELEMENTS);
    +          for (const auto& mu : *muonCont) if (CutsMETMaker::accept(mu)) metMuons.push_back(mu);
    +          ANA_CHECK( m_metmaker_handle->rebuildMET("Muons", xAOD::Type::Muon, newMet.get(), metMuons.asDataVector(), metHelper));
    +        } else {
    +          ANA_CHECK( m_metmaker_handle->rebuildMET("Muons", xAOD::Type::Muon, newMet.get(), muonCont, metHelper));
    +        }
    +     }
    +
    +
    +     if ( m_inputJets.empty() ) {
    +       ANA_MSG_ERROR("Jets are required for MET calculation.");
    +       return EL::StatusCode::FAILURE;
    +     }
    +
    +     const xAOD::JetContainer* jetCont(0);
    +     std::string suffix = "";
    +     if (sysJetsNames && std::find(std::begin(*sysJetsNames), std::end(*sysJetsNames), systName) != std::end(*sysJetsNames)) {
    +       if (systName != "") ANA_MSG_DEBUG("doing jet systematics");
    +       suffix = systName;
    +     }
    +
    +     if ( m_store->contains<xAOD::JetContainer>(m_inputJets + suffix) || m_event->contains<xAOD::JetContainer>(m_inputJets + suffix) ) {
    +       ANA_CHECK( HelperFunctions::retrieve(jetCont, m_inputJets + suffix, m_event, m_store, msg()));
    +       ANA_MSG_DEBUG("retrieving jet container " << m_inputJets + suffix << " to be added to the MET");
    +     } else {
    +       ANA_MSG_DEBUG("container " << m_inputJets + suffix << " not available upstream - skipping systematics");
    +       continue;
    +     }
    +
    +     // the jet term and soft term(s) are built simultaneously using METMaker::rebuildJetMET(...) or METMaker::rebuildTrackMET(...)
    +     // to build MET using a calorimeter or track based jet term, respectively.
    +     // pass to rebuildJetMET calibrated jets (full container)
    +     //
    +
    +     // NOTE: you have to set m_doJVTCut correctly when running!
    +
    +     // By default: rebuild MET using jets without soft cluster terms (just TST, no CST)
    +     // You can configure to add Cluster Soft Term (only affects the "use Jets" option)
    +     //         or to rebuild MET using the Tracks in Calorimeter Jets which doesn't make sense to have CST
    +     if( !m_rebuildUsingTracksInJets ) {
    +       if( m_addSoftClusterTerms ){
    +         ANA_MSG_DEBUG("rebuilding MET term: RefJet + SoftClus + PVSoftTrk");
    +         ANA_CHECK( m_metmaker_handle->rebuildJetMET("RefJet", "SoftClus", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut));
    +       } else {
    +         ANA_MSG_DEBUG("rebuilding MET term: RefJet + PVSoftTrk");
    +         ANA_CHECK( m_metmaker_handle->rebuildJetMET("RefJet", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut));
    +       }
    +     } else {
    +       ANA_MSG_DEBUG("rebuilding MET term: RefJetTrk");
    +       ANA_CHECK( m_metmaker_handle->rebuildTrackMET("RefJetTrk", "PVSoftTrk", newMet.get(), jetCont, coreMet, metHelper, m_doJVTCut));
    +     }
    +
    +     //now tell the m_metSyst_handle that we are using this SystematicSet (of one SystematicVariation for now)
    +     //after this call, when we use applyCorrection, the given met term will be adjusted with this systematic applied
    +     // assert(   m_metSyst_handle->applySystematicVariation(systSet) );
    +     if (isMC()) {
    +       CP::SystematicSet systSet({systName}); // to pass from SystematicVariation to SystematicSet
    +       if( m_metSyst_handle->applySystematicVariation(systSet) != EL::StatusCode::SUCCESS) {
    +         ANA_MSG_ERROR("not able to applySystematicVariation ");
    +       }
    +     }
    +
    +     if(!m_rebuildUsingTracksInJets && m_addSoftClusterTerms){
    +       //get the soft cluster term, and applyCorrection
    +       xAOD::MissingET * softClusMet = (*newMet)["SoftClus"];
    +       //assert( softClusMet != 0); //check we retrieved the clust term
    +       if( isMC() && m_metSyst_handle->applyCorrection(*softClusMet, metHelper) != CP::CorrectionCode::Ok) {
    +         ANA_MSG_ERROR( "Could not apply correction to soft clus met !!!! ");
    +       }
    +       ANA_MSG_DEBUG("Soft cluster met term met : " << softClusMet->met());
    +     }
    +
    +     //get the track soft term, and applyCorrection
    +     xAOD::MissingET * softTrkMet = (*newMet)["PVSoftTrk"];
    +     if( isMC() && m_metSyst_handle->applyCorrection(*softTrkMet, metHelper) != CP::CorrectionCode::Ok) {
    +       ANA_MSG_ERROR( "Could not apply correction to soft track met !!!! ");
    +     }
    +     ANA_MSG_DEBUG("track met soft term : " << softTrkMet->met());
    +
    +     //only for track jets
    +     /*xAOD::MissingET * jetMet = (*newMet)["RefJet"];
    +       if( (*jetMet)->applyCorrection(iSysSet) != CP::CorrectionCode::Ok) {
    +       ANA_MSG_ERROR( "Could not apply correction to jet met !!!! ");
    +       };
    +       ANA_MSG_DEBUG("Jet met term met " << jetMet->met());*/
    +
    +     // build met:
    +
    +     ANA_CHECK( met::buildMETSum("FinalClus", newMet.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::LCTopo) ));
    +     ANA_CHECK( met::buildMETSum("FinalTrk",  newMet.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::Track) ));
    +
    +     // Calculate MET significance if enabled
    +     if ( m_calculateSignificance ) {
    +       std::vector<std::string> totalMETNames = {"FinalTrk", "FinalClus"};
    +
    +       for ( const std::string &name : totalMETNames ) {
    +         // Calculate MET significance
    +         if ( !m_rebuildUsingTracksInJets ) {
    +           ANA_CHECK( m_metSignificance_handle->varianceMET(newMet.get(), eventInfo->averageInteractionsPerCrossing(), "RefJet", "PVSoftTrk", name) );
    +         } else {
    +           ANA_CHECK( m_metSignificance_handle->varianceMET(newMet.get(), eventInfo->averageInteractionsPerCrossing(), "RefJetTrk", "PVSoftTrk", name) );
    +         }
    +
    +         // Decorate MET object with results
    +         const xAOD::MissingET *met = *(newMet->find(name));
    +         if ( !met ) {
    +           ANA_MSG_WARNING( "Cannot find MET object with name: " << name );
    +         }
    +
    +         met->auxdecor<double>("METOverSqrtSumET") = m_metSignificance_handle->GetMETOverSqrtSumET();
    +         met->auxdecor<double>("METOverSqrtHT") = m_metSignificance_handle->GetMETOverSqrtHT();
    +         met->auxdecor<double>("Significance") = m_metSignificance_handle->GetSignificance();
    +         met->auxdecor<double>("SigDirectional") = m_metSignificance_handle->GetSigDirectional();
    +         met->auxdecor<double>("Rho") = m_metSignificance_handle->GetRho();
    +         met->auxdecor<double>("VarL") = m_metSignificance_handle->GetVarL();
    +         met->auxdecor<double>("VarT") = m_metSignificance_handle->GetVarT();
    +         met->auxdecor<double>("JetVarL") = m_metSignificance_handle->GetTermVarL(1);
    +         met->auxdecor<double>("JetVarT") = m_metSignificance_handle->GetTermVarT(1);
    +         met->auxdecor<double>("SoftVarL") = m_metSignificance_handle->GetTermVarL(2);
    +         met->auxdecor<double>("SoftVarT") = m_metSignificance_handle->GetTermVarT(2);
    +         met->auxdecor<double>("EleVarL") = m_metSignificance_handle->GetTermVarL(3);
    +         met->auxdecor<double>("EleVarT") = m_metSignificance_handle->GetTermVarT(3);
    +         met->auxdecor<double>("MuonVarL") = m_metSignificance_handle->GetTermVarL(4);
    +         met->auxdecor<double>("MuonVarT") = m_metSignificance_handle->GetTermVarT(4);
    +         met->auxdecor<double>("PhotonVarL") = m_metSignificance_handle->GetTermVarL(5);
    +         met->auxdecor<double>("PhotonVarT") = m_metSignificance_handle->GetTermVarT(5);
    +         met->auxdecor<double>("TauVarL") = m_metSignificance_handle->GetTermVarL(6);
    +         met->auxdecor<double>("TauVarT") = m_metSignificance_handle->GetTermVarT(6);
    +       }
    +     }
    +
    +     ANA_MSG_DEBUG(" FinalClus met, for syst " << systName << " is = " << (*newMet->find("FinalClus"))->met());
    +     ANA_MSG_DEBUG(" FinalTrk met, for syst " << systName << " is = " << (*newMet->find("FinalTrk"))->met());
    +     ANA_MSG_DEBUG("storing met container :  " << (m_outputContainer + systName));
    +     ANA_MSG_DEBUG("storing  Aux met container :  "<< (m_outputContainer + systName + "Aux."));
    +
    +     // Store MET
    +     ANA_CHECK( m_store->record( std::move(newMet), (m_outputContainer + systName) ));
    +     ANA_CHECK( m_store->record( std::move(metAuxCont), (m_outputContainer + systName + "Aux.")));
    +
    +   } //end loop over systematics
    +
    +   // might have already been stored by another execution of this algo
    +   // or by a previous iteration of the same
    +   if ( !m_store->contains< std::vector<std::string> >( m_outputAlgoSystNames ) ) {
    +      ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +   }
    +
    +   if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor::finalize()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +//  if (m_metmaker_handle) {
    +//    delete m_metmaker_handle;
    +//    m_metmaker_handle = 0;
    +//  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode METConstructor :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MessagePrinterAlgo.cxx.html b/api/program_listing_file_Root_MessagePrinterAlgo.cxx.html new file mode 100644 index 0000000000..f9660ba650 --- /dev/null +++ b/api/program_listing_file_Root_MessagePrinterAlgo.cxx.html @@ -0,0 +1,263 @@ + + + + + + + + + + + Program Listing for File MessagePrinterAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MessagePrinterAlgo.cxx

    +

    Return to documentation for file (Root/MessagePrinterAlgo.cxx)

    +
    // EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/Worker.h>
    +#include "EventLoop/OutputStream.h"
    +
    +#include <xAODAnaHelpers/MessagePrinterAlgo.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MessagePrinterAlgo)
    +
    +MessagePrinterAlgo :: MessagePrinterAlgo () :
    +    Algorithm("MessagePrinterAlgo")
    +{
    +}
    +
    +
    +EL::StatusCode MessagePrinterAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("MessagePrinterAlgo").ignore(); // call before opening first file
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MessagePrinterAlgo :: histInitialize ()
    +{
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  if(numInstances() != 1){
    +    ANA_MSG_FATAL( "More than one instance of MessagePrinterAlgo was created. Aborting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // otherwise, we're fine, let's just set up the messaging correctly
    +  m_messagePrinter.reset(new asg::MessagePrinter(m_sourceWidth));
    +  m_messagePrinterOverlay.reset(new asg::MessagePrinterOverlay(m_messagePrinter.get()));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MessagePrinterAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MessagePrinterAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MessagePrinterAlgo :: initialize () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MessagePrinterAlgo :: execute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MessagePrinterAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MessagePrinterAlgo :: finalize () { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode MessagePrinterAlgo :: histFinalize ()
    +{
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MetContainer.cxx.html b/api/program_listing_file_Root_MetContainer.cxx.html new file mode 100644 index 0000000000..464526bfba --- /dev/null +++ b/api/program_listing_file_Root_MetContainer.cxx.html @@ -0,0 +1,595 @@ + + + + + + + + + + + Program Listing for File MetContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetContainer.cxx

    +

    Return to documentation for file (Root/MetContainer.cxx)

    +
    #include "xAODAnaHelpers/MetContainer.h"
    +#include <iostream>
    +
    +
    +using namespace xAH;
    +
    +MetContainer::MetContainer(const std::string& name, const std::string& detailStr, float units)
    +  : m_name(name), m_infoSwitch(detailStr), m_debug(false), m_units(units)
    +{
    +}
    +
    +MetContainer::~MetContainer()
    +{
    +  if(m_debug) std::cout << " Deleting MetContainer "  << std::endl;
    +}
    +
    +void MetContainer::setTree(TTree *tree)
    +{
    +
    +  if ( m_infoSwitch.m_metClus ) {
    +    connectBranch<float>(tree, "FinalClus",         &m_metFinalClus     );
    +    connectBranch<float>(tree, "FinalClusPx",       &m_metFinalClusPx   );
    +    connectBranch<float>(tree, "FinalClusPy",       &m_metFinalClusPy   );
    +    connectBranch<float>(tree, "FinalClusSumEt",    &m_metFinalClusSumEt);
    +    connectBranch<float>(tree, "FinalClusPhi",      &m_metFinalClusPhi  );
    +  }
    +
    +  if ( m_infoSwitch.m_sigClus ) {
    +    connectBranch<float>(tree, "FinalClusOverSqrtSumEt",  &m_metFinalClusOverSqrtSumEt );
    +    connectBranch<float>(tree, "FinalClusOverSqrtHt",     &m_metFinalClusOverSqrtHt    );
    +    connectBranch<float>(tree, "FinalClusSignificance",   &m_metFinalClusSignificance  );
    +    connectBranch<float>(tree, "FinalClusSigDirectional", &m_metFinalClusSigDirectional);
    +  }
    +
    +  if ( m_infoSwitch.m_sigResolutionClus ) {
    +    connectBranch<float>(tree, "FinalClusRho",  &m_metFinalClusRho );
    +    connectBranch<float>(tree, "FinalClusVarL", &m_metFinalClusVarL);
    +    connectBranch<float>(tree, "FinalClusVarT", &m_metFinalClusVarT);
    +  }
    +
    +  if ( m_infoSwitch.m_metTrk ) {
    +    connectBranch<float>(tree, "FinalTrk",          &m_metFinalTrk     );
    +    connectBranch<float>(tree, "FinalTrkPx",        &m_metFinalTrkPx   );
    +    connectBranch<float>(tree, "FinalTrkPy",        &m_metFinalTrkPy   );
    +    connectBranch<float>(tree, "FinalTrkSumEt",     &m_metFinalTrkSumEt);
    +    connectBranch<float>(tree, "FinalTrkPhi",       &m_metFinalTrkPhi  );
    +  }
    +
    +  if ( m_infoSwitch.m_sigTrk ) {
    +    connectBranch<float>(tree, "FinalTrkOverSqrtSumEt",  &m_metFinalTrkOverSqrtSumEt );
    +    connectBranch<float>(tree, "FinalTrkOverSqrtHt",     &m_metFinalTrkOverSqrtHt    );
    +    connectBranch<float>(tree, "FinalTrkSignificance",   &m_metFinalTrkSignificance  );
    +    connectBranch<float>(tree, "FinalTrkSigDirectional", &m_metFinalTrkSigDirectional);
    +  }
    +
    +  if ( m_infoSwitch.m_sigResolutionTrk ) {
    +    connectBranch<float>(tree, "FinalTrkRho",  &m_metFinalTrkRho );
    +    connectBranch<float>(tree, "FinalTrkVarL", &m_metFinalTrkVarL);
    +    connectBranch<float>(tree, "FinalTrkVarT", &m_metFinalTrkVarT);
    +  }
    +
    +  if ( m_infoSwitch.m_refEle ) {
    +    connectBranch<float>(tree, "Ele",             &m_metEle       );
    +    connectBranch<float>(tree, "EleSumEt",        &m_metEleSumEt  );
    +    connectBranch<float>(tree, "ElePhi",          &m_metElePhi    );
    +  }
    +
    +  if ( m_infoSwitch.m_refGamma ) {
    +    connectBranch<float>(tree, "Gamma",           &m_metGamma     );
    +    connectBranch<float>(tree, "GammaSumEt",      &m_metGammaSumEt);
    +    connectBranch<float>(tree, "GammaPhi",        &m_metGammaPhi  );
    +  }
    +
    +  if ( m_infoSwitch.m_refTau ) {
    +    connectBranch<float>(tree, "Tau",             &m_metTau      );
    +    connectBranch<float>(tree, "TauSumEt",        &m_metTauSumEt );
    +    connectBranch<float>(tree, "TauPhi",          &m_metTauPhi   );
    +  }
    +
    +  if ( m_infoSwitch.m_refMuons ) {
    +    connectBranch<float>(tree, "Muons",           &m_metMuons      );
    +    connectBranch<float>(tree, "MuonsSumEt",      &m_metMuonsSumEt );
    +    connectBranch<float>(tree, "MuonsPhi",        &m_metMuonsPhi   );
    +  }
    +
    +  if ( m_infoSwitch.m_refJet ) {
    +    connectBranch<float>(tree, "Jet",             &m_metJet      );
    +    connectBranch<float>(tree, "JetSumEt",        &m_metJetSumEt );
    +    connectBranch<float>(tree, "JetPhi",          &m_metJetPhi   );
    +  }
    +
    +  if ( m_infoSwitch.m_refJetTrk ) {
    +    connectBranch<float>(tree, "JetTrk",          &m_metJetTrk     );
    +    connectBranch<float>(tree, "JetTrkSumEt",     &m_metJetTrkSumEt);
    +    connectBranch<float>(tree, "JetTrkPhi",       &m_metJetTrkPhi  );
    +  }
    +
    +  if ( m_infoSwitch.m_softClus) {
    +    connectBranch<float>(tree, "SoftClus",        &m_metSoftClus     );
    +    connectBranch<float>(tree, "SoftClusSumEt",   &m_metSoftClusSumEt);
    +    connectBranch<float>(tree, "SoftClusPhi",     &m_metSoftClusPhi  );
    +  }
    +
    +  if ( m_infoSwitch.m_softTrk) {
    +    connectBranch<float>(tree, "SoftTrk",         &m_metSoftTrk     );
    +    connectBranch<float>(tree, "SoftTrkSumEt",    &m_metSoftTrkSumEt);
    +    connectBranch<float>(tree, "SoftTrkPhi",      &m_metSoftTrkPhi  );
    +  }
    +
    +}
    +
    +
    +void MetContainer::setBranches(TTree *tree)
    +{
    +
    +  if ( m_infoSwitch.m_metClus ) {
    +    setBranch(tree, "FinalClus",         &m_metFinalClus,      "F");
    +    setBranch(tree, "FinalClusPx",       &m_metFinalClusPx,    "F");
    +    setBranch(tree, "FinalClusPy",       &m_metFinalClusPy,    "F");
    +    setBranch(tree, "FinalClusSumEt",    &m_metFinalClusSumEt, "F");
    +    setBranch(tree, "FinalClusPhi",      &m_metFinalClusPhi,   "F");
    +  }
    +
    +  if ( m_infoSwitch.m_sigClus ) {
    +    setBranch(tree, "FinalClusOverSqrtSumEt",  &m_metFinalClusOverSqrtSumEt,  "F");
    +    setBranch(tree, "FinalClusOverSqrtHt",     &m_metFinalClusOverSqrtHt,     "F");
    +    setBranch(tree, "FinalClusSignificance",   &m_metFinalClusSignificance,   "F");
    +    setBranch(tree, "FinalClusSigDirectional", &m_metFinalClusSigDirectional, "F");
    +  }
    +
    +  if ( m_infoSwitch.m_sigResolutionClus ) {
    +    setBranch(tree, "FinalClusRho",  &m_metFinalClusRho,  "F");
    +    setBranch(tree, "FinalClusVarL", &m_metFinalClusVarL, "F");
    +    setBranch(tree, "FinalClusVarT", &m_metFinalClusVarT, "F");
    +  }
    +
    +  if ( m_infoSwitch.m_metTrk ) {
    +    setBranch(tree, "FinalTrk",          &m_metFinalTrk,       "F");
    +    setBranch(tree, "FinalTrkPx",        &m_metFinalTrkPx,     "F");
    +    setBranch(tree, "FinalTrkPy",        &m_metFinalTrkPy,     "F");
    +    setBranch(tree, "FinalTrkSumEt",     &m_metFinalTrkSumEt,  "F");
    +    setBranch(tree, "FinalTrkPhi",       &m_metFinalTrkPhi,    "F");
    +  }
    +
    +  if ( m_infoSwitch.m_sigTrk ) {
    +    setBranch(tree, "FinalTrkOverSqrtSumEt",  &m_metFinalTrkOverSqrtSumEt,  "F");
    +    setBranch(tree, "FinalTrkOverSqrtHt",     &m_metFinalTrkOverSqrtHt,     "F");
    +    setBranch(tree, "FinalTrkSignificance",   &m_metFinalTrkSignificance,   "F");
    +    setBranch(tree, "FinalTrkSigDirectional", &m_metFinalTrkSigDirectional, "F");
    +  }
    +
    +  if ( m_infoSwitch.m_sigResolutionTrk ) {
    +    setBranch(tree, "FinalTrkRho",  &m_metFinalTrkRho,  "F");
    +    setBranch(tree, "FinalTrkVarL", &m_metFinalTrkVarL, "F");
    +    setBranch(tree, "FinalTrkVarT", &m_metFinalTrkVarT, "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refEle ) {
    +    setBranch(tree, "Ele",             &m_metEle,            "F");
    +    setBranch(tree, "EleSumEt",        &m_metEleSumEt,       "F");
    +    setBranch(tree, "ElePhi",          &m_metElePhi,         "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refGamma ) {
    +    setBranch(tree, "Gamma",           &m_metGamma,          "F");
    +    setBranch(tree, "GammaSumEt",      &m_metGammaSumEt,     "F");
    +    setBranch(tree, "GammaPhi",        &m_metGammaPhi,       "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refTau ) {
    +    setBranch(tree, "Tau",             &m_metTau,            "F");
    +    setBranch(tree, "TauSumEt",        &m_metTauSumEt,       "F");
    +    setBranch(tree, "TauPhi",          &m_metTauPhi,         "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refMuons ) {
    +    setBranch(tree, "Muons",           &m_metMuons,          "F");
    +    setBranch(tree, "MuonsSumEt",      &m_metMuonsSumEt,     "F");
    +    setBranch(tree, "MuonsPhi",        &m_metMuonsPhi,       "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refJet ) {
    +    setBranch(tree, "Jet",             &m_metJet,            "F");
    +    setBranch(tree, "JetSumEt",        &m_metJetSumEt,       "F");
    +    setBranch(tree, "JetPhi",          &m_metJetPhi,         "F");
    +  }
    +
    +  if ( m_infoSwitch.m_refJetTrk ) {
    +    setBranch(tree, "JetTrk",          &m_metJetTrk,         "F");
    +    setBranch(tree, "JetTrkSumEt",     &m_metJetTrkSumEt,    "F");
    +    setBranch(tree, "JetTrkPhi",       &m_metJetTrkPhi,      "F");
    +  }
    +
    +  if ( m_infoSwitch.m_softClus) {
    +    setBranch(tree, "SoftClus",        &m_metSoftClus,       "F");
    +    setBranch(tree, "SoftClusSumEt",   &m_metSoftClusSumEt,  "F");
    +    setBranch(tree, "SoftClusPhi",     &m_metSoftClusPhi,    "F");
    +  }
    +
    +  if ( m_infoSwitch.m_softTrk) {
    +    setBranch(tree, "SoftTrk",         &m_metSoftTrk,        "F");
    +    setBranch(tree, "SoftTrkSumEt",    &m_metSoftTrkSumEt,   "F");
    +    setBranch(tree, "SoftTrkPhi",      &m_metSoftTrkPhi,     "F");
    +  }
    +
    +
    +  return;
    +}
    +
    +
    +void MetContainer::clear()
    +{
    +  if ( m_infoSwitch.m_metClus ) {
    +    m_metFinalClus      = -999;
    +    m_metFinalClusPx    = -999;
    +    m_metFinalClusPy    = -999;
    +    m_metFinalClusSumEt = -999;
    +    m_metFinalClusPhi   = -999;
    +  }
    +
    +  if ( m_infoSwitch.m_metTrk ) {
    +    m_metFinalTrk         = -999;
    +    m_metFinalTrkPx     = -999;
    +    m_metFinalTrkPy     = -999;
    +    m_metFinalTrkSumEt  = -999;
    +    m_metFinalTrkPhi    = -999;
    +  }
    +
    +  if ( m_infoSwitch.m_sigClus ) {
    +    m_metFinalClusOverSqrtSumEt  = -999;
    +    m_metFinalClusOverSqrtHt     = -999;
    +    m_metFinalClusSignificance   = -999;
    +    m_metFinalClusSigDirectional = -999;
    +  }
    +  if ( m_infoSwitch.m_sigTrk ) {
    +    m_metFinalTrkOverSqrtSumEt  = -999;
    +    m_metFinalTrkOverSqrtHt     = -999;
    +    m_metFinalTrkSignificance   = -999;
    +    m_metFinalTrkSigDirectional = -999;
    +  }
    +  if ( m_infoSwitch.m_sigResolutionClus ) {
    +    m_metFinalClusRho  = -999;
    +    m_metFinalClusVarL = -999;
    +    m_metFinalClusVarT = -999;
    +  }
    +  if ( m_infoSwitch.m_sigResolutionTrk ) {
    +    m_metFinalTrkRho  = -999;
    +    m_metFinalTrkVarL = -999;
    +    m_metFinalTrkVarT = -999;
    +  }
    +
    +  if ( m_infoSwitch.m_refEle ) {
    +    m_metEle = m_metEleSumEt = m_metElePhi = -999;
    +  }
    +  if ( m_infoSwitch.m_refGamma ) {
    +    m_metGamma = m_metGammaSumEt = m_metGammaPhi = -999;
    +  }
    +  if ( m_infoSwitch.m_refTau ) {
    +    m_metTau = m_metTauSumEt = m_metTauPhi = -999;
    +  }
    +  if ( m_infoSwitch.m_refMuons ) {
    +    m_metMuons = m_metMuonsSumEt = m_metMuonsPhi = -999;
    +  }
    +  if ( m_infoSwitch.m_refJet ) {
    +    m_metJet = m_metJetSumEt = m_metJetPhi = -999;
    +  }
    +  if ( m_infoSwitch.m_refJetTrk ) {
    +    m_metJetTrk = m_metJetTrkSumEt = m_metJetTrkPhi = -999;
    +  }
    +  if ( m_infoSwitch.m_softClus) {
    +    m_metSoftClus = m_metSoftClusSumEt = m_metSoftClusPhi = -999;
    +  }
    +
    +  return;
    +}
    +
    +void MetContainer::FillMET( const xAOD::MissingETContainer* met) {
    +
    +
    +  //if ( m_debug ) { Info("HelpTreeBase::FillMET()", "Filling MET info"); }
    +
    +  if ( m_infoSwitch.m_metClus ) {
    +    const xAOD::MissingET* final_clus = *met->find("FinalClus"); // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based onleares)
    +    m_metFinalClus      = final_clus->met() / m_units;
    +    m_metFinalClusPx    = final_clus->mpx() / m_units;
    +    m_metFinalClusPy    = final_clus->mpy() / m_units;
    +    m_metFinalClusSumEt = final_clus->sumet() / m_units;
    +    m_metFinalClusPhi   = final_clus->phi();
    +
    +    if ( m_infoSwitch.m_sigClus ) {
    +      m_metFinalClusOverSqrtSumEt  = final_clus->auxdecor<double>("METOverSqrtSumET");
    +      m_metFinalClusOverSqrtHt     = final_clus->auxdecor<double>("METOverSqrtHT");
    +      m_metFinalClusSignificance   = final_clus->auxdecor<double>("Significance");
    +      m_metFinalClusSigDirectional = final_clus->auxdecor<double>("SigDirectional");
    +    }
    +
    +    if ( m_infoSwitch.m_sigResolutionClus ) {
    +      m_metFinalClusRho  = final_clus->auxdecor<double>("Rho");
    +      m_metFinalClusVarL = final_clus->auxdecor<double>("VarL");
    +      m_metFinalClusVarT = final_clus->auxdecor<double>("VarT");
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_metTrk ) {
    +    const xAOD::MissingET* final_trk = *met->find("FinalTrk"); // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based ones)
    +    m_metFinalTrk       = final_trk->met() / m_units;
    +    m_metFinalTrkPx     = final_trk->mpx() / m_units;
    +    m_metFinalTrkPy     = final_trk->mpy() / m_units;
    +    m_metFinalTrkSumEt  = final_trk->sumet() / m_units;
    +    m_metFinalTrkPhi    = final_trk->phi();
    +
    +    if ( m_infoSwitch.m_sigTrk ) {
    +      m_metFinalTrkOverSqrtSumEt  = final_trk->auxdecor<double>("METOverSqrtSumET");
    +      m_metFinalTrkOverSqrtHt     = final_trk->auxdecor<double>("METOverSqrtHT");
    +      m_metFinalTrkSignificance   = final_trk->auxdecor<double>("Significance");
    +      m_metFinalTrkSigDirectional = final_trk->auxdecor<double>("SigDirectional");
    +    }
    +
    +    if ( m_infoSwitch.m_sigResolutionTrk ) {
    +      m_metFinalTrkRho  = final_trk->auxdecor<double>("Rho");
    +      m_metFinalTrkVarL = final_trk->auxdecor<double>("VarL");
    +      m_metFinalTrkVarT = final_trk->auxdecor<double>("VarT");
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_refEle ) {
    +    const xAOD::MissingET* ref_ele       = *met->find("RefEle");
    +    m_metEle                         = ref_ele->met() / m_units;
    +    m_metEleSumEt                    = ref_ele->sumet() / m_units;
    +    m_metElePhi                      = ref_ele->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_refGamma ) {
    +    const xAOD::MissingET* ref_gamma     = *met->find("RefGamma");
    +    m_metGamma                       = ref_gamma->met() / m_units;
    +    m_metGammaSumEt                  = ref_gamma->sumet() / m_units;
    +    m_metGammaPhi                    = ref_gamma->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_refTau ) {
    +    const xAOD::MissingET* ref_tau       = *met->find("RefTau");
    +    m_metTau                         = ref_tau->met() / m_units;
    +    m_metTauSumEt                    = ref_tau->sumet() / m_units;
    +    m_metTauPhi                      = ref_tau->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_refMuons ) {
    +    const xAOD::MissingET* ref_muon      = *met->find("Muons");
    +    m_metMuons                       = ref_muon->met() / m_units;
    +    m_metMuonsSumEt                  = ref_muon->sumet() / m_units;
    +    m_metMuonsPhi                    = ref_muon->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_refJet ) {
    +    const xAOD::MissingET* ref_jet       = *met->find("RefJet");
    +    m_metJet                         = ref_jet->met() / m_units;
    +    m_metJetSumEt                    = ref_jet->sumet() / m_units;
    +    m_metJetPhi                      = ref_jet->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_refJetTrk ) {
    +    const xAOD::MissingET* ref_jet_trk   = *met->find("RefJetTrk");
    +    m_metJetTrk                          = ref_jet_trk->met() / m_units;
    +    m_metJetTrkSumEt                     = ref_jet_trk->sumet() / m_units;
    +    m_metJetTrkPhi                       = ref_jet_trk->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_softClus) {
    +    const xAOD::MissingET* ref_soft_clus = *met->find("SoftClus");
    +    m_metSoftClus                    = ref_soft_clus->met() / m_units;
    +    m_metSoftClusSumEt               = ref_soft_clus->sumet() / m_units;
    +    m_metSoftClusPhi                 = ref_soft_clus->phi();
    +  }
    +
    +  if ( m_infoSwitch.m_softTrk) {
    +    const xAOD::MissingET* ref_soft_trk  = *met->find("PVSoftTrk");
    +    m_metSoftTrk                     = ref_soft_trk->met() / m_units;
    +    m_metSoftTrkSumEt                = ref_soft_trk->sumet() / m_units;
    +    m_metSoftTrkPhi                  = ref_soft_trk->phi();
    +  }
    +
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MetHists.cxx.html b/api/program_listing_file_Root_MetHists.cxx.html new file mode 100644 index 0000000000..3535983930 --- /dev/null +++ b/api/program_listing_file_Root_MetHists.cxx.html @@ -0,0 +1,281 @@ + + + + + + + + + + + Program Listing for File MetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetHists.cxx

    +

    Return to documentation for file (Root/MetHists.cxx)

    +
    /********************************************************
    + *
    + * Met Histogramming
    + *
    + * J. Alison (john.alison@cern.ch)
    + *
    + *******************************************************/
    +
    +
    +#include <xAODAnaHelpers/MetHists.h>
    +#include <sstream>
    +
    +#include <AsgMessaging/MessageCheck.h>
    +
    +using std::vector;
    +
    +MetHists :: MetHists (std::string name, std::string detailStr) :
    +  HistogramManager(name, detailStr),
    +  m_infoSwitch(new HelperClasses::METInfoSwitch(m_detailStr))
    +{
    +  m_debug = false;
    +}
    +
    +MetHists :: ~MetHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +StatusCode MetHists::initialize() {
    +
    +  m_metFinalClus      = book(m_name,  "metFinalClus",      "metFinalClus",      100,     0,    200);
    +  m_metFinalClusPx    = book(m_name,  "metFinalClusPx",    "metFinalClusPx",    100,  -200,    200);
    +  m_metFinalClusPy    = book(m_name,  "metFinalClusPy",    "metFinalClusPy",    100,  -200,    200);
    +  m_metFinalClusSumEt = book(m_name,  "metFinalClusSumEt", "metFinalClusSumEt", 100,     0,   2000);
    +  m_metFinalClusPhi   = book(m_name,  "metFinalClusPhi",   "metFinalClusPhi",   100,    -3.2,    3.2);
    +
    +  m_metFinalTrk       = book(m_name, "metFinalTrk",       "metFinalTrk",       100,     0,    200);
    +  m_metFinalTrkPx     = book(m_name, "metFinalTrkPx",     "metFinalTrkPx",     100,  -200,    200);
    +  m_metFinalTrkPy     = book(m_name, "metFinalTrkPy",     "metFinalTrkPy",     100,  -200,    200);
    +  m_metFinalTrkSumEt  = book(m_name, "metFinalTrkSumEt",  "metFinalTrkSumEt",  100,     0,   2000);
    +  m_metFinalTrkPhi    = book(m_name, "metFinalTrkPhi",    "metFinalTrkPhi",    100,    -3.2,    3.2);
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode MetHists::execute( const xAOD::MissingETContainer* met, float eventWeight ) {
    +
    +  if(m_debug) std::cout << "MetHists: in execute " <<std::endl;
    +
    +  //
    +  // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based ones)
    +  //
    +  const xAOD::MissingET* final_clus = *met->find("FinalClus");
    +  m_metFinalClus      -> Fill( final_clus->met()   / 1e3, eventWeight);
    +  m_metFinalClusPx    -> Fill( final_clus->mpx()   / 1e3, eventWeight);
    +  m_metFinalClusPy    -> Fill( final_clus->mpy()   / 1e3, eventWeight);
    +  m_metFinalClusSumEt -> Fill( final_clus->sumet() / 1e3, eventWeight);
    +  m_metFinalClusPhi   -> Fill( final_clus->phi()        , eventWeight);
    +
    +  //
    +  // ("FinalClus" uses the calocluster-based soft terms, "FinalTrk" uses the track-based ones)
    +  //
    +  const xAOD::MissingET* final_trk = *met->find("FinalTrk");
    +  m_metFinalTrk       -> Fill( final_trk->met()   / 1e3,  eventWeight);
    +  m_metFinalTrkPx     -> Fill( final_trk->mpx()   / 1e3,  eventWeight);
    +  m_metFinalTrkPy     -> Fill( final_trk->mpy()   / 1e3,  eventWeight);
    +  m_metFinalTrkSumEt  -> Fill( final_trk->sumet() / 1e3,  eventWeight);
    +  m_metFinalTrkPhi    -> Fill( final_trk->phi()        ,  eventWeight);
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MetHistsAlgo.cxx.html b/api/program_listing_file_Root_MetHistsAlgo.cxx.html new file mode 100644 index 0000000000..38c16f0c2d --- /dev/null +++ b/api/program_listing_file_Root_MetHistsAlgo.cxx.html @@ -0,0 +1,296 @@ + + + + + + + + + + + Program Listing for File MetHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetHistsAlgo.cxx

    +

    Return to documentation for file (Root/MetHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +#include <xAODAnaHelpers/MetHistsAlgo.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MetHistsAlgo)
    +
    +MetHistsAlgo :: MetHistsAlgo () :
    +    Algorithm("MetHistsAlgo")
    +{
    +}
    +
    +EL::StatusCode MetHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +
    +  // let's initialize the algorithm to use the xAODRootAccess package
    +  xAOD::Init("MetHistsAlgo").ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MetHistsAlgo :: histInitialize ()
    +{
    +
    +  ANA_MSG_INFO( m_name );
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  if( m_inContainerName.empty() || m_detailStr.empty() ){
    +    ANA_MSG_ERROR( "One or more required configuration values are empty");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // declare class and add histograms to output
    +  m_plots = new MetHists(m_name, m_detailStr);
    +  ANA_CHECK( m_plots -> initialize());
    +  m_plots -> record( wk() );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MetHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MetHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode MetHistsAlgo :: initialize ()
    +{
    +  ANA_MSG_INFO( "MetHistsAlgo");
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MetHistsAlgo :: execute ()
    +{
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +
    +  float eventWeight(1);
    +  if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) {
    +    eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" );
    +  }
    +
    +  const xAOD::MissingETContainer* met(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(met, m_inContainerName, m_event, m_store, msg()) );
    +
    +  ANA_CHECK( m_plots->execute( met, eventWeight ));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MetHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MetHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode MetHistsAlgo :: histFinalize ()
    +{
    +  // clean up memory
    +  if(m_plots) delete m_plots;
    +
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MinixAOD.cxx.html b/api/program_listing_file_Root_MinixAOD.cxx.html new file mode 100644 index 0000000000..b048c7783e --- /dev/null +++ b/api/program_listing_file_Root_MinixAOD.cxx.html @@ -0,0 +1,555 @@ + + + + + + + + + + + Program Listing for File MinixAOD.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MinixAOD.cxx

    +

    Return to documentation for file (Root/MinixAOD.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +// output stream
    +#include "EventLoop/OutputStream.h"
    +
    +// EDM include(s):
    +#include "xAODCore/AuxContainerBase.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODCore/ShallowCopy.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/ElectronAuxContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/JetAuxContainer.h"
    +#include "xAODJet/Jet.h"
    +#include "xAODMissingET/MissingETContainer.h"
    +#include "xAODMissingET/MissingETAuxContainer.h"
    +#include "xAODMissingET/MissingET.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODMuon/MuonAuxContainer.h"
    +#include "xAODMuon/Muon.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODEgamma/PhotonAuxContainer.h"
    +#include "xAODEgamma/Photon.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODTau/TauJetAuxContainer.h"
    +#include "xAODTau/TauJet.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/MinixAOD.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MinixAOD)
    +
    +MinixAOD :: MinixAOD () :
    +    Algorithm("MinixAOD")
    +{
    +}
    +
    +EL::StatusCode MinixAOD :: setupJob (EL::Job& job)
    +{
    +  ANA_MSG_DEBUG("Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "MinixAOD" ).ignore(); // call before opening first file
    +
    +  // only create the output xaod if requested
    +  if(m_createOutputFile){
    +    EL::OutputStream out_xAOD (m_outputFileName, "xAOD");
    +    job.outputAdd (out_xAOD);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MinixAOD :: histInitialize ()
    +{
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MinixAOD :: changeInput (bool firstFile)
    +{
    +  //
    +  // Update CutBookkeeper
    +  if(m_copyCutBookkeeper)
    +    {
    +      // Retrieve the input container:
    +      const xAOD::CutBookkeeperContainer* inputCBKContainer(nullptr);
    +      ANA_CHECK( wk()->xaodEvent()->retrieveMetaInput(inputCBKContainer, "CutBookkeepers"));
    +
    +      if(firstFile)
    +    {
    +      // Create an output container
    +      m_outputCBKContainer     = new xAOD::CutBookkeeperContainer();
    +      m_outputCBKContainer_aux = new xAOD::CutBookkeeperAuxContainer();
    +      m_outputCBKContainer->setStore( m_outputCBKContainer_aux );
    +
    +      // Create an empty incomplete output container
    +      m_outputInCBKContainer     = new xAOD::CutBookkeeperContainer();
    +      m_outputInCBKContainer_aux = new xAOD::CutBookkeeperAuxContainer();
    +      m_outputInCBKContainer->setStore( m_outputInCBKContainer_aux );
    +
    +      // Create our cutbookkeeper
    +      m_outputCBK=new xAOD::CutBookkeeper();
    +      m_outputCBK->setName("MinixAODKernel");
    +      m_outputCBK->setCycle(inputCBKContainer->maxCycle()+1);
    +    }
    +
    +      // Merge
    +      m_outputCBKContainer->merge(inputCBKContainer);
    +    }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MinixAOD :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode MinixAOD :: initialize ()
    +{
    +  ANA_MSG_DEBUG("Calling initialize");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  // always do this, obviously
    +  TFile *file_xAOD = wk()->getOutputFile(m_outputFileName);
    +  ANA_CHECK( m_event->writeTo(file_xAOD));
    +
    +  if(m_copyFileMetaData){
    +    m_fileMetaDataTool = new xAODMaker::FileMetaDataTool();
    +
    +    ANA_CHECK( m_fileMetaDataTool->setProperty("OutputLevel", msg().level() ));
    +
    +
    +    ANA_CHECK( m_fileMetaDataTool->initialize());
    +    ANA_MSG_DEBUG("FileMetaDataTool initialized...");
    +  }
    +
    +  if(m_copyTriggerInfo){
    +    // m_trigMetaDataTool = new xAODMaker::TriggerMenuMetaDataTool();
    +
    +    // ANA_CHECK( m_trigMetaDataTool->setProperty("OutputLevel", msg().level() ));
    +
    +    // ANA_CHECK( m_trigMetaDataTool->initialize());
    +    // ANA_MSG_DEBUG("TriggerMenuMetaDataTool initialized...");
    +
    +    ANA_MSG_DEBUG("Adding xTrigDecision and TrigConfKeys to the list of keys copied from the input file.");
    +    m_simpleCopyKeys_vec.push_back("xTrigDecision");
    +    m_simpleCopyKeys_vec.push_back("TrigConfKeys");
    +  }
    +
    +  // parse and split by comma
    +  std::string token;
    +  std::istringstream ss("");
    +
    +  // A B C D ... Z -> {A, B, C, D, ..., Z}
    +  ss.clear(); ss.str(m_simpleCopyKeys);
    +  while(std::getline(ss, token, ' '))
    +    m_simpleCopyKeys_vec.push_back(token);
    +
    +  // A B C D ... Z -> {A, B, C, D, ..., Z}
    +  ss.clear(); ss.str(m_storeCopyKeys);
    +  while(std::getline(ss, token, ' '))
    +    m_copyFromStoreToEventKeys_vec.push_back(token);
    +
    +  // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)}
    +  ss.clear(); ss.str(m_shallowCopyKeys);
    +  while(std::getline(ss, token, ' ')){
    +    int pos = token.find_first_of('|');
    +    m_shallowCopyKeys_vec.push_back(std::pair<std::string, std::string>(token.substr(0, pos), token.substr(pos+1)));
    +  }
    +
    +  // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)}
    +  ss.clear(); ss.str(m_deepCopyKeys);
    +  while(std::getline(ss, token, ' ')){
    +    int pos = token.find_first_of('|');
    +    m_deepCopyKeys_vec.push_back(std::pair<std::string, std::string>(token.substr(0, pos), token.substr(pos+1)));
    +  }
    +
    +  // A1|A2 B1|B2 C1|C2 ... Z1|Z2 -> {(A1, A2), (B1, B2), ..., (Z1, Z2)}
    +  ss.clear(); ss.str(m_vectorCopyKeys);
    +  while(std::getline(ss, token, ' ')){
    +    int pos = token.find_first_of('|');
    +    m_vectorCopyKeys_vec.push_back(std::pair<std::string, std::string>(token.substr(0, pos), token.substr(pos+1)));
    +  }
    +
    +  ANA_MSG_DEBUG("MinixAOD Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MinixAOD :: execute ()
    +{
    +  ANA_MSG_VERBOSE( "Dumping objects...");
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, "EventInfo", m_event, m_store, msg()) );
    +
    +  //
    +  // Fill cutbookkeeper
    +  if(m_copyCutBookkeeper)
    +    {
    +      float eventWeight(1);
    +      if ( eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION) )
    +    eventWeight = eventInfo->mcEventWeight();
    +
    +      m_outputCBK->addNAcceptedEvents(1);
    +      m_outputCBK->addSumOfEventWeights(eventWeight);
    +      m_outputCBK->addSumOfEventWeightsSquared(eventWeight*eventWeight);
    +    }
    +
    +  //
    +  // Copy code
    +
    +  // simple copy is easiest - it's in the input, copy over, no need for types
    +  for(const auto& key: m_simpleCopyKeys_vec){
    +    ANA_CHECK( m_event->copy(key));
    +    ANA_MSG_DEBUG("Copying " << key << " from input file");
    +  }
    +
    +  // we need to make deep copies
    +  for(const auto& keypair: m_deepCopyKeys_vec){
    +    auto in_key = keypair.first;
    +    auto out_key = keypair.second;
    +
    +    const xAOD::IParticleContainer* cont(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(cont, in_key, nullptr, m_store, msg()));
    +
    +    if(const xAOD::ElectronContainer* t_cont = dynamic_cast<const xAOD::ElectronContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::ElectronContainer, xAOD::ElectronAuxContainer, xAOD::Electron>(m_store, out_key.c_str(), t_cont)));
    +    } else if(const xAOD::JetContainer* t_cont = dynamic_cast<const xAOD::JetContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::JetContainer, xAOD::JetAuxContainer, xAOD::Jet>(m_store, out_key.c_str(), t_cont)));
    +    } else if(const xAOD::MissingETContainer* t_cont = dynamic_cast<const xAOD::MissingETContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::MissingETContainer, xAOD::MissingETAuxContainer, xAOD::MissingET>(m_store, out_key.c_str(), t_cont)));
    +    } else if(const xAOD::MuonContainer* t_cont = dynamic_cast<const xAOD::MuonContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::MuonContainer, xAOD::MuonAuxContainer, xAOD::Muon>(m_store, out_key.c_str(), t_cont)));
    +    } else if(const xAOD::PhotonContainer* t_cont = dynamic_cast<const xAOD::PhotonContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::PhotonContainer, xAOD::PhotonAuxContainer, xAOD::Photon>(m_store, out_key.c_str(), t_cont)));
    +    } else if(const xAOD::TauJetContainer* t_cont = dynamic_cast<const xAOD::TauJetContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::makeDeepCopy<xAOD::TauJetContainer, xAOD::TauJetAuxContainer, xAOD::TauJet>(m_store, out_key.c_str(), t_cont)));
    +    } else {
    +      ANA_MSG_ERROR("Could not identify what container " << in_key << " corresponds to for deep-copying.");
    +      return EL::StatusCode::FAILURE;
    +    }
    +    m_copyFromStoreToEventKeys_vec.push_back(out_key);
    +
    +    ANA_MSG_DEBUG("Deep-Copied " << in_key << " to " << out_key << " to record to output file");
    +  }
    +
    +  // shallow IO handling (if no parent, assume deep copy)
    +  for(const auto& keypair: m_shallowCopyKeys_vec){
    +    auto key = keypair.first;
    +    auto parent = keypair.second;
    +
    +    // only add the parent if it doesn't exist
    +    if(!parent.empty()) m_copyFromStoreToEventKeys_vec.push_back(parent);
    +
    +    ANA_MSG_DEBUG("Copying " << key);
    +    if(!parent.empty()) ANA_MSG_DEBUG(" as well as it's parent " << parent);
    +
    +    m_copyFromStoreToEventKeys_vec.push_back(key);
    +  }
    +
    +  // vector handling (if no parent, assume deep copy)
    +  for(const auto& keypair: m_vectorCopyKeys_vec){
    +    auto vectorName = keypair.first;
    +    auto parent = keypair.second;
    +
    +    std::vector<std::string>* vector(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(vector, vectorName, nullptr, m_store, msg()));
    +
    +    // only add the parent if it doesn't exist
    +    if(!parent.empty()) m_copyFromStoreToEventKeys_vec.push_back(parent);
    +
    +    ANA_MSG_INFO("The following containers are being copied over:");
    +    for(const auto& key: *vector){
    +      ANA_MSG_DEBUG("\t" << key);
    +      m_copyFromStoreToEventKeys_vec.push_back(key);
    +    }
    +    if(!parent.empty()) ANA_MSG_DEBUG("... along with their parent " << parent);
    +
    +  }
    +
    +  // remove duplicates from m_copyFromStoreToEventKeys_vec
    +  // - see http://stackoverflow.com/a/1041939/1532974
    +  std::set<std::string> s;
    +  unsigned size = m_copyFromStoreToEventKeys_vec.size();
    +  for( unsigned i = 0; i < size; ++i ) s.insert( m_copyFromStoreToEventKeys_vec[i] );
    +  m_copyFromStoreToEventKeys_vec.assign( s.begin(), s.end() );
    +
    +  // all we need to do is retrieve it and figure out what type it is to record it and we're done
    +  for(const auto& key: m_copyFromStoreToEventKeys_vec){
    +    const xAOD::IParticleContainer* cont(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(cont, key, nullptr, m_store, msg()));
    +
    +    if(dynamic_cast<const xAOD::ElectronContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::ElectronContainer, xAOD::ElectronAuxContainer>(m_event, m_store, key)));
    +    } else if(dynamic_cast<const xAOD::JetContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::JetContainer, xAOD::JetAuxContainer>(m_event, m_store, key)));
    +    } else if(dynamic_cast<const xAOD::MissingETContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::MissingETContainer, xAOD::MissingETAuxContainer>(m_event, m_store, key)));
    +    } else if(dynamic_cast<const xAOD::MuonContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::MuonContainer, xAOD::MuonAuxContainer>(m_event, m_store, key)));
    +    } else if(dynamic_cast<const xAOD::PhotonContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::PhotonContainer, xAOD::PhotonAuxContainer>(m_event, m_store, key)));
    +    } else if(dynamic_cast<const xAOD::TauJetContainer*>(cont)){
    +      ANA_CHECK( (HelperFunctions::recordOutput<xAOD::TauJetContainer, xAOD::TauJetAuxContainer>(m_event, m_store, key)));
    +    } else {
    +      ANA_MSG_ERROR("Could not identify what container " << key << " corresponds to for copying from TStore to TEvent.");
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    ANA_MSG_DEBUG("Copied " << key << " and it's auxiliary container from TStore to TEvent");
    +  }
    +
    +
    +  m_event->fill();
    +  ANA_MSG_DEBUG("Finished dumping objects...");
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode MinixAOD :: postExecute () { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode MinixAOD :: finalize () {
    +  //
    +  // Save cutbookkeeper
    +  if(m_copyCutBookkeeper)
    +    {
    +      ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputCBKContainer      ,"CutBookkeepers")              );
    +      ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputCBKContainer_aux  ,"CutBookkeepersAux.")          );
    +      ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputInCBKContainer    ,"IncompleteCutBookkeepers")    );
    +      ANA_CHECK( wk()->xaodEvent()->recordMeta(m_outputInCBKContainer_aux,"IncompleteCutBookkeepersAux."));
    +
    +      m_outputCBKContainer->push_back(m_outputCBK);
    +    }
    +
    +  //
    +  // Close file
    +  TFile *file_xAOD = wk()->getOutputFile(m_outputFileName);
    +  ANA_CHECK( m_event->finishWritingTo(file_xAOD));
    +
    +  if(m_fileMetaDataTool) delete m_fileMetaDataTool;
    +  // if(m_trigMetaDataTool) delete m_trigMetaDataTool;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +EL::StatusCode MinixAOD :: histFinalize ()
    +{
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonCalibrator.cxx.html b/api/program_listing_file_Root_MuonCalibrator.cxx.html new file mode 100644 index 0000000000..fa2e08ae33 --- /dev/null +++ b/api/program_listing_file_Root_MuonCalibrator.cxx.html @@ -0,0 +1,568 @@ + + + + + + + + + + + Program Listing for File MuonCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonCalibrator.cxx

    +

    Return to documentation for file (Root/MuonCalibrator.cxx)

    +
    /********************************************
    + *
    + * Interface to CP Muon calibration tool(s).
    + *
    + * M. Milesi (marco.milesi@cern.ch)
    + * F. Scutti (federico.scutti@cern.ch)
    + ********************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODMuon/Muon.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/MuonCalibrator.h"
    +#include "PATInterfaces/CorrectionCode.h" // to check the return correction code status of tools
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MuonCalibrator)
    +
    +MuonCalibrator :: MuonCalibrator () :
    +    Algorithm("MuonCalibrator")
    +{
    +}
    +
    +EL::StatusCode MuonCalibrator :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "MuonCalibrator" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing MuonCalibrator Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +  // shallow copies are made with this output container name
    +  m_outSCContainerName      = m_outContainerName + "ShallowCopy";
    +  m_outSCAuxContainerName   = m_outSCContainerName + "Aux."; // the period is very important!
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +  // Initialize the CP::MuonCalibrationPeriodTool
    +  // set calibrationMode (the default is "noOption", forcing analyses to make an explicit choice)
    +  if(m_calibrationMode == "correctData_CB"){
    +    ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 0)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::correctData_CB
    +  } else if(m_calibrationMode == "correctData_IDMS"){
    +    ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 1)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::correctData_IDMS
    +  } else if(m_calibrationMode == "notCorrectData_IDMS"){
    +    ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 2)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::notCorrectData_IDMS
    +  } else if(m_calibrationMode == "notCorrectData_CB"){
    +  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesR22#CP_MuonCalibTool_tool
    +    ANA_CHECK(m_muonCalibrationTool_handle.setProperty("calibMode", 3)); // i.e.: CP::MuonCalibrationPeriodTool::CalibMode::notCorrectData_CB
    +  }
    +  // special corrections for muons with only 2 stations; to be switched on only for the muon highPt WP
    +  if (m_do2StationsHighPt){
    +    ANA_CHECK(m_muonCalibrationTool_handle.setProperty("do2StationsHighPt", m_do2StationsHighPt));
    +  }
    +  ANA_CHECK(m_muonCalibrationTool_handle.setProperty( "IsRun3Geo", m_isRun3Geo ));
    +  ANA_CHECK(m_muonCalibrationTool_handle.setProperty( "OutputLevel", msg().level()));
    +  ANA_CHECK(m_muonCalibrationTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_muonCalibrationTool_handle);
    +
    +
    +  // ***********************************************************
    +
    +  // Get a list of recommended systematics for this tool
    +  //
    +  const CP::SystematicSet& recSyst = m_muonCalibrationTool_handle->recommendedSystematics();
    +
    +  ANA_MSG_INFO(" Initializing Muon Calibrator Systematics :");
    +  //
    +  // Make a list of systematics to be used, based on configuration input
    +  // Use HelperFunctions::getListofSystematics() for this!
    +  //
    +  m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +
    +  ANA_MSG_INFO("Will be using MuonCalibrationAndSmearingTool systematic:");
    +  auto SystMuonsNames = std::make_unique< std::vector< std::string > >();
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( m_systName.empty() ) {
    +      ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +      break;
    +    }
    +    SystMuonsNames->push_back(syst_it.name());
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +  ANA_CHECK(m_store->record(std::move(SystMuonsNames), "muons_Syst"+m_name ));
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD);
    +  }
    +
    +  ANA_MSG_INFO( "MuonCalibrator Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode MuonCalibrator :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Muon Calibration And Smearing ... ");
    +
    +  m_numEvent++;
    +
    +  if ( !isMC() && !m_forceDataCalib ) {
    +    if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Muon Calibration... "); }
    +  }
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // get the collections from TEvent or TStore
    +  //
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +  const xAOD::MuonContainer* inMuons(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName, m_event, m_store, msg()) );
    +
    +  // loop over available systematics - remember syst == EMPTY_STRING --> baseline
    +  // prepare a vector of the names of CDV containers
    +  // must be a pointer to be recorded in TStore
    +  //
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +
    +    std::string outSCContainerName(m_outSCContainerName);
    +    std::string outSCAuxContainerName(m_outSCAuxContainerName);
    +    std::string outContainerName(m_outContainerName);
    +
    +    // always append the name of the variation, including nominal which is an empty string
    +    //
    +    outSCContainerName    += syst_it.name();
    +    outSCAuxContainerName += syst_it.name();
    +    outContainerName      += syst_it.name();
    +    vecOutContainerNames->push_back( syst_it.name() );
    +
    +    // apply syst
    +    //
    +    if ( m_muonCalibrationTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR( "Failed to configure MuonCalibrationAndSmearingTool for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    // create shallow copy for calibration - one per syst
    +    //
    +    std::pair< xAOD::MuonContainer*, xAOD::ShallowAuxContainer* > calibMuonsSC = xAOD::shallowCopyContainer( *inMuons );
    +    // create ConstDataVector to be eventually stored in TStore
    +    //
    +    ConstDataVector<xAOD::MuonContainer>* calibMuonsCDV = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +    calibMuonsCDV->reserve( calibMuonsSC.first->size() );
    +
    +    // now calibrate!
    +    //
    +    unsigned int idx(0);
    +    if ( isMC() || m_forceDataCalib ) {
    +
    +      for ( auto muSC_itr : *(calibMuonsSC.first) ) {
    +
    +          ANA_MSG_VERBOSE( "  uncailbrated muon " << idx << ", pt = " << muSC_itr->pt()*1e-3 << " GeV");
    +          if(muSC_itr-> primaryTrackParticle()){
    +            if ( m_muonCalibrationTool_handle->applyCorrection(*muSC_itr) == CP::CorrectionCode::Error ) {  // Can have CorrectionCode values of Ok, OutOfValidityRange, or Error. Here only checking for Error.
    +              ANA_MSG_WARNING( "MuonCalibrationAndSmearingTool returned Error CorrectionCode");       // If OutOfValidityRange is returned no modification is made and the original muon values are taken.
    +            }
    +          }
    +
    +          ANA_MSG_VERBOSE( "  corrected muon pt = " << muSC_itr->pt()*1e-3 << " GeV");
    +          ++idx;
    +
    +      } // close calibration loop
    +    }
    +
    +    ANA_MSG_DEBUG( "setOriginalObjectLink");
    +    if ( !xAOD::setOriginalObjectLink(*inMuons, *(calibMuonsSC.first)) ) {
    +      ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed.");
    +    }
    +
    +    // save pointers in ConstDataVector with same order
    +    //
    +    ANA_MSG_DEBUG( "makeSubsetCont");
    +    ANA_CHECK( HelperFunctions::makeSubsetCont(calibMuonsSC.first, calibMuonsCDV, msg()));
    +    ANA_MSG_DEBUG( "done makeSubsetCont");
    +
    +    // sort after coping to CDV
    +    if ( m_sort ) {
    +      ANA_MSG_DEBUG( "sorting");
    +      std::sort( calibMuonsCDV->begin(), calibMuonsCDV->end(), HelperFunctions::sort_pt );
    +    }
    +
    +    // add SC container to TStore
    +    //
    +    ANA_MSG_DEBUG( "recording calibMuonsSC");
    +    ANA_CHECK( m_store->record( calibMuonsSC.first,  outSCContainerName  ));
    +    ANA_CHECK( m_store->record( calibMuonsSC.second, outSCAuxContainerName ));
    +
    +    //
    +    // add ConstDataVector to TStore
    +    //
    +    ANA_MSG_DEBUG( "record calibMuonsCDV");
    +    ANA_CHECK( m_store->record( calibMuonsCDV, outContainerName));
    +
    +  } // close loop on systematics
    +
    +  // add vector<string container_names_syst> to TStore
    +  //
    +  ANA_MSG_DEBUG( "record m_outputAlgoSystNames");
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  ANA_MSG_DEBUG( "Left ");
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode MuonCalibrator :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_DEBUG( "Calling finalize");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonCalibrator :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonContainer.cxx.html b/api/program_listing_file_Root_MuonContainer.cxx.html new file mode 100644 index 0000000000..9dbf806d86 --- /dev/null +++ b/api/program_listing_file_Root_MuonContainer.cxx.html @@ -0,0 +1,1296 @@ + + + + + + + + + + + Program Listing for File MuonContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonContainer.cxx

    +

    Return to documentation for file (Root/MuonContainer.cxx)

    +
    #include "xAODAnaHelpers/MuonContainer.h"
    +
    +#include <iostream>
    +
    +using namespace xAH;
    +using std::vector;
    +using std::string;
    +
    +MuonContainer::MuonContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs)
    +  : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs)
    +{
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_charge          = new std::vector<float> ();
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched          = new     vector<int>               ();
    +    m_isTrigMatchedToChain   = new     vector<vector<int> >      ();
    +    m_listTrigChains         = new     vector<vector<std::string> >();
    +  }
    +
    +  // isolation
    +  if ( m_infoSwitch.m_isolation ) {
    +    m_isIsolated = new std::map< std::string, std::vector< int >* >();
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        (*m_isIsolated)[ isol ] = new std::vector< int >;
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20                                   = new  vector<float> ();
    +    m_neflowisol20                                   = new  vector<float> ();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500     = new  vector<float> ();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000    = new  vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500  = new  vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 = new  vector<float> ();
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    m_topoetcone20_CloseByCorr                                     = new  vector<float> ();
    +    m_neflowisol20_CloseByCorr                                     = new  vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr    = new  vector<float> ();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr   = new  vector<float> (); //not available for LRT
    +  }
    +
    +  // quality
    +  if ( m_infoSwitch.m_quality ) {
    +    m_quality = new std::map< std::string, std::vector< int >* >();
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        (*m_quality)[ quality ] = new std::vector< int >;
    +      }
    +    }
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    m_RecoEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_IsoEff_SF  = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_TrigEff_SF = new std::map< std::string, std::vector< std::vector< float > >* >();
    +    m_TrigMCEff  = new std::map< std::string, std::vector< std::vector< float > >* >();
    +
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      (*m_RecoEff_SF)[ reco ] = new std::vector< std::vector< float > >;
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        (*m_TrigEff_SF)[ trig+reco ] = new std::vector< std::vector< float > >;
    +        (*m_TrigMCEff)[ trig+reco ] = new std::vector< std::vector< float > >;
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      (*m_IsoEff_SF)[ isol ] = new std::vector< std::vector< float > >;
    +    }
    +
    +    m_TTVAEff_SF = new vector< vector< float > > ();
    +
    +  }
    +      // track parameters
    +  if ( m_infoSwitch.m_trackparams ) {
    +    m_trkd0            = new vector<float> ();
    +    m_trkd0sig         = new vector<float> ();
    +    m_trkz0            = new vector<float> ();
    +    m_trkz0sintheta    = new vector<float> ();
    +    m_trkphi0          = new vector<float> ();
    +    m_trktheta         = new vector<float> ();
    +    m_trkcharge        = new vector<float> ();
    +    m_trkqOverP        = new vector<float> ();
    +  }
    +
    +      // track hit content
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    m_trknSiHits                = new vector<int>   ();
    +    m_trknPixHits               = new vector<int>   ();
    +    m_trknPixHoles              = new vector<int>   ();
    +    m_trknSCTHits               = new vector<int>   ();
    +    m_trknSCTHoles              = new vector<int>   ();
    +    m_trknTRTHits               = new vector<int>   ();
    +    m_trknTRTHoles              = new vector<int>   ();
    +    m_trknBLayerHits            = new vector<int>   ();
    +    m_trknInnermostPixLayHits   = new vector<int>   ();         // not available in DC14
    +    m_trkPixdEdX                = new vector<float> ();         // not available in DC14
    +  }
    +
    +  if ( m_infoSwitch.m_energyLoss ) {
    +    m_EnergyLoss                   = new vector<float>         ();
    +    m_EnergyLossSigma              = new vector<float>         ();
    +    m_energyLossType               = new vector<unsigned char> ();
    +    m_MeasEnergyLoss               = new vector<float>         ();
    +    m_MeasEnergyLossSigma          = new vector<float>         ();
    +    m_ParamEnergyLoss              = new vector<float>         ();
    +    m_ParamEnergyLossSigmaMinus    = new vector<float>         ();
    +    m_ParamEnergyLossSigmaPlus     = new vector<float>         ();
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    m_PromptLeptonInput_DL1mu           = new std::vector<float> ();
    +    m_PromptLeptonInput_DRlj            = new std::vector<float> ();
    +    m_PromptLeptonInput_LepJetPtFrac    = new std::vector<float> ();
    +    m_PromptLeptonInput_PtFrac          = new std::vector<float> ();
    +    m_PromptLeptonInput_PtRel           = new std::vector<float> ();
    +    m_PromptLeptonInput_TrackJetNTrack  = new std::vector<int>   ();
    +    m_PromptLeptonInput_ip2             = new std::vector<float> ();
    +    m_PromptLeptonInput_ip3             = new std::vector<float> ();
    +    m_PromptLeptonInput_rnnip           = new std::vector<float> ();
    +    m_PromptLeptonInput_sv1_jf_ntrkv    = new std::vector<int>   ();
    +    m_PromptLeptonIso                   = new std::vector<float> ();
    +    m_PromptLeptonVeto                  = new std::vector<float> ();
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    m_isLRT = new std::vector<char>();
    +    m_passIDcuts = new std::vector<char>();
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    m_passSel = new std::vector<char>();
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    m_passOR = new std::vector<char>();
    +  }
    +
    +}
    +
    +MuonContainer::~MuonContainer()
    +{
    +  if ( m_infoSwitch.m_kinematic ) {
    +    delete m_charge;
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    delete m_isTrigMatched         ;
    +    delete m_isTrigMatchedToChain  ;
    +    delete m_listTrigChains        ;
    +  }
    +
    +  // isolation
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        delete (*m_isIsolated)[ isol ];
    +      }
    +    }
    +    delete m_isIsolated;
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    delete m_topoetcone20                               ;
    +    delete m_neflowisol20                               ;
    +    delete m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ;
    +    delete m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000;
    +  }
    +
    +  if (m_infoSwitch.m_closeByCorr) {
    +    delete m_topoetcone20_CloseByCorr                                    ;
    +    delete m_neflowisol20_CloseByCorr                                    ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr   ;
    +    delete m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr  ; //not available for LRT
    +  }
    +
    +  // quality
    +  if ( m_infoSwitch.m_quality ) {
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        delete (*m_quality)[ quality ];
    +      }
    +    }
    +    delete m_quality;
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      delete (*m_RecoEff_SF)[ reco ];
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        delete (*m_TrigEff_SF)[ trig+reco ];
    +        delete (*m_TrigMCEff)[ trig+reco ];
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      delete (*m_IsoEff_SF)[ isol ];
    +    }
    +
    +    delete m_RecoEff_SF ;
    +    delete m_IsoEff_SF  ;
    +    delete m_TrigEff_SF ;
    +    delete m_TrigMCEff  ;
    +
    +    delete m_TTVAEff_SF ;
    +
    +  }
    +      // track parameters
    +  if ( m_infoSwitch.m_trackparams ) {
    +    delete m_trkd0            ;
    +    delete m_trkd0sig         ;
    +    delete m_trkz0            ;
    +    delete m_trkz0sintheta    ;
    +    delete m_trkphi0          ;
    +    delete m_trktheta         ;
    +    delete m_trkcharge        ;
    +    delete m_trkqOverP        ;
    +  }
    +
    +      // track hit content
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    delete m_trknSiHits                ;
    +    delete m_trknPixHits               ;
    +    delete m_trknPixHoles              ;
    +    delete m_trknSCTHits               ;
    +    delete m_trknSCTHoles              ;
    +    delete m_trknTRTHits               ;
    +    delete m_trknTRTHoles              ;
    +    delete m_trknBLayerHits            ;
    +    delete m_trknInnermostPixLayHits   ;         // not available in DC14
    +    delete m_trkPixdEdX                ;         // not available in DC14
    +  }
    +
    +  if ( m_infoSwitch.m_energyLoss ) {
    +    delete m_EnergyLoss                   ;
    +    delete m_EnergyLossSigma              ;
    +    delete m_energyLossType               ;
    +    delete m_MeasEnergyLoss               ;
    +    delete m_MeasEnergyLossSigma          ;
    +    delete m_ParamEnergyLoss              ;
    +    delete m_ParamEnergyLossSigmaMinus    ;
    +    delete m_ParamEnergyLossSigmaPlus     ;
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    delete m_PromptLeptonInput_DL1mu           ;
    +    delete m_PromptLeptonInput_DRlj            ;
    +    delete m_PromptLeptonInput_LepJetPtFrac    ;
    +    delete m_PromptLeptonInput_PtFrac          ;
    +    delete m_PromptLeptonInput_PtRel           ;
    +    delete m_PromptLeptonInput_TrackJetNTrack  ;
    +    delete m_PromptLeptonInput_ip2             ;
    +    delete m_PromptLeptonInput_ip3             ;
    +    delete m_PromptLeptonInput_rnnip           ;
    +    delete m_PromptLeptonInput_sv1_jf_ntrkv    ;
    +    delete m_PromptLeptonIso                   ;
    +    delete m_PromptLeptonVeto                  ;
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    delete m_isLRT;
    +    delete m_passIDcuts;
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    delete m_passSel;
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    delete m_passOR;
    +  }
    +
    +}
    +
    +void MuonContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    connectBranch<float>(tree, "charge", &m_charge);
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    connectBranch<int>         (tree, "isTrigMatched",        &m_isTrigMatched);
    +    connectBranch<vector<int> >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain );
    +    connectBranch<vector<string> >(tree, "listTrigChains",    &m_listTrigChains );
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        tree->SetBranchStatus ( (m_name + "_isIsolated_" + isol).c_str() , 1);
    +        tree->SetBranchAddress( (m_name + "_isIsolated_" + isol).c_str() , & (*m_isIsolated)[ isol ] );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    connectBranch<float>(tree,"topoetcone20",   &m_topoetcone20);
    +    connectBranch<float>(tree,"neflowisol20",   &m_neflowisol20);
    +    connectBranch<float>(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt500",  &m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500);
    +    connectBranch<float>(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000", &m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000);
    +    connectBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500",  &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500);
    +    connectBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000);
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    connectBranch<float>(tree,"topoetcone20_CloseByCorr", &m_topoetcone20_CloseByCorr                                  );
    +    connectBranch<float>(tree,"neflowisol20_CloseByCorr", &m_neflowisol20_CloseByCorr                                  );
    +    connectBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr );
    +    connectBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr", &m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr); //not available for LRT
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      tree->SetBranchStatus ( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , 1);
    +      tree->SetBranchAddress( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , & (*m_RecoEff_SF)[ reco ] );
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        tree->SetBranchStatus ( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , 1 );
    +        tree->SetBranchAddress( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , & (*m_TrigEff_SF)[ trig+reco ] );
    +
    +        tree->SetBranchStatus ( (m_name + "_TrigMCEff_"  + trig + "_Reco" + reco).c_str() , 1 );
    +        tree->SetBranchAddress( (m_name + "_TrigMCEff_"  + trig + "_Reco" + reco).c_str() , & (*m_TrigMCEff) [ trig+reco ] );
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        tree->SetBranchStatus ( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , 1);
    +        tree->SetBranchAddress( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , & (*m_IsoEff_SF)[ isol ] );
    +      }
    +    }
    +
    +    connectBranch<vector<float> >(tree,"TTVAEff_SF",  &m_TTVAEff_SF);
    +  }
    +
    +  if ( m_infoSwitch.m_quality ) {
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        tree->SetBranchStatus ( (m_name + "_is" + quality).c_str() , 1);
    +        tree->SetBranchAddress( (m_name + "_is" + quality).c_str() , & (*m_quality)[ quality ] );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    connectBranch<float>(tree,"trkd0",          &m_trkd0);
    +    connectBranch<float>(tree,"trkd0sig",       &m_trkd0sig);
    +    connectBranch<float>(tree,"trkz0",          &m_trkz0);
    +    connectBranch<float>(tree,"trkz0sintheta",  &m_trkz0sintheta);
    +    connectBranch<float>(tree,"trkphi0",        &m_trkphi0);
    +    connectBranch<float>(tree,"trktheta",       &m_trktheta);
    +    connectBranch<float>(tree,"trkcharge",      &m_trkcharge);
    +    connectBranch<float>(tree,"trkqOverP",      &m_trkqOverP);
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    connectBranch<int>(tree,"trknSiHits",    &m_trknSiHits);
    +    connectBranch<int>(tree,"trknPixHits",   &m_trknPixHits);
    +    connectBranch<int>(tree,"trknPixHoles",  &m_trknPixHoles);
    +    connectBranch<int>(tree,"trknSCTHits",   &m_trknSCTHits);
    +    connectBranch<int>(tree,"trknSCTHoles",  &m_trknSCTHoles);
    +    connectBranch<int>(tree,"trknTRTHits",   &m_trknTRTHits);
    +    connectBranch<int>(tree,"trknTRTHoles",  &m_trknTRTHoles);
    +    connectBranch<int>(tree,"trknBLayerHits",&m_trknBLayerHits);
    +    connectBranch<int>(tree,"trknInnermostPixLayHits",  &m_trknInnermostPixLayHits);
    +    connectBranch<float>(tree,"trkPixdEdX",    &m_trkPixdEdX);
    +  }
    +
    +  if(m_infoSwitch.m_energyLoss ) {
    +    connectBranch<float>(tree,"EnergyLoss"                ,  &m_EnergyLoss               );
    +    connectBranch<float>(tree,"EnergyLossSigma"           ,  &m_EnergyLossSigma          );
    +    connectBranch<unsigned char>(tree,"energyLossType"            ,  &m_energyLossType           );
    +    connectBranch<float>(tree,"MeasEnergyLoss"            ,  &m_MeasEnergyLoss           );
    +    connectBranch<float>(tree,"MeasEnergyLossSigma"       ,  &m_MeasEnergyLossSigma      );
    +    connectBranch<float>(tree,"ParamEnergyLoss"           ,  &m_ParamEnergyLoss          );
    +    connectBranch<float>(tree,"ParamEnergyLossSigmaMinus" ,  &m_ParamEnergyLossSigmaMinus);
    +    connectBranch<float>(tree,"ParamEnergyLossSigmaPlus"  ,  &m_ParamEnergyLossSigmaPlus );
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    connectBranch<float>(tree, "PromptLeptonInput_DL1mu",          &m_PromptLeptonInput_DL1mu);
    +    connectBranch<float>(tree, "PromptLeptonInput_DRlj",           &m_PromptLeptonInput_DRlj);
    +    connectBranch<float>(tree, "PromptLeptonInput_LepJetPtFrac",   &m_PromptLeptonInput_LepJetPtFrac);
    +    connectBranch<float>(tree, "PromptLeptonInput_PtFrac",         &m_PromptLeptonInput_PtFrac);
    +    connectBranch<float>(tree, "PromptLeptonInput_PtRel",          &m_PromptLeptonInput_PtRel);
    +    connectBranch<int>  (tree, "PromptLeptonInput_TrackJetNTrack", &m_PromptLeptonInput_TrackJetNTrack);
    +    connectBranch<float>(tree, "PromptLeptonInput_ip2",            &m_PromptLeptonInput_ip2);
    +    connectBranch<float>(tree, "PromptLeptonInput_ip3",            &m_PromptLeptonInput_ip3);
    +    connectBranch<float>(tree, "PromptLeptonInput_rnnip",          &m_PromptLeptonInput_rnnip);
    +    connectBranch<int>  (tree, "PromptLeptonInput_sv1_jf_ntrkv",   &m_PromptLeptonInput_sv1_jf_ntrkv);
    +    connectBranch<float>(tree, "PromptLeptonIso",                  &m_PromptLeptonIso);
    +    connectBranch<float>(tree, "PromptLeptonVeto",                 &m_PromptLeptonVeto);
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    connectBranch<char>(tree,"isLRT",&m_isLRT);
    +    connectBranch<char>(tree,"passIDcuts",&m_passIDcuts);
    +  }
    +  if(m_infoSwitch.m_passSel) connectBranch<char>(tree,"passSel",&m_passSel);
    +  if(m_infoSwitch.m_passOR) connectBranch<char>(tree,"passOR",&m_passOR);
    +
    +}
    +
    +void MuonContainer::updateParticle(uint idx, Muon& muon)
    +{
    +  ParticleContainer::updateParticle(idx,muon);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    muon.charge = m_charge->at(idx);
    +  }
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    muon.isTrigMatched         =     m_isTrigMatched         ->at(idx);
    +    muon.isTrigMatchedToChain  =     m_isTrigMatchedToChain  ->at(idx);
    +    muon.listTrigChains        =     m_listTrigChains        ->at(idx);
    +  }
    +
    +  // isolation
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        muon.isIsolated[isol] = (*m_isIsolated)[ isol ]->at(idx);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    muon.topoetcone20                             =     m_topoetcone20                               ->at(idx);
    +    muon.neflowisol20                             =     m_neflowisol20                               ->at(idx);
    +    muon.ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 = m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500   -> at(idx);
    +    muon.ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 = m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 -> at(idx);
    +    muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500   -> at(idx);
    +    muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 -> at(idx);
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    muon.topoetcone20_CloseByCorr       = m_topoetcone20_CloseByCorr                                     ->at(idx);
    +    muon.neflowisol20_CloseByCorr       = m_neflowisol20_CloseByCorr                                     ->at(idx);
    +    muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr    ->at(idx);
    +    muon.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr = m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr   ->at(idx); //not available for LRT
    +  }
    +
    +  // quality
    +  if ( m_infoSwitch.m_quality ) {
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        muon.quality[quality] = (*m_quality)[ quality ]->at(idx);
    +      }
    +    }
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      muon.RecoEff_SF[ reco ] = (*m_RecoEff_SF)[ reco ]->at(idx);
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        muon.TrigEff_SF[ trig+reco ] = (*m_TrigEff_SF)[ trig+reco ]->at(idx);
    +        muon.TrigMCEff [ trig+reco ] = (*m_TrigMCEff )[ trig+reco ]->at(idx);
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      muon.IsoEff_SF[ isol ] = (*m_IsoEff_SF)[ isol ]->at(idx);
    +    }
    +
    +    muon.TTVAEff_SF = m_TTVAEff_SF -> at(idx);
    +  }
    +      // track parameters
    +  if ( m_infoSwitch.m_trackparams ) {
    +    muon.trkd0             = m_trkd0            ->at(idx);
    +    muon.trkd0sig          = m_trkd0sig         ->at(idx);
    +    muon.trkz0             = m_trkz0            ->at(idx);
    +    muon.trkz0sintheta     = m_trkz0sintheta    ->at(idx);
    +    muon.trkphi0           = m_trkphi0          ->at(idx);
    +    muon.trktheta          = m_trktheta         ->at(idx);
    +    muon.trkcharge         = m_trkcharge        ->at(idx);
    +    muon.trkqOverP         = m_trkqOverP        ->at(idx);
    +  }
    +
    +      // track hit content
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    muon.trknSiHits                 = m_trknSiHits                ->at(idx);
    +    muon.trknPixHits                = m_trknPixHits               ->at(idx);
    +    muon.trknPixHoles               = m_trknPixHoles              ->at(idx);
    +    muon.trknSCTHits                = m_trknSCTHits               ->at(idx);
    +    muon.trknSCTHoles               = m_trknSCTHoles              ->at(idx);
    +    muon.trknTRTHits                = m_trknTRTHits               ->at(idx);
    +    muon.trknTRTHoles               = m_trknTRTHoles              ->at(idx);
    +    muon.trknBLayerHits             = m_trknBLayerHits            ->at(idx);
    +    muon.trknInnermostPixLayHits    = m_trknInnermostPixLayHits   ->at(idx);         // not available in DC14
    +    muon.trkPixdEdX                 = m_trkPixdEdX                ->at(idx);         // not available in DC14
    +  }
    +
    +  if ( m_infoSwitch.m_energyLoss ) {
    +    muon.EnergyLoss                    = m_EnergyLoss                   ->at(idx);
    +    muon.EnergyLossSigma               = m_EnergyLossSigma              ->at(idx);
    +    muon.energyLossType                = m_energyLossType               ->at(idx);
    +    muon.MeasEnergyLoss                = m_MeasEnergyLoss               ->at(idx);
    +    muon.MeasEnergyLossSigma           = m_MeasEnergyLossSigma          ->at(idx);
    +    muon.ParamEnergyLoss               = m_ParamEnergyLoss              ->at(idx);
    +    muon.ParamEnergyLossSigmaMinus     = m_ParamEnergyLossSigmaMinus    ->at(idx);
    +    muon.ParamEnergyLossSigmaPlus      = m_ParamEnergyLossSigmaPlus     ->at(idx);
    +  }
    +
    +  // prompt lepton
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    muon.PromptLeptonInput_DL1mu           = m_PromptLeptonInput_DL1mu           ->at(idx);
    +    muon.PromptLeptonInput_DRlj            = m_PromptLeptonInput_DRlj            ->at(idx);
    +    muon.PromptLeptonInput_LepJetPtFrac    = m_PromptLeptonInput_LepJetPtFrac    ->at(idx);
    +    muon.PromptLeptonInput_PtFrac          = m_PromptLeptonInput_PtFrac          ->at(idx);
    +    muon.PromptLeptonInput_PtRel           = m_PromptLeptonInput_PtRel           ->at(idx);
    +    muon.PromptLeptonInput_TrackJetNTrack  = m_PromptLeptonInput_TrackJetNTrack  ->at(idx);
    +    muon.PromptLeptonInput_ip2             = m_PromptLeptonInput_ip2             ->at(idx);
    +    muon.PromptLeptonInput_ip3             = m_PromptLeptonInput_ip3             ->at(idx);
    +    muon.PromptLeptonInput_rnnip           = m_PromptLeptonInput_rnnip           ->at(idx);
    +    muon.PromptLeptonInput_sv1_jf_ntrkv    = m_PromptLeptonInput_sv1_jf_ntrkv    ->at(idx);
    +    muon.PromptLeptonIso                   = m_PromptLeptonIso                   ->at(idx);
    +    muon.PromptLeptonVeto                  = m_PromptLeptonVeto                  ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    muon.isLRT = m_isLRT->at(idx);
    +    muon.passIDcuts = m_passIDcuts->at(idx);
    +  }
    +
    +  // passSel
    +  if(m_infoSwitch.m_passSel) muon.passSel = m_passSel->at(idx);
    +  // passOR
    +  if(m_infoSwitch.m_passOR) muon.passOR = m_passOR->at(idx);
    +
    +}
    +
    +
    +void MuonContainer::setBranches(TTree *tree)
    +{
    +
    +  ParticleContainer::setBranches(tree);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    setBranch<float>(tree, "charge", m_charge);
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    // this is true if there's a match for at least one trigger chain
    +    setBranch<int>(tree,"isTrigMatched", m_isTrigMatched);
    +    // a vector of trigger match decision for each muon trigger chain
    +    setBranch<vector<int> >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain );
    +    // a vector of strings for each muon trigger chain - 1:1 correspondence w/ vector above
    +    setBranch<vector<string> >(tree, "listTrigChains", m_listTrigChains );
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        setBranch<int>(tree, "isIsolated_" + isol, (*m_isIsolated)[isol]);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    setBranch<float>(tree,"topoetcone20",   m_topoetcone20);
    +    setBranch<float>(tree,"neflowisol20",   m_neflowisol20);
    +    setBranch<float>(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt500",  m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500);
    +    setBranch<float>(tree,"ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000", m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000);
    +    setBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500",  m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500);
    +    setBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000);
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    setBranch<float>(tree,"topoetcone20_CloseByCorr", m_topoetcone20_CloseByCorr                                   );
    +    setBranch<float>(tree,"neflowisol20_CloseByCorr", m_neflowisol20_CloseByCorr                                   );
    +    setBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr  );
    +    setBranch<float>(tree,"ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr", m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ); //not available for LRT
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      tree->Branch( (m_name + "_RecoEff_SF_Reco" + reco).c_str() , (*m_RecoEff_SF)[ reco ] );
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        tree->Branch( (m_name + "_TrigEff_SF_" + trig + "_Reco" + reco).c_str() , (*m_TrigEff_SF)[ trig+reco ] );
    +        tree->Branch( (m_name + "_TrigMCEff_" + trig + "_Reco" + reco).c_str() , (*m_TrigMCEff)[ trig+reco ] );
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      tree->Branch( (m_name + "_IsoEff_SF_Iso" + isol).c_str() , (*m_IsoEff_SF)[ isol ] );
    +    }
    +
    +    setBranch<vector<float> >(tree,"TTVAEff_SF",  m_TTVAEff_SF);
    +
    +  }
    +
    +  if ( m_infoSwitch.m_quality ) {
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        setBranch<int>(tree, "is" + quality, (*m_quality)[quality]);
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    setBranch<float>(tree,"trkd0",          m_trkd0);
    +    setBranch<float>(tree,"trkd0sig",       m_trkd0sig);
    +    setBranch<float>(tree,"trkz0",          m_trkz0);
    +    setBranch<float>(tree,"trkz0sintheta",  m_trkz0sintheta);
    +    setBranch<float>(tree,"trkphi0",        m_trkphi0);
    +    setBranch<float>(tree,"trktheta",       m_trktheta);
    +    setBranch<float>(tree,"trkcharge",      m_trkcharge);
    +    setBranch<float>(tree,"trkqOverP",      m_trkqOverP);
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    setBranch<int>(tree,"trknSiHits",    m_trknSiHits);
    +    setBranch<int>(tree,"trknPixHits",   m_trknPixHits);
    +    setBranch<int>(tree,"trknPixHoles",  m_trknPixHoles);
    +    setBranch<int>(tree,"trknSCTHits",   m_trknSCTHits);
    +    setBranch<int>(tree,"trknSCTHoles",  m_trknSCTHoles);
    +    setBranch<int>(tree,"trknTRTHits",   m_trknTRTHits);
    +    setBranch<int>(tree,"trknTRTHoles",  m_trknTRTHoles);
    +    setBranch<int>(tree,"trknBLayerHits",m_trknBLayerHits);
    +    setBranch<int>(tree,"trknInnermostPixLayHits",  m_trknInnermostPixLayHits);
    +    setBranch<float>(tree,"trkPixdEdX",    m_trkPixdEdX);
    +  }
    +
    +  if( m_infoSwitch.m_energyLoss ) {
    +    setBranch<float>(tree,"EnergyLoss"                ,  m_EnergyLoss               );
    +    setBranch<float>(tree,"EnergyLossSigma"           ,  m_EnergyLossSigma          );
    +    setBranch<unsigned char>(tree,"energyLossType"    ,  m_energyLossType           );
    +    setBranch<float>(tree,"MeasEnergyLoss"            ,  m_MeasEnergyLoss           );
    +    setBranch<float>(tree,"MeasEnergyLossSigma"       ,  m_MeasEnergyLossSigma      );
    +    setBranch<float>(tree,"ParamEnergyLoss"           ,  m_ParamEnergyLoss          );
    +    setBranch<float>(tree,"ParamEnergyLossSigmaMinus" ,  m_ParamEnergyLossSigmaMinus);
    +    setBranch<float>(tree,"ParamEnergyLossSigmaPlus"  ,  m_ParamEnergyLossSigmaPlus );
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    setBranch<float>(tree, "PromptLeptonInput_DL1mu",           m_PromptLeptonInput_DL1mu);
    +    setBranch<float>(tree, "PromptLeptonInput_DRlj",            m_PromptLeptonInput_DRlj);
    +    setBranch<float>(tree, "PromptLeptonInput_LepJetPtFrac",    m_PromptLeptonInput_LepJetPtFrac);
    +    setBranch<float>(tree, "PromptLeptonInput_PtFrac",          m_PromptLeptonInput_PtFrac);
    +    setBranch<float>(tree, "PromptLeptonInput_PtRel",           m_PromptLeptonInput_PtRel);
    +    setBranch<int>  (tree, "PromptLeptonInput_TrackJetNTrack",  m_PromptLeptonInput_TrackJetNTrack);
    +    setBranch<float>(tree, "PromptLeptonInput_ip2",             m_PromptLeptonInput_ip2);
    +    setBranch<float>(tree, "PromptLeptonInput_ip3",             m_PromptLeptonInput_ip3);
    +    setBranch<float>(tree, "PromptLeptonInput_rnnip",           m_PromptLeptonInput_rnnip);
    +    setBranch<int>  (tree, "PromptLeptonInput_sv1_jf_ntrkv",    m_PromptLeptonInput_sv1_jf_ntrkv);
    +    setBranch<float>(tree, "PromptLeptonIso",                   m_PromptLeptonIso);
    +    setBranch<float>(tree, "PromptLeptonVeto",                  m_PromptLeptonVeto);
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    setBranch<char>(tree,"isLRT",m_isLRT);
    +    setBranch<char>(tree,"passIDcuts",m_passIDcuts);
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    setBranch<char>(tree,"passSel",m_passSel);
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    setBranch<char>(tree,"passOR",m_passOR);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    +void MuonContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_charge->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched->clear();
    +    m_isTrigMatchedToChain->clear();
    +    m_listTrigChains->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      (*m_isIsolated)[ isol ]->clear();
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20->clear();
    +    m_neflowisol20->clear();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500->clear();
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000->clear();
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    m_topoetcone20_CloseByCorr                                  ->clear();
    +    m_neflowisol20_CloseByCorr                                  ->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ->clear();
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr->clear(); //not available for LRT
    +  }
    +
    +  if ( m_infoSwitch.m_quality ) {
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      (*m_quality)[ quality ]->clear();
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    m_trkd0->clear();
    +    m_trkd0sig->clear();
    +    m_trkz0->clear();
    +    m_trkz0sintheta->clear();
    +    m_trkphi0->clear();
    +    m_trktheta->clear();
    +    m_trkcharge->clear();
    +    m_trkqOverP->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    m_trknSiHits->clear();
    +    m_trknPixHits->clear();
    +    m_trknPixHoles->clear();
    +    m_trknSCTHits->clear();
    +    m_trknSCTHoles->clear();
    +    m_trknTRTHits->clear();
    +    m_trknTRTHoles->clear();
    +    m_trknBLayerHits->clear();
    +    m_trknInnermostPixLayHits->clear();
    +    m_trkPixdEdX->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    m_PromptLeptonInput_DL1mu            -> clear();
    +    m_PromptLeptonInput_DRlj             -> clear();
    +    m_PromptLeptonInput_LepJetPtFrac     -> clear();
    +    m_PromptLeptonInput_PtFrac           -> clear();
    +    m_PromptLeptonInput_PtRel            -> clear();
    +    m_PromptLeptonInput_TrackJetNTrack   -> clear();
    +    m_PromptLeptonInput_ip2              -> clear();
    +    m_PromptLeptonInput_ip3              -> clear();
    +    m_PromptLeptonInput_rnnip            -> clear();
    +    m_PromptLeptonInput_sv1_jf_ntrkv     -> clear();
    +    m_PromptLeptonIso                    -> clear();
    +    m_PromptLeptonVeto                   -> clear();
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      (*m_RecoEff_SF)[ reco ]->clear();
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        (*m_TrigEff_SF)[ trig+reco ]->clear();
    +        (*m_TrigMCEff)[ trig+reco ]->clear();
    +      }
    +    }
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      (*m_IsoEff_SF)[ isol ]->clear();
    +    }
    +
    +    m_TTVAEff_SF->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_energyLoss ) {
    +    m_EnergyLoss->clear();
    +    m_EnergyLossSigma->clear();
    +    m_energyLossType->clear();
    +    m_MeasEnergyLoss->clear();
    +    m_MeasEnergyLossSigma->clear();
    +    m_ParamEnergyLoss->clear();
    +    m_ParamEnergyLossSigmaMinus->clear();
    +    m_ParamEnergyLossSigmaPlus->clear();
    +
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    m_isLRT->clear();
    +    m_passIDcuts->clear();
    +  }
    +
    +  if(m_infoSwitch.m_passSel){
    +    m_passSel->clear();
    +  }
    +  if(m_infoSwitch.m_passOR){
    +    m_passOR->clear();
    +  }
    +
    +}
    +
    +
    +void MuonContainer::FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex ){
    +  return FillMuon(static_cast<const xAOD::IParticle*>(muon), primaryVertex);
    +}
    +
    +void MuonContainer::FillMuon( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex )
    +{
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::Muon* muon=dynamic_cast<const xAOD::Muon*>(particle);
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_charge->push_back( muon->charge() );
    +  }
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +
    +    // retrieve map<string,char> w/ <chain,isMatched>
    +    //
    +    static SG::AuxElement::Accessor< std::map<std::string,char> > isTrigMatchedMapMuAcc("isTrigMatchedMapMu");
    +
    +    std::vector<int> matches;
    +    std::vector<string> trigChains;
    +
    +    if ( isTrigMatchedMapMuAcc.isAvailable( *muon ) ) {
    +      // loop over map and fill branches
    +      //
    +      for ( auto const &it : (isTrigMatchedMapMuAcc( *muon )) ) {
    +    matches.push_back( static_cast<int>(it.second) );
    +    trigChains.push_back( static_cast<string>(it.first) );
    +      }
    +    } else {
    +      matches.push_back( -1 );
    +      trigChains.push_back("NONE");
    +    }
    +
    +    m_isTrigMatchedToChain->push_back(matches);
    +    m_listTrigChains->push_back(trigChains);
    +
    +    // if at least one match among the chains is found, say this muon is trigger matched
    +    if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); }
    +    else { m_isTrigMatched->push_back(0); }
    +
    +  }
    +
    +
    +  if ( m_infoSwitch.m_isolation ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accIsol;
    +
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      if (!isol.empty()) {
    +        std::string isolWP = "isIsolated_" + isol;
    +        accIsol.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( isol , SG::AuxElement::Accessor<char>( isolWP ) ) );
    +        safeFill<char, int, xAOD::Muon>( muon, accIsol.at( isol ), m_isIsolated->at( isol ), -1 );
    +      }
    +    }
    +  }
    +
    +  if ( m_infoSwitch.m_isolationKinematics ) {
    +    m_topoetcone20->push_back( muon->isolation( xAOD::Iso::topoetcone20 )/m_units );
    +    m_neflowisol20->push_back( muon->isolation( xAOD::Iso::neflowisol20 )/m_units );
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ->push_back( muon->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 ) /m_units );
    +    m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000->push_back( muon->isolation( xAOD::Iso::ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 )/m_units );
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ->push_back( muon->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 ) /m_units );
    +    m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000->push_back( muon->isolation( xAOD::Iso::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 )/m_units );
    +  }
    +  if (m_infoSwitch.m_closeByCorr) {
    +    SG::AuxElement::Accessor<float> acc_topoetcone20_CloseByCorr ("topoetcone20_CloseByCorr");
    +    SG::AuxElement::Accessor<float> acc_neflowisol20_CloseByCorr ("neflowisol20_CloseByCorr");
    +    SG::AuxElement::Accessor<float> acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr");
    +    SG::AuxElement::Accessor<float> acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ("ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr");
    +    safeFill<float, float, xAOD::Muon>(muon, acc_topoetcone20_CloseByCorr, m_topoetcone20_CloseByCorr, -1, m_units);
    +    safeFill<float, float, xAOD::Muon>(muon, acc_neflowisol20_CloseByCorr, m_neflowisol20_CloseByCorr, -1, m_units);
    +    safeFill<float, float, xAOD::Muon>(muon, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr, -1, m_units);
    +    if (m_infoSwitch.m_doLRT) m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr ->push_back(-1.);
    +    else safeFill<float, float, xAOD::Muon>(muon, acc_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr, m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr, -1, m_units);
    +  }
    +
    +  if ( m_infoSwitch.m_quality ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accQuality;
    +
    +    for (auto& quality : m_infoSwitch.m_recoWPs) {
    +      if (!quality.empty()) {
    +        accQuality.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( quality , SG::AuxElement::Accessor<char>( "is" + quality + "Q" ) ) );
    +        safeFill<char, int, xAOD::Muon>( muon, accQuality.at( quality ), m_quality->at( quality ), -1 );
    +      }
    +    }
    +  }
    +
    +  const xAOD::TrackParticle* trk = muon->primaryTrackParticle();
    +
    +  if ( m_infoSwitch.m_trackparams ) {
    +    if ( trk ) {
    +      //
    +      // NB.:
    +      // All track parameters are calculated at the perigee, i.e., the point of closest approach to the origin of some r.f. (which in RunII is NOT the ATLAS detector r.f!).
    +      // The reference  frame is chosen to be a system centered in the beamspot position, with z axis parallel to the beam line.
    +      // Remember that the beamspot size ( of O(10 micrometers) in the transverse plane) is << average vertex transverse position resolution ( O(60-80 micrometers) )
    +      // The coordinates of this r.f. wrt. the ATLAS system origin are returned by means of vx(), vy(), vz()
    +      //
    +      m_trkd0->push_back( trk->d0() );
    +
    +      static SG::AuxElement::Accessor<float> d0SigAcc ("d0sig");
    +      float d0_significance =  ( d0SigAcc.isAvailable( *muon ) ) ? d0SigAcc( *muon ) : -1.0;
    +      m_trkd0sig->push_back( d0_significance );
    +
    +      if (primaryVertex)
    +        m_trkz0->push_back( trk->z0()  - ( primaryVertex->z() - trk->vz() ) );
    +      else
    +        m_trkz0->push_back( -999.0 );
    +
    +      static SG::AuxElement::Accessor<float> z0sinthetaAcc("z0sintheta");
    +      float z0sintheta =  ( z0sinthetaAcc.isAvailable( *muon ) ) ? z0sinthetaAcc( *muon ) : -999.0;
    +      m_trkz0sintheta->push_back( z0sintheta );
    +      m_trkphi0  ->push_back( trk->phi0() );
    +      m_trktheta ->push_back( trk->theta() );
    +      m_trkcharge->push_back( trk->charge() );
    +      m_trkqOverP->push_back( trk->qOverP() );
    +
    +    } else {
    +      m_trkd0          -> push_back( -999.0 );
    +      m_trkd0sig       -> push_back( -999.0 );
    +      m_trkz0          -> push_back( -999.0 );
    +      m_trkz0sintheta  -> push_back( -999.0 );
    +      m_trkphi0        -> push_back( -999.0 );
    +      m_trktheta       -> push_back( -999.0 );
    +      m_trkcharge      -> push_back( -999.0 );
    +      m_trkqOverP      -> push_back( -999.0 );
    +    }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_trackhitcont ) {
    +    uint8_t nPixHits(-1), nPixHoles(-1), nSCTHits(-1), nSCTHoles(-1), nTRTHits(-1), nTRTHoles(-1), nBLayerHits(-1), nInnermostPixLayHits(-1);
    +    float pixdEdX(-1.0);
    +
    +    if ( trk ) {
    +      trk->summaryValue( nPixHits,     xAOD::numberOfPixelHits );
    +      trk->summaryValue( nPixHoles,    xAOD::numberOfPixelHoles );
    +      trk->summaryValue( nSCTHits,     xAOD::numberOfSCTHits );
    +      trk->summaryValue( nSCTHoles,    xAOD::numberOfSCTHoles );
    +      trk->summaryValue( nTRTHits,     xAOD::numberOfTRTHits );
    +      trk->summaryValue( nTRTHoles,    xAOD::numberOfTRTHoles );
    +      trk->summaryValue( nBLayerHits,  xAOD::numberOfBLayerHits );
    +      trk->summaryValue( nInnermostPixLayHits, xAOD::numberOfInnermostPixelLayerHits );
    +      trk->summaryValue( pixdEdX,   xAOD::pixeldEdx);
    +    }
    +
    +    m_trknSiHits               ->  push_back( nPixHits + nSCTHits );
    +    m_trknPixHits              ->  push_back( nPixHits );
    +    m_trknPixHoles             ->  push_back( nPixHoles );
    +    m_trknSCTHits              ->  push_back( nSCTHits );
    +    m_trknSCTHoles             ->  push_back( nSCTHoles );
    +    m_trknTRTHits              ->  push_back( nTRTHits );
    +    m_trknTRTHoles             ->  push_back( nTRTHoles );
    +    m_trknBLayerHits           ->  push_back( nBLayerHits );
    +    m_trknInnermostPixLayHits  ->  push_back( nInnermostPixLayHits );
    +    m_trkPixdEdX               ->  push_back( pixdEdX );
    +  }
    +
    +  if ( m_infoSwitch.m_promptlepton ) {
    +    SG::AuxElement::ConstAccessor<float> acc_DL1mu          ("PromptLeptonInput_DL1mu");
    +    SG::AuxElement::ConstAccessor<float> acc_DRlj           ("PromptLeptonInput_DRlj");
    +    SG::AuxElement::ConstAccessor<float> acc_LepJetPtFrac   ("PromptLeptonInput_LepJetPtFrac");
    +    SG::AuxElement::ConstAccessor<float> acc_PtFrac         ("PromptLeptonInput_PtFrac");
    +    SG::AuxElement::ConstAccessor<float> acc_PtRel          ("PromptLeptonInput_PtRel");
    +    SG::AuxElement::ConstAccessor<short> acc_TrackJetNTrack ("PromptLeptonInput_TrackJetNTrack");
    +    SG::AuxElement::ConstAccessor<float> acc_ip2            ("PromptLeptonInput_ip2");
    +    SG::AuxElement::ConstAccessor<float> acc_ip3            ("PromptLeptonInput_ip3");
    +    SG::AuxElement::ConstAccessor<float> acc_rnnip          ("PromptLeptonInput_rnnip");
    +    SG::AuxElement::ConstAccessor<short> acc_sv1_jf_ntrkv   ("PromptLeptonInput_sv1_jf_ntrkv");
    +    SG::AuxElement::ConstAccessor<float> acc_Iso            ("PromptLeptonIso");
    +    SG::AuxElement::ConstAccessor<float> acc_Veto           ("PromptLeptonVeto");
    +
    +    m_PromptLeptonInput_DL1mu          ->push_back( acc_DL1mu          .isAvailable(*muon) ? acc_DL1mu(*muon)          : -100);
    +    m_PromptLeptonInput_DRlj           ->push_back( acc_DRlj           .isAvailable(*muon) ? acc_DRlj(*muon)           : -100);
    +    m_PromptLeptonInput_LepJetPtFrac   ->push_back( acc_LepJetPtFrac   .isAvailable(*muon) ? acc_LepJetPtFrac(*muon)   : -100);
    +    m_PromptLeptonInput_PtFrac         ->push_back( acc_PtFrac         .isAvailable(*muon) ? acc_PtFrac(*muon)         : -100);
    +    m_PromptLeptonInput_PtRel          ->push_back( acc_PtRel          .isAvailable(*muon) ? acc_PtRel(*muon)          : -100);
    +    m_PromptLeptonInput_TrackJetNTrack ->push_back( acc_TrackJetNTrack .isAvailable(*muon) ? acc_TrackJetNTrack(*muon) : -100);
    +    m_PromptLeptonInput_ip2            ->push_back( acc_ip2            .isAvailable(*muon) ? acc_ip2(*muon)            : -100);
    +    m_PromptLeptonInput_ip3            ->push_back( acc_ip3            .isAvailable(*muon) ? acc_ip3(*muon)            : -100);
    +    m_PromptLeptonInput_rnnip          ->push_back( acc_rnnip          .isAvailable(*muon) ? acc_rnnip(*muon)          : -100);
    +    m_PromptLeptonInput_sv1_jf_ntrkv   ->push_back( acc_sv1_jf_ntrkv   .isAvailable(*muon) ? acc_sv1_jf_ntrkv(*muon)   : -100);
    +    m_PromptLeptonIso                  ->push_back( acc_Iso            .isAvailable(*muon) ? acc_Iso(*muon)            : -100);
    +    m_PromptLeptonVeto                 ->push_back( acc_Veto           .isAvailable(*muon) ? acc_Veto(*muon)           : -100);
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    std::vector<float> junkSF(1,-1.0);
    +    std::vector<float> junkEff(1,-1.0);
    +
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accRecoSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTrigEFF;
    +    for (auto& reco : m_infoSwitch.m_recoWPs) {
    +      std::string recoEffSF = "MuRecoEff_SF_syst_Reco" + reco;
    +      accRecoSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( reco , SG::AuxElement::Accessor< std::vector< float > >( recoEffSF ) ) );
    +      safeSFVecFill<float, xAOD::Muon>( muon, accRecoSF.at( reco ), m_RecoEff_SF->at( reco ), junkSF );
    +
    +      for (auto& trig : m_infoSwitch.m_trigWPs) {
    +        std::string trigEffSF = "MuTrigEff_SF_syst_" + trig + "_Reco" + reco;
    +        accTrigSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( trig+reco , SG::AuxElement::Accessor< std::vector< float > >( trigEffSF ) ) );
    +        safeSFVecFill<float, xAOD::Muon>( muon, accTrigSF.at( trig+reco ), m_TrigEff_SF->at( trig+reco ), junkSF );
    +
    +        std::string trigMCEff = "MuTrigMCEff_syst_" + trig + "_Reco" + reco;
    +        accTrigEFF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( trig+reco , SG::AuxElement::Accessor< std::vector< float > >( trigMCEff ) ) );
    +        safeSFVecFill<float, xAOD::Muon>( muon, accTrigEFF.at( trig+reco ), m_TrigMCEff->at( trig+reco ), junkEff );
    +      }
    +    }
    +
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accIsoSF;
    +    for (auto& isol : m_infoSwitch.m_isolWPs) {
    +      std::string isolEffSF = "MuIsoEff_SF_syst_Iso" + isol;
    +      accIsoSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( isol , SG::AuxElement::Accessor< std::vector< float > >( isolEffSF ) ) );
    +      safeSFVecFill<float, xAOD::Muon>( muon, accIsoSF.at( isol ), m_IsoEff_SF->at( isol ), junkSF );
    +    }
    +
    +    static SG::AuxElement::Accessor< std::vector< float > > accTTVASF("MuTTVAEff_SF_syst_TTVA");
    +    safeSFVecFill<float, xAOD::Muon>( muon, accTTVASF, m_TTVAEff_SF, junkSF );
    +
    +  }
    +
    +  if(m_infoSwitch.m_energyLoss ) {
    +    static SG::AuxElement::Accessor< float >         accMuon_EnergyLoss                ("EnergyLoss");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_EnergyLoss, m_EnergyLoss, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_EnergyLossSigma           ("EnergyLossSigma");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_EnergyLossSigma, m_EnergyLossSigma, -1);
    +
    +    static SG::AuxElement::Accessor< unsigned char > accMuon_energyLossType            ("energyLossType");
    +    safeFill<unsigned char, unsigned char, xAOD::Muon>(muon, accMuon_energyLossType, m_energyLossType, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_MeasEnergyLoss            ("MeasEnergyLoss");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_MeasEnergyLoss, m_MeasEnergyLoss, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_MeasEnergyLossSigma       ("MeasEnergyLossSigma");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_MeasEnergyLossSigma, m_MeasEnergyLossSigma, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_ParamEnergyLoss           ("ParamEnergyLoss");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_ParamEnergyLoss, m_ParamEnergyLoss, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_ParamEnergyLossSigmaMinus ("ParamEnergyLossSigmaMinus");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_ParamEnergyLossSigmaMinus, m_ParamEnergyLossSigmaMinus, -1);
    +
    +    static SG::AuxElement::Accessor< float >         accMuon_ParamEnergyLossSigmaPlus  ("ParamEnergyLossSigmaPlus");
    +    safeFill<float, float, xAOD::Muon>(muon, accMuon_ParamEnergyLossSigmaPlus, m_ParamEnergyLossSigmaPlus, -1);
    +
    +  }
    +
    +  if ( m_infoSwitch.m_doLRT ){
    +    static SG::AuxElement::Accessor<char> accMuon_isLRT( "isLRT" );
    +    safeFill<char, char, xAOD::Muon>(muon, accMuon_isLRT, m_isLRT, -1);
    +
    +    static SG::AuxElement::Accessor<char> accMuon_passIDcuts( "passIDcuts" );
    +    safeFill<char, char, xAOD::Muon>(muon, accMuon_passIDcuts, m_passIDcuts, -1);
    +  }
    +
    +  if ( m_infoSwitch.m_passSel ) {
    +    static SG::AuxElement::Accessor<char> accMuon_passSel( "passSel" );
    +    safeFill<char, char, xAOD::Muon>(muon, accMuon_passSel, m_passSel, -99);
    +  }
    +  if ( m_infoSwitch.m_passOR ) {
    +    static SG::AuxElement::Accessor<char> accMuon_passOR( "passOR" );
    +    safeFill<char, char, xAOD::Muon>(muon, accMuon_passOR, m_passOR, -99);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.html b/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..57c0553950 --- /dev/null +++ b/api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.html @@ -0,0 +1,1204 @@ + + + + + + + + + + + Program Listing for File MuonEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File MuonEfficiencyCorrector.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonEfficiencyCorrector.cxx

    +

    Return to documentation for file (Root/MuonEfficiencyCorrector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <map>
    +#include <random>
    +#include <algorithm>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODMuon/MuonAuxContainer.h"
    +#include "xAODMuon/Muon.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/MuonEfficiencyCorrector.h"
    +#include "MuonEfficiencyCorrections/MuonEfficiencyScaleFactors.h"
    +#include "MuonEfficiencyCorrections/MuonTriggerScaleFactors.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MuonEfficiencyCorrector)
    +
    +
    +MuonEfficiencyCorrector :: MuonEfficiencyCorrector () :
    +    Algorithm("MuonEfficiencyCorrector")
    +{
    +}
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "MuonEfficiencyCorrector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing MuonEfficiencyCorrector Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +
    +  // *******************************************************
    +
    +  // Create a ToolHandle of the PRW tool which is passed to the MuonEfficiencyScaleFactors class later
    +  //
    +  if( isMC() ){
    +    if(!m_pileup_tool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_pileup_tool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_CHECK( m_pileup_tool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle);
    +  }
    +
    +
    +  // 1.
    +  // initialize the CP::MuonEfficiencyScaleFactors Tool for reco efficiency SF
    +  //
    +  m_recoEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_Reco_" + m_WorkingPointReco;
    +
    +  ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for RECO efficiency SF..." );
    +
    +  ANA_CHECK(checkToolStore<CP::IMuonEfficiencyScaleFactors>(m_recoEffSF_tool_name));
    +  const bool recoEffSFInstanceExists = asg::ToolStore::contains<CP::IMuonEfficiencyScaleFactors>(m_recoEffSF_tool_name);
    +
    +
    +  // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public")
    +  m_muRecoSF_tool = asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors>("CP::MuonEfficiencyScaleFactors/"+m_recoEffSF_tool_name);
    +  // setProperty is ignored if tool is already configured (i.e. for recoEffSFInstanceExists == true)
    +  ANA_CHECK( m_muRecoSF_tool.setProperty("WorkingPoint", m_WorkingPointReco ));
    +  if ( !m_overrideCalibRelease.empty() ) {
    +    ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease);
    +    ANA_CHECK( m_muRecoSF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease ));
    +  }
    +  if (m_doLRT) {
    +    ANA_CHECK( m_muRecoSF_tool.setProperty("UseLRT", true ));
    +  }
    +  ANA_CHECK(m_muRecoSF_tool.retrieve());
    +  assert(m_muRecoSF_tool.isInitialized());
    +
    +  // only process systematics once per efficiency SF/WP
    +  if(not recoEffSFInstanceExists) {
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    //
    +    m_outputSystNamesReco = m_outputSystNamesReco + "_Reco" + m_WorkingPointReco;
    +
    +    CP::SystematicSet affectSystsReco = m_muRecoSF_tool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsReco ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by reco efficiency systematic: " << syst_it.name()); }
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsReco = m_muRecoSF_tool->recommendedSystematics();
    +    m_systListReco = HelperFunctions::getListofSystematics( recSystsReco, m_systNameReco, m_systValReco, msg() );
    +
    +    ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool reco efficiency systematic:");
    +    for ( const auto& syst_it : m_systListReco ) {
    +      if ( m_systNameReco.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // 2.
    +  // initialize the CP::MuonEfficiencyScaleFactors Tool for isolation efficiency SF
    +  //
    +
    +  m_isoEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_Iso_" + m_WorkingPointIso;
    +  std::string iso_WP = m_WorkingPointIso + "Iso";
    +
    +  ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for ISO efficiency SF..." );
    +
    +  ANA_CHECK( checkToolStore<CP::IMuonEfficiencyScaleFactors>(m_isoEffSF_tool_name));
    +  const bool isoEffSFInstanceExists = asg::ToolStore::contains<CP::IMuonEfficiencyScaleFactors>(m_isoEffSF_tool_name);
    +
    +  // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public")
    +  m_muIsoSF_tool = asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors>("CP::MuonEfficiencyScaleFactors/"+m_isoEffSF_tool_name);
    +  // setProperty is ignored if tool is already configured (i.e. for isoEffSFInstanceExists == true)
    +  ANA_CHECK( m_muIsoSF_tool.setProperty("WorkingPoint", iso_WP ));
    +  if ( !m_overrideCalibRelease.empty() ) {
    +    ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease);
    +    ANA_CHECK( m_muIsoSF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease ));
    +  }
    +  ANA_CHECK(m_muIsoSF_tool.retrieve());
    +  assert(m_muIsoSF_tool.isInitialized());
    +
    +  // only process systematics once per efficiency SF/WP
    +  if(not isoEffSFInstanceExists){
    +
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    //
    +    m_outputSystNamesIso = m_outputSystNamesIso + "_Iso" + m_WorkingPointIso;
    +
    +    CP::SystematicSet affectSystsIso = m_muIsoSF_tool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsIso ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by iso efficiency systematic: " << syst_it.name()); }
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsIso = m_muIsoSF_tool->recommendedSystematics();
    +    m_systListIso = HelperFunctions::getListofSystematics( recSystsIso, m_systNameIso, m_systValIso, msg() );
    +
    +    ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool iso efficiency systematic:");
    +    for ( const auto& syst_it : m_systListIso ) {
    +      if ( m_systNameIso.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // 3.
    +  // Initialise the CP::MuonTriggerScaleFactors tool
    +  //
    +
    +  m_trigEffSF_tool_name = "MuonTriggerScaleFactors_effSF_Trig_Reco" + m_WorkingPointReco;
    +
    +  ANA_MSG_INFO( " Initialising CP::MuonTriggerScaleFactors for TRIGGER efficiency SF..." );
    +
    +  ANA_CHECK( checkToolStore<CP::IMuonTriggerScaleFactors>(m_trigEffSF_tool_name));
    +  const bool trigEffSFInstanceExists = asg::ToolStore::contains<CP::IMuonTriggerScaleFactors>( m_trigEffSF_tool_name );
    +
    +  // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public")
    +  m_muTrigSF_tool = asg::AnaToolHandle<CP::IMuonTriggerScaleFactors>("CP::MuonTriggerScaleFactors/"+m_trigEffSF_tool_name );
    +  // setProperty is ignored if tool is already configured
    +  if ( m_AllowZeroSF ) {
    +    ANA_MSG_WARNING( "m_AllowZeroSF is set to True. No errors will arise for runs missing required triggers!!!");
    +    ANA_CHECK( m_muTrigSF_tool.setProperty("AllowZeroSF", m_AllowZeroSF ));
    +  }
    +  ANA_CHECK(m_muTrigSF_tool.setProperty("MuonQuality", m_WorkingPointReco ));
    +  ANA_CHECK(m_muTrigSF_tool.retrieve());
    +  assert(m_muTrigSF_tool.isInitialized());
    +
    +  std::string token;
    +  std::istringstream ss(m_MuTrigLegs);
    +  while ( std::getline(ss, token, ',') ) {
    +    size_t pos = token.find(":");
    +    m_SingleMuTriggerMap[token.substr(0,pos)] = token.substr(pos+1);
    +  }
    +
    +  if(not trigEffSFInstanceExists){
    +    // Remember base output syst. names container
    +    m_outputSystNamesTrigBase = m_outputSystNamesTrig;
    +    // Add the chosen WP to the string labelling the output syst. names container
    +    m_outputSystNamesTrig = m_outputSystNamesTrig + "_Reco" + m_WorkingPointReco;
    +
    +    CP::SystematicSet affectSystsTrig = m_muTrigSF_tool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsTrig ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by trigger efficiency systematic: " << syst_it.name()); }
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsTrig = m_muTrigSF_tool->recommendedSystematics();
    +    m_systListTrig = HelperFunctions::getListofSystematics( recSystsTrig, m_systNameTrig, m_systValTrig, msg() );
    +
    +    ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool trigger efficiency systematic:");
    +    for ( const auto& syst_it : m_systListTrig ) {
    +      if ( m_systNameTrig.empty() ) {
    +      ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +      break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // 4.
    +  // initialize the CP::MuonEfficiencyScaleFactors Tool for track-to-vertex association (TTVA) SF
    +  //
    +
    +  m_TTVAEffSF_tool_name = "MuonEfficiencyScaleFactors_effSF_" + m_WorkingPointTTVA;
    +
    +  ANA_MSG_INFO( " Initialising CP::MuonEfficiencyScaleFactors for TTVA efficiency SF..." );
    +
    +  ANA_CHECK( checkToolStore<CP::IMuonEfficiencyScaleFactors>(m_TTVAEffSF_tool_name));
    +  const bool TTVASFInstanceExists = asg::ToolStore::contains<CP::IMuonEfficiencyScaleFactors>(m_TTVAEffSF_tool_name);
    +
    +  // calling with only the first arg causes AnaToolHandle to use std::shared_ptr and return any already existing instance (aka making the tool "public")
    +  m_muTTVASF_tool = asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors>("CP::MuonEfficiencyScaleFactors/"+m_TTVAEffSF_tool_name);
    +  // setProperty is ignored if tool is already configured (i.e. for TTVASFInstanceExists == true)
    +  ANA_CHECK( m_muTTVASF_tool.setProperty("WorkingPoint", m_WorkingPointTTVA ));
    +  if ( !m_overrideCalibRelease.empty() ) {
    +    ANA_MSG_WARNING("Overriding muon efficiency calibration release to " << m_overrideCalibRelease);
    +    ANA_CHECK( m_muTTVASF_tool.setProperty("CalibrationRelease", m_overrideCalibRelease ));
    +  }
    +  ANA_CHECK(m_muTTVASF_tool.retrieve());
    +  assert(m_muTTVASF_tool.isInitialized());
    +
    +  // only process systematics once per efficiency SF/WP
    +  if(not TTVASFInstanceExists)
    +  {
    +    //  Add the chosen WP to the string labelling the vector<SF> decoration
    +    //
    +    m_outputSystNamesTTVA = m_outputSystNamesTTVA + "_" + m_WorkingPointTTVA;
    +
    +    CP::SystematicSet affectSystsTTVA = m_muTTVASF_tool->affectingSystematics();
    +    for ( const auto& syst_it : affectSystsTTVA ) { ANA_MSG_DEBUG("MuonEfficiencyScaleFactors tool can be affected by TTVA efficiency systematic: " << syst_it.name()); }
    +    //
    +    // Make a list of systematics to be used, based on configuration input
    +    // Use HelperFunctions::getListofSystematics() for this!
    +    //
    +    const CP::SystematicSet recSystsTTVA = m_muTTVASF_tool->recommendedSystematics();
    +    m_systListTTVA = HelperFunctions::getListofSystematics( recSystsTTVA, m_systNameTTVA, m_systValTTVA, msg() );
    +
    +    ANA_MSG_INFO("Will be using MuonEfficiencyScaleFactors tool TTVA efficiency systematic:");
    +    for ( const auto& syst_it : m_systListTTVA ) {
    +      if ( m_systNameTTVA.empty() ) {
    +        ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +        break;
    +      }
    +      ANA_MSG_INFO("\t " << syst_it.name());
    +    }
    +  }
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systListReco, m_outputSystNamesReco, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListIso, m_outputSystNamesIso, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListTrig, m_outputSystNamesTrig, fileMD);
    +    HelperFunctions::writeSystematicsListHist(m_systListTTVA, m_outputSystNamesTTVA, fileMD);
    +  }
    +
    +  // *********************************************************************************
    +
    +  ANA_MSG_INFO( "MuonEfficiencyCorrector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  m_numEvent++;
    +
    +  if ( !isMC() ) {
    +    if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Muon Efficiency correction... "); }
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  ANA_MSG_DEBUG( "Applying Muon Efficiency corrections... ");
    +
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // if m_inputSystNamesMuons = "" --> input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  std::vector<std::string>* systNames_ptr(nullptr);
    +  if ( !m_inputSystNamesMuons.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesMuons, 0, m_store, msg()) );
    +
    +  std::vector<std::string> systNames{""};
    +  if (systNames_ptr) systNames = *systNames_ptr;
    +
    +  // Declare a write status set to true
    +  // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!)
    +  //
    +  bool writeSystNames(true);
    +
    +  // loop over systematic sets available
    +  for ( auto systName : systNames ) {
    +    const xAOD::MuonContainer* inputMuons(nullptr);
    +
    +    // some systematics might have rejected the event
    +    if ( m_store->contains<xAOD::MuonContainer>( m_inContainerName+systName ) ) {
    +      // retrieve input muons
    +      ANA_CHECK( HelperFunctions::retrieve(inputMuons, m_inContainerName+systName, m_event, m_store, msg()) );
    +
    +      ANA_MSG_DEBUG( "Number of muons: " << static_cast<int>(inputMuons->size()) );
    +      ANA_MSG_DEBUG( "Input syst: " << systName );
    +      unsigned int idx(0);
    +      for ( auto mu : *(inputMuons) ) {
    +        ANA_MSG_DEBUG( "Input muon " << idx << ", pt = " << mu->pt() * 1e-3 << " GeV" );
    +        ++idx;
    +      }
    +
    +      // decorate muons w/ SF - there will be a decoration w/ different name for each syst!
    +      ANA_CHECK( this->executeSF( eventInfo, inputMuons, systName.empty(), writeSystNames ) );
    +
    +      writeSystNames = false;
    +
    +    } // check existence of container
    +
    +  } // close loop on systematic sets available from upstream algo
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode MuonEfficiencyCorrector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonEfficiencyCorrector :: executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::MuonContainer* inputMuons, bool nominal, bool writeSystNames )
    +{
    +
    +  //
    +  // In the following, every muon gets decorated with 2 vector<double>'s (for reco/iso efficiency SFs),
    +  // and the event w/ 1 vector<double> (for trigger efficiency SFs)
    +  // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF).
    +  //
    +  // Additionally, we create these vector<string> with the SF syst names, so that we know which component corresponds to.
    +  // ( there's a 1:1 correspondence with the vector<double> defined above )
    +  //
    +  // These vector<string> are eventually stored in TStore
    +  //
    +
    +  // 1.
    +  // Reco efficiency SFs - this is a per-MUON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesReco = nullptr;
    +
    +  // Do it only if a tool with *this* name hasn't already been used
    +  //
    +  if ( !isToolAlreadyUsed(m_recoEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesReco = std::make_unique< std::vector< std::string > >();
    +
    +    for ( const auto& syst_it : m_systListReco ) {
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      // Create the name of the SF weight to be recorded
    +      std::string sfName = "MuRecoEff_SF_syst_Reco" + m_WorkingPointReco;
    +
    +      ANA_MSG_DEBUG( "Muon reco efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() );
    +      if( writeSystNames ) sysVariationNamesReco->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_muRecoSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name());
    +
    +      // and now apply reco efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto mu_itr : *(inputMuons) ) {
    +
    +         ANA_MSG_DEBUG( "Applying reco efficiency SF" );
    +
    +         // a)
    +         // decorate directly the muon with reco efficiency (useful at all?), and the corresponding SF
    +         //
    +         //if ( m_muRecoSF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyMCEfficiency for Reco");
    +         //}
    +         //if ( m_muRecoSF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for Reco");
    +         //}
    +
    +         // b)
    +         // obtain reco efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon)
    +         //
    +
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecReco( sfName );
    +         if ( !sfVecReco.isAvailable( *mu_itr ) ) {
    +       sfVecReco( *mu_itr ) = std::vector<float>();
    +         }
    +
    +         float recoEffSF(-1.0);
    +         if ( m_muRecoSF_tool->getEfficiencyScaleFactor( *mu_itr, recoEffSF ) != CP::CorrectionCode::Ok ) {
    +         if ( m_AllowZeroSF ) {
    +           ANA_MSG_WARNING( "Problem in Reco getEfficiencyScaleFactor");
    +           recoEffSF = -1.0;
    +         } else {
    +           ANA_MSG_ERROR( "Could not get Reco efficiency scale factors");
    +           return EL::StatusCode::FAILURE;
    +         }
    +         }
    +         //
    +         // Add it to decoration vector
    +         //
    +         sfVecReco( *mu_itr ).push_back( recoEffSF );
    +
    +         // reco sys names are saved in a vector. Entries positions are preserved!
    +         //
    +         SG::AuxElement::Decorator< std::vector<std::string> > sfVecReco_sysNames( m_outputSystNamesReco + "_sysNames" );
    +         if ( !sfVecReco_sysNames.isAvailable( *mu_itr ) ) {
    +       sfVecReco_sysNames( *mu_itr ) = std::vector<std::string>();
    +         }
    +         sfVecReco_sysNames( *mu_itr ).push_back( syst_it.name().c_str() );
    +
    +         ANA_MSG_DEBUG( "===>>>");
    +         ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV" );
    +         ANA_MSG_DEBUG( "Reco eff. SF decoration: " << sfName );
    +         ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +         ANA_MSG_DEBUG( "Reco eff. SF:");
    +         ANA_MSG_DEBUG( "\t " << recoEffSF << " (from getEfficiencyScaleFactor())" );
    +         ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         ++idx;
    +
    +      } // close muon loop
    +
    +    }  // close loop on reco efficiency SF systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesReco ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesReco), m_outputSystNamesReco ));
    +    }
    +
    +  }
    +
    +  // 2.
    +  // Isolation efficiency SFs - this is a per-MUON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesIso = nullptr;
    +
    +  // Do it only if a tool with *this* name hasn't already been used
    +  //
    +  if ( !isToolAlreadyUsed(m_isoEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesIso = std::make_unique< std::vector< std::string > >();
    +
    +    for ( const auto& syst_it : m_systListIso ) {
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      // Create the name of the SF weight to be recorded
    +      std::string sfName = "MuIsoEff_SF_syst_Iso" + m_WorkingPointIso;
    +
    +      ANA_MSG_DEBUG( "Muon iso efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() );
    +      if ( writeSystNames ) sysVariationNamesIso->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      if ( m_muIsoSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name());
    +
    +      // and now apply Iso efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto mu_itr : *(inputMuons) ) {
    +
    +         ANA_MSG_DEBUG( "Applying iso efficiency SF" );
    +
    +         // a)
    +         // decorate directly the muon with iso efficiency (useful at all?), and the corresponding SF
    +         //
    +         //if ( m_muIsoSF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyMCEfficiency for Iso");
    +         //}
    +         //if ( m_muIsoSF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for Iso");
    +         //}
    +
    +         // b)
    +         // obtain iso efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecIso( sfName );
    +         if ( !sfVecIso.isAvailable( *mu_itr ) ) {
    +       sfVecIso( *mu_itr ) = std::vector<float>();
    +         }
    +
    +         float IsoEffSF(-1.0);
    +         if ( m_muIsoSF_tool->getEfficiencyScaleFactor( *mu_itr, IsoEffSF ) != CP::CorrectionCode::Ok ) {
    +         if ( m_AllowZeroSF ) {
    +           ANA_MSG_WARNING( "Problem in Iso getEfficiencyScaleFactor");
    +           IsoEffSF = -1.0;
    +         } else {
    +           ANA_MSG_ERROR( "Could not get Iso efficiency scale factors");
    +           return EL::StatusCode::FAILURE;
    +         }
    +         }
    +         //
    +         // Add it to decoration vector
    +         //
    +         sfVecIso( *mu_itr ).push_back(IsoEffSF);
    +
    +         ANA_MSG_DEBUG( "===>>>");
    +         ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " );
    +         ANA_MSG_DEBUG( "Isolation SF decoration: " << sfName );
    +         ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +         ANA_MSG_DEBUG( "Isolation SF:");
    +         ANA_MSG_DEBUG( "\t " << IsoEffSF << " (from getEfficiencyScaleFactor())");
    +         ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         ++idx;
    +
    +      } // close muon loop
    +
    +    }  // close loop on isolation efficiency SF systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesIso ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesIso), m_outputSystNamesIso ));
    +    }
    +
    +  }
    +
    +  // 3.
    +  // Trigger efficiency SF - this is in principle given by the MCP tool as a per-EVENT weight
    +  //
    +  // To allow more freedom to the user, we calculate it as a per-muon weight with a trick
    +  // We store also the MC efficiency per-muon
    +
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +  // NB: calculation of the event SF is up to the analyzer
    +
    +
    +  // Do it only if a tool with *this* name hasn't already been used
    +  //
    +  if ( !isToolAlreadyUsed(m_trigEffSF_tool_name) ) {
    +
    +    static const SG::AuxElement::ConstAccessor<unsigned int> acc_rnd("RandomRunNumber");
    +    unsigned int run=0;
    +    if (acc_rnd.isAvailable(*eventInfo)){
    +      run = acc_rnd(*eventInfo);
    +    }
    +
    +    for (auto const& trig : m_SingleMuTriggerMap) {
    +
    +      auto trig_it = trig.second;
    +      // run numbers from MuonTriggerScaleFactors::getYear()
    +      // https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/MuonID/MuonIDAnalysis/MuonEfficiencyCorrections/Root/MuonTriggerScaleFactors.cxx
    +      if (trig.first.find("2015")!=std::string::npos && run>284484) continue;
    +      else if ((trig.first.find("2016")!=std::string::npos || trig.first.find("2017")!=std::string::npos || trig.first.find("2018")!=std::string::npos) && (run <= 284484 || run > 364292) ) continue;
    +      else if (trig.first.find("2022")!=std::string::npos && (run <= 364292 || run > 440613) ) continue;
    +      else if (trig.first.find("2023")!=std::string::npos && (run <= 440613 || run > 456749) ) continue;
    +      else if (trig.first.find("2024")!=std::string::npos && run <= 456749 ) continue;
    +
    +      std::unique_ptr< std::vector< std::string > > sysVariationNamesTrig = nullptr;
    +      if ( writeSystNames ) sysVariationNamesTrig = std::make_unique< std::vector< std::string > >();
    +      // this is used to put the list of sys strings in the store.
    +      // The original string needs to be updated with the name of
    +      // the trigger for every item in the trigger loop.
    +      //
    +      //std::string m_fullname_outputSystNamesTrig;
    +
    +      std::string sf_string = m_outputSystNamesTrig;
    +      std::string insfstr   = m_outputSystNamesTrigBase + "_";
    +      std::string outsfstr  = m_outputSystNamesTrigBase + "_" + trig_it + "_";
    +
    +      for(std::string::size_type i = 0; (i = sf_string.find(insfstr, i)) != std::string::npos;) {
    +        sf_string.replace(i, insfstr.length(), outsfstr);
    +        i += outsfstr.length();
    +      }
    +
    +      for ( const auto& syst_it : m_systListTrig ) {
    +        if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +        // Create the name of the SF weight to be recorded
    +        std::string sfName = "MuTrigEff_SF_syst_" + trig_it + "_Reco" + m_WorkingPointReco;
    +        std::string effName = "MuTrigMCEff_syst_" + trig_it + "_Reco" + m_WorkingPointReco;
    +
    +        ANA_MSG_DEBUG( "Trigger efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() );
    +        if ( writeSystNames ) sysVariationNamesTrig->push_back(syst_it.name());
    +
    +        // apply syst
    +        //
    +        if ( m_muTrigSF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +          ANA_MSG_ERROR( "Failed to configure MuonTriggerScaleFactors for trigger " << trig_it << " systematic " << syst_it.name());
    +          return EL::StatusCode::FAILURE;
    +        }
    +        ANA_MSG_DEBUG( "Successfully applied systematic " << syst_it.name() << " for trigger " << trig_it);
    +
    +        //------------------------------
    +        // Get trigger efficiency SF(s)
    +        //------------------------------
    +        ANA_MSG_DEBUG( "Applying trigger efficiency SF and MC efficiency" );
    +
    +        ANA_MSG_DEBUG( "===>>>");
    +        ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +        ANA_MSG_DEBUG( "Trigger efficiency SF decoration: " << sfName );
    +        ANA_MSG_DEBUG( "Trigger MC efficiency decoration: " << effName );
    +
    +        // ugly ass hardcoding
    +        //
    +        std::string full_scan_chain = "HLT_mu8noL1";
    +
    +        unsigned int idx(0);
    +        for ( auto mu_itr : *(inputMuons) ) {
    +
    +           ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " );
    +
    +           // Pass a container with only the muon in question to the tool
    +           // (use a view container to be light weight)
    +           //
    +           ConstDataVector<xAOD::MuonContainer> mySingleMuonCont(SG::VIEW_ELEMENTS);
    +           mySingleMuonCont.push_back( mu_itr );
    +
    +           //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon)
    +           //
    +           SG::AuxElement::Decorator< std::vector<float> > effMC( effName );
    +           if ( !effMC.isAvailable( *mu_itr ) ) {
    +             effMC( *mu_itr ) = std::vector<float>();
    +           }
    +
    +           SG::AuxElement::Decorator< std::vector<float> > sfVecTrig( sfName );
    +           if ( !sfVecTrig.isAvailable( *mu_itr ) ) {
    +             sfVecTrig( *mu_itr ) = std::vector<float>();
    +           }
    +
    +           double triggerMCEff(-1.0); // tool wants a double
    +           if ( m_muTrigSF_tool->getTriggerEfficiency( *mu_itr, triggerMCEff, trig_it, !isMC() ) != CP::CorrectionCode::Ok ) {
    +             if ( m_AllowZeroSF ) {
    +               ANA_MSG_WARNING( "Problem in getTriggerEfficiency - trigger: " << trig_it);
    +               triggerMCEff = -1.0;
    +             } else {
    +               ANA_MSG_ERROR( "Could not get trigger efficiency - trigger: " << trig_it);
    +               return EL::StatusCode::FAILURE;
    +             }
    +           }
    +           // Add it to decoration vector
    +           //
    +           effMC( *mu_itr ).push_back(triggerMCEff);
    +
    +           ANA_MSG_DEBUG( "Trigger MC efficiency:");
    +           ANA_MSG_DEBUG( "\t " << triggerMCEff << " (from getTriggerEfficiency())" );
    +
    +           double triggerDataEff(-1.0); // tool wants a double
    +           if ( trig_it == full_scan_chain ) {
    +             if ( m_muTrigSF_tool->getTriggerEfficiency( *mu_itr, triggerDataEff, trig_it, isMC() ) != CP::CorrectionCode::Ok ) {
    +               if ( m_AllowZeroSF ) {
    +                 ANA_MSG_WARNING( "Problem in getTriggerEfficiency - trigger: " << trig_it);
    +                 triggerDataEff = -1.0;
    +               } else {
    +                 ANA_MSG_ERROR( "Could not get trigger efficiency - trigger: " << trig_it);
    +                 return EL::StatusCode::FAILURE;
    +               }
    +             }
    +           }
    +
    +       // Get per-muon trigger efficiency SFs
    +       if(m_usePerMuonTriggerSFs){
    +             double triggerEffSF(1.0); // tool wants a double
    +             if ( trig_it != full_scan_chain ) {
    +               if ( m_muTrigSF_tool->getTriggerScaleFactor( *mySingleMuonCont.asDataVector(), triggerEffSF, trig_it ) != CP::CorrectionCode::Ok ) {
    +                 if ( m_AllowZeroSF ) {
    +                   ANA_MSG_WARNING( "Problem in getTriggerScaleFactor - trigger: " << trig_it);
    +                   triggerEffSF = -1.0;
    +                 } else {
    +                   ANA_MSG_ERROR( "Could not get trigger efficiency scale factor - trigger: " << trig_it);
    +                   return EL::StatusCode::FAILURE;
    +                 }
    +               }
    +             } else {
    +               if ( triggerMCEff > 0.0 ) {
    +                 triggerEffSF = triggerDataEff / triggerMCEff;
    +               }
    +             }
    +
    +             // Add it to decoration vector
    +             //
    +             sfVecTrig( *mu_itr ).push_back(triggerEffSF);
    +
    +             ANA_MSG_DEBUG( "Trigger efficiency SF:");
    +             ANA_MSG_DEBUG( "\t " << triggerEffSF << " (from getTriggerScaleFactor())" );
    +       }
    +
    +           ANA_MSG_DEBUG( "--------------------------------------");
    +
    +           ++idx;
    +
    +        } // close muon loop
    +
    +    // Get global trigger efficiency SF (using all muons)
    +    if(!m_usePerMuonTriggerSFs){
    +           // Get SF
    +           double triggerEffSF(1.0); // tool wants a double
    +           if ( trig_it != full_scan_chain ) {
    +             if ( m_muTrigSF_tool->getTriggerScaleFactor( *inputMuons, triggerEffSF, trig_it ) != CP::CorrectionCode::Ok ) {
    +               if ( m_AllowZeroSF ) {
    +                 ANA_MSG_WARNING( "Problem in getTriggerScaleFactor - trigger: " << trig_it);
    +                 triggerEffSF = -1.0;
    +               } else {
    +                 ANA_MSG_ERROR( "Could not get trigger efficiency scale factor - trigger: " << trig_it);
    +                 return EL::StatusCode::FAILURE;
    +               }
    +             }
    +           } else { // if needed can be implemented
    +             ANA_MSG_ERROR( "Could not get event-level trigger efficiency scale factor - trigger: " << trig_it);
    +             return EL::StatusCode::FAILURE;
    +           }
    +           ANA_MSG_DEBUG( "Trigger efficiency SF:");
    +           ANA_MSG_DEBUG( "\t " << triggerEffSF << " (from getTriggerScaleFactor())" );
    +           // Decorate muons, all with the same event-level SF
    +           for ( auto mu_itr : *(inputMuons) ) {// Loop over muons
    +             SG::AuxElement::Decorator< std::vector<float> > sfVecTrig( sfName );
    +             if ( !sfVecTrig.isAvailable( *mu_itr ) ) {
    +               sfVecTrig( *mu_itr ) = std::vector<float>();
    +             }
    +             // Add it to decoration vector
    +             sfVecTrig( *mu_itr ).push_back(triggerEffSF);
    +       }
    +    }
    +
    +      }  // close loop on trigger efficiency SF systematics
    +
    +      // Add list of systematics names to TStore
    +      // We only do this once per event if the list does not exist yet
    +      if ( writeSystNames && !m_store->contains<std::vector<std::string>>( sf_string ) ) {
    +        ANA_CHECK( m_store->record( std::move(sysVariationNamesTrig), sf_string ));
    +      }
    +    } // close  trigger loop
    +
    +  }
    +
    +  // 4.
    +  // TTVA efficiency SFs - this is a per-MUON weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  std::unique_ptr< std::vector< std::string > > sysVariationNamesTTVA = nullptr;
    +
    +  // Do it only if a tool with *this* name hasn't already been used
    +  //
    +  if ( !isToolAlreadyUsed(m_TTVAEffSF_tool_name) ) {
    +
    +    if ( writeSystNames ) sysVariationNamesTTVA = std::make_unique< std::vector< std::string > >();
    +
    +    for ( const auto& syst_it : m_systListTTVA ) {
    +      if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +      // Create the name of the SF weight to be recorded
    +      std::string sfName = "MuTTVAEff_SF_syst_" + m_WorkingPointTTVA;
    +
    +      ANA_MSG_DEBUG( "Muon iso efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() );
    +      if ( writeSystNames ) sysVariationNamesTTVA->push_back(syst_it.name());
    +
    +      // apply syst
    +      //
    +      //
    +      // TEMP! Commenting this out b/c stupid AnaToolHandle does not work as it should...
    +      //
    +      //if ( m_muTTVASF_tool_handle->applySystematicVariation(syst_it) != CP::SystematicCode::Ok ) {
    +      if ( m_muTTVASF_tool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +        ANA_MSG_ERROR("Failed to configure MuonEfficiencyScaleFactors for systematic " << syst_it.name());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name());
    +
    +      // and now apply TTVA efficiency SF!
    +      //
    +      unsigned int idx(0);
    +      for ( auto mu_itr : *(inputMuons) ) {
    +
    +         ANA_MSG_DEBUG( "Applying TTVA efficiency SF" );
    +
    +         // a)
    +         // decorate directly the muon with TTVA efficiency (useful at all?), and the corresponding SF
    +         //
    +         //if ( m_muTTVASF_tool->applyMCEfficiency( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyMCEfficiency for TTVA");
    +         //}
    +         //if ( m_muTTVASF_tool->applyEfficiencyScaleFactor( *mu_itr ) != CP::CorrectionCode::Ok ) {
    +         //  ANA_MSG_WARNING( "Problem in applyEfficiencyScaleFactor for TTVA");
    +         //}
    +
    +         // b)
    +         // obtain TTVA efficiency SF as a float (to be stored away separately)
    +         //
    +         //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* muon)
    +         //
    +         SG::AuxElement::Decorator< std::vector<float> > sfVecTTVA( sfName );
    +         if ( !sfVecTTVA.isAvailable( *mu_itr ) ) {
    +       sfVecTTVA( *mu_itr ) = std::vector<float>();
    +         }
    +
    +         float TTVAEffSF(-1.0);
    +         if ( m_muTTVASF_tool->getEfficiencyScaleFactor( *mu_itr, TTVAEffSF ) != CP::CorrectionCode::Ok ) {
    +         if ( m_AllowZeroSF ) {
    +           ANA_MSG_WARNING( "Problem in TTVA getEfficiencyScaleFactor");
    +           TTVAEffSF = -1.0;
    +         } else {
    +           ANA_MSG_ERROR( "Could not get TTVA efficiency scale factors");
    +           return EL::StatusCode::FAILURE;
    +         }
    +         }
    +         //
    +         // Add it to decoration vector
    +         //
    +         sfVecTTVA( *mu_itr ).push_back(TTVAEffSF);
    +
    +         ANA_MSG_DEBUG( "===>>>");
    +         ANA_MSG_DEBUG( "Muon " << idx << ", pt = " << mu_itr->pt()*1e-3 << " GeV " );
    +         ANA_MSG_DEBUG( "TTVA SF decoration: " << sfName );
    +         ANA_MSG_DEBUG( "Systematic: " << syst_it.name());
    +         ANA_MSG_DEBUG( "TTVA SF:");
    +         ANA_MSG_DEBUG( "\t " << TTVAEffSF << " (from getEfficiencyScaleFactor())" );
    +         ANA_MSG_DEBUG( "--------------------------------------");
    +
    +         ++idx;
    +
    +      } // close muon loop
    +
    +    }  // close loop on TTVA efficiency SF systematics
    +
    +    // Add list of systematics names to TStore
    +    // We only do this once per event if the list does not exist yet
    +    if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNamesTTVA ) ) {
    +      ANA_CHECK( m_store->record( std::move(sysVariationNamesTTVA), m_outputSystNamesTTVA ));
    +    }
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonHists.cxx.html b/api/program_listing_file_Root_MuonHists.cxx.html new file mode 100644 index 0000000000..f13c1c88a4 --- /dev/null +++ b/api/program_listing_file_Root_MuonHists.cxx.html @@ -0,0 +1,422 @@ + + + + + + + + + + + Program Listing for File MuonHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonHists.cxx

    +

    Return to documentation for file (Root/MuonHists.cxx)

    +
    /********************************************************
    + *
    + * Muon Histogramming
    + *
    + * J. Alison (john.alison@cern.ch)
    + *
    + *******************************************************/
    +
    +
    +#include <xAODAnaHelpers/MuonHists.h>
    +#include <sstream>
    +
    +ANA_MSG_SOURCE(msgMuonHists, "MuonHists")
    +
    +using std::vector;
    +
    +MuonHists :: MuonHists (std::string name, std::string detailStr, const std::string& prefix, const std::string& titlePrefix) :
    +  IParticleHists(name, detailStr, prefix, titlePrefix),
    +  m_infoSwitch(new HelperClasses::MuonInfoSwitch(m_detailStr))
    +{ }
    +
    +MuonHists :: ~MuonHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +StatusCode MuonHists::initialize() {
    +  using namespace msgMuonHists;
    +  ANA_CHECK( IParticleHists::initialize());
    +
    +  // Isolation
    +  if(m_infoSwitch->m_isolation){
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (isol.empty()) continue;
    +
    +      m_isIsolated[isol] = book(m_name, "isIsolated_" + isol, "isIsolated_" + isol, 3, -1.5, 1.5);
    +    }
    +
    +    m_ptcone20     = book(m_name, "ptcone20",     "ptcone20",     101, -0.2, 20);
    +    m_ptcone30     = book(m_name, "ptcone30",     "ptcone30",     101, -0.2, 20);
    +    m_ptcone40     = book(m_name, "ptcone40",     "ptcone40",     101, -0.2, 20);
    +    m_ptvarcone20  = book(m_name, "ptvarcone20",  "ptvarcone20",  101, -0.2, 20);
    +    m_ptvarcone30  = book(m_name, "ptvarcone30",  "ptvarcone30",  101, -0.2, 20);
    +    m_ptvarcone40  = book(m_name, "ptvarcone40",  "ptvarcone40",  101, -0.2, 20);
    +    m_topoetcone20 = book(m_name, "topoetcone20", "topoetcone20", 101, -0.2, 20);
    +    m_topoetcone30 = book(m_name, "topoetcone30", "topoetcone30", 101, -0.2, 20);
    +    m_topoetcone40 = book(m_name, "topoetcone40", "topoetcone40", 101, -0.2, 20);
    +
    +    m_ptcone20_rel     = book(m_name, "ptcone20_rel",     "ptcone20_rel",     110, -0.2, 2);
    +    m_ptcone30_rel     = book(m_name, "ptcone30_rel",     "ptcone30_rel",     110, -0.2, 2);
    +    m_ptcone40_rel     = book(m_name, "ptcone40_rel",     "ptcone40_rel",     110, -0.2, 2);
    +    m_ptvarcone20_rel  = book(m_name, "ptvarcone20_rel",  "ptvarcone20_rel",  110, -0.2, 2);
    +    m_ptvarcone30_rel  = book(m_name, "ptvarcone30_rel",  "ptvarcone30_rel",  110, -0.2, 2);
    +    m_ptvarcone40_rel  = book(m_name, "ptvarcone40_rel",  "ptvarcone40_rel",  110, -0.2, 2);
    +    m_topoetcone20_rel = book(m_name, "topoetcone20_rel", "topoetcone20_rel", 110, -0.2, 2);
    +    m_topoetcone30_rel = book(m_name, "topoetcone30_rel", "topoetcone30_rel", 110, -0.2, 2);
    +    m_topoetcone40_rel = book(m_name, "topoetcone40_rel", "topoetcone40_rel", 110, -0.2, 2);
    +
    +
    +  }
    +
    +  // quality
    +  if(m_infoSwitch->m_quality){
    +    for (auto& quality : m_infoSwitch->m_recoWPs) {
    +      if (quality.empty()) continue;
    +
    +      m_quality[quality] = book(m_name, "is" + quality, "is" + quality, 3, -1.5, 1.5);
    +    }
    +  }
    +
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode MuonHists::execute( const xAOD::Muon* muon, float eventWeight, const xAOD::EventInfo* eventInfo) {
    +  return execute(static_cast<const xAOD::IParticle*>(muon), eventWeight, eventInfo);
    +}
    +
    +StatusCode MuonHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo  ) {
    +  using namespace msgMuonHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo));
    +
    +  if(m_debug) std::cout << "MuonHists: in execute " <<std::endl;
    +
    +  const xAOD::Muon* muon=dynamic_cast<const xAOD::Muon*>(particle);
    +  if(muon==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Muon" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  if ( m_infoSwitch->m_isolation ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accIsol;
    +
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (!isol.empty() && isol != "NONE") {
    +        std::string isolWP = "isIsolated_" + isol;
    +        accIsol.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( isol , SG::AuxElement::Accessor<char>( isolWP ) ) );
    +
    +        if (accIsol.at(isol).isAvailable(*muon)) {
    +          m_isIsolated[isol]->Fill(accIsol.at(isol)(*muon), eventWeight);
    +        } else {
    +          m_isIsolated[isol]->Fill(-1, eventWeight);
    +        }
    +      }
    +    }
    +
    +    m_ptcone20     ->Fill( muon->isolation( xAOD::Iso::ptcone20 )     ,  eventWeight );
    +    m_ptcone30     ->Fill( muon->isolation( xAOD::Iso::ptcone30 )     ,  eventWeight );
    +    m_ptcone40     ->Fill( muon->isolation( xAOD::Iso::ptcone40 )     ,  eventWeight );
    +    m_ptvarcone20  ->Fill( muon->isolation( xAOD::Iso::ptvarcone20 )  ,  eventWeight );
    +    m_ptvarcone30  ->Fill( muon->isolation( xAOD::Iso::ptvarcone30 )  ,  eventWeight );
    +    m_ptvarcone40  ->Fill( muon->isolation( xAOD::Iso::ptvarcone40 )  ,  eventWeight );
    +    m_topoetcone20 ->Fill( muon->isolation( xAOD::Iso::topoetcone20 ) ,  eventWeight );
    +    m_topoetcone30 ->Fill( muon->isolation( xAOD::Iso::topoetcone30 ) ,  eventWeight );
    +    m_topoetcone40 ->Fill( muon->isolation( xAOD::Iso::topoetcone40 ) ,  eventWeight );
    +
    +    float muonPt = muon->pt();
    +    m_ptcone20_rel     ->Fill( muon->isolation( xAOD::Iso::ptcone20 )     / muonPt,  eventWeight );
    +    m_ptcone30_rel     ->Fill( muon->isolation( xAOD::Iso::ptcone30 )     / muonPt,  eventWeight );
    +    m_ptcone40_rel     ->Fill( muon->isolation( xAOD::Iso::ptcone40 )     / muonPt,  eventWeight );
    +    m_ptvarcone20_rel  ->Fill( muon->isolation( xAOD::Iso::ptvarcone20 )  / muonPt,  eventWeight );
    +    m_ptvarcone30_rel  ->Fill( muon->isolation( xAOD::Iso::ptvarcone30 )  / muonPt,  eventWeight );
    +    m_ptvarcone40_rel  ->Fill( muon->isolation( xAOD::Iso::ptvarcone40 )  / muonPt,  eventWeight );
    +    m_topoetcone20_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone20 ) / muonPt,  eventWeight );
    +    m_topoetcone30_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone30 ) / muonPt,  eventWeight );
    +    m_topoetcone40_rel ->Fill( muon->isolation( xAOD::Iso::topoetcone40 ) / muonPt,  eventWeight );
    +
    +
    +  }
    +
    +
    +  if ( m_infoSwitch->m_quality ) {
    +    static std::map< std::string, SG::AuxElement::Accessor<char> > accQuality;
    +
    +    for (auto& quality : m_infoSwitch->m_recoWPs) {
    +      if (!quality.empty()) {
    +        accQuality.insert( std::pair<std::string, SG::AuxElement::Accessor<char> > ( quality , SG::AuxElement::Accessor<char>( quality ) ) );
    +
    +        if (accQuality.at(quality).isAvailable(*muon)) {
    +          m_quality[quality]->Fill(accQuality.at(quality)(*muon), eventWeight);
    +        } else {
    +          m_quality[quality]->Fill(-1, eventWeight);
    +        }
    +      }
    +    }
    +  }
    +
    +
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode MuonHists::execute( const xAH::Muon* muon, float eventWeight, const xAH::EventInfo* eventInfo ) {
    +  return execute(static_cast<const xAH::Particle*>(muon), eventWeight, eventInfo);
    +}
    +
    +
    +StatusCode MuonHists::execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* /*eventInfo*/  ) {
    +  using namespace msgMuonHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight));
    +
    +  if(m_debug) std::cout << "MuonHists: in execute " <<std::endl;
    +
    +  const xAH::Muon* muon=dynamic_cast<const xAH::Muon*>(particle);
    +  if(muon==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Muon" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  if ( m_infoSwitch->m_isolation ) {
    +    for (auto& isol : m_infoSwitch->m_isolWPs) {
    +      if (isol.empty()) continue;
    +
    +      m_isIsolated[isol]->Fill(muon->isIsolated.at(isol), eventWeight);
    +    }
    +
    +    m_ptcone20     ->Fill( muon->ptcone20      ,  eventWeight );
    +    m_ptcone30     ->Fill( muon->ptcone30      ,  eventWeight );
    +    m_ptcone40     ->Fill( muon->ptcone40      ,  eventWeight );
    +    m_ptvarcone20  ->Fill( muon->ptvarcone20   ,  eventWeight );
    +    m_ptvarcone30  ->Fill( muon->ptvarcone30   ,  eventWeight );
    +    m_ptvarcone40  ->Fill( muon->ptvarcone40   ,  eventWeight );
    +    m_topoetcone20 ->Fill( muon->topoetcone20  ,  eventWeight );
    +    m_topoetcone30 ->Fill( muon->topoetcone30  ,  eventWeight );
    +    m_topoetcone40 ->Fill( muon->topoetcone40  ,  eventWeight );
    +
    +    float muonPt = muon->p4.Pt();
    +    m_ptcone20_rel     ->Fill( muon->ptcone20/muonPt        ,  eventWeight );
    +    m_ptcone30_rel     ->Fill( muon->ptcone30/muonPt        ,  eventWeight );
    +    m_ptcone40_rel     ->Fill( muon->ptcone40/muonPt        ,  eventWeight );
    +    m_ptvarcone20_rel  ->Fill( muon->ptvarcone20 /muonPt    ,  eventWeight );
    +    m_ptvarcone30_rel  ->Fill( muon->ptvarcone30 /muonPt    ,  eventWeight );
    +    m_ptvarcone40_rel  ->Fill( muon->ptvarcone40 /muonPt    ,  eventWeight );
    +    m_topoetcone20_rel ->Fill( muon->topoetcone20/muonPt    ,  eventWeight );
    +    m_topoetcone30_rel ->Fill( muon->topoetcone30/muonPt    ,  eventWeight );
    +    m_topoetcone40_rel ->Fill( muon->topoetcone40/muonPt    ,  eventWeight );
    +
    +  }
    +
    +
    +  if ( m_infoSwitch->m_quality ) {
    +    for (auto& quality : m_infoSwitch->m_recoWPs) {
    +      if (quality.empty()) continue;
    +
    +      m_quality[quality]->Fill(muon->quality.at(quality), eventWeight);
    +    }
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonHistsAlgo.cxx.html b/api/program_listing_file_Root_MuonHistsAlgo.cxx.html new file mode 100644 index 0000000000..6b35f75bb8 --- /dev/null +++ b/api/program_listing_file_Root_MuonHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + Program Listing for File MuonHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonHistsAlgo.cxx

    +

    Return to documentation for file (Root/MuonHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <xAODMuon/MuonContainer.h>
    +
    +#include <xAODAnaHelpers/MuonHistsAlgo.h>
    +#include <xAODAnaHelpers/MuonHists.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MuonHistsAlgo)
    +
    +MuonHistsAlgo :: MuonHistsAlgo () :
    +IParticleHistsAlgo("MuonHistsAlgo")
    +{ }
    +
    +EL::StatusCode MuonHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("MuonHistsAlgo").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonHistsAlgo::AddHists( std::string name ) {
    +  return IParticleHistsAlgo::AddHists<MuonHists>(name);
    +}
    +
    +EL::StatusCode MuonHistsAlgo :: execute () {
    +  return IParticleHistsAlgo::execute<MuonHists, xAOD::MuonContainer>();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.html b/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.html new file mode 100644 index 0000000000..4a635c7fce --- /dev/null +++ b/api/program_listing_file_Root_MuonInFatJetCorrector.cxx.html @@ -0,0 +1,575 @@ + + + + + + + + + + + Program Listing for File MuonInFatJetCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File MuonInFatJetCorrector.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonInFatJetCorrector.cxx

    +

    Return to documentation for file (Root/MuonInFatJetCorrector.cxx)

    +
    #include <iostream>
    +#include <typeinfo>
    +
    +#include <EventLoop/Job.h>
    +#include <EventLoop/Algorithm.h>
    +#include <EventLoop/Worker.h>
    +
    +#include "xAODJet/JetContainer.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODTruth/TruthParticleContainer.h"
    +
    +#include "MuonSelectorTools/MuonSelectionTool.h"
    +
    +#include "xAODAnaHelpers/MuonInFatJetCorrector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +
    +// Needed to distribute the algorithm to the workers
    +ClassImp(MuonInFatJetCorrector)
    +
    +MuonInFatJetCorrector :: MuonInFatJetCorrector() :
    +  Algorithm("MuonInFatJetCorrector")
    +{
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: setupJob(EL::Job& job)
    +{
    +  ANA_MSG_DEBUG("Calling setupJob");
    +  job.useXAOD();
    +  xAOD::Init("MuonInFatJetCorrector").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: histInitialize()
    +{
    +  ANA_MSG_DEBUG("Calling histInitialize");
    +  ANA_CHECK(xAH::Algorithm::algInitialize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: fileExecute()
    +{
    +  ANA_MSG_DEBUG("Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: changeInput(bool /*firstFile*/)
    +{
    +  ANA_MSG_DEBUG("Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: initialize()
    +{
    +  ANA_MSG_DEBUG("Calling initialize");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  //
    +  // Automatically determine calibrated mass decorators, if asked
    +  m_calibratedMassDecorator=(isMC())?m_calibratedMassDecoratorFullSim:m_calibratedMassDecoratorData;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: execute()
    +{
    +  //
    +  // Do muon matching
    +  ANA_CHECK(matchTrackJetsToMuons());
    +
    +  //
    +  // Loop over large-R jets (all systematics) and calculate correction
    +  std::vector<std::string>* systNames(nullptr);
    +  if ( !m_inputAlgo.empty() )
    +    {
    +      ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) );
    +    }
    +  else
    +    {
    +      systNames=new std::vector<std::string>({""});
    +    }
    +
    +  // Decorator holding muon in fatjet corrected fatjets.
    +  static SG::AuxElement::Decorator<TLorentzVector> dec_correctedFatJets_tlv("correctedFatJets_tlv");
    +  for(const std::string& systName : *systNames)
    +    {
    +      // Retrieve calibrated fatjets.
    +      const xAOD::JetContainer *fatJets(nullptr);
    +      ANA_CHECK(HelperFunctions::retrieve(fatJets, m_fatJetContainerName+systName, m_event, m_store, msg()));
    +
    +      // Loop over fatjets
    +      for(const xAOD::Jet *fatJet : *fatJets)
    +    {
    +      // Get corrected fatjet.
    +      TLorentzVector correctedVector = getHbbCorrectedVector(*fatJet);
    +
    +      dec_correctedFatJets_tlv(*fatJet) = correctedVector;
    +    }
    +    }
    +
    +  // Clean up systematics list if none exists
    +  if(m_inputAlgo.empty())
    +    delete systNames;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: postExecute ()
    +{
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode MuonInFatJetCorrector :: finalize()
    +{
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector :: histFinalize ()
    +{
    +
    +  ANA_MSG_DEBUG( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +TLorentzVector MuonInFatJetCorrector::getHbbCorrectedVector(const xAOD::Jet& jet)
    +{
    +  /* Steps:
    +     1. Get all track jets asssociated with the ungroomed jet
    +     2. Match muons to these b-tagged track-jets
    +     - if more than 1 muon matches a track jet, only use the muon closest in DR
    +     3. Correct the fat-jet mass by putting the matched muon back
    +  */
    +
    +  //
    +  // Step 1
    +  std::vector<const xAOD::Jet*> associated_trackJets;
    +
    +  // get the element links to the parent, ungroomed jet
    +  static const SG::AuxElement::ConstAccessor<ElementLink<xAOD::JetContainer>> acc_Parent("Parent");
    +  if (!acc_Parent.isAvailable(jet))
    +    {
    +      ANA_MSG_FATAL("Parent (ungroomed) jet collection does not exist.");
    +      return TLorentzVector();
    +    }
    +  ElementLink<xAOD::JetContainer> parentEL = acc_Parent(jet);
    +  if (!parentEL.isValid())
    +    {
    +      ANA_MSG_FATAL("Parent link is not valid.");
    +      return TLorentzVector();
    +    }
    +
    +  // access the track jets
    +  const xAOD::Jet* parentJet = *parentEL;
    +  if (!parentJet->getAssociatedObjects<xAOD::Jet>(m_trackJetLinkName, associated_trackJets))
    +    {
    +      ANA_MSG_FATAL("No associated track jets found on parent jet.");
    +      return TLorentzVector();
    +    }
    +
    +  // get trackjets of interest
    +  std::vector<const xAOD::Jet*> associated_trackJets_filtered;
    +  for (const xAOD::Jet* trackJet : associated_trackJets)
    +    {
    +      if (trackJet->pt() < m_trackJetPtMin) continue;
    +      if (fabs(trackJet->eta()) > m_trackJetEtaMax) continue;
    +      if (trackJet->numConstituents() < m_trackJetNConst) continue;
    +
    +      associated_trackJets_filtered.push_back(trackJet);
    +  }
    +
    +  std::sort(associated_trackJets_filtered.begin(), associated_trackJets_filtered.end(), [](const xAOD::Jet* lhs, const xAOD::Jet* rhs) -> bool { return (lhs->pt() > rhs->pt()); });
    +
    +  //
    +  // Step 2
    +  std::vector<const xAOD::Muon*> matched_muons;
    +  for (const xAOD::Jet* trackJet : associated_trackJets_filtered)
    +    {
    +      const xAOD::Muon* closest_muon=nullptr;
    +      float maxDR=m_muonDrMax;
    +
    +      // get muons from jet decoration
    +      static const SG::AuxElement::Accessor<std::vector<ElementLink<xAOD::MuonContainer>>> acc_MuonsInTrackJet("MuonsInTrackJet");
    +
    +      if(!acc_MuonsInTrackJet.isAvailable(*trackJet))
    +    {
    +      ANA_MSG_FATAL("No muons associated to track jet.");
    +      return TLorentzVector();
    +    }
    +
    +      std::vector<ElementLink<xAOD::MuonContainer>> associated_muons=acc_MuonsInTrackJet(*trackJet);
    +      for (const ElementLink<xAOD::MuonContainer>& muonEL : associated_muons)
    +    {
    +      const xAOD::Muon* muon=(*muonEL);
    +
    +      // muon quality selection
    +      if (muon->pt() < m_muonPtMin) continue;
    +      if (muon->quality() > xAOD::Muon::Medium) continue;
    +      if (fabs(muon->eta()) > m_muonEtaMax) continue;
    +      // find clostest muon
    +      float DR = trackJet->p4().DeltaR(muon->p4());
    +      float cutDR=std::min(0.4,0.04 + 10000.0/muon->pt());
    +      if (DR > cutDR) continue;
    +      if (DR > maxDR) continue;
    +      maxDR = DR;
    +      closest_muon = muon;
    +    }
    +
    +      // check if the closest muon was already selected
    +      if(std::find(matched_muons.begin(),matched_muons.end(),closest_muon)!=matched_muons.end())
    +    {
    +      closest_muon = nullptr;
    +      ANA_MSG_DEBUG("Muon duplicate found! Skipping.");
    +      break;
    +    }
    +
    +      if (closest_muon)
    +    matched_muons.push_back(closest_muon);
    +    }
    +
    +  //
    +  // Step 3
    +  xAOD::JetFourMom_t corrected_jet_p4 = getMuonCorrectedJetFourMom(jet, matched_muons, Scheme::Combined);
    +  TLorentzVector corrected_jet(corrected_jet_p4.x(), corrected_jet_p4.y(), corrected_jet_p4.z(), corrected_jet_p4.t());
    +
    +  return corrected_jet;
    +}
    +
    +EL::StatusCode MuonInFatJetCorrector::matchTrackJetsToMuons() const
    +{
    +  // retrieve muons from StoreGate
    +  const xAOD::MuonContainer *muons(nullptr);
    +  ANA_CHECK(HelperFunctions::retrieve(muons, m_muonContainerName, m_event, m_store, msg()));
    +
    +  // retrieve track jets from StoreGate
    +  const xAOD::JetContainer *trackJets(nullptr);
    +  ANA_CHECK(HelperFunctions::retrieve(trackJets, m_trackJetContainerName, m_event, m_store, msg()));
    +
    +  // decorate all track jets by default, no selection, no muon overlap removal (will be done later)
    +  static SG::AuxElement::Decorator<std::vector<ElementLink<xAOD::MuonContainer>>> dec_MuonsInTrackJet("MuonsInTrackJet");
    +  for (const xAOD::Jet* trackJet : *trackJets)
    +    {
    +      std::vector<ElementLink<xAOD::MuonContainer>> muons_in_jet;
    +      uint32_t idx=0;
    +      for (const xAOD::Muon* muon : *muons)
    +    {
    +      float DR=trackJet->p4().DeltaR(muon->p4());
    +      if (DR < m_muonDrMax)
    +        {
    +          ElementLink<xAOD::MuonContainer> muonEL(*muons, idx);
    +          muons_in_jet.push_back(muonEL);
    +        }
    +      ++idx;
    +    }
    +
    +      dec_MuonsInTrackJet(*trackJet) = muons_in_jet;
    +
    +      ANA_MSG_DEBUG("Found " << muons_in_jet.size() << " muons within R < " << m_muonDrMax << " of associated track jet.");
    +    }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +const xAOD::JetFourMom_t MuonInFatJetCorrector::getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector<const xAOD::Muon*> muons, Scheme scheme, bool useJMSScale) const
    +{
    +  xAOD::JetFourMom_t JetCorr_tlv = jet.jetP4();
    +  if (muons.size() == 0)
    +    return JetCorr_tlv;
    +
    +  ANA_MSG_DEBUG("Derive muon-in-jet correction: nMuons = " << (int) muons.size() << "\tMuonCorrectionScheme = " << scheme << "\tuseJMSScale = " << useJMSScale);
    +  switch(scheme)
    +    {
    +    case Scheme::Calorimeter:
    +      {
    +    // muon-in-jet correction for jets calibrated using calorimeter mass
    +    xAOD::JetFourMom_t CaloJet_tlv = jet.jetP4();
    +    if (useJMSScale) CaloJet_tlv = jet.jetP4(m_calibratedMassDecorator+"Calo");
    +    for(const xAOD::Muon* muon : muons)
    +      {
    +        // get energy loss of muon in the calorimeter
    +        float eLoss=0.0;
    +        muon->parameter(eLoss, xAOD::Muon::EnergyLoss);
    +        ANA_MSG_DEBUG("Energy loss in calorimter = " << eLoss);
    +        // use muon tlv to get x/y/z compontent of energy loss
    +        TLorentzVector muon_tlv = muon->p4();
    +        double eLossX = eLoss * sin(muon_tlv.Theta()) * cos(muon_tlv.Phi());
    +        double eLossY = eLoss * sin(muon_tlv.Theta()) * sin(muon_tlv.Phi());
    +        double eLossZ = eLoss * cos(muon_tlv.Theta());
    +        TLorentzVector mLoss(eLossX, eLossY, eLossZ, eLoss);
    +        TLorentzVector muonCorr_tlv = muon_tlv - mLoss;
    +        // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV
    +        CaloJet_tlv += xAOD::JetFourMom_t(muonCorr_tlv.Pt(), muonCorr_tlv.Eta(), muonCorr_tlv.Phi(), muonCorr_tlv.M());
    +      }
    +    JetCorr_tlv = CaloJet_tlv;
    +    break;
    +      }
    +    case Scheme::TrackAssisted:
    +      {
    +    // muon-in-jet correction for jets calibrated using track-assisted mass
    +    xAOD::JetFourMom_t TAJet_tlv = jet.jetP4();
    +    if (useJMSScale) TAJet_tlv = jet.jetP4(m_calibratedMassDecorator+"TA");
    +    xAOD::JetFourMom_t CaloJet_tlv = jet.jetP4(m_calibratedMassDecorator+"Calo");
    +    xAOD::JetFourMom_t CaloJetCorr_tlv =  getMuonCorrectedJetFourMom(jet, muons, Scheme::Calorimeter, true);
    +    float TAJetCorr_m = TAJet_tlv.M() / CaloJet_tlv.Pt() * CaloJetCorr_tlv.Pt() ;
    +    float TAJetCorr_pt = sqrt((CaloJetCorr_tlv.E() * CaloJetCorr_tlv.E()) - (TAJetCorr_m * TAJetCorr_m)) / cosh(CaloJetCorr_tlv.Eta());
    +    // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV
    +    JetCorr_tlv = xAOD::JetFourMom_t(TAJetCorr_pt, CaloJetCorr_tlv.Eta(), CaloJetCorr_tlv.Phi(), TAJetCorr_m);
    +    break;
    +      }
    +    case Scheme::Combined:
    +      {
    +    // muon-in-jet correction for jets calibrated using combined mass
    +    xAOD::JetFourMom_t TAJet_tlv       = jet.jetP4(m_calibratedMassDecorator+"TA");
    +    xAOD::JetFourMom_t TAJetCorr_tlv   = getMuonCorrectedJetFourMom(jet, muons, Scheme::TrackAssisted, true);
    +    xAOD::JetFourMom_t CaloJet_tlv     = jet.jetP4(m_calibratedMassDecorator+"Calo");
    +    xAOD::JetFourMom_t CaloJetCorr_tlv = getMuonCorrectedJetFourMom(jet, muons, Scheme::Calorimeter  , true);
    +    xAOD::JetFourMom_t CombJet_tlv = jet.jetP4();
    +    float CaloWeight = (CombJet_tlv.M() -   TAJet_tlv.M()) / (CaloJet_tlv.M() - TAJet_tlv.M());
    +    float TAWeight   = (CaloJet_tlv.M() - CombJet_tlv.M()) / (CaloJet_tlv.M() - TAJet_tlv.M());
    +    ANA_MSG_DEBUG("CaloWeight = " << CaloWeight << "\tTAWeight = " << TAWeight);
    +    float CombJetCorr_m = CaloWeight * CaloJetCorr_tlv.M() + TAWeight * TAJetCorr_tlv.M();
    +    float CombJetCorr_pt = sqrt((CaloJetCorr_tlv.E() * CaloJetCorr_tlv.E()) - (CombJetCorr_m * CombJetCorr_m)) / cosh(CaloJetCorr_tlv.Eta());
    +    // apply muon-in-jet correction for track-assisted mass calibration to output jet TLV
    +    JetCorr_tlv = xAOD::JetFourMom_t(CombJetCorr_pt, CaloJetCorr_tlv.Eta(), CaloJetCorr_tlv.Phi(), CombJetCorr_m);
    +    break;
    +      }
    +    case SimpleMuon:
    +      {
    +    // unknown mass calibration; just add muon 4-momentum
    +    for(const xAOD::Muon* muon : muons)
    +      {
    +        JetCorr_tlv += xAOD::JetFourMom_t(muon->pt(), muon->eta(), muon->phi(), muon->m());
    +      }
    +    break;
    +      }
    +    default:
    +      {
    +    ANA_MSG_FATAL("Unknown muon correction scheme.");
    +      }
    +    }
    +
    +  ANA_MSG_DEBUG("Before muon-in-jet: pt = " << jet.pt() << "\t eta = " << jet.eta()
    +        << "\tphi = " << jet.phi() << "\tm = " << jet.m());
    +  ANA_MSG_DEBUG("After muon-in-jet:  pt = " << JetCorr_tlv.pt() << "\teta = " << JetCorr_tlv.eta()
    +        << "\tphi = " << JetCorr_tlv.phi() << "\tm = " << JetCorr_tlv.M());
    +  for(const xAOD::Muon* muon : muons)
    +    {
    +      ANA_MSG_DEBUG("muons: pt = " << muon->pt() << "\teta = " << muon->eta()
    +            << "\tphi = " << muon->phi() << "\tm = " << muon->m());
    +    }
    +
    +  return JetCorr_tlv;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_MuonSelector.cxx.html b/api/program_listing_file_Root_MuonSelector.cxx.html new file mode 100644 index 0000000000..5daa23bbbe --- /dev/null +++ b/api/program_listing_file_Root_MuonSelector.cxx.html @@ -0,0 +1,1201 @@ + + + + + + + + + + + Program Listing for File MuonSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonSelector.cxx

    +

    Return to documentation for file (Root/MuonSelector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <tuple>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODCore/ShallowCopy.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODTracking/TrackParticlexAODHelpers.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/MuonSelector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +// #include "PATCore/TAccept.h"
    +#include "TrigConfxAOD/xAODConfigTool.h"
    +// tool includes
    +#include "IsolationSelection/IsolationSelectionTool.h"
    +#include "MuonSelectorTools/MuonSelectionTool.h"
    +#include "TriggerMatchingTool/MatchingTool.h"
    +#include "TriggerMatchingTool/MatchFromCompositeTool.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(MuonSelector)
    +
    +MuonSelector :: MuonSelector () :
    +    Algorithm("MuonSelector")
    +{
    +}
    +
    +MuonSelector::~MuonSelector() {}
    +
    +EL::StatusCode MuonSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "MuonSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  if ( this->numInstances() > 1 ) {
    +    m_isUsedBefore = true;
    +    ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_INFO( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing MuonSelector Interface... ");
    +
    +  // Let's see if the algorithm has been already used before:
    +  // if yes, will write object cutflow in a different histogram!
    +  //
    +  // This is the case when the selector algorithm is used for
    +  // preselecting objects, and then again for the final selection
    +  //
    +  ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className );
    +
    +  if ( m_useCutFlow ) {
    +
    +    // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_mu_cutflowHist_1  = (TH1D*)file->Get("cutflow_muons_1");
    +
    +    m_mu_cutflow_all                  = m_mu_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_mu_cutflow_eta_and_quaility_cut = m_mu_cutflowHist_1->GetXaxis()->FindBin("eta_and_quality_cut");
    +    m_mu_cutflow_ptmax_cut            = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut");
    +    m_mu_cutflow_ptmin_cut            = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut");
    +    m_mu_cutflow_ptnan_check          = m_mu_cutflowHist_1->GetXaxis()->FindBin("ptNaN_check");
    +    m_mu_cutflow_type_cut             = m_mu_cutflowHist_1->GetXaxis()->FindBin("type_cut");
    +    m_mu_cutflow_z0sintheta_cut       = m_mu_cutflowHist_1->GetXaxis()->FindBin("z0sintheta_cut");
    +    m_mu_cutflow_d0_cut               = m_mu_cutflowHist_1->GetXaxis()->FindBin("d0_cut");
    +    m_mu_cutflow_d0sig_cut            = m_mu_cutflowHist_1->GetXaxis()->FindBin("d0sig_cut");
    +    m_mu_cutflow_iso_cut              = m_mu_cutflowHist_1->GetXaxis()->FindBin("iso_cut");
    +    if( m_removeCosmicMuon )
    +      m_mu_cutflow_cosmic_cut              = m_mu_cutflowHist_1->GetXaxis()->FindBin("cosmic_cut");
    +
    +
    +    if ( m_isUsedBefore ) {
    +      m_mu_cutflowHist_2 = (TH1D*)file->Get("cutflow_muons_2");
    +
    +      m_mu_cutflow_all       = m_mu_cutflowHist_2->GetXaxis()->FindBin("all");
    +      m_mu_cutflow_eta_and_quaility_cut = m_mu_cutflowHist_2->GetXaxis()->FindBin("eta_and_quality_cut");
    +      m_mu_cutflow_ptmax_cut         = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptmax_cut");
    +      m_mu_cutflow_ptmin_cut         = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptmin_cut");
    +      m_mu_cutflow_ptnan_check   = m_mu_cutflowHist_2->GetXaxis()->FindBin("ptNaN_check");
    +      m_mu_cutflow_type_cut      = m_mu_cutflowHist_2->GetXaxis()->FindBin("type_cut");
    +      m_mu_cutflow_z0sintheta_cut    = m_mu_cutflowHist_2->GetXaxis()->FindBin("z0sintheta_cut");
    +      m_mu_cutflow_d0_cut        = m_mu_cutflowHist_2->GetXaxis()->FindBin("d0_cut");
    +      m_mu_cutflow_d0sig_cut         = m_mu_cutflowHist_2->GetXaxis()->FindBin("d0sig_cut");
    +      m_mu_cutflow_iso_cut       = m_mu_cutflowHist_2->GetXaxis()->FindBin("iso_cut");
    +      if( m_removeCosmicMuon )
    +        m_mu_cutflow_cosmic_cut      = m_mu_cutflowHist_2->GetXaxis()->FindBin("cosmic_cut");
    +    }
    +
    +  }// if m_useCutFlow
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  HelperClasses::EnumParser<xAOD::Muon::Quality> muQualityParser;
    +  m_muonQuality             = static_cast<int>( muQualityParser.parseEnum(m_muonQualityStr) );
    +  if (m_muonQualityStr=="HighPt") m_muonQuality=4;
    +  else if (m_muonQualityStr=="LowPt") m_muonQuality=5;
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +
    +  std::set<int> muonQualitySet;
    +  muonQualitySet.insert(0);
    +  muonQualitySet.insert(1);
    +  muonQualitySet.insert(2);
    +  muonQualitySet.insert(3);
    +  muonQualitySet.insert(4);
    +  muonQualitySet.insert(5);
    +  if ( muonQualitySet.find(m_muonQuality) == muonQualitySet.end() ) {
    +    ANA_MSG_ERROR( "Unknown muon quality requested: " << m_muonQuality);
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // Parse input isolation WP list, split by comma, and put into a vector for later use
    +  // Make sure it's not empty!
    +  if(m_doIsolation){
    +    if ( m_IsoWPList.empty() ) {
    +      ANA_MSG_ERROR("Empty isolation WP list");
    +    }
    +    std::string token;
    +    std::istringstream ss(m_IsoWPList);
    +    while ( std::getline(ss, token, ',') ) {
    +      m_IsoKeys.push_back(token);
    +    }
    +  }
    +
    +  if ( m_inContainerName.empty() ){
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +  // ********************************
    +  //
    +  // Initialise CP::MuonSelectionTool
    +  //
    +  // ********************************
    +  //
    +  // Set eta and quality requirements in order to accept the muon - ID tracks required by default
    +  //
    +
    +  ANA_CHECK( m_muonSelectionTool_handle.setProperty( "MaxEta", static_cast<double>(m_eta_max) ));
    +  ANA_CHECK( m_muonSelectionTool_handle.setProperty( "MuQuality", m_muonQuality ));
    +  ANA_CHECK( m_muonSelectionTool_handle.setProperty( "IsRun3Geo", m_isRun3Geo ));
    +  ANA_CHECK( m_muonSelectionTool_handle.setProperty( "OutputLevel", msg().level() ));
    +  if (m_doLRT) {
    +    ANA_CHECK( m_muonSelectionTool_handle.setProperty( "UseLRT", true ));
    +  }
    +  ANA_CHECK( m_muonSelectionTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_muonSelectionTool_handle);
    +
    +  if(m_doIsolation){
    +    // *************************************
    +    //
    +    // Initialise CP::IsolationSelectionTool
    +    //
    +    // *************************************
    +
    +    // Do this only for the first WP in the list
    +    ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" );
    +    ANA_CHECK( m_isolationSelectionTool_handle.setProperty("MuonWP", (m_IsoKeys.at(0)).c_str()));
    +    ANA_CHECK( m_isolationSelectionTool_handle.setProperty("OutputLevel", msg().level() ));
    +    if (m_isoDecSuffix!="") ANA_CHECK( m_isolationSelectionTool_handle.setProperty("IsoDecSuffix", m_isoDecSuffix) );
    +    ANA_CHECK( m_isolationSelectionTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_isolationSelectionTool_handle);
    +    m_isolationSelectionTool = dynamic_cast<CP::IsolationSelectionTool*>(m_isolationSelectionTool_handle.get() ); // see header file for why
    +
    +    // Add the remaining input WPs to the tool
    +    // (start from 2nd element)
    +    //
    +    for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) {
    +
    +       ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" );
    +
    +       if ( (*WP_itr).find("UserDefined") != std::string::npos ) {
    +
    +         HelperClasses::EnumParser<xAOD::Iso::IsolationType> isoParser;
    +
    +         std::vector< std::pair<xAOD::Iso::IsolationType, std::string> > myCuts;
    +         myCuts.push_back(std::make_pair<xAOD::Iso::IsolationType, std::string>(isoParser.parseEnum(m_TrackBasedIsoType), m_TrackIsoEff.c_str() ));
    +         myCuts.push_back(std::make_pair<xAOD::Iso::IsolationType, std::string>(isoParser.parseEnum(m_CaloBasedIsoType) , m_CaloIsoEff.c_str()  ));
    +
    +         CP::IsolationSelectionTool::IsoWPType iso_type(CP::IsolationSelectionTool::Efficiency);
    +         if ( (*WP_itr).find("Cut") != std::string::npos ) { iso_type = CP::IsolationSelectionTool::Cut; }
    +
    +         ANA_CHECK(  m_isolationSelectionTool->addUserDefinedWP((*WP_itr).c_str(), xAOD::Type::Muon, myCuts, "", iso_type));
    +
    +       } else {
    +
    +          ANA_CHECK( m_isolationSelectionTool->addMuonWP( (*WP_itr).c_str() ));
    +
    +       }
    +    }
    +  }
    +
    +  // **************************************
    +  //
    +  // Initialise Trig::MatchingTool
    +  //
    +  // **************************************
    +  if( !( m_singleMuTrigChains.empty() && m_diMuTrigChains.empty() ) ) {
    +
    +    // grab the TrigDecTool from the ToolStore
    +    if(!m_trigDecTool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_CHECK( m_trigDecTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +
    +    // in AB we need to explicitly retrieve this tool, see https://twiki.cern.ch/twiki/bin/viewauth/Atlas/R22TriggerAnalysis
    +    ANA_CHECK( m_scoreTool.retrieve());
    +
    +    // Run3 got a new trigger navigation
    +    if (m_useRun3navigation) {
    +      m_trigMuonMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::R3MatchingTool/TrigR3MatchingTool");
    +      ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +      ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +      ANA_CHECK( m_trigMuonMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigMuonMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle);
    +    }
    +    // otherwise we have to configure the Run2-style navigation
    +    else {
    +      if( !isPHYS() ) {
    +        m_trigMuonMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchingTool/MatchingTool");
    +        ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +        ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +        ANA_CHECK( m_trigMuonMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +        ANA_CHECK( m_trigMuonMatchTool_handle.retrieve());
    +        ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle);
    +      }
    +      else { // For DAOD_PHYS samples
    +        m_trigMuonMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchFromCompositeTool/MatchFromCompositeTool");
    +        ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "OutputLevel", msg().level() ));
    +        if (!m_trigInputPrefix.empty()){
    +          ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "InputPrefix", m_trigInputPrefix ));
    +          ANA_CHECK( m_trigMuonMatchTool_handle.setProperty( "RemapBrokenLinks", true) );
    +        }
    +        ANA_CHECK( m_trigMuonMatchTool_handle.retrieve());
    +        ANA_MSG_DEBUG("Retrieved tool: " << m_trigMuonMatchTool_handle);
    +      }
    +    }
    +  } else {
    +
    +    m_doTrigMatch = false;
    +
    +    ANA_MSG_WARNING("***********************************************************");
    +    ANA_MSG_WARNING( "Will not perform any muon trigger matching at this stage b/c :");
    +    ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore");
    +    ANA_MSG_WARNING("\t AND/OR");
    +    ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty");
    +    ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!");
    +    ANA_MSG_WARNING("***********************************************************");
    +  }
    +
    +  ANA_MSG_INFO( "MuonSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode MuonSelector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Muon Selection..." );
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  //
    +  float mcEvtWeight(1.0);
    +  static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +  if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +    ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +    return EL::StatusCode::FAILURE;
    +  }
    +  mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +
    +  m_numEvent++;
    +
    +  // QUESTION: why this must be done in execute(), and does not work in initialize()?
    +  //
    +  if ( m_numEvent == 1 && m_trigMuonMatchTool_handle.isInitialized() ) {
    +
    +    // parse input muon trigger chain list, split by comma and fill vector
    +    //
    +    std::string singlemu_trig;
    +    std::istringstream ss_singlemu_trig(m_singleMuTrigChains);
    +
    +    while ( std::getline(ss_singlemu_trig, singlemu_trig, ',') ) {
    +    m_singleMuTrigChainsList.push_back(singlemu_trig);
    +    }
    +
    +    std::string dimu_trig;
    +    std::istringstream ss_dimu_trig(m_diMuTrigChains);
    +
    +    while ( std::getline(ss_dimu_trig, dimu_trig, ',') ) {
    +    m_diMuTrigChainsList.push_back(dimu_trig);
    +    }
    +
    +    ANA_MSG_INFO( "Input single muon trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_singleMuTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +    ANA_MSG_INFO( "Input di-muon trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_diMuTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +  }
    +
    +  // did any collection pass the cuts?
    +  //
    +  bool eventPass(false);
    +  bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal
    +  const xAOD::MuonContainer* inMuons(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_inputAlgoSystNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // create output container (if requested)
    +    //
    +    ConstDataVector<xAOD::MuonContainer>* selectedMuons(nullptr);
    +    if ( m_createSelectedContainer ) { selectedMuons = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS); }
    +
    +    // find the selected muons, and return if event passes object selection
    +    //
    +    eventPass = executeSelection( inMuons, mcEvtWeight, countPass, selectedMuons );
    +
    +    if ( m_createSelectedContainer ) {
    +      if ( eventPass ) {
    +        // add ConstDataVector to TStore
    +    //
    +        ANA_CHECK( m_store->record( selectedMuons, m_outContainerName ));
    +      } else {
    +        // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it!
    +    //
    +        delete selectedMuons; selectedMuons = nullptr;
    +      }
    +    }
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) );
    +
    +    // prepare a vector of the names of CDV containers for usage by downstream algos
    +    // must be a pointer to be recorded in TStore
    +    //
    +    auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +    ANA_MSG_DEBUG( " input list of syst size: " << static_cast<int>(systNames->size()) );
    +
    +    // loop over systematic sets
    +    //
    +    bool eventPassThisSyst(false);
    +    for ( auto systName : *systNames ) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name: " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName + systName, m_event, m_store, msg()) );
    +
    +      // create output container (if requested) - one for each systematic
    +      //
    +      ConstDataVector<xAOD::MuonContainer>* selectedMuons(nullptr);
    +      if ( m_createSelectedContainer ) { selectedMuons = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS); }
    +
    +      // find the selected muons, and return if event passes object selection
    +      //
    +      eventPassThisSyst = executeSelection( inMuons, mcEvtWeight, countPass, selectedMuons );
    +
    +      if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal)
    +
    +      if ( eventPassThisSyst ) {
    +    // save the string of syst set under question if event is passing the selection
    +    //
    +    vecOutContainerNames->push_back( systName );
    +      }
    +
    +      // if for at least one syst set the event passes selection, this will remain true!
    +      //
    +      eventPass = ( eventPass || eventPassThisSyst );
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  output container name: " << m_outContainerName+systName );
    +
    +      if ( m_createSelectedContainer ) {
    +        if ( eventPassThisSyst ) {
    +          // add ConstDataVector to TStore
    +      //
    +          ANA_CHECK( m_store->record( selectedMuons, m_outContainerName+systName ));
    +        } else {
    +          // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it!
    +          delete selectedMuons; selectedMuons = nullptr;
    +        }
    +      }
    +
    +    } // close loop over syst sets
    +
    +    ANA_MSG_DEBUG(" output list of syst size: " << static_cast<int>(vecOutContainerNames->size()) );
    +
    +    // record in TStore the list of systematics names that should be considered down stream
    +    //
    +    ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  }
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if( !eventPass ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  ANA_MSG_DEBUG( "Left Muon Selection..." );
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool MuonSelector :: executeSelection ( const xAOD::MuonContainer* inMuons, float mcEvtWeight, bool countPass,
    +                        ConstDataVector<xAOD::MuonContainer>* selectedMuons )
    +{
    +
    +  ANA_MSG_DEBUG( "In  executeSelection..." );
    +  const xAOD::VertexContainer* vertices(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +  const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg());
    +
    +  int nPass(0); int nObj(0);
    +  static SG::AuxElement::Decorator< char > passSelDecor( "passSel" );
    +
    +  for ( auto mu_itr : *inMuons ) { // duplicated of basic loop
    +
    +    // if only looking at a subset of muons make sure all are decorated
    +    //
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *mu_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    bool passSel = this->passCuts( mu_itr, pvx );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *mu_itr ) = passSel;
    +    }
    +
    +    // Remove events with isBadMuon (poor q/p)
    +    if( m_removeEventBadMuon && passSel ){
    +      if( m_muonSelectionTool_handle->isBadMuon( *mu_itr ) ){
    +        ANA_MSG_DEBUG("Rejecting event with bad muon (pt = "<<mu_itr->pt()<<")");
    +        return false;
    +      }
    +    }
    +
    +    if ( passSel ) {
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedMuons->push_back( mu_itr );
    +      }
    +    }
    +  }
    +
    +  // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  ANA_MSG_DEBUG( "Initial muons: " << nObj << " - Selected muons: " << nPass );
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  //
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    ANA_MSG_DEBUG( "Reject event: nSelectedMuons ("<<nPass<<") < nPassMin ("<<m_pass_min<<")" );
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    ANA_MSG_DEBUG( "Reject event: nSelectedMuons ("<<nPass<<") > nPassMax ("<<m_pass_max<<")" );
    +    return false;
    +  }
    +
    +  // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ){
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +  // Perform trigger matching on the "good" (selected) muons
    +  //
    +  // NB: this part will be skipped if:
    +  //
    +  //  1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!)
    +  //  2. there are no selected muons in the event
    +  //
    +  if ( m_doTrigMatch && selectedMuons ) {
    +
    +    unsigned int nSelectedMuons = selectedMuons->size();
    +
    +    static SG::AuxElement::Decorator< std::map<std::string,char> > isTrigMatchedMapMuDecor( "isTrigMatchedMapMu" );
    +
    +    if ( nSelectedMuons > 0 ) {
    +
    +      ANA_MSG_DEBUG( "Doing single muon trigger matching...");
    +
    +      for ( auto const &chain : m_singleMuTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        for ( auto const muon : *selectedMuons ) {
    +
    +          //  For each muon, decorate w/ a map<string,char> with the 'isMatched' info associated
    +          //  to each trigger chain in the input list.
    +          //  If decoration map doesn't exist for this muon yet, create it (will be done only for the 1st iteration on the chain names)
    +          //
    +          if ( !isTrigMatchedMapMuDecor.isAvailable( *muon ) ) {
    +            isTrigMatchedMapMuDecor( *muon ) = std::map<std::string,char>();
    +          }
    +          char matched = false;
    +          if (!m_merged_muons){
    +            matched = ( m_trigMuonMatchTool_handle->match( *muon, chain, m_minDeltaR ) );
    +          } else {
    +            static const SG::AuxElement::ConstAccessor<ElementLink<xAOD::MuonContainer>> originalMuonLink("originalMuonLink");
    +            auto originalMuon = const_cast<xAOD::Muon*>(*originalMuonLink( *muon ));
    +            matched = ( m_trigMuonMatchTool_handle->match(*originalMuon, chain, m_minDeltaR) );
    +          }
    +
    +          ANA_MSG_DEBUG( "\t\t is muon trigger matched? " << matched);
    +
    +          ( isTrigMatchedMapMuDecor( *muon ) )[chain] = matched;
    +        }
    +      }
    +
    +    }
    +
    +    // If checking dilepton trigger, form lepton pairs and test matching for each one.
    +    // Save a:
    +    //
    +    // multimap< chain, pair< pair<idx_i, idx_j>, ismatched > >
    +    //
    +    // as *event* decoration to store which
    +    // pairs are matched (to a given chain) and which aren't.
    +    // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events.
    +    //
    +    // By retrieving this map later on, user can decide what to do with the event
    +    // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain)
    +
    +    if ( nSelectedMuons > 1 && !m_diMuTrigChains.empty() ) {
    +
    +      ANA_MSG_DEBUG( "Doing di-muon trigger matching...");
    +
    +      const xAOD::EventInfo* eventInfo(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +      typedef std::pair< std::pair<unsigned int,unsigned int>, char> dimuon_trigmatch_pair;
    +      typedef std::multimap< std::string, dimuon_trigmatch_pair >    dimuon_trigmatch_pair_map;
    +      static SG::AuxElement::Decorator< dimuon_trigmatch_pair_map >  diMuonTrigMatchPairMapDecor( "diMuonTrigMatchPairMap" );
    +
    +      for ( auto const &chain : m_diMuTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        //  If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names)
    +        //
    +        if ( !diMuonTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) {
    +          diMuonTrigMatchPairMapDecor( *eventInfo ) = dimuon_trigmatch_pair_map();
    +        }
    +
    +        std::vector<const xAOD::IParticle*> myMuons;
    +
    +        for ( unsigned int imu = 0; imu < selectedMuons->size()-1; ++imu ) {
    +
    +          for ( unsigned int jmu = imu+1; jmu < selectedMuons->size(); ++jmu ) {
    +
    +            // test a new pair
    +            //
    +            myMuons.clear();
    +            myMuons.push_back( selectedMuons->at(imu) );
    +            myMuons.push_back( selectedMuons->at(jmu) );
    +
    +            // check whether the pair is matched
    +            //
    +            char matched = m_trigMuonMatchTool_handle->match( myMuons, chain, m_minDeltaR );
    +
    +            ANA_MSG_DEBUG( "\t\t is the muon pair ("<<imu<<","<<jmu<<") trigger matched? " << matched);
    +
    +            // set basic matching information
    +            ( isTrigMatchedMapMuDecor( *myMuons[0] ) )[chain] = matched;
    +            ( isTrigMatchedMapMuDecor( *myMuons[1] ) )[chain] = matched;
    +
    +            // set pair decision information
    +            std::pair <unsigned int, unsigned int>  chain_idxs = std::make_pair(imu,jmu);
    +            dimuon_trigmatch_pair  chain_decision = std::make_pair(chain_idxs,matched);
    +            diMuonTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, dimuon_trigmatch_pair >(chain,chain_decision) );
    +
    +          }
    +        }
    +      } //for m_diMuTrigChainsList
    +    } //if nSelectedMuons > 1 && !m_diMuTrigChains.empty()
    +  } //if m_doTrigMatch && selectedMuons
    +
    +  ANA_MSG_DEBUG( "Left  executeSelection..." );
    +  return true;
    +}
    +
    +
    +EL::StatusCode MuonSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_INFO( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode MuonSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int MuonSelector :: passCuts( const xAOD::Muon* muon, const xAOD::Vertex *primaryVertex  ) {
    +
    +  ANA_MSG_DEBUG( "In  passCuts..." );
    +  // fill cutflow bin 'all' before any cut
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_all, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_all, 1 ); }
    +  ANA_MSG_DEBUG( "In  passCuts2..." );
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // MuonSelectorTool cut: quality & |eta| acceptance cut
    +  //
    +
    +  // quality decorators
    +  static SG::AuxElement::Decorator< char > isVeryLooseQDecor("isVeryLooseQ");
    +  static SG::AuxElement::Decorator< char > isLooseQDecor("isLooseQ");
    +  static SG::AuxElement::Decorator< char > isMediumQDecor("isMediumQ");
    +  static SG::AuxElement::Decorator< char > isTightQDecor("isTightQ");
    +
    +  ANA_MSG_DEBUG( "Got the decors" );
    +  int this_quality = static_cast<int>( m_muonSelectionTool_handle->getQuality( *muon ) );
    +  ANA_MSG_DEBUG( "Got quality" );
    +
    +  isVeryLooseQDecor( *muon ) = ( this_quality <= static_cast<int>(xAOD::Muon::VeryLoose) ) ? 1 : 0;
    +  isLooseQDecor( *muon )     = ( this_quality <= static_cast<int>(xAOD::Muon::Loose) )     ? 1 : 0;
    +  isMediumQDecor( *muon )    = ( this_quality <= static_cast<int>(xAOD::Muon::Medium) )    ? 1 : 0;
    +  isTightQDecor( *muon )     = ( this_quality <= static_cast<int>(xAOD::Muon::Tight) )     ? 1 : 0;
    +
    +  bool acceptMuon = (bool)m_muonSelectionTool_handle->accept( *muon );
    +
    +  if ( m_doLRT ) {
    +    static SG::AuxElement::Decorator< char > passIDcuts("passIDcuts");
    +  }
    +
    +  ANA_MSG_DEBUG( "Doing muon quality" );
    +  if ( !acceptMuon ) {
    +    ANA_MSG_DEBUG( "Muon failed requirements of MuonSelectionTool.");
    +    return 0;
    +  }
    +
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_eta_and_quaility_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_eta_and_quaility_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT max cut
    +  //
    +  ANA_MSG_DEBUG( "Doing pt cuts" );
    +  if ( m_pT_max != 1e8 ) {
    +    if (  muon->pt() > m_pT_max ) {
    +      ANA_MSG_DEBUG( "Muon failed pT max cut.");
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptmax_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptmax_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT min cut
    +  //
    +  if ( m_pT_min != 1e8 ) {
    +    if ( muon->pt() < m_pT_min ) {
    +      ANA_MSG_DEBUG( "Muon failed pT min cut.");
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptmin_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptmin_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT NaN check
    +  //
    +  if ( m_pT_NaNcheck ) {
    +    if ( muon->pt() != muon->pt() ) {
    +      ANA_MSG_DEBUG( "Muon failed pT NaN check.");
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_ptnan_check, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_ptnan_check, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // muon type cut
    +  //
    +  //HelperClasses::EnumParser<xAOD::Muon::MuonType> muTypeParser;
    +  //if ( !m_muonType.empty() ) {
    +  //  if ( muon->muonType() != static_cast<int>(muTypeParser.parseEnum(m_muonType))) {
    +  //    ANA_MSG_DEBUG( "Muon type: %d - required: %s . Failed", muon->muonType(), m_muonType.c_str());
    +  //    return 0;
    +  //  }
    +  //}
    +  //if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_type_cut, 1 );
    +  //if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_type_cut, 1 ); }
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // impact parameter cuts
    +  //
    +
    +  // Put tracking cuts here, after pt cuts, to be safe with derivations.
    +
    +  // The following returns a pointer (which should not usually be NULL, but might be if the muon has been stripped of information) to the
    +  // primary TrackParticle corresponding to the MuonType of this muon.
    +  // This is determined in the following order:
    +  //  1. CombinedTrackParticle
    +  //  2. InnerDetectorTrackParticle
    +  //  3. (Extrapolated)MuonSpectrometerTrackParticle
    +  //
    +  const xAOD::TrackParticle* tp = muon->primaryTrackParticle();
    +
    +  if ( !tp ) {
    +    ANA_MSG_DEBUG("Muon has no TrackParticle. Won't be selected.");
    +    return 0;
    +  }
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  double d0_significance = xAOD::TrackingHelpers::d0significance( tp, eventInfo->beamPosSigmaX(), eventInfo->beamPosSigmaY(), eventInfo->beamPosSigmaXY() );
    +
    +  // Take distance between z0 and zPV ( after referring the PV z coordinate to the beamspot position, given by vz() ), multiplied by sin(theta)
    +  // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/InDetTrackingDC14 for further reference
    +  //
    +  float z0sintheta = 1e8;
    +  if (primaryVertex) z0sintheta = ( tp->z0() + tp->vz() - primaryVertex->z() ) * sin( tp->theta() );
    +
    +  // z0*sin(theta) cut
    +  //
    +  if ( !( fabs(z0sintheta) < m_z0sintheta_max ) ) {
    +      ANA_MSG_DEBUG( "Muon failed z0*sin(theta) cut.");
    +      return 0;
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_z0sintheta_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_z0sintheta_cut, 1 ); }
    +
    +  // decorate muon w/ z0*sin(theta) info
    +  static SG::AuxElement::Decorator< float > z0sinthetaDecor("z0sintheta");
    +  z0sinthetaDecor( *muon ) = z0sintheta;
    +
    +  // d0 cut
    +  //
    +  if ( !( tp->d0() < m_d0_max ) ) {
    +      ANA_MSG_DEBUG( "Muon failed d0 cut.");
    +      return 0;
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_d0_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_d0_cut, 1 ); }
    +
    +  // d0sig cut
    +  //
    +  if ( !( fabs(d0_significance) < m_d0sig_max ) ) {
    +      ANA_MSG_DEBUG( "Muon failed d0 significance cut.");
    +      return 0;
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_d0sig_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_d0sig_cut, 1 ); }
    +
    +  // decorate muon w/ d0sig info
    +  static SG::AuxElement::Decorator< float > d0SigDecor("d0sig");
    +  d0SigDecor( *muon ) = static_cast<float>(d0_significance);
    +
    +  if(m_doIsolation){
    +    // *********************************************************************************************************************************************************************
    +    //
    +    // isolation cut
    +    //
    +
    +    // Get the "list" of input WPs with the accept() decision from the tool
    +    //
    +    auto accept_list = m_isolationSelectionTool_handle->accept( *muon );
    +
    +    // Decorate w/ decision for all input WPs
    +    //
    +    std::string base_decor("isIsolated");
    +    for ( auto WP_itr : m_IsoKeys ) {
    +
    +      std::string decorWP = base_decor + "_" + WP_itr;
    +
    +      ANA_MSG_DEBUG( "Decorate muon with " << decorWP << " - accept() ? " << accept_list.getCutResult( WP_itr.c_str()) );
    +      muon->auxdecor<char>(decorWP) = static_cast<bool>( accept_list.getCutResult( WP_itr.c_str() ) );
    +
    +    }
    +
    +    // Apply the cut if needed
    +    //
    +    if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) {
    +      ANA_MSG_DEBUG( "Muon failed isolation cut " <<  m_MinIsoWPCut );
    +      return 0;
    +    }
    +  }
    +  if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_iso_cut, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_iso_cut, 1 ); }
    +
    +  if( m_removeCosmicMuon ){
    +
    +    double muon_d0 = tp->d0();
    +    double pv_z = primaryVertex ? primaryVertex->z() : 0;
    +    double muon_z0_exPV = tp->z0() + tp->vz() - pv_z;
    +
    +    if( fabs(muon_z0_exPV) >= 1.0 || fabs(muon_d0) >= 0.2 ){
    +      ANA_MSG_DEBUG("Muon failed cosmic cut" );
    +      return 0;
    +    }
    +    if (!m_isUsedBefore && m_useCutFlow) m_mu_cutflowHist_1->Fill( m_mu_cutflow_cosmic_cut, 1 );
    +    if ( m_isUsedBefore && m_useCutFlow ) { m_mu_cutflowHist_2->Fill( m_mu_cutflow_cosmic_cut, 1 ); }
    +
    +  }
    +
    +
    +  ANA_MSG_DEBUG( "Leave passCuts... pass" );
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.html b/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.html new file mode 100644 index 0000000000..b11c83c96c --- /dev/null +++ b/api/program_listing_file_Root_OnlineBeamSpotTool.cxx.html @@ -0,0 +1,375 @@ + + + + + + + + + + + Program Listing for File OnlineBeamSpotTool.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File OnlineBeamSpotTool.cxx

    +

    Return to documentation for file (Root/OnlineBeamSpotTool.cxx)

    +
    #include <xAODAnaHelpers/OnlineBeamSpotTool.h>
    +#include "PathResolver/PathResolver.h"
    +#include <iostream>
    +
    +// ROOT include(s):
    +#include "TSystem.h"
    +#include "TFile.h"
    +#include "TTree.h"
    +
    +using namespace xAH;
    +
    +OnlineBeamSpotTool::OnlineBeamSpotTool() :
    +  m_cachedRunNum(-1),
    +  m_cachedLB(-1),
    +  m_cachedRunInfo(nullptr),
    +  m_cachedLBData(nullptr),
    +  m_mcLBData(nullptr)
    +{
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.A.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.B.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.C.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.D.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.E.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.F.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.G.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.H.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.I.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.K.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2016.L.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.A.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.B.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.C.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.D.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.E.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.F.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.G.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.H.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.I.root");
    +  readFile("xAODAnaHelpers/OnlineBSInfo/OnlineBSInfo.2017.K.root");
    +
    +  m_mcLBData = new LBData(0,999999,0,0,0);
    +}
    +
    +OnlineBeamSpotTool::~OnlineBeamSpotTool()
    +{
    +  //std::cout << "In ~OnlineBeamSpotTool" << std::endl;
    +}
    +
    +
    +void OnlineBeamSpotTool::setRunInfo(int runNumber){
    +  RunToLBDataMapItr it = m_runList.find(runNumber);
    +
    +  if(it != m_runList.end()){
    +    m_cachedRunInfo = &(it->second);
    +  } else {
    +    m_cachedRunInfo = nullptr;
    +  }
    +  m_cachedRunNum = runNumber;
    +  return;
    +}
    +
    +const OnlineBeamSpotTool::LBData* OnlineBeamSpotTool::getLBData(int lumiBlock){
    +  if(!m_cachedRunInfo) return nullptr;
    +
    +  for(const LBData& thisLBData : *m_cachedRunInfo){
    +    if((lumiBlock >= thisLBData.m_LBStart) && (lumiBlock <= thisLBData.m_LBEnd)){
    +      return &thisLBData;
    +    }
    +  }
    +
    +  return nullptr;
    +}
    +
    +const OnlineBeamSpotTool::LBData* OnlineBeamSpotTool::getLBData(int runNumber, int lumiBlock, bool isMC){
    +
    +  //
    +  // Check MC
    +  //
    +  if(isMC)
    +    return m_mcLBData;
    +
    +  //
    +  // Check cached data
    +  //
    +  if((runNumber == m_cachedRunNum) && (lumiBlock == m_cachedLB))
    +    return m_cachedLBData;
    +
    +  //
    +  // GetRun info
    +  //
    +  if(runNumber != m_cachedRunNum)
    +    setRunInfo(runNumber);
    +
    +  return getLBData(lumiBlock);
    +}
    +
    +float OnlineBeamSpotTool::getOnlineBSInfo(const xAOD::EventInfo* eventInfo, OnlineBeamSpotTool::BSData datakey){
    +  return getOnlineBSInfo(eventInfo->runNumber(), eventInfo->lumiBlock(), eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ), datakey);
    +}
    +
    +float OnlineBeamSpotTool::getOnlineBSInfo(const xAH::EventInfo* eventInfo, OnlineBeamSpotTool::BSData datakey){
    +  return getOnlineBSInfo(eventInfo->m_runNumber, eventInfo->m_lumiBlock, eventInfo->m_mc, datakey);
    +}
    +
    +float OnlineBeamSpotTool::getOnlineBSInfo(int runNumber, int lumiBlock, bool isMC, OnlineBeamSpotTool::BSData datakey){
    +  //std::cout << "In OnlineBeamSpotTool (" << runNumber << " , " << lumiBlock<< ")" << std::endl;
    +
    +  const LBData* thisLBInfo = getLBData(runNumber, lumiBlock, isMC);
    +
    +  if(!thisLBInfo){
    +    std::cout << "OnlineBeamSpotTool::ERROR no LB data for run: " << runNumber << " LB: " << lumiBlock << std::endl;
    +    return -999;
    +  }
    +
    +  if(datakey == OnlineBeamSpotTool::BSx)
    +    return thisLBInfo->m_BSx;
    +
    +  if(datakey == OnlineBeamSpotTool::BSy)
    +    return thisLBInfo->m_BSy;
    +
    +  return thisLBInfo->m_BSz;
    +}
    +
    +void OnlineBeamSpotTool::readFile(std::string rootFileName){
    +
    +  std::string fullRootFileName = PathResolverFindCalibFile( rootFileName );
    +
    +  TFile* thisFile = new TFile(fullRootFileName.c_str(),"READ");
    +  TTree* tree = (TTree*)thisFile->Get("LBInfo");
    +
    +  int RunNumber;
    +  std::vector<int>*   LBStart  = new std::vector<int>();
    +  std::vector<int>*   LBEnd    = new std::vector<int>();
    +
    +  std::vector<float>* BSx      = new std::vector<float>();
    +  std::vector<float>* BSy      = new std::vector<float>();
    +  std::vector<float>* BSz      = new std::vector<float>();
    +
    +  tree->SetBranchAddress("RunNumber",&RunNumber);
    +  tree->SetBranchAddress("LBStart",  &LBStart);
    +  tree->SetBranchAddress("LBEnd",    &LBEnd);
    +  tree->SetBranchAddress("BSx",      &BSx);
    +  tree->SetBranchAddress("BSy",      &BSy);
    +  tree->SetBranchAddress("BSz",      &BSz);
    +
    +  Long64_t nentries = tree->GetEntries();
    +  for (Long64_t i=0;i<nentries;i++) {
    +    tree->GetEntry(i);
    +    RunInfo thisRunInfo;
    +
    +    for(unsigned int LBIt = 0; LBIt < LBStart->size(); ++LBIt){
    +      thisRunInfo.push_back(LBData(LBStart ->at(LBIt),
    +                   LBEnd   ->at(LBIt),
    +                   BSx     ->at(LBIt),
    +                   BSy     ->at(LBIt),
    +                   BSz     ->at(LBIt)
    +                   ));
    +    }
    +
    +    m_runList.insert( std::make_pair(RunNumber, thisRunInfo) );
    +  }
    +
    +  thisFile->Close();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_OverlapRemover.cxx.html b/api/program_listing_file_Root_OverlapRemover.cxx.html new file mode 100644 index 0000000000..162fd26c78 --- /dev/null +++ b/api/program_listing_file_Root_OverlapRemover.cxx.html @@ -0,0 +1,1359 @@ + + + + + + + + + + + Program Listing for File OverlapRemover.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File OverlapRemover.cxx

    +

    Return to documentation for file (Root/OverlapRemover.cxx)

    +
    /*************************************************
    + *
    + * Interface to ASG overlap removal tool
    + ( applying recommendations from Harmonisation TF ).
    + *
    + * M. Milesi (marco.milesi@cern.ch)
    + * J. Dandoy
    + *
    + ************************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/Electron.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODEgamma/Photon.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODMuon/Muon.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/Jet.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODTau/TauJet.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/OverlapRemover.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(OverlapRemover)
    +
    +
    +OverlapRemover :: OverlapRemover () :
    +    Algorithm("OverlapRemover")
    +{
    +}
    +
    +EL::StatusCode OverlapRemover :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "OverlapRemover" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode OverlapRemover :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode OverlapRemover :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode OverlapRemover :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode OverlapRemover :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing OverlapRemover Interface... ");
    +
    +  if ( setCutFlowHist() == EL::StatusCode::FAILURE ) {
    +    ANA_MSG_ERROR( "Failed to setup cutflow histograms. Exiting." );
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +
    +  if ( m_inContainerName_Jets.empty() ) {
    +    ANA_MSG_ERROR( "InputContainerJets is empty! Must have it to perform Overlap Removal! Exiting.");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( !m_inContainerName_Electrons.empty() ) { m_useElectrons = true; }
    +  if ( !m_inContainerName_Muons.empty() )     { m_useMuons     = true; }
    +  if ( !m_inContainerName_Taus.empty() )      { m_useTaus      = true; }
    +  if ( !m_inContainerName_Photons.empty() )   { m_usePhotons   = true; }
    +
    +  m_outAuxContainerName_Electrons   = m_outContainerName_Electrons + "Aux."; // the period is very important!
    +  m_outAuxContainerName_Muons       = m_outContainerName_Muons + "Aux.";     // the period is very important!
    +  m_outAuxContainerName_Jets        = m_outContainerName_Jets + "Aux.";      // the period is very important!
    +  m_outAuxContainerName_Photons     = m_outContainerName_Photons + "Aux.";   // the period is very important!
    +  m_outAuxContainerName_Taus        = m_outContainerName_Taus + "Aux.";      // the period is very important!
    +
    +
    +  if ( setCounters() == EL::StatusCode::FAILURE ) {
    +    ANA_MSG_ERROR( "Failed to properly set event/object counters. Exiting." );
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // initialize ASG overlap removal tool
    +  const std::string selected_label = ( m_useSelected ) ? "passSel" : "";  // set with decoration flag you use for selected objects if want to consider only selected objects in OR, otherwise it will perform OR on all objects
    +
    +  //Set Flags for recommended overlap procedures
    +  ORUtils::ORFlags orFlags("OverlapRemovalTool", selected_label, m_decor);
    +
    +  orFlags.outputPassValue     = true;
    +  orFlags.linkOverlapObjects  = m_linkOverlapObjects;
    +  orFlags.bJetLabel           = m_bTagWP;
    +  orFlags.boostedLeptons      = m_useBoostedLeptons;
    +  orFlags.doEleEleOR          = m_doEleEleOR || m_lepFavWP;
    +
    +  orFlags.doJets      = true;
    +  orFlags.doMuons     = m_useMuons;
    +  orFlags.doElectrons = m_useElectrons;
    +  orFlags.doTaus      = m_useTaus;
    +  orFlags.doPhotons   = m_usePhotons;
    +  orFlags.doFatJets   = false;
    +
    +  ANA_CHECK( ORUtils::recommendedTools(orFlags, m_ORToolbox));
    +  if(m_applyRelPt) ANA_CHECK( m_ORToolbox.muJetORT.setProperty("ApplyRelPt", true) );
    +  if (m_lepFavWP) {
    +    ANA_CHECK( m_ORToolbox.eleEleORT.setProperty("UseClusterMatch", true) );
    +    ANA_CHECK( m_ORToolbox.muJetORT.setProperty("OuterDR", 0.) );
    +    ANA_CHECK( m_ORToolbox.eleJetORT.setProperty("OuterDR", 0.) );
    +  }
    +  ANA_CHECK( m_ORToolbox.initialize());
    +  ANA_MSG_INFO( "OverlapRemover Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode OverlapRemover :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG("Applying Overlap Removal... ");
    +
    +  m_numEvent++;
    +
    +  // get the collections from TEvent or TStore
    +  const xAOD::ElectronContainer* inElectrons (nullptr);
    +  const xAOD::MuonContainer* inMuons         (nullptr);
    +  const xAOD::JetContainer* inJets           (nullptr);
    +  const xAOD::PhotonContainer* inPhotons     (nullptr);
    +  const xAOD::TauJetContainer* inTaus        (nullptr);
    +
    +  // syst container name
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  // --------------------------------------------------------------------------------------------
    +  //
    +  // always run the nominal case
    +  executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, NOMINAL, nullptr, vecOutContainerNames.get());
    +
    +  // look what do we have in TStore
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  // -----------------------------------------------------------------------------------------------
    +  //
    +  // if at least one of the m_inputAlgo* is not empty, and there's at least one non-empty syst name,
    +  // then perform OR for every non-empty systematic set
    +
    +  // ****************** //
    +  //      Electrons     //
    +  // ****************** //
    +
    +  if ( !m_inputAlgoElectrons.empty() ) {
    +
    +    // -----------------------
    +    //
    +    // get the systematic sets:
    +
    +    // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!)
    +    std::vector<std::string>* systNames_el(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames_el, m_inputAlgoElectrons, 0, m_store, msg()) );
    +
    +    if ( HelperFunctions::found_non_dummy_sys(systNames_el) ) {
    +      executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus,  ELSYST, systNames_el, vecOutContainerNames.get());
    +    }
    +
    +  }
    +
    +  // **************** //
    +  //      Muons       //
    +  // **************** //
    +
    +  if ( !m_inputAlgoMuons.empty() ) {
    +
    +    // -----------------------
    +    //
    +    // get the systematic sets:
    +
    +    // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!)
    +    std::vector<std::string>* systNames_mu(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames_mu, m_inputAlgoMuons, 0, m_store, msg()) );
    +
    +    if ( HelperFunctions::found_non_dummy_sys(systNames_mu) ) {
    +      executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus,  MUSYST, systNames_mu, vecOutContainerNames.get());
    +    }
    +
    +  }
    +
    +  // **************** //
    +  //       Jets       //
    +  // **************** //
    +
    +  if ( !m_inputAlgoJets.empty() ) {
    +
    +    // -----------------------
    +    //
    +    // get the systematic sets:
    +
    +    // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!)
    +    std::vector<std::string>* systNames_jet;
    +    ANA_CHECK( HelperFunctions::retrieve(systNames_jet, m_inputAlgoJets, 0, m_store, msg()) );
    +
    +    if ( HelperFunctions::found_non_dummy_sys(systNames_jet) ) {
    +      executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus,  JETSYST, systNames_jet, vecOutContainerNames.get());
    +    }
    +
    +  }
    +
    +  // **************** //
    +  //     Photons      //
    +  // **************** //
    +
    +  if ( !m_inputAlgoPhotons.empty() ) {
    +
    +    // -----------------------
    +    //
    +    // get the systematic sets:
    +
    +    // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!)
    +    std::vector<std::string>* systNames_photon;
    +    ANA_CHECK( HelperFunctions::retrieve(systNames_photon, m_inputAlgoPhotons, 0, m_store, msg()) );
    +
    +    executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus,  PHSYST, systNames_photon, vecOutContainerNames.get());
    +
    +  }
    +  // **************** //
    +  //       Taus       //
    +  // **************** //
    +
    +  if ( !m_inputAlgoTaus.empty() ) {
    +
    +    // -----------------------
    +    //
    +    // get the systematic sets:
    +
    +    // get vector of string giving the syst names (rememeber: 1st element is a blank string: nominal case!)
    +    std::vector<std::string>* systNames_tau;
    +    ANA_CHECK( HelperFunctions::retrieve(systNames_tau, m_inputAlgoTaus, 0, m_store, msg()) );
    +
    +    executeOR(inElectrons, inMuons, inJets, inPhotons, inTaus, TAUSYST, systNames_tau, vecOutContainerNames.get());
    +
    +  }
    +
    +  // save list of systs that should be considered down stream
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  // look what do we have in TStore
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode OverlapRemover :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode OverlapRemover :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode OverlapRemover :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode OverlapRemover :: fillObjectCutflow (const xAOD::IParticleContainer* objCont, const std::string& overlapFlag, const std::string& selectFlag)
    +{
    +  SG::AuxElement::ConstAccessor<char> selectAcc(selectFlag);
    +  SG::AuxElement::ConstAccessor<char> overlapAcc(overlapFlag);
    +  static SG::AuxElement::ConstAccessor< ElementLink<xAOD::IParticleContainer> > objLinkAcc("overlapObject");
    +
    +  for ( auto obj_itr : *(objCont) ) {
    +
    +    std::string type;
    +
    +    // Safety check
    +    //
    +    if ( !overlapAcc.isAvailable( *obj_itr ) ) {
    +      ANA_MSG_ERROR( "Overlap decoration missing for this object");
    +      return EL::StatusCode::FAILURE;
    +    }
    +    switch(obj_itr->type()) {
    +      case xAOD::Type::Electron:
    +        type = "electron";
    +        if (!overlapAcc( *obj_itr ))
    +          m_el_cutflowHist_1->Fill( m_el_cutflow_OR_cut, 1 );
    +        break;
    +      case xAOD::Type::Muon:
    +        if (!overlapAcc( *obj_itr ))
    +          m_mu_cutflowHist_1->Fill( m_mu_cutflow_OR_cut, 1 );
    +        type = "muon";
    +        break;
    +      case xAOD::Type::Jet:
    +        if (!overlapAcc( *obj_itr ))
    +          m_jet_cutflowHist_1->Fill( m_jet_cutflow_OR_cut, 1 );
    +        type = "jet";
    +        break;
    +      case xAOD::Type::Photon:
    +        if (!overlapAcc( *obj_itr ))
    +          m_ph_cutflowHist_1->Fill( m_ph_cutflow_OR_cut, 1 );
    +        type = "photon";
    +        break;
    +      case xAOD::Type::Tau:
    +        if (!overlapAcc( *obj_itr ))
    +          m_tau_cutflowHist_1->Fill( m_tau_cutflow_OR_cut, 1 );
    +        type = "tau";
    +        break;
    +      default:
    +        ANA_MSG_ERROR("Unsupported object");
    +        return EL::StatusCode::FAILURE;
    +        break;
    +    }
    +
    +    int isBTagged = 0;
    +    if ( !m_bTagWP.empty() ) {
    +      SG::AuxElement::Decorator< char > isBTag( m_bTagWP );
    +      if( isBTag.isAvailable( *obj_itr ) && isBTag(*obj_itr)==true ) isBTagged = 1;
    +    }
    +
    +    if(selectAcc.isAvailable(*obj_itr)){
    +      ANA_MSG_DEBUG( type << " pt " << obj_itr->pt()/1e3 << " eta " << obj_itr->eta() << " phi " << obj_itr->phi() << " btagged " << isBTagged << " selected " << selectAcc(*obj_itr) << " passesOR  " << overlapAcc( *obj_itr ) );
    +    } else {
    +      ANA_MSG_DEBUG( type << " pt " << obj_itr->pt()/1e3 << " eta " << obj_itr->eta() << " phi " << obj_itr->phi() << " btagged " << isBTagged << " selected N/A" << " passesOR  " << overlapAcc( *obj_itr ) );
    +    }
    +    // Check for overlap object link
    +    if ( objLinkAcc.isAvailable( *obj_itr ) && objLinkAcc( *obj_itr ).isValid() ) {
    +      const xAOD::IParticle* overlapObj = *objLinkAcc( *obj_itr );
    +      std::stringstream ss_or; ss_or << overlapObj->type();
    +      ANA_MSG_DEBUG( " Overlap: type " << ss_or.str() << " pt " << overlapObj->pt()/1e3);
    +    }
    +
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +EL::StatusCode OverlapRemover :: executeOR(  const xAOD::ElectronContainer* inElectrons, const xAOD::MuonContainer* inMuons, const xAOD::JetContainer* inJets,
    +               const xAOD::PhotonContainer* inPhotons,   const xAOD::TauJetContainer* inTaus,
    +               SystType syst_type, std::vector<std::string>* sysVec, std::vector<std::string>* sysVecOut)
    +{
    +
    +  // instantiate output container(s)
    +  //
    +  ConstDataVector<xAOD::ElectronContainer> *selectedElectrons   (nullptr);
    +  ConstDataVector<xAOD::MuonContainer>     *selectedMuons (nullptr);
    +  ConstDataVector<xAOD::JetContainer>      *selectedJets  (nullptr);
    +  ConstDataVector<xAOD::PhotonContainer>   *selectedPhotons (nullptr);
    +  ConstDataVector<xAOD::TauJetContainer>   *selectedTaus  (nullptr);
    +
    +  // make a switch for systematics types
    +  //
    +  switch ( static_cast<int>(syst_type) )
    +  {
    +
    +    case NOMINAL:  // this is the nominal case
    +    {
    +      ANA_MSG_DEBUG("Doing nominal case");
    +      bool nomContainerNotFound(false);
    +
    +      if( m_useElectrons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::ElectronContainer> >(m_inContainerName_Electrons) || m_store->contains<xAOD::ElectronContainer>(m_inContainerName_Electrons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if( m_useMuons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::MuonContainer> >(m_inContainerName_Muons) || m_store->contains<xAOD::MuonContainer>(m_inContainerName_Muons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_store->contains<ConstDataVector<xAOD::JetContainer> >(m_inContainerName_Jets) || m_store->contains<xAOD::JetContainer>(m_inContainerName_Jets) ) {
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) );
    +      } else {
    +        nomContainerNotFound = true;
    +        if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +      }
    +
    +      if ( m_usePhotons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::PhotonContainer> >(m_inContainerName_Photons) || m_store->contains<xAOD::PhotonContainer>(m_inContainerName_Photons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_useTaus ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::TauJetContainer> >(m_inContainerName_Taus) || m_store->contains<xAOD::TauJetContainer>(m_inContainerName_Taus) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +      if ( m_useElectrons ) { ANA_MSG_DEBUG(  "inElectrons : " << inElectrons->size()); }
    +      if ( m_useMuons )     { ANA_MSG_DEBUG(  "inMuons : " << inMuons->size()); }
    +      ANA_MSG_DEBUG(  "inJets : " << inJets->size() );
    +      if ( m_usePhotons )   { ANA_MSG_DEBUG(  "inPhotons : " << inPhotons->size());  }
    +      if ( m_useTaus    )   { ANA_MSG_DEBUG(  "inTaus : " << inTaus->size());  }
    +
    +      // do the actual OR
    +      //
    +      ANA_MSG_DEBUG(  "Calling removeOverlaps()");
    +      ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons)); // This line raises an exception
    +      ANA_MSG_DEBUG(  "Done Calling removeOverlaps()");
    +
    +      std::string ORdecor(m_decor);
    +      if(m_useCutFlow){
    +        // fill cutflow histograms
    +        //
    +        ANA_MSG_DEBUG(  "Filling Cut Flow Histograms");
    +        if ( m_useElectrons ) fillObjectCutflow(inElectrons);
    +        if ( m_useMuons )     fillObjectCutflow(inMuons);
    +        fillObjectCutflow(inJets);
    +        if ( m_usePhotons )   fillObjectCutflow(inPhotons);
    +        if ( m_useTaus )      fillObjectCutflow(inTaus);
    +      }
    +
    +      // make a copy of input container(s) with selected objects
    +      //
    +      if ( m_createSelectedContainers ) {
    +        ANA_MSG_DEBUG(  "Creating selected Containers");
    +        if( m_useElectrons ) selectedElectrons  = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +        if( m_useMuons )     selectedMuons      = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +        selectedJets      = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +        if ( m_usePhotons )  selectedPhotons  = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +        if ( m_useTaus )     selectedTaus = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +      }
    +
    +      // resize containers basd on OR decision:
    +      //
    +      // if an object has been flagged as 'passOR', it will be stored in the 'selected' container
    +      //
    +      ANA_MSG_DEBUG(  "Resizing");
    +      if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +      if ( m_useMuons )     { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +      ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +      if ( m_usePhotons )   { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +      if ( m_useTaus )      { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +
    +      if ( m_useElectrons) { ANA_MSG_DEBUG(  "selectedElectrons : " << selectedElectrons->size()); }
    +      if ( m_useMuons )    { ANA_MSG_DEBUG(  "selectedMuons : " << selectedMuons->size()); }
    +      ANA_MSG_DEBUG(  "selectedJets : " << selectedJets->size());
    +      if ( m_usePhotons )  { ANA_MSG_DEBUG(  "selectedPhotons : " << selectedPhotons->size()); }
    +      if ( m_useTaus )     { ANA_MSG_DEBUG(  "selectedTaus : " << selectedTaus->size() ); }
    +
    +      // add ConstDataVector to TStore
    +      //
    +      if ( m_createSelectedContainers ) {
    +        ANA_MSG_DEBUG(  "Recording");
    +        if ( m_useElectrons ){ ANA_CHECK( m_store->record( selectedElectrons,   m_outContainerName_Electrons )); }
    +        if ( m_useMuons )    { ANA_CHECK( m_store->record( selectedMuons,  m_outContainerName_Muons )); }
    +        ANA_CHECK( m_store->record( selectedJets,  m_outContainerName_Jets ));
    +        if ( m_usePhotons )  { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons )); }
    +        if ( m_useTaus )     { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus )); }
    +      }
    +
    +      sysVecOut->push_back("");
    +      break;
    +    }
    +    case ELSYST : // electron syst
    +    {
    +      ANA_MSG_DEBUG(  "Doing  electron systematics");
    +      bool nomContainerNotFound(false);
    +
    +      // just to check everything is fine
    +      ANA_MSG_DEBUG("will consider the following ELECTRON systematics:" );
    +      for ( auto it : *sysVec ){ ANA_MSG_DEBUG("\t " << it); }
    +
    +      // these input containers won't change in the electron syst loop ...
    +      if( m_useMuons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::MuonContainer> >(m_inContainerName_Muons) || m_store->contains<xAOD::MuonContainer>(m_inContainerName_Muons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if ( m_store->contains<ConstDataVector<xAOD::JetContainer> >(m_inContainerName_Jets) || m_store->contains<xAOD::JetContainer>(m_inContainerName_Jets) ) {
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) );
    +      } else {
    +        nomContainerNotFound = true;
    +        if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +      }
    +
    +      if ( m_usePhotons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::PhotonContainer> >(m_inContainerName_Photons) || m_store->contains<xAOD::PhotonContainer>(m_inContainerName_Photons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_useTaus ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::TauJetContainer> >(m_inContainerName_Taus) || m_store->contains<xAOD::TauJetContainer>(m_inContainerName_Taus) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +
    +      for ( auto systName : *sysVec) {
    +
    +        if ( systName.empty() ) continue;
    +
    +        // ... instead, the electron input container will be different for each syst
    +        //
    +        std::string el_syst_cont_name = m_inContainerName_Electrons + systName;
    +        ANA_CHECK( HelperFunctions::retrieve(inElectrons, el_syst_cont_name, 0, m_store, msg()) );
    +
    +        // do the actual OR
    +        //
    +        ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons));
    +
    +        const std::string ORdecor(m_decor);
    +        if(m_useCutFlow){
    +          // fill cutflow histograms
    +          //
    +          fillObjectCutflow(inElectrons);
    +          if ( m_useMuons )   fillObjectCutflow(inMuons);
    +          fillObjectCutflow(inJets);
    +          if ( m_usePhotons ) fillObjectCutflow(inPhotons);
    +          if ( m_useTaus )    fillObjectCutflow(inTaus);
    +        }
    +
    +        // make a copy of input container(s) with selected objects
    +        //
    +        if ( m_createSelectedContainers ) {
    +          selectedElectrons   = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useMuons )    selectedMuons  = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +          selectedJets        = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_usePhotons )  selectedPhotons  = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useTaus )     selectedTaus = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +        }
    +
    +        // resize containers basd on OR decision
    +        //
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_useMuons )  {  ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_usePhotons ){ ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if ( m_useTaus )   {  ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +
    +        // add ConstDataVector to TStore
    +        //
    +        if ( m_createSelectedContainers ) {
    +          // a different syst varied container will be stored for each syst variation
    +          ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName ));
    +          if ( m_useMuons )  { ANA_CHECK( m_store->record( selectedMuons,     m_outContainerName_Muons + systName )); }
    +          ANA_CHECK( m_store->record( selectedJets,      m_outContainerName_Jets + systName ));
    +          if ( m_usePhotons ){ ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); }
    +          if ( m_useTaus )   { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); }
    +        }
    +
    +        sysVecOut->push_back(systName);
    +      } // close loop on systematic sets available from upstream algo (Electrons)
    +
    +      break;
    +    }
    +    case MUSYST: // muon syst
    +    {
    +      ANA_MSG_DEBUG(  "Doing  muon systematics");
    +      bool nomContainerNotFound(false);
    +
    +      // just to check everything is fine
    +      ANA_MSG_DEBUG("will consider the following MUON systematics:" );
    +      for ( auto it : *sysVec ){ ANA_MSG_DEBUG("\t " << it); }
    +
    +      // these input containers won't change in the muon syst loop ...
    +      if( m_useElectrons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::ElectronContainer> >(m_inContainerName_Electrons) || m_store->contains<xAOD::ElectronContainer>(m_inContainerName_Electrons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if ( m_store->contains<ConstDataVector<xAOD::JetContainer> >(m_inContainerName_Jets) || m_store->contains<xAOD::JetContainer>(m_inContainerName_Jets) ) {
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) );
    +      } else {
    +        nomContainerNotFound = true;
    +        if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +      }
    +
    +      if ( m_usePhotons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::PhotonContainer> >(m_inContainerName_Photons) || m_store->contains<xAOD::PhotonContainer>(m_inContainerName_Photons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_useTaus ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::TauJetContainer> >(m_inContainerName_Taus) || m_store->contains<xAOD::TauJetContainer>(m_inContainerName_Taus) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +
    +      for ( auto systName : *sysVec) {
    +
    +        if ( systName.empty() ) continue;
    +
    +        // ... instead, the muon input container will be different for each syst
    +        //
    +        std::string mu_syst_cont_name = m_inContainerName_Muons + systName;
    +        ANA_CHECK( HelperFunctions::retrieve(inMuons, mu_syst_cont_name, 0, m_store, msg()) );
    +
    +        // do the actual OR
    +        //
    +        ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons));
    +
    +        const std::string ORdecor(m_decor);
    +        if(m_useCutFlow){
    +          // fill cutflow histograms
    +          //
    +          if ( m_useElectrons ) fillObjectCutflow(inElectrons);
    +          fillObjectCutflow(inMuons);
    +          fillObjectCutflow(inJets);
    +          if( m_usePhotons )    fillObjectCutflow(inPhotons);
    +          if( m_useTaus )       fillObjectCutflow(inTaus);
    +        }
    +        // make a copy of input container(s) with selected objects
    +        //
    +        if ( m_createSelectedContainers ) {
    +          if ( m_useElectrons ) selectedElectrons   = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +          selectedMuons       = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +          selectedJets        = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_usePhotons )   selectedPhotons = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useTaus )      selectedTaus  = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +        }
    +
    +        // resize containers based on OR decision
    +        //
    +        if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_usePhotons )   { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if ( m_useTaus )      { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +
    +        // add ConstDataVector to TStore
    +        //
    +        if ( m_createSelectedContainers ) {
    +          // a different syst varied container will be stored for each syst variation
    +          //
    +          if ( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); }
    +          ANA_CHECK( m_store->record( selectedMuons,     m_outContainerName_Muons + systName ));
    +          ANA_CHECK( m_store->record( selectedJets,      m_outContainerName_Jets + systName ));
    +          if ( m_usePhotons )   { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); }
    +          if ( m_useTaus )      { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); }
    +        }
    +
    +        sysVecOut->push_back(systName);
    +      } // close loop on systematic sets available from upstream algo (Muons)
    +
    +      break;
    +    }
    +    case JETSYST: // jet systematics
    +    {
    +      ANA_MSG_DEBUG(  "Doing  jet systematics");
    +      bool nomContainerNotFound(false);
    +
    +      // just to check everything is fine
    +      ANA_MSG_DEBUG("will consider the following JET systematics:" );
    +      for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it);  }
    +
    +      // these input containers won't change in the jet syst loop ...
    +      if( m_useElectrons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::ElectronContainer> >(m_inContainerName_Electrons) || m_store->contains<xAOD::ElectronContainer>(m_inContainerName_Electrons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if( m_useMuons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::MuonContainer> >(m_inContainerName_Muons) || m_store->contains<xAOD::MuonContainer>(m_inContainerName_Muons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_usePhotons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::PhotonContainer> >(m_inContainerName_Photons) || m_store->contains<xAOD::PhotonContainer>(m_inContainerName_Photons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_useTaus ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::TauJetContainer> >(m_inContainerName_Taus) || m_store->contains<xAOD::TauJetContainer>(m_inContainerName_Taus) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +      for( auto systName : *sysVec ) {
    +
    +        if ( systName.empty() ) continue;
    +
    +        // ... instead, the jet input container will be different for each syst
    +        //
    +        std::string jet_syst_cont_name = m_inContainerName_Jets + systName;
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, jet_syst_cont_name, 0, m_store, msg()) );
    +
    +        // do the actual OR
    +        //
    +        ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons));
    +
    +        const std::string ORdecor(m_decor);
    +        if(m_useCutFlow){
    +          // fill cutflow histograms
    +          //
    +          if ( m_useElectrons ) fillObjectCutflow(inElectrons);
    +          if ( m_useMuons )     fillObjectCutflow(inMuons);
    +          fillObjectCutflow(inJets);
    +          if( m_usePhotons )    fillObjectCutflow(inPhotons);
    +          if( m_useTaus )       fillObjectCutflow(inTaus);
    +        }
    +
    +        // make a copy of input container(s) with selected objects
    +        //
    +        if ( m_createSelectedContainers ) {
    +          if ( m_useElectrons ) selectedElectrons   = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useMuons )     selectedMuons      = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +          selectedJets       = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_usePhotons )   selectedPhotons  = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useTaus )      selectedTaus = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +        }
    +
    +        // resize containers basd on OR decision
    +        //
    +        if ( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if ( m_useMuons )     { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_usePhotons )   { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if ( m_useTaus )      { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +
    +        // add ConstDataVector to TStore
    +        //
    +        if ( m_createSelectedContainers ) {
    +          // a different syst varied container will be stored for each syst variation
    +          //
    +          if ( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); }
    +          if ( m_useMuons )   { ANA_CHECK( m_store->record( selectedMuons,     m_outContainerName_Muons + systName )); }
    +          ANA_CHECK( m_store->record( selectedJets,      m_outContainerName_Jets + systName ));
    +          if ( m_usePhotons )   { ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName_Photons + systName )); }
    +          if ( m_useTaus )      { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); }
    +        }
    +
    +        sysVecOut->push_back(systName);
    +      } // close loop on systematic sets available from upstream algo (Jets)
    +
    +      break;
    +    }
    +    case PHSYST : // photon systematics
    +    {
    +      ANA_MSG_DEBUG(  "Doing  photon systematics");
    +      bool nomContainerNotFound(false);
    +
    +      // just to check everything is fine
    +      ANA_MSG_DEBUG("will consider the following PHOTON systematics:" );
    +      for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it);  }
    +
    +      // these input containers won't change in the photon syst loop ...
    +      if( m_useElectrons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::ElectronContainer> >(m_inContainerName_Electrons) || m_store->contains<xAOD::ElectronContainer>(m_inContainerName_Electrons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if( m_useMuons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::MuonContainer> >(m_inContainerName_Muons) || m_store->contains<xAOD::MuonContainer>(m_inContainerName_Muons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_store->contains<ConstDataVector<xAOD::JetContainer> >(m_inContainerName_Jets) || m_store->contains<xAOD::JetContainer>(m_inContainerName_Jets) ) {
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) );
    +      } else {
    +        nomContainerNotFound = true;
    +        if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +      }
    +
    +      if ( m_useTaus ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::TauJetContainer> >(m_inContainerName_Taus) || m_store->contains<xAOD::TauJetContainer>(m_inContainerName_Taus) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName_Taus, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Taus << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +      for( auto systName : *sysVec ) {
    +
    +        if ( systName.empty() ) continue;
    +
    +        // ... instead, the photon input container will be different for each syst
    +        //
    +        std::string photon_syst_cont_name = m_inContainerName_Photons + systName;
    +        ANA_CHECK( HelperFunctions::retrieve(inPhotons, photon_syst_cont_name, 0, m_store, msg()) );
    +
    +        // do the actual OR
    +        //
    +        ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons));
    +
    +
    +        const std::string ORdecor(m_decor);
    +        if(m_useCutFlow){
    +          // fill cutflow histograms
    +          //
    +          if( m_useElectrons ) fillObjectCutflow(inElectrons);
    +          if( m_useMuons     ) fillObjectCutflow(inMuons);
    +          fillObjectCutflow(inJets);
    +          fillObjectCutflow(inPhotons);
    +          if( m_useTaus )      fillObjectCutflow(inTaus);
    +        }
    +
    +        // make a copy of input container(s) with selected objects
    +        //
    +        if ( m_createSelectedContainers ) {
    +          if( m_useElectrons ) selectedElectrons   = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +          if( m_useMuons     ) selectedMuons       = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +          selectedJets        = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +          selectedPhotons     = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_useTaus )     selectedTaus    = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +        }
    +
    +        // resize containers based on OR decision
    +        //
    +        if( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if( m_useMuons )     { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_useTaus )     { ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +
    +        // add ConstDataVector to TStore
    +        //
    +        if ( m_createSelectedContainers ) {
    +          // a different syst varied container will be stored for each syst variation
    +          //
    +          if( m_useElectrons ){ ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); }
    +          if( m_useMuons )    { ANA_CHECK( m_store->record( selectedMuons,     m_outContainerName_Muons + systName )); }
    +          ANA_CHECK( m_store->record( selectedJets,      m_outContainerName_Jets + systName ));
    +          ANA_CHECK( m_store->record( selectedPhotons,   m_outContainerName_Photons + systName ));
    +          if ( m_useTaus )    { ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName )); }
    +        }
    +
    +        sysVecOut->push_back(systName);
    +      } // close loop on systematic sets available from upstream algo (Photons)
    +
    +      break;
    +    }
    +    case TAUSYST : // tau systematics
    +    {
    +      ANA_MSG_DEBUG(  "Doing tau systematics");
    +      bool nomContainerNotFound(false);
    +
    +      // just to check everything is fine
    +      ANA_MSG_DEBUG("output vector already contains the following TAU systematics:" );
    +      for ( auto it : *sysVec ) { ANA_MSG_DEBUG("\t " << it);  }
    +
    +      // these input containers won't change in the tau syst loop ...
    +      if( m_useElectrons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::ElectronContainer> >(m_inContainerName_Electrons) || m_store->contains<xAOD::ElectronContainer>(m_inContainerName_Electrons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inElectrons, m_inContainerName_Electrons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Electrons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case...");  }
    +        }
    +      }
    +
    +      if( m_useMuons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::MuonContainer> >(m_inContainerName_Muons) || m_store->contains<xAOD::MuonContainer>(m_inContainerName_Muons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inMuons, m_inContainerName_Muons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Muons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( m_store->contains<ConstDataVector<xAOD::JetContainer> >(m_inContainerName_Jets) || m_store->contains<xAOD::JetContainer>(m_inContainerName_Jets) ) {
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_inContainerName_Jets, m_event, m_store, msg()) );
    +      } else {
    +        nomContainerNotFound = true;
    +        if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Jets << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +      }
    +
    +      if ( m_usePhotons ) {
    +        if ( m_store->contains<ConstDataVector<xAOD::PhotonContainer> >(m_inContainerName_Photons) || m_store->contains<xAOD::PhotonContainer>(m_inContainerName_Photons) ) {
    +          ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName_Photons, m_event, m_store, msg()) );
    +        } else {
    +          nomContainerNotFound = true;
    +          if ( m_numEvent == 1 ) { ANA_MSG_WARNING( "Could not find nominal container " << m_inContainerName_Photons << " in xAOD::TStore. Overlap Removal will not be done for the 'all-nominal' case..."); }
    +        }
    +      }
    +
    +      if ( nomContainerNotFound ) {return EL::StatusCode::SUCCESS;}
    +
    +      for( auto systName : *sysVec ) {
    +
    +        if ( systName.empty() ) continue;
    +
    +        // ... instead, the tau input container will be different for each syst
    +        //
    +        std::string tau_syst_cont_name = m_inContainerName_Taus + systName;
    +        ANA_CHECK( HelperFunctions::retrieve(inTaus, tau_syst_cont_name, 0, m_store, msg()) );
    +
    +        // do the actual OR
    +        //
    +        ANA_CHECK( m_ORToolbox.masterTool->removeOverlaps(inElectrons, inMuons, inJets, inTaus, inPhotons));
    +
    +        const std::string ORdecor(m_decor);
    +        if(m_useCutFlow){
    +          // fill cutflow histograms
    +          //
    +          if( m_useElectrons ) fillObjectCutflow(inElectrons);
    +          if( m_useMuons     ) fillObjectCutflow(inMuons);
    +          fillObjectCutflow(inJets);
    +          if( m_usePhotons ) fillObjectCutflow(inPhotons);
    +          fillObjectCutflow(inTaus);
    +        }
    +
    +        // make a copy of input container(s) with selected objects
    +        //
    +        if ( m_createSelectedContainers ) {
    +          if( m_useElectrons ) selectedElectrons   = new ConstDataVector<xAOD::ElectronContainer>(SG::VIEW_ELEMENTS);
    +          if( m_useMuons )     selectedMuons       = new ConstDataVector<xAOD::MuonContainer>(SG::VIEW_ELEMENTS);
    +          selectedJets       = new ConstDataVector<xAOD::JetContainer>(SG::VIEW_ELEMENTS);
    +          if ( m_usePhotons )  selectedPhotons     = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +          selectedTaus       = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +        }
    +
    +        // resize containers based on OR decision
    +        //
    +        if( m_useElectrons ) { ANA_CHECK( HelperFunctions::makeSubsetCont(inElectrons, selectedElectrons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        if( m_useMuons )     { ANA_CHECK( HelperFunctions::makeSubsetCont(inMuons, selectedMuons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inJets, selectedJets, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +        if ( m_usePhotons )  { ANA_CHECK( HelperFunctions::makeSubsetCont(inPhotons, selectedPhotons, msg(), ORdecor.c_str(), ToolName::SELECTOR)); }
    +        ANA_CHECK( HelperFunctions::makeSubsetCont(inTaus, selectedTaus, msg(), ORdecor.c_str(), ToolName::SELECTOR));
    +
    +        // add ConstDataVector to TStore
    +        //
    +        if ( m_createSelectedContainers ) {
    +          // a different syst varied container will be stored for each syst variation
    +          //
    +          if( m_useElectrons ) { ANA_CHECK( m_store->record( selectedElectrons, m_outContainerName_Electrons + systName )); }
    +          if( m_useMuons )     { ANA_CHECK( m_store->record( selectedMuons,     m_outContainerName_Muons + systName )); }
    +          ANA_CHECK( m_store->record( selectedJets,      m_outContainerName_Jets + systName ));
    +          if ( m_usePhotons )  { ANA_CHECK( m_store->record( selectedPhotons,   m_outContainerName_Photons + systName )); }
    +          ANA_CHECK( m_store->record( selectedTaus, m_outContainerName_Taus + systName ));
    +        }
    +
    +        sysVecOut->push_back(systName);
    +      } // close loop on systematic sets available from upstream algo (Taus)
    +
    +      break;
    +    }
    +    default :
    +    {
    +      ANA_MSG_ERROR("Unknown systematics type. Aborting");
    +      return EL::StatusCode::FAILURE;
    +    }
    +  } // end of switch
    +
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode OverlapRemover :: setCutFlowHist( )
    +{
    +
    +  if ( m_useCutFlow ) {
    +
    +    // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the object cutflow
    +    //
    +    m_el_cutflowHist_1  = (TH1D*)file->Get("cutflow_electrons_1");
    +    m_el_cutflow_OR_cut   = m_el_cutflowHist_1->GetXaxis()->FindBin("OR_cut");
    +    m_mu_cutflowHist_1  = (TH1D*)file->Get("cutflow_muons_1");
    +    m_mu_cutflow_OR_cut   = m_mu_cutflowHist_1->GetXaxis()->FindBin("OR_cut");
    +    m_jet_cutflowHist_1   = (TH1D*)file->Get("cutflow_jets_1");
    +    m_jet_cutflow_OR_cut  = m_jet_cutflowHist_1->GetXaxis()->FindBin("OR_cut");
    +    m_ph_cutflowHist_1  = (TH1D*)file->Get("cutflow_photons_1");
    +    m_ph_cutflow_OR_cut   = m_ph_cutflowHist_1->GetXaxis()->FindBin("OR_cut");
    +    m_tau_cutflowHist_1   = (TH1D*)file->Get("cutflow_taus_1");
    +    m_tau_cutflow_OR_cut  = m_tau_cutflowHist_1->GetXaxis()->FindBin("OR_cut");
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode OverlapRemover :: setCounters( )
    +{
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_ParticlePIDManager.cxx.html b/api/program_listing_file_Root_ParticlePIDManager.cxx.html new file mode 100644 index 0000000000..d3c1fceb68 --- /dev/null +++ b/api/program_listing_file_Root_ParticlePIDManager.cxx.html @@ -0,0 +1,447 @@ + + + + + + + + + + + Program Listing for File ParticlePIDManager.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ParticlePIDManager.cxx

    +

    Return to documentation for file (Root/ParticlePIDManager.cxx)

    +
    #include "xAODAnaHelpers/ParticlePIDManager.h"
    +
    +ANA_MSG_SOURCE(msgPIDManager, "PIDManager")
    +
    +ElectronLHPIDManager :: ElectronLHPIDManager ( std::string WP, bool debug ) :
    +  m_asgElectronLikelihoodTool_VeryLoose(nullptr),
    +  m_asgElectronLikelihoodTool_Loose(nullptr),
    +  m_asgElectronLikelihoodTool_LooseBL(nullptr),
    +  m_asgElectronLikelihoodTool_Medium(nullptr),
    +  m_asgElectronLikelihoodTool_Tight(nullptr),
    +  m_asgElectronLikelihoodTool_VeryLooseLLP(nullptr),
    +  m_asgElectronLikelihoodTool_LooseLLP(nullptr),
    +  m_asgElectronLikelihoodTool_MediumLLP(nullptr),
    +  m_asgElectronLikelihoodTool_TightLLP(nullptr)
    +
    +{
    +      m_selectedWP = WP;
    +      m_debug      = debug;
    +
    +      /*  fill the multimap with WPs and corresponding tools */
    +      std::pair < std::string, AsgElectronLikelihoodTool* > veryloose   = std::make_pair( std::string("VeryLoose"), m_asgElectronLikelihoodTool_VeryLoose );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > loose       = std::make_pair( std::string("Loose"),     m_asgElectronLikelihoodTool_Loose     );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > loosebl     = std::make_pair( std::string("LooseBL"),     m_asgElectronLikelihoodTool_LooseBL     );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > medium      = std::make_pair( std::string("Medium"),    m_asgElectronLikelihoodTool_Medium    );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > tight       = std::make_pair( std::string("Tight"),     m_asgElectronLikelihoodTool_Tight     );
    +
    +      std::pair < std::string, AsgElectronLikelihoodTool* > verylooseLLP   = std::make_pair( std::string("VeryLooseLLP"), m_asgElectronLikelihoodTool_VeryLooseLLP );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > looseLLP       = std::make_pair( std::string("LooseLLP"),     m_asgElectronLikelihoodTool_LooseLLP     );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > mediumLLP      = std::make_pair( std::string("MediumLLP"),    m_asgElectronLikelihoodTool_MediumLLP    );
    +      std::pair < std::string, AsgElectronLikelihoodTool* > tightLLP       = std::make_pair( std::string("TightLLP"),     m_asgElectronLikelihoodTool_TightLLP     );
    +
    +      m_allWPTools.insert(veryloose);   m_allWPAuxDecors.insert("VeryLoose");
    +      m_allWPTools.insert(loose);       m_allWPAuxDecors.insert("Loose");
    +      m_allWPTools.insert(loosebl);     m_allWPAuxDecors.insert("LooseBL");
    +      m_allWPTools.insert(medium);      m_allWPAuxDecors.insert("Medium");
    +      m_allWPTools.insert(tight);       m_allWPAuxDecors.insert("Tight");
    +
    +      m_allWPTools.insert(verylooseLLP);   m_allWPAuxDecors.insert("VeryLooseNoPix");
    +      m_allWPTools.insert(looseLLP);       m_allWPAuxDecors.insert("LooseNoPix");
    +      m_allWPTools.insert(mediumLLP);      m_allWPAuxDecors.insert("MediumNoPix");
    +      m_allWPTools.insert(tightLLP);       m_allWPAuxDecors.insert("TightNoPix");
    +}
    +
    +ElectronLHPIDManager ::  ~ElectronLHPIDManager()
    +{
    +  if ( m_asgElectronLikelihoodTool_VeryLoose )   { delete m_asgElectronLikelihoodTool_VeryLoose; m_asgElectronLikelihoodTool_VeryLoose = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_Loose )       { delete m_asgElectronLikelihoodTool_Loose;     m_asgElectronLikelihoodTool_Loose     = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_LooseBL )     { delete m_asgElectronLikelihoodTool_LooseBL;   m_asgElectronLikelihoodTool_LooseBL   = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_Medium )      { delete m_asgElectronLikelihoodTool_Medium;    m_asgElectronLikelihoodTool_Medium    = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_Tight )       { delete m_asgElectronLikelihoodTool_Tight;     m_asgElectronLikelihoodTool_Tight     = nullptr; }
    +
    +  if ( m_asgElectronLikelihoodTool_VeryLooseLLP )   { delete m_asgElectronLikelihoodTool_VeryLooseLLP; m_asgElectronLikelihoodTool_VeryLooseLLP = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_LooseLLP )       { delete m_asgElectronLikelihoodTool_LooseLLP;     m_asgElectronLikelihoodTool_LooseLLP     = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_MediumLLP )      { delete m_asgElectronLikelihoodTool_MediumLLP;    m_asgElectronLikelihoodTool_MediumLLP    = nullptr; }
    +  if ( m_asgElectronLikelihoodTool_TightLLP )       { delete m_asgElectronLikelihoodTool_TightLLP;     m_asgElectronLikelihoodTool_TightLLP     = nullptr; }
    +
    +}
    +
    +
    +StatusCode ElectronLHPIDManager :: setupWPs( bool configTools, std::string selector_name) {
    +  using namespace msgPIDManager;
    +  std::string selectedWP = m_selectedWP;
    +  if (m_selectedWP.find("NoPix") != std::string::npos) selectedWP = m_selectedWP.substr(0, m_selectedWP.size()-5) + "LLP";
    +  HelperClasses::EnumParser<LikeEnum::Menu> selectedWP_parser;
    +  unsigned int selectedWP_enum = static_cast<unsigned int>( selectedWP_parser.parseEnum(selectedWP) );
    +
    +  /* By converting the string to the corresponding LikeEnum, we can exploit the ordering of the enum itself
    +  / ( see ElectronPhotonID/ElectronPhotonSelectorTools/trunk/ElectronPhotonSelectorTools/TElectronLikelihoodTool.h for definition)
    +  / to initialise ONLY the tools with WP tighter (or equal) the selected one.
    +  / The selected WP will be used to cut loose electrons in the selector, the tighter WPs to decorate!
    +  Beware, this doesn't work if you are using LLP WPs since they are not ordered in the enum.
    +  */
    +  if ( configTools ) {
    +    for ( auto it : (m_allWPTools) ) {
    +
    +      /* instantiate tools (do it for all) */
    +
    +      const std::string WP            = it.first;
    +      std::string tool_name = selector_name + "_" + WP;
    +
    +      Info("setupWPs()", "Initializing AsgElectronLikelihoodTool w/ name: %s", tool_name.c_str() );
    +
    +      it.second =  new AsgElectronLikelihoodTool( tool_name.c_str() );
    +
    +      HelperClasses::EnumParser<LikeEnum::Menu>  WP_parser;
    +      unsigned int WP_enum = static_cast<unsigned int>( WP_parser.parseEnum(WP) );
    +
    +      /* if this WP is looser than user's WP, skip to next. Don't do this if using LLP WPs. */
    +      if ( WP_enum < selectedWP_enum && (selectedWP.find("LLP") == std::string::npos) ) { continue; }
    +
    +      /* configure and initialise only tools with (WP >= selectedWP) */
    +      it.second->msg().setLevel( MSG::INFO); /* ERROR, VERBOSE, DEBUG, INFO */
    +
    +      std::string WPParseString = WP + "LHElectron";
    +      if (WP.find("LLP") != std::string::npos) WPParseString = WP.substr(0, WP.size()-3) + "LHElectron_LLP";
    +
    +      ANA_CHECK( it.second->setProperty("WorkingPoint", WPParseString ) );
    +      ANA_CHECK( it.second->initialize());
    +
    +      /* copy map element into container of valid WPs for later usage */
    +      m_validWPTools.insert( it );
    +
    +    }
    +  } else {
    +    for ( auto it : (m_allWPAuxDecors) ) {
    +
    +      HelperClasses::EnumParser<LikeEnum::Menu>  WP_parser;
    +      std::string WPParseString = it;
    +      if (it.find("NoPix") != std::string::npos) WPParseString = it.substr(0, it.size()-5) + "LLP";
    +      unsigned int WP_enum = static_cast<unsigned int>( WP_parser.parseEnum(WPParseString) );
    +
    +      /* if this WP is looser than user's WP, skip to next. Don't do this if using LLP WPs. */
    +      if ( WP_enum < selectedWP_enum && (selectedWP.find("LLP") == std::string::npos) ) { continue; }
    +
    +      /* copy map element into container of valid WPs for later usage */
    +      m_validWPs.insert( it );
    +
    +    }
    +
    +  }
    +  return StatusCode::SUCCESS;
    +
    +}
    +
    +/* set default values for decorations (do it for all WPs) */
    +StatusCode ElectronLHPIDManager :: setDecorations( const xAOD::Electron* electron ) {
    +
    +      for ( auto it : (m_allWPTools) ) {
    +        const std::string defaultDecorWP =  "LH" + it.first;
    +        electron->auxdecor<char>(defaultDecorWP) = -1;
    +      }
    +
    +      return StatusCode::SUCCESS;
    +}
    +
    +const std::string ElectronLHPIDManager :: getSelectedWP () {
    +
    +  const std::string WP = m_selectedWP;
    +  return WP;
    +
    +}
    +
    +ElectronCutBasedPIDManager :: ElectronCutBasedPIDManager ( std::string WP, bool debug ) :
    +  m_asgElectronIsEMSelector_Loose(nullptr),
    +  m_asgElectronIsEMSelector_Medium(nullptr),
    +  m_asgElectronIsEMSelector_Tight(nullptr)
    +{
    +  m_selectedWP = WP;
    +  m_debug      = debug;
    +
    +  /*  fill the multimap with WPs and corresponding tools. Use an ordered index to reflect the tightness order (0: loosest WP, ...) */
    +  std::pair < std::string, AsgElectronIsEMSelector* > loose = std::make_pair( std::string("Loose"), m_asgElectronIsEMSelector_Loose );
    +  m_allWPTools.insert( loose );
    +  m_allWPAuxDecors.insert("Loose");
    +  std::pair < std::string, AsgElectronIsEMSelector* > medium = std::make_pair( std::string("Medium"), m_asgElectronIsEMSelector_Medium );
    +  m_allWPTools.insert( medium );
    +  m_allWPAuxDecors.insert("Medium");
    +  std::pair < std::string, AsgElectronIsEMSelector* > tight = std::make_pair( std::string("Tight"), m_asgElectronIsEMSelector_Tight );
    +  m_allWPTools.insert( tight );
    +  m_allWPAuxDecors.insert("Tight");
    +}
    +
    +ElectronCutBasedPIDManager ::  ~ElectronCutBasedPIDManager() {
    +  if ( m_asgElectronIsEMSelector_Loose )     { m_asgElectronIsEMSelector_Loose = nullptr;  delete m_asgElectronIsEMSelector_Loose;  }
    +  if ( m_asgElectronIsEMSelector_Medium )    { m_asgElectronIsEMSelector_Medium = nullptr; delete m_asgElectronIsEMSelector_Medium; }
    +  if ( m_asgElectronIsEMSelector_Tight )     { m_asgElectronIsEMSelector_Tight = nullptr;  delete m_asgElectronIsEMSelector_Tight;  }
    +}
    +
    +StatusCode ElectronCutBasedPIDManager :: setupWPs( bool configTools, std::string selector_name) {
    +  using namespace msgPIDManager;
    +  HelperClasses::EnumParser<egammaPID::egammaIDQuality> selectedWP_parser;
    +  unsigned int selectedWP_enum = static_cast<unsigned int>( selectedWP_parser.parseEnum(m_selectedWP) );
    +
    +  /* By converting the string to the corresponding egammaPID, we can exploit the ordering of the enum itself
    +  / ( see ElectronPhotonID/ElectronPhotonSelectorTools/trunk/ElectronPhotonSelectorTools/TElectronIsEMSelector.h for definition)
    +  / to initialise ONLY the tools with WP tighter (or equal) the selected one.
    +  / The selected WP will be used to cut loose electrons in the selector, the tighter WPs to decorate!
    +  /
    +  / egammaPID enums :http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Reconstruction/egamma/egammaEvent/egammaEvent/egammaPIDdefs.h
    +  */
    +  if ( configTools ) {
    +
    +    for ( auto it : (m_allWPTools) ) {
    +
    +      const std::string WP            = it.first;
    +      /* instantiate tools (do it for all) */
    +      std::string tool_name = WP + selector_name;
    +      it.second =  new AsgElectronIsEMSelector( tool_name.c_str() );
    +
    +      HelperClasses::EnumParser<egammaPID::egammaIDQuality>  itWP_parser;
    +      unsigned int itWP_enum = static_cast<unsigned int>( itWP_parser.parseEnum(WP) );
    +
    +      /* if this WP is looser than user's WP, skip to next */
    +      if ( itWP_enum < selectedWP_enum ) { continue; }
    +
    +      /* configure and initialise only tools with (WP >= selectedWP) */
    +
    +      it.second->msg().setLevel( MSG::INFO); /* ERROR, VERBOSE, DEBUG, INFO */
    +
    +      ANA_CHECK( it.second->setProperty("WorkingPoint", WP+"Electron" ) );
    +      ANA_CHECK( it.second->initialize());
    +
    +      /* copy map element into container of valid tools for later usage */
    +      m_validWPTools.insert( it );
    +
    +    }
    +
    +  } else {
    +
    +    for ( auto it : (m_allWPAuxDecors) ) {
    +
    +      HelperClasses::EnumParser<egammaPID::egammaIDQuality>  itWP_parser;
    +      unsigned int itWP_enum = static_cast<unsigned int>( itWP_parser.parseEnum(it) );
    +
    +      /* if this WP is looser than user's WP, skip to next */
    +      if ( itWP_enum < selectedWP_enum ) { continue; }
    +
    +      /* copy map element into container of valid WPs for later usage */
    +      m_validWPs.insert( it );
    +
    +    }
    +
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +/* set default values for decorations (do it for all WPs) */
    +StatusCode ElectronCutBasedPIDManager :: setDecorations( const xAOD::Electron* electron ) {
    +  for ( auto it : (m_allWPTools) ) {
    +    std::string defaultDecorWP = "IsEM"+it.first;
    +    electron->auxdecor<char>(defaultDecorWP) = -1;
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_PhotonCalibrator.cxx.html b/api/program_listing_file_Root_PhotonCalibrator.cxx.html new file mode 100644 index 0000000000..2db0654a65 --- /dev/null +++ b/api/program_listing_file_Root_PhotonCalibrator.cxx.html @@ -0,0 +1,812 @@ + + + + + + + + + + + Program Listing for File PhotonCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonCalibrator.cxx

    +

    Return to documentation for file (Root/PhotonCalibrator.cxx)

    +
    /*******************************************************
    + *
    + * Interface to CP Photon calibration tool(s).
    + *
    + * The tool applies:
    + *
    + * -) scale corrections for DATA
    + * -) smearing corrections for MC
    + * (data VS. MC check is done by the CP tool internally)
    + *
    + * M. Milesi (marco.milesi@cern.ch)
    + *
    + *******************************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include <xAODEventInfo/EventInfo.h>
    +#include <xAODEgamma/PhotonContainer.h>
    +#include <xAODEgamma/Photon.h>
    +#include <xAODBase/IParticleHelpers.h>
    +#include <xAODBase/IParticleContainer.h>
    +#include <xAODBase/IParticle.h>
    +#include <AthContainers/ConstDataVector.h>
    +#include <AthContainers/DataVector.h>
    +#include <xAODCore/ShallowCopy.h>
    +#include <xAODEgamma/EgammaDefs.h>
    +#include <xAODEgamma/EgammaxAODHelpers.h>
    +
    +// package include(s):
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/PhotonCalibrator.h>
    +
    +#include "ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h"
    +#include "ElectronPhotonSelectorTools/AsgPhotonIsEMSelector.h"
    +#include "EGammaVariableCorrection/ElectronPhotonVariableCorrectionTool.h"
    +
    +#include <PATCore/PATCoreEnums.h>
    +
    +// apparently needed for egammaPIDs but was included in HelperClasses too?
    +#include "ElectronPhotonSelectorTools/egammaPIDdefs.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(PhotonCalibrator)
    +
    +
    +PhotonCalibrator :: PhotonCalibrator () :
    +    Algorithm("PhotonCalibrator")
    +{
    +}
    +
    +
    +EL::StatusCode PhotonCalibrator :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "PhotonCalibrator" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing PhotonCalibrator Interface... ");
    +
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +  // shallow copies are made with this output container name
    +  m_outSCContainerName      = m_outContainerName + "ShallowCopy";
    +  m_outSCAuxContainerName   = m_outSCContainerName + "Aux."; // the period is very important!
    +
    +  // initialize the CP::EgammaCalibrationAndSmearingTool
    +  //
    +  const std::string CalibToolName = m_name + "_EgammaCalibrationAndSmearingTool_Photons";
    +  if ( asg::ToolStore::contains<CP::EgammaCalibrationAndSmearingTool>(CalibToolName.c_str()) ) {
    +    m_EgammaCalibrationAndSmearingTool = asg::ToolStore::get<CP::EgammaCalibrationAndSmearingTool>(CalibToolName.c_str());
    +  } else {
    +    m_EgammaCalibrationAndSmearingTool = new CP::EgammaCalibrationAndSmearingTool(CalibToolName.c_str());
    +  }
    +
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("ESModel", m_esModel));
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("decorrelationModel", m_decorrelationModel));
    +  if(m_randomRunNumber>0) ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("randomRunNumber", m_randomRunNumber));
    +
    +  //Backwards compatibility
    +  if (m_useAFII || m_useAF3)
    +    m_forceFastSim = true;
    +  if ( isFastSim() ){
    +    ANA_MSG_INFO( "Setting simulation flavour to Fast Sim");
    +    ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 1));
    +  }
    +  else {
    +    ANA_CHECK( m_EgammaCalibrationAndSmearingTool->setProperty("useFastSim", 0));
    +  }
    +  ANA_CHECK( m_EgammaCalibrationAndSmearingTool->initialize());
    +  m_EgammaCalibrationAndSmearingTool->msg().setLevel( msg().level() );
    +
    +  // Get a list of recommended systematics for this tool
    +  //
    +  //const CP::SystematicRegistry& systReg = CP::SystematicRegistry::getInstance();
    +  const CP::SystematicSet& recSyst = m_EgammaCalibrationAndSmearingTool->recommendedSystematics();;
    +  ANA_MSG_INFO(" Initializing Photon Calibrator Systematics :");
    +
    +  m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +
    +  ANA_MSG_INFO("Will be using EgammaCalibrationAndSmearingTool systematic:");
    +
    +  auto SystPhotonsNames = std::make_unique< std::vector< std::string > >();
    +  for ( const auto& syst_it : m_systList ) {
    +    SystPhotonsNames->push_back(syst_it.name());
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +    ANA_CHECK(m_store->record(std::move(SystPhotonsNames), "photons_Syst"+m_name ));
    +
    +  //isEM selector tools
    +  //------------------
    +  //create the selectors
    +  // Tight
    +  const std::string TightSelectorName = m_name + "_PhotonTightIsEMSelector";
    +  if ( asg::ToolStore::contains<AsgPhotonIsEMSelector>(TightSelectorName.c_str()) ) {
    +    m_photonTightIsEMSelector = asg::ToolStore::get<AsgPhotonIsEMSelector>(TightSelectorName.c_str());
    +  } else {
    +    m_photonTightIsEMSelector = new AsgPhotonIsEMSelector ( TightSelectorName.c_str() );
    +  }
    +  m_photonTightIsEMSelector->msg().setLevel( msg().level() );
    +
    +  // Medium
    +  const std::string MediumSelectorName = m_name + "_PhotonMediumIsEMSelector";
    +  if ( asg::ToolStore::contains<AsgPhotonIsEMSelector>(MediumSelectorName.c_str()) ) {
    +    m_photonMediumIsEMSelector = asg::ToolStore::get<AsgPhotonIsEMSelector>(MediumSelectorName.c_str());
    +  } else {
    +    m_photonMediumIsEMSelector = new AsgPhotonIsEMSelector ( MediumSelectorName.c_str() );
    +  }
    +  m_photonMediumIsEMSelector->msg().setLevel( msg().level() );
    +
    +  // Loose
    +  const std::string LooseSelectorName = m_name + "_PhotonLooseIsEMSelector";
    +  if ( asg::ToolStore::contains<AsgPhotonIsEMSelector>(LooseSelectorName.c_str()) ) {
    +    m_photonLooseIsEMSelector = asg::ToolStore::get<AsgPhotonIsEMSelector>(LooseSelectorName.c_str());
    +  } else {
    +    m_photonLooseIsEMSelector = new AsgPhotonIsEMSelector ( LooseSelectorName.c_str() );
    +  }
    +  m_photonLooseIsEMSelector->msg().setLevel( msg().level() );
    +
    +  //set the type of selection
    +  ANA_CHECK( m_photonTightIsEMSelector->setProperty("isEMMask", egammaPID::PhotonTight));
    +  ANA_CHECK( m_photonMediumIsEMSelector->setProperty("isEMMask", egammaPID::PhotonMedium));
    +  ANA_CHECK( m_photonLooseIsEMSelector->setProperty("isEMMask", egammaPID::PhotonLoose));
    +
    +  //set the configuration file
    +  // todo : monitor the config files!
    +  ANA_CHECK( m_photonTightIsEMSelector->setProperty("ConfigFile", m_tightIDConfigPath));
    +  ANA_CHECK( m_photonMediumIsEMSelector->setProperty("ConfigFile",m_mediumIDConfigPath));
    +  ANA_CHECK( m_photonLooseIsEMSelector->setProperty("ConfigFile", m_looseIDConfigPath));
    +
    +
    +  ANA_CHECK( m_photonTightIsEMSelector->initialize());
    +  ANA_CHECK( m_photonMediumIsEMSelector->initialize());
    +  ANA_CHECK( m_photonLooseIsEMSelector->initialize());
    +
    +  // ***********************************************************
    +
    +  //
    +  // Make a list of systematics to be used, based on configuration input
    +  // Use HelperFunctions::getListofSystematics() for this!
    +  //
    +
    +  // fudge MC tool
    +  //--------------
    +  const std::string VarCorrectionToolName = m_name + "VarCorrectionTool";
    +  if ( asg::ToolStore::contains<ElectronPhotonVariableCorrectionTool>(VarCorrectionToolName.c_str()) ) {
    +    m_photonVarCorrectionTool = asg::ToolStore::get<ElectronPhotonVariableCorrectionTool>(VarCorrectionToolName.c_str());
    +  } else {
    +    m_photonVarCorrectionTool = new ElectronPhotonVariableCorrectionTool(VarCorrectionToolName.c_str());
    +  }
    +  m_photonVarCorrectionTool->msg().setLevel( msg().level() );
    +
    +  std::string configFilePath = "EGammaVariableCorrection/TUNE23/ElPhVariableNominalCorrection.conf";
    +  m_photonVarCorrectionTool->setProperty("ConfigFile", configFilePath);
    +  ANA_CHECK( m_photonVarCorrectionTool->initialize());
    +
    +  if (isMC()) {
    +
    +    int dataType = PATCore::ParticleDataType::Data;
    +    if ( isFastSim() ) {
    +      dataType = PATCore::ParticleDataType::Fast;
    +    } else {
    +      dataType = PATCore::ParticleDataType::Full;
    +    }
    +    ANA_MSG_DEBUG("isSimulation=" << ( isMC() ? "Y" : "N") << " Simulation type: " << ( isFastSim() ? ( isAF3() ? "AF3" : "AFII") : "FullSim" ) << " selected dataType=" << dataType );
    +
    +
    +    // photon efficiency correction tool
    +    //----------------------------------
    +    //create the tools
    +
    +    if( !m_overridePhotonCalibMap.empty() ){
    +      ANA_MSG_WARNING("Overriding photon calibration map to " << m_overridePhotonCalibMap);
    +      ANA_CHECK( m_photonTightEffTool_handle .setProperty("MapFilePath", m_overridePhotonCalibMap) );
    +      ANA_CHECK( m_photonMediumEffTool_handle.setProperty("MapFilePath", m_overridePhotonCalibMap) );
    +      ANA_CHECK( m_photonLooseEffTool_handle .setProperty("MapFilePath", m_overridePhotonCalibMap) );
    +    }
    +
    +    // set data type
    +    ANA_CHECK( m_photonTightEffTool_handle. setProperty("ForceDataType", dataType));
    +    ANA_CHECK( m_photonMediumEffTool_handle.setProperty("ForceDataType", dataType));
    +    ANA_CHECK( m_photonLooseEffTool_handle. setProperty("ForceDataType", dataType));
    +
    +    // set debug levels
    +    ANA_CHECK( m_photonTightEffTool_handle. setProperty("OutputLevel", msg().level()));
    +    ANA_CHECK( m_photonMediumEffTool_handle.setProperty("OutputLevel", msg().level()));
    +    ANA_CHECK( m_photonLooseEffTool_handle. setProperty("OutputLevel", msg().level()));
    +
    +    //initialize
    +    ANA_CHECK( m_photonTightEffTool_handle.retrieve());
    +    ANA_CHECK( m_photonMediumEffTool_handle.retrieve());
    +    ANA_CHECK( m_photonLooseEffTool_handle.retrieve());
    +  }
    +
    +  //IsolationCorrectionTool
    +  ANA_CHECK(m_isolationCorrectionTool_handle.setProperty("OutputLevel", msg().level()));
    +  ANA_CHECK(m_isolationCorrectionTool_handle.retrieve());
    +
    +  ANA_MSG_INFO( "PhotonCalibrator Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode PhotonCalibrator :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG("Applying Photon Calibration ... ");
    +
    +  // get the collection from TEvent or TStore
    +  //
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  const xAOD::PhotonContainer* inPhotons(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName, m_event, m_store, msg()) );
    +
    +  ANA_MSG_DEBUG("Retrieve has been completed with container name = " << m_inContainerName);
    +
    +  // loop over available systematics - remember syst == EMPTY_STRING --> baseline
    +  // prepare a vector of the names of CDV containers
    +  // must be a pointer to be recorded in TStore
    +  //
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +    ANA_MSG_DEBUG("Systematic Loop for m_systList=" << syst_it.name() );
    +    // discard photon systematics
    +    //
    +    //if ( (syst_it.name()).find("PH_", 0) != std::string::npos ) { continue; }
    +
    +    std::string outSCContainerName(m_outSCContainerName);
    +    std::string outSCAuxContainerName(m_outSCAuxContainerName);
    +    std::string outContainerName(m_outContainerName);
    +
    +    // always append the name of the variation, including nominal which is an empty string
    +    //
    +    outSCContainerName    += syst_it.name();
    +    outSCAuxContainerName += syst_it.name();
    +    outContainerName      += syst_it.name();
    +    vecOutContainerNames->push_back( syst_it.name() );
    +
    +    // apply syst
    +    //
    +    ANA_MSG_DEBUG("syst_it.name()=" << syst_it.name());
    +
    +    if ( m_EgammaCalibrationAndSmearingTool->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR( "Failed to configure EgammaCalibrationAndSmearingTool for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    ANA_MSG_DEBUG("Systematics applied");
    +    // create shallow copy for calibration - one per syst
    +    //
    +    std::pair< xAOD::PhotonContainer*, xAOD::ShallowAuxContainer* > calibPhotonsSC = xAOD::shallowCopyContainer( *inPhotons );
    +
    +    // create ConstDataVector to be eventually stored in TStore
    +    //
    +    ConstDataVector<xAOD::PhotonContainer>* calibPhotonsCDV = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS);
    +    calibPhotonsCDV->reserve( calibPhotonsSC.first->size() );
    +
    +    // now calibrate!
    +    // four momentum calibration
    +    unsigned int idx(0);
    +    for ( auto phSC_itr : *(calibPhotonsSC.first) ) {
    +
    +      // set smearing seeding if needed - no need for this after Base,2.1.26
    +      // m_EgammaCalibrationAndSmearingTool->setRandomSeed(eventInfo->eventNumber() + 100 * idx);
    +      //
    +      ANA_MSG_DEBUG("Checking photon " << idx << " raw pt = " << phSC_itr->pt()*1e-3 << " GeV " );
    +
    +      if ( phSC_itr->pt() > 7e3 && !(phSC_itr->caloCluster()) ){
    +        ANA_MSG_WARNING( "photon "<<idx<<", raw pt = "<<phSC_itr->pt()*1e-3<<" GeV, does not have caloCluster()! " );
    +      }
    +
    +      // apply calibration (w/ syst)
    +      //
    +      if ( (phSC_itr->author() & xAOD::EgammaParameters::AuthorPhoton) || (phSC_itr->author() & xAOD::EgammaParameters::AuthorAmbiguous) ) {
    +        if ( m_EgammaCalibrationAndSmearingTool->applyCorrection( *phSC_itr ) != CP::CorrectionCode::Ok ) {
    +          ANA_MSG_WARNING( "Problem in CP::EgammaCalibrationAndSmearingTool::applyCorrection()");
    +        }
    +
    +        if ( m_isolationCorrectionTool_handle->applyCorrection( *phSC_itr ) != CP::CorrectionCode::Ok ) {
    +          ANA_MSG_WARNING( "Problem in CP::IsolationCorrection::applyCorrection()");
    +        }
    +      }
    +
    +      ANA_MSG_DEBUG("Calibrated pt with systematic: " << syst_it.name() << " , pt = " << phSC_itr->pt() * 1e-3 << " GeV");
    +
    +      ANA_CHECK( decorate(phSC_itr));
    +
    +      ++idx;
    +
    +    } // close calibration loop
    +
    +    if ( !xAOD::setOriginalObjectLink(*inPhotons, *(calibPhotonsSC.first)) ) {
    +      ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed.");
    +    }
    +
    +    // save pointers in ConstDataVector with same order
    +    //
    +    ANA_CHECK( HelperFunctions::makeSubsetCont(calibPhotonsSC.first, calibPhotonsCDV, msg()));
    +
    +    // Sort after copying to CDV.
    +    if ( m_sort ) {
    +      std::sort( calibPhotonsCDV->begin(), calibPhotonsCDV->end(), HelperFunctions::sort_pt );
    +    }
    +
    +    // add SC container to TStore
    +    //
    +    ANA_CHECK( m_store->record( calibPhotonsSC.first,  outSCContainerName  ));
    +    ANA_CHECK( m_store->record( calibPhotonsSC.second, outSCAuxContainerName ));
    +    // add ConstDataVector to TStore
    +    //
    +    ANA_CHECK( m_store->record( calibPhotonsCDV, outContainerName));
    +
    +  } // close loop on systematics
    +
    +  // add vector<string container_names_syst> to TStore
    +  //
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonCalibrator :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( m_EgammaCalibrationAndSmearingTool ) {
    +    delete m_EgammaCalibrationAndSmearingTool;
    +    m_EgammaCalibrationAndSmearingTool = nullptr;
    +  }
    +  if ( m_photonVarCorrectionTool ) {
    +    delete m_photonVarCorrectionTool;
    +    m_photonVarCorrectionTool = nullptr;
    +  }
    +
    +  if ( m_photonTightIsEMSelector ) {
    +    delete m_photonTightIsEMSelector;
    +    m_photonTightIsEMSelector = nullptr;
    +  }
    +
    +  if (m_photonMediumIsEMSelector) {
    +    delete m_photonMediumIsEMSelector;
    +    m_photonMediumIsEMSelector = nullptr;
    +  }
    +
    +  if (m_photonLooseIsEMSelector) {
    +    delete m_photonLooseIsEMSelector;
    +    m_photonLooseIsEMSelector = nullptr;
    +  }
    +
    +  ANA_MSG_INFO( "Finalization done.");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonCalibrator :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonCalibrator :: decorate(xAOD::Photon* photon)
    +{
    +  // (1) apply fudge factors and (2) evaluate the ID quality
    +  bool isTight(false);
    +  bool isMedium(false);
    +  bool isLoose(false);
    +  if (m_readIDFlagsFromDerivation){
    +    static SG::AuxElement::ConstAccessor< char > LHDecisionTight(  "DFCommonPhotonsIsEMTight" );
    +    static SG::AuxElement::ConstAccessor< char > LHDecisionMedium( "DFCommonPhotonsIsEMMedium" );
    +    static SG::AuxElement::ConstAccessor< char > LHDecisionLoose(  "DFCommonPhotonsIsEMLoose" );
    +    if (LHDecisionTight.isAvailable( *photon ))
    +      isTight = LHDecisionTight( *photon );
    +    if (LHDecisionMedium.isAvailable( *photon ))
    +      isMedium = LHDecisionMedium( *photon );
    +    if (LHDecisionLoose.isAvailable( *photon ))
    +      isLoose =  LHDecisionLoose( *photon );
    +  } else {
    +    if( isMC() && !isFastSim() ){
    +      if(m_photonVarCorrectionTool->applyCorrection(*photon) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR( "photonVarCorrectionTool->applyCorrection(*photon) returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +    }
    +    isTight  = bool(m_photonTightIsEMSelector->accept(photon));
    +    isMedium = bool(m_photonMediumIsEMSelector->accept(photon));
    +    isLoose  = bool(m_photonLooseIsEMSelector->accept(photon));
    +  }
    +  photon->auxdecor< bool >( "PhotonID_Tight"    ) = isTight;
    +  photon->auxdecor< bool >( "PhotonID_Medium"   ) = isMedium;
    +  photon->auxdecor< bool >( "PhotonID_Loose"    ) = isLoose;
    +  ANA_MSG_DEBUG("isTight="<<(isTight?"Y":"N")<<" isMedium="<<(isMedium?"Y":"N")<<" isLoose="<<(isLoose?"Y":"N") );
    +
    +  // (3) set efficiency correction
    +  if (isMC()) {
    +    const xAOD::CaloCluster* cluster = photon->caloCluster();
    +    float cluster_eta = 10;
    +    float cluster_et = 0;
    +    if (cluster) {
    +      cluster_eta = cluster->etaBE(2);
    +      if (cluster_eta != 0.0) {
    +        cluster_et = cluster->e() / cosh(cluster_eta);
    +      }
    +    }
    +
    +    bool inCrack = abs(cluster_eta)>1.37 && abs(cluster_eta)<1.52;
    +
    +    // photon SF
    +    double photonTightEffSF(1.), photonMediumEffSF(1.), photonLooseEffSF(1.);
    +    double photonTightEffSFError(0.), photonMediumEffSFError(0.), photonLooseEffSFError(0.);
    +
    +    // configuration files not yet available for 13 TeV :(
    +    //sf only available after basic kinematic selection
    +    if(cluster_et > 10000. && fabs(cluster_eta) < 2.37 && !inCrack){
    +      // SF
    +      if(m_photonTightEffTool_handle->getEfficiencyScaleFactor(*photon, photonTightEffSF) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      if(m_photonMediumEffTool_handle->getEfficiencyScaleFactor(*photon, photonMediumEffSF) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      if(m_photonLooseEffTool_handle->getEfficiencyScaleFactor(*photon, photonLooseEffSF) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactor returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      // SF error
    +      if(m_photonTightEffTool_handle->getEfficiencyScaleFactorError(*photon, photonTightEffSFError) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      if(m_photonMediumEffTool_handle->getEfficiencyScaleFactorError(*photon, photonMediumEffSFError) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +      if(m_photonLooseEffTool_handle->getEfficiencyScaleFactorError(*photon, photonLooseEffSFError) == CP::CorrectionCode::Error){
    +        ANA_MSG_ERROR("getEfficiencyScaleFactorError returned CP::CorrectionCode::Error");
    +        return EL::StatusCode::FAILURE;
    +      }
    +    }
    +
    +    photon->auxdecor< float >( "PhotonID_Tight_EffSF"  ) = photonTightEffSF;
    +    photon->auxdecor< float >( "PhotonID_Medium_EffSF" ) = photonMediumEffSF;
    +    photon->auxdecor< float >( "PhotonID_Loose_EffSF"  ) = photonLooseEffSF;
    +
    +    photon->auxdecor< float >( "PhotonID_Tight_EffSF_Error"  ) = photonTightEffSFError;
    +    photon->auxdecor< float >( "PhotonID_Medium_EffSF_Error" ) = photonMediumEffSFError;
    +    photon->auxdecor< float >( "PhotonID_Loose_EffSF_Error"  ) = photonLooseEffSFError;
    +
    +    ANA_MSG_DEBUG("Tight=" << photonTightEffSF << "(" << photonTightEffSFError << ")"
    +                  "Medium=" << photonMediumEffSF << "(" << photonMediumEffSFError << ")"
    +                  "Loose=" << photonLooseEffSF << "(" << photonLooseEffSFError << ")");
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_PhotonContainer.cxx.html b/api/program_listing_file_Root_PhotonContainer.cxx.html new file mode 100644 index 0000000000..8206ff0a2a --- /dev/null +++ b/api/program_listing_file_Root_PhotonContainer.cxx.html @@ -0,0 +1,720 @@ + + + + + + + + + + + Program Listing for File PhotonContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonContainer.cxx

    +

    Return to documentation for file (Root/PhotonContainer.cxx)

    +
    #include "xAODAnaHelpers/PhotonContainer.h"
    +
    +#include <iostream>
    +
    +using namespace xAH;
    +using std::vector;
    +using std::string;
    +
    +PhotonContainer::PhotonContainer(const std::string& name, const std::string& detailStr, float units, bool mc)
    +  : ParticleContainer(name, detailStr, units, mc, true)
    +{
    +
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone20                    = new std::vector<float> ();
    +    m_ptvarcone20                 = new std::vector<float> ();
    +    m_topoetcone20                = new std::vector<float> ();
    +    m_isIsolated_Cone20           = new std::vector<int>   ();
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone30                    = new std::vector<float> ();
    +    m_ptvarcone30                 = new std::vector<float> ();
    +    m_topoetcone30                = new std::vector<float> ();
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone40                    = new std::vector<float> ();
    +    m_ptvarcone40                 = new std::vector<float> ();
    +    m_topoetcone40                = new std::vector<float> ();
    +    m_isIsolated_Cone40CaloOnly   = new std::vector<int>   ();
    +    m_isIsolated_Cone40           = new std::vector<int>   ();
    +  }
    +
    +      // PID
    +  if(m_infoSwitch.m_PID){
    +    m_n_IsLoose  = 0;
    +    m_n_IsMedium = 0;
    +    m_n_IsTight  = 0;
    +
    +    m_IsLoose    = new std::vector<int>   ();
    +    m_IsMedium   = new std::vector<int>   ();
    +    m_IsTight    = new std::vector<int>   ();
    +  }
    +
    +  if(m_infoSwitch.m_purity){
    +      //Purity
    +      m_radhad1    = new std::vector<float> ();
    +      m_radhad     = new std::vector<float> ();
    +      m_e277       = new std::vector<float> ();
    +      m_reta       = new std::vector<float> ();
    +      m_rphi       = new std::vector<float> ();
    +      m_weta2      = new std::vector<float> ();
    +      m_f1     = new std::vector<float> ();
    +      m_wtot       = new std::vector<float> ();
    +      m_deltae     = new std::vector<float> ();
    +      m_eratio     = new std::vector<float> ();
    +      //std::vector<float> m_w1
    +  }
    +
    +  if(m_infoSwitch.m_effSF && m_mc){
    +    m_LooseEffSF =new std::vector<float>();
    +    m_MediumEffSF=new std::vector<float>();
    +    m_TightEffSF =new std::vector<float>();
    +
    +    m_LooseEffSF_Error =new std::vector<float>();
    +    m_MediumEffSF_Error=new std::vector<float>();
    +    m_TightEffSF_Error =new std::vector<float>();
    +  }
    +
    +  if(m_infoSwitch.m_trigger){
    +    m_trigMatched=new std::vector<std::vector<std::string> >();
    +  }
    +}
    +
    +PhotonContainer::~PhotonContainer()
    +{
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    delete m_ptcone20;
    +    delete m_ptvarcone20;
    +    delete m_topoetcone20;
    +    delete m_isIsolated_Cone20;
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    delete m_ptcone30;
    +    delete m_ptvarcone30;
    +    delete m_topoetcone30;
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    delete m_ptcone40;
    +    delete m_ptvarcone40;
    +    delete m_topoetcone40;
    +    delete m_isIsolated_Cone40;
    +    delete m_isIsolated_Cone40CaloOnly;
    +  }
    +
    +  // PID
    +  if(m_infoSwitch.m_PID){
    +    delete m_IsLoose;
    +    delete m_IsMedium;
    +    delete m_IsTight;
    +  }
    +
    +  if(m_infoSwitch.m_purity){
    +    delete m_radhad1;
    +    delete m_radhad ;
    +    delete m_e277   ;
    +    delete m_reta   ;
    +    delete m_rphi   ;
    +    delete m_weta2  ;
    +    delete m_f1 ;
    +    delete m_wtot   ;
    +    delete m_deltae;
    +    delete m_eratio;
    +    //std::vector<float> m_w1
    +  }
    +
    +  if(m_infoSwitch.m_effSF && m_mc){
    +    delete m_LooseEffSF;
    +    delete m_MediumEffSF;
    +    delete m_TightEffSF;
    +
    +    delete m_LooseEffSF_Error;
    +    delete m_MediumEffSF_Error;
    +    delete m_TightEffSF_Error;
    +  }
    +
    +  if(m_infoSwitch.m_trigger){
    +    delete m_trigMatched;
    +  }
    +}
    +
    +void PhotonContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  tree->SetBranchStatus  ("nph" , 1);
    +  tree->SetBranchAddress ("nph" , &m_n);
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    connectBranch<float>(tree, "ptcone20",                  &m_ptcone20                  );
    +    connectBranch<float>(tree, "ptvarcone20",               &m_ptvarcone20               );
    +    connectBranch<float>(tree, "topoetcone20",              &m_topoetcone20              );
    +    connectBranch<int>  (tree, "isIsolated_Cone20",         &m_isIsolated_Cone20         );
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    connectBranch<float>(tree, "ptcone30",                  &m_ptcone30                  );
    +    connectBranch<float>(tree, "ptvarcone30",               &m_ptvarcone30               );
    +    connectBranch<float>(tree, "topoetcone30",              &m_topoetcone30              );
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    connectBranch<float>(tree, "ptcone40",                  &m_ptcone40                  );
    +    connectBranch<float>(tree, "ptvarcone40",               &m_ptvarcone40               );
    +    connectBranch<float>(tree, "topoetcone40",              &m_topoetcone40              );
    +    connectBranch<int>  (tree, "isIsolated_Cone40CaloOnly", &m_isIsolated_Cone40CaloOnly );
    +    connectBranch<int>  (tree, "isIsolated_Cone40",         &m_isIsolated_Cone40         );
    +  }
    +
    +  // PID
    +  if(m_infoSwitch.m_PID){
    +    tree->SetBranchStatus (("n"+m_name+"_IsLoose").c_str(),     1);
    +    tree->SetBranchAddress(("n"+m_name+"_IsLoose").c_str(),      &m_n_IsLoose);
    +    connectBranch<int>(tree,  "IsLoose"  , &m_IsLoose );
    +
    +    tree->SetBranchStatus (("n"+m_name+"_IsMedium").c_str(),     1);
    +    tree->SetBranchAddress(("n"+m_name+"_IsMedium").c_str(),      &m_n_IsMedium);
    +    connectBranch<int>(tree,  "IsMedium" , &m_IsMedium);
    +
    +    tree->SetBranchStatus (("n"+m_name+"_IsTight").c_str(),     1);
    +    tree->SetBranchAddress(("n"+m_name+"_IsTight").c_str(),      &m_n_IsTight);
    +    connectBranch<int>(tree,  "IsTight"  , &m_IsTight );
    +  }
    +
    +
    +  if(m_infoSwitch.m_purity){
    +    connectBranch<float>(tree,"radhad1", &m_radhad1);
    +    connectBranch<float>(tree,"radhad" , &m_radhad );
    +    connectBranch<float>(tree,"e277"   , &m_e277   );
    +    connectBranch<float>(tree,"reta"   , &m_reta   );
    +    connectBranch<float>(tree,"rphi"   , &m_rphi   );
    +    connectBranch<float>(tree,"weta2"  , &m_weta2  );
    +    connectBranch<float>(tree,"f1"     , &m_f1     );
    +    connectBranch<float>(tree,"wtot"   , &m_wtot   );
    +    connectBranch<float>(tree,"deltae" , &m_deltae );
    +    connectBranch<float>(tree,"eratio" , &m_eratio );
    +  }
    +
    +  if(m_infoSwitch.m_effSF && m_mc)
    +    {
    +      connectBranch<float>(tree, "LooseEffSF", &m_LooseEffSF);
    +      connectBranch<float>(tree, "MediumEffSF",&m_MediumEffSF);
    +      connectBranch<float>(tree, "TightEffSF", &m_TightEffSF);
    +
    +      connectBranch<float>(tree, "LooseEffSF_Error", &m_LooseEffSF_Error);
    +      connectBranch<float>(tree, "MediumEffSF_Error",&m_MediumEffSF_Error);
    +      connectBranch<float>(tree, "TightEffSF_Error", &m_TightEffSF_Error);
    +    }
    +
    +  if(m_infoSwitch.m_trigger)
    +    {
    +      connectBranch<std::vector<std::string> >(tree, "trigMatched", &m_trigMatched);
    +    }
    +
    +}
    +
    +void PhotonContainer::updateParticle(uint idx, Photon& photon)
    +{
    +  ParticleContainer::updateParticle(idx,photon);
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    photon.ptcone20 =                   m_ptcone20                  ->at(idx);
    +    photon.topoetcone20 =               m_topoetcone20              ->at(idx);
    +    photon.ptvarcone20 =                m_ptvarcone20               ->at(idx);
    +    photon.isIsolated_Cone20 =          m_isIsolated_Cone20         ->at(idx);
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    photon.ptcone30 =                   m_ptcone30                  ->at(idx);
    +    photon.topoetcone30 =               m_topoetcone30              ->at(idx);
    +    photon.ptvarcone30 =                m_ptvarcone30               ->at(idx);
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    photon.ptcone40 =                   m_ptcone40                  ->at(idx);
    +    photon.ptvarcone40 =                m_ptvarcone40               ->at(idx);
    +    photon.topoetcone40 =               m_topoetcone40              ->at(idx);
    +    photon.isIsolated_Cone40CaloOnly =  m_isIsolated_Cone40CaloOnly ->at(idx);
    +    photon.isIsolated_Cone40 =          m_isIsolated_Cone40         ->at(idx);
    +  }
    +
    +  // PID
    +  if(m_infoSwitch.m_PID){
    +    photon.IsLoose =   m_IsLoose ->at(idx);
    +    photon.IsMedium =  m_IsMedium->at(idx);
    +    photon.IsTight =   m_IsTight ->at(idx);
    +  }
    +
    +
    +  if(m_infoSwitch.m_purity){
    +    photon.radhad1 = m_radhad1->at(idx);
    +    photon.radhad =  m_radhad ->at(idx);
    +    photon.e277 =    m_e277   ->at(idx);
    +    photon.reta =    m_reta   ->at(idx);
    +    photon.rphi =    m_rphi   ->at(idx);
    +    photon.weta2 =   m_weta2  ->at(idx);
    +    photon.f1 =      m_f1     ->at(idx);
    +    photon.wtot =    m_wtot   ->at(idx);
    +    photon.deltae =  m_deltae ->at(idx);
    +    photon.eratio =  m_eratio ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_effSF && m_mc){
    +    photon.LooseEffSF =m_LooseEffSF ->at(idx);
    +    photon.MediumEffSF=m_MediumEffSF->at(idx);
    +    photon.TightEffSF =m_TightEffSF ->at(idx);
    +
    +    photon.LooseEffSF_Error =m_LooseEffSF_Error ->at(idx);
    +    photon.MediumEffSF_Error=m_MediumEffSF_Error->at(idx);
    +    photon.TightEffSF_Error =m_TightEffSF_Error ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_trigger){
    +    photon.trigMatched =m_trigMatched->at(idx);
    +  }
    +
    +}
    +
    +
    +void PhotonContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    setBranch<float>(tree, "ptcone20",                  m_ptcone20                  );
    +    setBranch<float>(tree, "ptvarcone20",               m_ptvarcone20               );
    +    setBranch<float>(tree, "topoetcone20",              m_topoetcone20              );
    +    setBranch<int>  (tree, "isIsolated_Cone20",         m_isIsolated_Cone20         );
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    setBranch<float>(tree, "ptcone30",                  m_ptcone30                  );
    +    setBranch<float>(tree, "ptvarcone30",               m_ptvarcone30               );
    +    setBranch<float>(tree, "topoetcone30",              m_topoetcone30              );
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    setBranch<float>(tree, "ptcone40",                  m_ptcone40                  );
    +    setBranch<float>(tree, "ptvarcone40",               m_ptvarcone40               );
    +    setBranch<float>(tree, "topoetcone40",              m_topoetcone40              );
    +    setBranch<int>  (tree, "isIsolated_Cone40CaloOnly", m_isIsolated_Cone40CaloOnly );
    +    setBranch<int>  (tree, "isIsolated_Cone40",         m_isIsolated_Cone40         );
    +  }
    +
    +  // PID
    +  if(m_infoSwitch.m_PID){
    +    tree->Branch(("n"+m_name+"_IsLoose").c_str(),      &m_n_IsLoose);
    +    setBranch<int>(tree,  "IsLoose"  , m_IsLoose );
    +
    +    tree->Branch(("n"+m_name+"_IsMedium").c_str(),      &m_n_IsMedium);
    +    setBranch<int>(tree,  "IsMedium" , m_IsMedium);
    +
    +    tree->Branch(("n"+m_name+"_IsTight").c_str(),      &m_n_IsTight);
    +    setBranch<int>(tree,  "IsTight"  , m_IsTight );
    +  }
    +
    +  // purity
    +  if(m_infoSwitch.m_purity){
    +    setBranch<float>(tree,"radhad1", m_radhad1);
    +    setBranch<float>(tree,"radhad" , m_radhad );
    +    setBranch<float>(tree,"e277"   , m_e277   );
    +    setBranch<float>(tree,"reta"   , m_reta   );
    +    setBranch<float>(tree,"rphi"   , m_rphi   );
    +    setBranch<float>(tree,"weta2"  , m_weta2  );
    +    setBranch<float>(tree,"f1"     , m_f1     );
    +    setBranch<float>(tree,"wtot"   , m_wtot   );
    +    setBranch<float>(tree,"deltae" , m_deltae );
    +    setBranch<float>(tree,"eratio" , m_eratio );
    +  }
    +
    +  // effSF
    +  if(m_infoSwitch.m_effSF && m_mc){
    +    setBranch<float>(tree, "LooseEffSF" , m_LooseEffSF);
    +    setBranch<float>(tree, "MediumEffSF", m_MediumEffSF);
    +    setBranch<float>(tree, "TightEffSF" , m_TightEffSF);
    +
    +    setBranch<float>(tree, "LooseEffSF_Error" , m_LooseEffSF_Error);
    +    setBranch<float>(tree, "MediumEffSF_Error", m_MediumEffSF_Error);
    +    setBranch<float>(tree, "TightEffSF_Error" , m_TightEffSF_Error);
    +  }
    +
    +  // trigger
    +  if(m_infoSwitch.m_trigger){
    +    setBranch<std::vector<std::string> >(tree, "trigMatched", m_trigMatched);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    +void PhotonContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone20        -> clear() ;
    +    m_ptvarcone20     -> clear() ;
    +    m_topoetcone20    -> clear() ;
    +    m_isIsolated_Cone20   -> clear() ;
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone30        -> clear() ;
    +    m_ptvarcone30     -> clear() ;
    +    m_topoetcone30    -> clear() ;
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone40        -> clear() ;
    +    m_ptvarcone40     -> clear() ;
    +    m_topoetcone40        -> clear();
    +    m_isIsolated_Cone40CaloOnly-> clear();
    +    m_isIsolated_Cone40   -> clear() ;
    +  }
    +
    +  // PID
    +  if(m_infoSwitch.m_PID){
    +    m_n_IsLoose = 0;
    +    m_IsLoose -> clear();
    +
    +    m_n_IsMedium = 0;
    +    m_IsMedium-> clear();
    +
    +    m_n_IsTight = 0;
    +    m_IsTight -> clear();
    +  }
    +
    +  // purity
    +  if(m_infoSwitch.m_purity){
    +    m_radhad1-> clear();
    +    m_radhad -> clear();
    +    m_e277   -> clear() ;
    +    m_reta   -> clear() ;
    +    m_rphi   -> clear() ;
    +    m_weta2  -> clear() ;
    +    m_f1     -> clear() ;
    +    m_wtot   -> clear() ;
    +    m_deltae -> clear();
    +    m_eratio -> clear();
    +    //std::vector<float> m_w1
    +  }
    +
    +  // effSF
    +  if(m_infoSwitch.m_effSF && m_mc){
    +    m_LooseEffSF ->clear();
    +    m_MediumEffSF->clear();
    +    m_TightEffSF ->clear();
    +
    +    m_LooseEffSF_Error ->clear();
    +    m_MediumEffSF_Error->clear();
    +    m_TightEffSF_Error ->clear();
    +  }
    +
    +  // trigger
    +  if(m_infoSwitch.m_trigger){
    +    m_trigMatched->clear();
    +  }
    +
    +}
    +
    +
    +void PhotonContainer::FillPhoton( const xAOD::Photon* photon ){
    +  return FillPhoton(static_cast<const xAOD::IParticle*>(photon));
    +}
    +
    +void PhotonContainer::FillPhoton( const xAOD::IParticle* particle )
    +{
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::Photon* photon=dynamic_cast<const xAOD::Photon*>(particle);
    +
    +
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone20     -> push_back( photon->isolation( xAOD::Iso::ptcone20    ) / m_units  );
    +    m_ptvarcone20  -> push_back( photon->isolation( xAOD::Iso::ptvarcone20 ) / m_units  );
    +    m_topoetcone20 -> push_back( photon->isolation( xAOD::Iso::topoetcone20) / m_units  );
    +    static SG::AuxElement::Accessor<char> isIsoCone20Acc            ("isIsolated_FixedCutLoose");
    +    safeFill<char, int, xAOD::Photon>(photon, isIsoCone20Acc, m_isIsolated_Cone20, -1);
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone30     -> push_back( photon->isolation( xAOD::Iso::ptcone30    ) / m_units  );
    +    m_ptvarcone30  -> push_back( photon->isolation( xAOD::Iso::ptvarcone30 ) / m_units  );
    +    m_topoetcone30 -> push_back( photon->isolation( xAOD::Iso::topoetcone30) / m_units  );
    +  }
    +  if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){
    +    m_ptcone40     -> push_back( photon->isolation( xAOD::Iso::ptcone40    ) / m_units  );
    +    m_ptvarcone40  -> push_back( photon->isolation( xAOD::Iso::ptvarcone40 ) / m_units  );
    +    m_topoetcone40 -> push_back( photon->isolation( xAOD::Iso::topoetcone40) / m_units  );
    +
    +    static SG::AuxElement::Accessor<char> isIsoCone40CaloOnlyAcc    ("isIsolated_FixedCutTightCaloOnly");
    +    safeFill<char, int, xAOD::Photon>(photon, isIsoCone40CaloOnlyAcc, m_isIsolated_Cone40CaloOnly, -1);
    +
    +    static SG::AuxElement::Accessor<char> isIsoCone40Acc            ("isIsolated_FixedCutTight");
    +    safeFill<char, int, xAOD::Photon>(photon, isIsoCone40Acc, m_isIsolated_Cone40, -1);
    +  }
    +
    +  if ( m_infoSwitch.m_PID ) {
    +
    +    static SG::AuxElement::Accessor<bool> phLooseAcc  ("PhotonID_Loose");
    +    safeFill<bool, int, xAOD::Photon>(photon, phLooseAcc, m_IsLoose, -1);
    +
    +    static SG::AuxElement::Accessor<bool> phMediumAcc ("PhotonID_Medium");
    +    safeFill<bool, int, xAOD::Photon>(photon, phMediumAcc, m_IsMedium, -1);
    +
    +    static SG::AuxElement::Accessor<bool> phTightAcc  ("PhotonID_Tight");
    +    safeFill<bool, int, xAOD::Photon>(photon, phTightAcc, m_IsTight, -1);
    +
    +  }
    +
    +  if (m_infoSwitch.m_purity) {
    +    static SG::AuxElement::Accessor<float> radhad1  ("Rhad1"  );
    +    static SG::AuxElement::Accessor<float> radhad   ("Rhad"   );
    +    static SG::AuxElement::Accessor<float> e277     ("e277"   );
    +    static SG::AuxElement::Accessor<float> reta     ("Reta"   );
    +    static SG::AuxElement::Accessor<float> rphi     ("Rphi"   );
    +    static SG::AuxElement::Accessor<float> weta2    ("weta2"  );
    +    static SG::AuxElement::Accessor<float> f1       ("f1"     );
    +    static SG::AuxElement::Accessor<float> wtot     ("wtots1" );
    +    //static SG::AuxElement::Accessor<float> w1       ("w1"     );
    +    static SG::AuxElement::Accessor<float> deltae   ("DeltaE" );
    +    static SG::AuxElement::Accessor<float> eratio   ("Eratio" );
    +
    +    m_radhad1  -> push_back( radhad1(*photon) );
    +    m_radhad   -> push_back( radhad (*photon) );
    +    m_e277     -> push_back( e277   (*photon) );
    +    m_reta     -> push_back( reta   (*photon) );
    +    m_rphi     -> push_back( rphi   (*photon) );
    +    m_weta2    -> push_back( weta2  (*photon) );
    +    m_f1       -> push_back( f1     (*photon) );
    +    m_wtot     -> push_back( wtot   (*photon) );
    +    m_deltae   -> push_back( deltae (*photon) );
    +    m_eratio   -> push_back( eratio (*photon) );
    +  }
    +
    +  if (m_infoSwitch.m_effSF && m_mc) {
    +    static SG::AuxElement::Accessor<float> PhotonID_Tight_EffSF  ("PhotonID_Tight_EffSF"  );
    +    static SG::AuxElement::Accessor<float> PhotonID_Medium_EffSF ("PhotonID_Medium_EffSF" );
    +    static SG::AuxElement::Accessor<float> PhotonID_Loose_EffSF  ("PhotonID_Loose_EffSF"  );
    +
    +    static SG::AuxElement::Accessor<float> PhotonID_Tight_EffSF_Error  ("PhotonID_Tight_EffSF_Error" );
    +    static SG::AuxElement::Accessor<float> PhotonID_Medium_EffSF_Error ("PhotonID_Medium_EffSF_Error" );
    +    static SG::AuxElement::Accessor<float> PhotonID_Loose_EffSF_Error  ("PhotonID_Loose_EffSF_Error" );
    +
    +
    +    m_TightEffSF  ->push_back( PhotonID_Tight_EffSF (*photon) );
    +    m_MediumEffSF ->push_back( PhotonID_Medium_EffSF(*photon) );
    +    m_LooseEffSF  ->push_back( PhotonID_Loose_EffSF (*photon) );
    +
    +    m_TightEffSF_Error  ->push_back( PhotonID_Tight_EffSF_Error (*photon) );
    +    m_MediumEffSF_Error ->push_back( PhotonID_Medium_EffSF_Error(*photon) );
    +    m_LooseEffSF_Error  ->push_back( PhotonID_Loose_EffSF_Error (*photon) );
    +  }
    +
    +  if (m_infoSwitch.m_trigger) {
    +    static SG::AuxElement::Accessor< std::vector< std::string> > trigMatched("trigMatched");
    +
    +    m_trigMatched ->push_back( trigMatched(*photon) );
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_PhotonHists.cxx.html b/api/program_listing_file_Root_PhotonHists.cxx.html new file mode 100644 index 0000000000..93d6f6d69f --- /dev/null +++ b/api/program_listing_file_Root_PhotonHists.cxx.html @@ -0,0 +1,279 @@ + + + + + + + + + + + Program Listing for File PhotonHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonHists.cxx

    +

    Return to documentation for file (Root/PhotonHists.cxx)

    +
    #include <xAODAnaHelpers/PhotonHists.h>
    +#include <sstream>
    +
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +ANA_MSG_SOURCE(msgPhotonHists, "PhotonHists")
    +
    +PhotonHists :: PhotonHists (std::string name, std::string detailStr) :
    +  IParticleHists(name, detailStr, "photon", "photon"),
    +  m_infoSwitch(new HelperClasses::PhotonInfoSwitch(m_detailStr))
    +{ }
    +
    +PhotonHists :: ~PhotonHists () {
    +  if(m_infoSwitch) delete m_infoSwitch;
    +}
    +
    +StatusCode PhotonHists::initialize() {
    +  using namespace msgPhotonHists;
    +  ANA_CHECK( IParticleHists::initialize());
    +
    +  // isolation
    +  if( m_infoSwitch->m_isolation ) {
    +    if(m_debug) Info("PhotonHists::initialize()", "adding isolation plots");
    +    m_ptcone20    = book(m_name, "ptcone20" ,     "ptcone20",      120, -10, 100);
    +    m_ptcone30    = book(m_name, "ptcone30" ,     "ptcone30",      120, -10, 100);
    +    m_ptcone40    = book(m_name, "ptcone40" ,     "ptcone40",      120, -10, 100);
    +    m_ptvarcone20 = book(m_name, "ptvarcone20" ,  "ptvarcone20",   120, -10, 100);
    +    m_ptvarcone30 = book(m_name, "ptvarcone30" ,  "ptvarcone30",   120, -10, 100);
    +    m_ptvarcone40 = book(m_name, "ptvarcone40" ,  "ptvarcone40",   120, -10, 100);
    +    m_topoetcone20= book(m_name, "topoetcone20" , "topoetcone20",  120, -10, 100);
    +    m_topoetcone30= book(m_name, "topoetcone30" , "topoetcone30",  120, -10, 100);
    +    m_topoetcone40= book(m_name, "topoetcone40" , "topoetcone40",  120, -10, 100);
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode PhotonHists::execute( const xAOD::Photon* photon, float eventWeight, const xAOD::EventInfo* eventInfo ) {
    +  return execute(static_cast<const xAOD::IParticle*>(photon), eventWeight, eventInfo);
    +}
    +
    +StatusCode PhotonHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) {
    +  using namespace msgPhotonHists;
    +  ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo));
    +
    +  if(m_debug) std::cout << "PhotonHists: in execute " <<std::endl;
    +
    +  const xAOD::Photon* photon=dynamic_cast<const xAOD::Photon*>(particle);
    +  if(photon==0)
    +    {
    +      ANA_MSG_ERROR( "Cannot convert IParticle to Photon" );
    +      return StatusCode::FAILURE;
    +    }
    +
    +  // isolation
    +  if ( m_infoSwitch->m_isolation ) {
    +    m_ptcone20    ->Fill( photon->isolation( xAOD::Iso::ptcone20    ) / 1e3, eventWeight );
    +    m_ptcone30    ->Fill( photon->isolation( xAOD::Iso::ptcone30    ) / 1e3, eventWeight );
    +    m_ptcone40    ->Fill( photon->isolation( xAOD::Iso::ptcone40    ) / 1e3, eventWeight );
    +    m_ptvarcone20 ->Fill( photon->isolation( xAOD::Iso::ptvarcone20 ) / 1e3, eventWeight );
    +    m_ptvarcone30 ->Fill( photon->isolation( xAOD::Iso::ptvarcone30 ) / 1e3, eventWeight );
    +    m_ptvarcone40 ->Fill( photon->isolation( xAOD::Iso::ptvarcone40 ) / 1e3, eventWeight );
    +    m_topoetcone20->Fill( photon->isolation( xAOD::Iso::topoetcone20) / 1e3, eventWeight );
    +    m_topoetcone30->Fill( photon->isolation( xAOD::Iso::topoetcone30) / 1e3, eventWeight );
    +    m_topoetcone40->Fill( photon->isolation( xAOD::Iso::topoetcone40) / 1e3, eventWeight );
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_PhotonHistsAlgo.cxx.html b/api/program_listing_file_Root_PhotonHistsAlgo.cxx.html new file mode 100644 index 0000000000..03c0ef856c --- /dev/null +++ b/api/program_listing_file_Root_PhotonHistsAlgo.cxx.html @@ -0,0 +1,243 @@ + + + + + + + + + + + Program Listing for File PhotonHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonHistsAlgo.cxx

    +

    Return to documentation for file (Root/PhotonHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <xAODEgamma/PhotonContainer.h>
    +
    +#include <xAODAnaHelpers/PhotonHistsAlgo.h>
    +#include <xAODAnaHelpers/PhotonHists.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(PhotonHistsAlgo)
    +
    +PhotonHistsAlgo :: PhotonHistsAlgo () :
    +IParticleHistsAlgo("PhotonHistsAlgo")
    +{ }
    +
    +EL::StatusCode PhotonHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("PhotonHistsAlgo").ignore();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonHistsAlgo::AddHists( std::string name ) {
    +  return IParticleHistsAlgo::AddHists<PhotonHists>(name);
    +}
    +
    +EL::StatusCode PhotonHistsAlgo :: execute () {
    +  return IParticleHistsAlgo::execute<PhotonHists, xAOD::PhotonContainer>();
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_PhotonSelector.cxx.html b/api/program_listing_file_Root_PhotonSelector.cxx.html new file mode 100644 index 0000000000..ac7ff9e173 --- /dev/null +++ b/api/program_listing_file_Root_PhotonSelector.cxx.html @@ -0,0 +1,825 @@ + + + + + + + + + + + Program Listing for File PhotonSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonSelector.cxx

    +

    Return to documentation for file (Root/PhotonSelector.cxx)

    +
    /********************************************
    + *
    + * Interface to CP Photon selection tool(s).
    + *
    + *******************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include <xAODEventInfo/EventInfo.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/PhotonSelector.h>
    +#include <xAODEgamma/EgammaDefs.h>
    +#include <xAODEgamma/EgammaxAODHelpers.h>
    +
    +
    +#include <IsolationSelection/IsolationSelectionTool.h>
    +
    +// ROOT include(s):
    +#include <TFile.h>
    +#include <TObjArray.h>
    +#include <TObjString.h>
    +
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(PhotonSelector)
    +
    +PhotonSelector :: PhotonSelector () :
    +    Algorithm("PhotonSelector")
    +{
    +}
    +
    +PhotonSelector::~PhotonSelector() {}
    +
    +EL::StatusCode PhotonSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "PhotonSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_INFO( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode PhotonSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing PhotonSelector Interface... ");
    +
    +  // Let's see if the algorithm has been already used before:
    +  // if yes, will write object cutflow in a different histogram!
    +  //
    +  // This is the case when the selector algorithm is used for
    +  // preselecting objects, and then again for the final selection
    +  //
    +  ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className );
    +
    +  if ( m_useCutFlow ) {
    +
    +    // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_ph_cutflowHist_1 = (TH1D*)file->Get("cutflow_photons_1");
    +
    +    m_ph_cutflow_all             = m_ph_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_ph_cutflow_author_cut      = m_ph_cutflowHist_1->GetXaxis()->FindBin("author_cut");
    +    m_ph_cutflow_OQ_cut          = m_ph_cutflowHist_1->GetXaxis()->FindBin("OQ_cut");
    +    m_ph_cutflow_PID_cut         = m_ph_cutflowHist_1->GetXaxis()->FindBin("PID_cut");
    +    m_ph_cutflow_ptmax_cut       = m_ph_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut");
    +    m_ph_cutflow_ptmin_cut       = m_ph_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut");
    +    m_ph_cutflow_eta_cut         = m_ph_cutflowHist_1->GetXaxis()->FindBin("eta_cut"); // including crack veto, if applied
    +    m_ph_cutflow_iso_cut         = m_ph_cutflowHist_1->GetXaxis()->FindBin("iso_cut");
    +
    +
    +  }
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +
    +  // Parse input isolation WP list, split by comma, and put into a vector for later use
    +  // Make sure it's not empty!
    +  //
    +  std::string token;
    +  std::istringstream ss(m_IsoWPList);
    +  while ( std::getline(ss, token, ',') ) {
    +    m_IsoKeys.push_back(token);
    +  }
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +  // *************************************
    +  //
    +  // Initialise CP::IsolationSelectionTool
    +  //
    +  // *************************************
    +  const std::string isoToolName = m_name+"_PhotonIso";
    +  if ( asg::ToolStore::contains<CP::IsolationSelectionTool>(isoToolName.c_str()) ) {
    +    m_IsolationSelectionTool = asg::ToolStore::get<CP::IsolationSelectionTool>(isoToolName.c_str());
    +  } else {
    +    m_IsolationSelectionTool = new CP::IsolationSelectionTool(isoToolName.c_str());
    +  }
    +  ANA_MSG_DEBUG( "Adding isolation WP " << m_IsoKeys.at(0) << " to IsolationSelectionTool" );
    +  ANA_CHECK( m_IsolationSelectionTool->setProperty("PhotonWP", (m_IsoKeys.at(0)).c_str()));
    +  ANA_CHECK( m_IsolationSelectionTool->initialize());
    +
    +  for ( auto WP_itr = std::next(m_IsoKeys.begin()); WP_itr != m_IsoKeys.end(); ++WP_itr ) {
    +    ANA_MSG_DEBUG( "Adding extra isolation WP " << *WP_itr << " to IsolationSelectionTool" );
    +    ANA_CHECK( m_IsolationSelectionTool->addPhotonWP( (*WP_itr).c_str() ));
    +  }
    +
    +  // **********************************************************************************************
    +
    +  ANA_MSG_INFO( "PhotonSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode PhotonSelector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Photon Selection... ");
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  //
    +  float mcEvtWeight(1.0);
    +  static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +  if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +    ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +    return EL::StatusCode::FAILURE;
    +  }
    +  mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +
    +  m_numEvent++;
    +
    +  bool eventPass(false);
    +  bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal
    +  const xAOD::PhotonContainer* inPhotons(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_inputAlgoSystNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // create output container (if requested)
    +    ConstDataVector<xAOD::PhotonContainer>* selectedPhotons(nullptr);
    +    if ( m_createSelectedContainer ) { selectedPhotons = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS); }
    +
    +    // find the selected photons, and return if event passes object selection
    +    //
    +    eventPass = executeSelection(inPhotons, mcEvtWeight, countPass, selectedPhotons );
    +
    +    if ( m_createSelectedContainer) {
    +      if ( eventPass ) {
    +        // add ConstDataVector to TStore
    +    //
    +        ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName ));
    +      } else {
    +        // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it!
    +        delete selectedPhotons; selectedPhotons = nullptr;
    +      }
    +    }
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) );
    +
    +    // prepare a vector of the names of CDV containers for usage by downstream algos
    +    // must be a pointer to be recorded in TStore
    +    //
    +    auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +    ANA_MSG_DEBUG( " input list of syst size: " << static_cast<int>(systNames->size()) );
    +
    +    // loop over systematic sets
    +    //
    +    bool eventPassThisSyst(false);
    +    for ( auto systName : *systNames) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name: " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_inContainerName + systName, m_event, m_store, msg()));
    +
    +      // create output container (if requested) - one for each systematic
    +      //
    +      ConstDataVector<xAOD::PhotonContainer>* selectedPhotons(nullptr);
    +      if ( m_createSelectedContainer ) { selectedPhotons = new ConstDataVector<xAOD::PhotonContainer>(SG::VIEW_ELEMENTS); }
    +
    +      // find the selected photons, and return if event passes object selection
    +      //
    +      eventPassThisSyst = executeSelection( inPhotons, mcEvtWeight, countPass, selectedPhotons );
    +
    +      if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal)
    +
    +      if ( eventPassThisSyst ) {
    +    // save the string of syst set under question if event is passing the selection
    +    //
    +    vecOutContainerNames->push_back( systName );
    +      }
    +
    +      // if for at least one syst set the event passes selection, this will remain true!
    +      //
    +      eventPass = ( eventPass || eventPassThisSyst );
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  output container name: " << m_outContainerName+systName );
    +
    +      if ( m_createSelectedContainer ) {
    +        if ( eventPassThisSyst ) {
    +          // add ConstDataVector to TStore
    +      //
    +          ANA_CHECK( m_store->record( selectedPhotons, m_outContainerName+systName ));
    +        } else {
    +          // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it!
    +      //
    +          delete selectedPhotons; selectedPhotons = nullptr;
    +        }
    +      }
    +    }
    +
    +    ANA_MSG_DEBUG(" output list of syst size: " << static_cast<int>(vecOutContainerNames->size()) );
    +
    +    // record in TStore the list of systematics names that should be considered down stream
    +    //
    +    ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +  }
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if( !eventPass ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +bool PhotonSelector :: executeSelection ( const xAOD::PhotonContainer* inPhotons,
    +                      float mcEvtWeight, bool countPass,
    +                      ConstDataVector<xAOD::PhotonContainer>* selectedPhotons )
    +{
    +  int nPass(0); int nObj(0);
    +  static SG::AuxElement::Decorator< char > passSelDecor( "passSel" );
    +
    +  for ( auto ph_itr : *inPhotons ) { // duplicated of basic loop
    +
    +    // if only looking at a subset of photons make sure all are decorated
    +    //
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *ph_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +
    +    bool passSel = this->passCuts( ph_itr );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *ph_itr ) = passSel;
    +    }
    +
    +    if ( passSel ) {
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedPhotons->push_back( ph_itr );
    +      }
    +    }
    +  }
    +
    +  // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  //
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    return false;
    +  }
    +
    +  // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ){
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +  return true;
    +}
    +
    +bool PhotonSelector :: passCuts( const xAOD::Photon* photon )
    +{
    +  float et    = photon->pt();
    +
    +  // all the eta cuts are done using the measurement of the cluster position with the 2nd layer cluster,
    +  // as for Egamma CP  recommendation
    +  //
    +  float eta   = ( photon->caloCluster() ) ? photon->caloCluster()->etaBE(2) : -999.0;
    +
    +  // photon ID key name set
    +  std::string photonIDKeyName = "PhotonID_"+m_photonIdCut;
    +  if (  (!(photon->isAvailable< bool >( photonIDKeyName ) )) and (m_photonIdCut != "None") ) {
    +    ANA_MSG_ERROR("Please call PhotonCalibrator before calling PhotonSelector, or check the quality requirement (should be either of Tight/Medium/Loose) [" << m_name << " " << photonIDKeyName << "]");
    +  }
    +
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_all, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // author cut
    +  //
    +  if( m_doAuthorCut ) {
    +    if( ! ( (photon->author() & xAOD::EgammaParameters::AuthorPhoton) || (photon->author() & xAOD::EgammaParameters::AuthorAmbiguous) ) ) {
    +      ANA_MSG_DEBUG( "Photon failed author kinematic cut." );
    +      return false;
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_author_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // Object Quality cut
    +  //
    +  if ( m_doOQCut ) {
    +    if (m_readOQFromDerivation){
    +      if (!(*photon).isGoodOQ(xAOD::EgammaParameters::BADCLUSPHOTON))
    +    return 0;
    +    }else{
    +      uint32_t oq= photon->auxdata<uint32_t>("OQ");
    +      float reta = photon->showerShapeValue(xAOD::EgammaParameters::Reta);
    +      float f1   = photon->showerShapeValue(xAOD::EgammaParameters::f1);
    +      if ( (oq & 1073741824)!=0 ||
    +       ( (oq&134217728)!=0 && (reta >0.98 || f1 > 0.4 || (oq & 67108864) != 0) ) ) {
    +    ANA_MSG_DEBUG( "Electron failed Object Quality cut." );
    +    return 0;
    +      }
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_OQ_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // ID cut
    +  //
    +  if ( m_photonIdCut != "None" ) {
    +    // it crashes in case the "PhotonID_X" is not stored on purpose
    +    if ( ! photon->auxdecor< bool >( photonIDKeyName ) ) {
    +      ANA_MSG_DEBUG( "Photon failed ID cut." );
    +      return false;
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_PID_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT max cut
    +  //
    +  if ( m_pT_max != 1e8 ) {
    +    if ( et > m_pT_max ) {
    +      ANA_MSG_DEBUG( "Photon failed pT max cut." );
    +      return false;
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_ptmax_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // pT min cut
    +  //
    +  if ( m_pT_min != 1e8 ) {
    +    if ( et < m_pT_min ) {
    +      ANA_MSG_DEBUG( "Photon failed pT min cut." );
    +      return false;
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_ptmin_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // eta cuts
    +  //
    +
    +  // |eta| max cut
    +  //
    +  if ( m_eta_max != 1e8 ) {
    +    if ( fabs(eta) > m_eta_max ) {
    +      ANA_MSG_DEBUG( "Photon failed |eta| max cut." );
    +      return false;
    +    }
    +  }
    +  // |eta| crack veto
    +  //
    +  if ( m_vetoCrack ) {
    +    if ( fabs( eta ) > 1.37 && fabs( eta ) < 1.52 ) {
    +      ANA_MSG_DEBUG( "Photon failed |eta| crack veto cut." );
    +      return false;
    +    }
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_eta_cut, 1 );
    +
    +  // *********************************************************************************************************************************************************************
    +  //
    +  // isolation cut
    +  //
    +
    +  // Get the "list" of input WPs with the accept() decision from the tool
    +  //
    +  auto accept_list = m_IsolationSelectionTool->accept( *photon );
    +
    +
    +  // Decorate w/ decision for all input WPs
    +  //
    +  const std::string base_decor("isIsolated");
    +  for ( auto WP_itr : m_IsoKeys ) {
    +
    +    std::string decorWP = base_decor + "_" + WP_itr;
    +
    +    ANA_MSG_DEBUG( "Decorate photon with " << decorWP << " - accept() ? " << accept_list.getCutResult( WP_itr.c_str()) );
    +    photon->auxdecor<char>(decorWP) = static_cast<bool>( accept_list.getCutResult( WP_itr.c_str() ) );
    +
    +  }
    +
    +  // Apply the cut if needed
    +  //
    +  if ( !m_MinIsoWPCut.empty() && !accept_list.getCutResult( m_MinIsoWPCut.c_str() ) ) {
    +    ANA_MSG_DEBUG( "Photon failed isolation cut " << m_MinIsoWPCut );
    +    return false;
    +  }
    +  if(m_useCutFlow) m_ph_cutflowHist_1->Fill( m_ph_cutflow_iso_cut, 1 );
    +
    +  return true;
    +}
    +
    +
    +EL::StatusCode PhotonSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_INFO( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  ANA_MSG_DEBUG("Cutflow filled");
    +
    +  if (m_IsolationSelectionTool) {
    +    delete m_IsolationSelectionTool;
    +    m_IsolationSelectionTool = nullptr;
    +  }
    +
    +  ANA_MSG_DEBUG("Isolation Tool deleted");
    +
    +/*
    +  if (m_match_Tool) {
    +    delete m_match_Tool;
    +    m_match_Tool = nullptr;
    +  }
    +*/
    +
    +  ANA_MSG_DEBUG("Matching Tool deleted");
    +
    +  ANA_MSG_INFO( "Finalization done.");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode PhotonSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TauCalibrator.cxx.html b/api/program_listing_file_Root_TauCalibrator.cxx.html new file mode 100644 index 0000000000..41d58fd696 --- /dev/null +++ b/api/program_listing_file_Root_TauCalibrator.cxx.html @@ -0,0 +1,556 @@ + + + + + + + + + + + Program Listing for File TauCalibrator.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauCalibrator.cxx

    +

    Return to documentation for file (Root/TauCalibrator.cxx)

    +
    /********************************************
    + *
    + * Interface to CP Tau calibration tool.
    + *
    + * F. Scutti (federico.scutti@cern.ch)
    + ********************************************/
    +
    +
    +// c++ include(s):
    +#include <iostream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODTau/TauJet.h"
    +#include "xAODTau/TauxAODHelpers.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/TauCalibrator.h"
    +#include "PATInterfaces/CorrectionCode.h" // to check the return correction code status of tools
    +
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TauCalibrator)
    +
    +TauCalibrator :: TauCalibrator () :
    +    Algorithm("TauCalibrator")
    +{
    +}
    +
    +EL::StatusCode TauCalibrator :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TauCalibrator" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing TauCalibrator Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +  // shallow copies are made with this output container name
    +  m_outSCContainerName      = m_outContainerName + "ShallowCopy";
    +  m_outSCAuxContainerName   = m_outSCContainerName + "Aux."; // the period is very important!
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +  // ************************************************
    +  //
    +  // initialize the TauAnalysisTools::TauSmearingTool
    +  //
    +  // ************************************************
    +
    +  // Options summarised here: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TauRecommendationsR22
    +  if (!m_RecommendationTag.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("RecommendationTag",m_RecommendationTag));
    +  if (!m_generator.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("Generator",m_generator));
    +  if (!m_campaign.empty()) ANA_CHECK(m_tauSmearingTool_handle.setProperty("Campaign",m_campaign));
    +  ANA_CHECK(m_tauSmearingTool_handle.setProperty("MVATESQualityCheck",m_applyMVATESQualityCheck));
    +  ANA_CHECK(m_tauSmearingTool_handle.setProperty("SkipTruthMatchCheck",m_skipTruthMatchCheck));
    +  if ( isFastSim() ){
    +    ANA_MSG_INFO( "Setting simulation flavour to Fast Sim");
    +    ANA_CHECK(m_tauSmearingTool_handle.setProperty("useFastSim", 1));
    +  } else {
    +    ANA_CHECK(m_tauSmearingTool_handle.setProperty("useFastSim", 0));
    +  }
    +  ANA_CHECK(m_tauSmearingTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_tauSmearingTool_handle);
    +
    +  // Get a list of recommended systematics for this tool
    +  //
    +  const CP::SystematicSet& recSyst = m_tauSmearingTool_handle->recommendedSystematics();
    +
    +  ANA_MSG_INFO(" Initializing Tau Calibrator Systematics :");
    +  //
    +  // Make a list of systematics to be used, based on configuration input
    +  // Use HelperFunctions::getListofSystematics() for this!
    +  //
    +  m_systList = HelperFunctions::getListofSystematics( recSyst, m_systName, m_systVal, msg() );
    +
    +  ANA_MSG_INFO("Will be using TauSmearingTool systematic:");
    +  auto SystTausNames = std::make_unique< std::vector< std::string > >();
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( m_systName.empty() ) {
    +      ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +      break;
    +    }
    +    SystTausNames->push_back(syst_it.name());
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +  ANA_CHECK(m_store->record(std::move(SystTausNames), "taus_Syst"+m_name ));
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_name, fileMD);
    +  }
    +
    +  ANA_MSG_INFO( "TauCalibrator Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Tau Calibration And Smearing ... ");
    +
    +  m_numEvent++;
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +
    +  // get the collections from TEvent or TStore
    +  //
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +  const xAOD::TauJetContainer* inTaus(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) );
    +
    +  // loop over available systematics - remember syst == EMPTY_STRING --> baseline
    +  // prepare a vector of the names of CDV containers
    +  // must be a pointer to be recorded in TStore
    +  //
    +  auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +
    +    std::string outSCContainerName(m_outSCContainerName);
    +    std::string outSCAuxContainerName(m_outSCAuxContainerName);
    +    std::string outContainerName(m_outContainerName);
    +
    +    // always append the name of the variation, including nominal which is an empty string
    +    //
    +    outSCContainerName    += syst_it.name();
    +    outSCAuxContainerName += syst_it.name();
    +    outContainerName      += syst_it.name();
    +    vecOutContainerNames->push_back( syst_it.name() );
    +
    +    // apply syst
    +    //
    +    if ( m_tauSmearingTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR( "Failed to configure TauSmearingTool for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    // create shallow copy for calibration - one per syst
    +    //
    +    std::pair< xAOD::TauJetContainer*, xAOD::ShallowAuxContainer* > calibTausSC = xAOD::shallowCopyContainer( *inTaus );
    +    // create ConstDataVector to be eventually stored in TStore
    +    //
    +    ConstDataVector<xAOD::TauJetContainer>* calibTausCDV = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS);
    +    calibTausCDV->reserve( calibTausSC.first->size() );
    +
    +    // now calibrate!
    +    //
    +    unsigned int idx(0);
    +    if ( isMC() ) {
    +
    +      for ( auto tauSC_itr : *(calibTausSC.first) ) {
    +
    +    ANA_MSG_DEBUG( "  uncailbrated tau " << idx << ", pt = " << tauSC_itr->pt()*1e-3 << " GeV");
    +    if(xAOD::TauHelpers::getTruthParticle(tauSC_itr)){
    +      if ( m_tauSmearingTool_handle->applyCorrection(*tauSC_itr) == CP::CorrectionCode::Error ) {  // Can have CorrectionCode values of Ok, OutOfValidityRange, or Error. Here only checking for Error.
    +        ANA_MSG_WARNING( "TauSmearingTool returned Error CorrectionCode");        // If OutOfValidityRange is returned no modification is made and the original tau values are taken.
    +      }
    +    }
    +
    +        ANA_MSG_DEBUG( "  corrected tau pt = " << tauSC_itr->pt()*1e-3 << " GeV");
    +
    +    ++idx;
    +
    +      } // close calibration loop
    +    }
    +
    +    ANA_MSG_DEBUG( "setOriginalObjectLink");
    +    if ( !xAOD::setOriginalObjectLink(*inTaus, *(calibTausSC.first)) ) {
    +      ANA_MSG_ERROR( "Failed to set original object links -- MET rebuilding cannot proceed.");
    +    }
    +
    +    // save pointers in ConstDataVector with same order
    +    //
    +    ANA_MSG_DEBUG( "makeSubsetCont");
    +    ANA_CHECK( HelperFunctions::makeSubsetCont(calibTausSC.first, calibTausCDV, msg()));
    +    ANA_MSG_DEBUG( "done makeSubsetCont");
    +
    +    // sort after coping to CDV
    +    if ( m_sort ) {
    +      ANA_MSG_DEBUG( "sorting");
    +      std::sort( calibTausCDV->begin(), calibTausCDV->end(), HelperFunctions::sort_pt );
    +    }
    +
    +    // add SC container to TStore
    +    //
    +    ANA_MSG_DEBUG( "recording calibTausSC");
    +    ANA_CHECK( m_store->record( calibTausSC.first,  outSCContainerName  ));
    +    ANA_CHECK( m_store->record( calibTausSC.second, outSCAuxContainerName ));
    +
    +    //
    +    // add ConstDataVector to TStore
    +    //
    +    ANA_MSG_DEBUG( "record calibTausCDV");
    +    ANA_CHECK( m_store->record( calibTausCDV, outContainerName));
    +
    +  } // close loop on systematics
    +
    +  // add vector<string container_names_syst> to TStore
    +  //
    +  ANA_MSG_DEBUG( "record m_outputAlgoSystNames");
    +  ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  ANA_MSG_DEBUG( "Left ");
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode TauCalibrator :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauCalibrator :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TauCalibrator :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TauContainer.cxx.html b/api/program_listing_file_Root_TauContainer.cxx.html new file mode 100644 index 0000000000..310ee3ec11 --- /dev/null +++ b/api/program_listing_file_Root_TauContainer.cxx.html @@ -0,0 +1,819 @@ + + + + + + + + + + + Program Listing for File TauContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauContainer.cxx

    +

    Return to documentation for file (Root/TauContainer.cxx)

    +
    #include "xAODAnaHelpers/TauContainer.h"
    +
    +#include <iostream>
    +
    +using namespace xAH;
    +using std::vector;
    +using std::string;
    +
    +TauContainer::TauContainer(const std::string& name, const std::string& detailStr, float units, bool mc, bool storeSystSFs)
    +  : ParticleContainer(name, detailStr, units, mc, true, storeSystSFs)
    +{
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched          = new     vector<int>               ();
    +    m_isTrigMatchedToChain   = new     vector<vector<int> >      ();
    +    m_listTrigChains         = new     vector<std::string>       ();
    +  }
    +
    +  if( m_infoSwitch.m_kinematic) {
    +    m_ntrk    = new  std::vector<int>   ();
    +    m_charge  = new  std::vector<float> ();
    +  }
    +
    +  // might need to delete these
    +  if( m_infoSwitch.m_JetID) {
    +    m_isJetRNNSigVeryLoose = new  std::vector<int>   ();
    +    m_isJetRNNSigLoose     = new  std::vector<int>   ();
    +    m_isJetRNNSigMedium    = new  std::vector<int>   ();
    +    m_isJetRNNSigTight     = new  std::vector<int>   ();
    +
    +    m_JetRNNScore          = new  std::vector<float>   ();
    +    m_JetRNNScoreSigTrans  = new  std::vector<float>   ();
    +  }
    +
    +  if( m_infoSwitch.m_EleVeto) {
    +    m_isEleRNNLoose  = new  std::vector<int>   ();
    +    m_isEleRNNMedium = new  std::vector<int>   ();
    +    m_isEleRNNTight  = new  std::vector<int>   ();
    +
    +    m_EleRNNScore    = new  std::vector<float> ();
    +    m_passEleOLR     = new  std::vector<int>   ();
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    m_tau_matchedJetWidth = new  std::vector<float>   ();
    +    m_tau_matchedJetJvt   = new  std::vector<float>   ();
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    m_tau_tracks_pt       = new  std::vector< std::vector<float> > ();
    +    m_tau_tracks_eta      = new  std::vector< std::vector<float> > ();
    +    m_tau_tracks_phi      = new  std::vector< std::vector<float> > ();
    +
    +    m_tau_tracks_isCore          = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_isWide          = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_failTrackFilter = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_passTrkSel      = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_isClCharged     = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_isClIso         = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_isClConv        = new  std::vector< std::vector<int> > ();
    +    m_tau_tracks_isClFake        = new  std::vector< std::vector<int> > ();
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    m_TauEff_SF = new std::map< std::string, std::vector< std::vector< float > > >();
    +    m_TauTrigEff_SF = new std::map< std::string, std::vector< std::vector< float > > >();
    +
    +  }
    +
    +}
    +
    +TauContainer::~TauContainer()
    +{
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    delete m_isTrigMatched         ;
    +    delete m_isTrigMatchedToChain  ;
    +    delete m_listTrigChains        ;
    +  }
    +
    +  if (m_infoSwitch.m_kinematic){
    +    delete m_ntrk;
    +    delete m_charge;
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    delete m_TauEff_SF;
    +    delete m_TauTrigEff_SF;
    +
    +  }
    +
    +  // might need to delete these
    +  if( m_infoSwitch.m_JetID) {
    +    delete m_isJetRNNSigVeryLoose;
    +    delete m_isJetRNNSigLoose;
    +    delete m_isJetRNNSigMedium;
    +    delete m_isJetRNNSigTight;
    +
    +    delete m_JetRNNScore;
    +    delete m_JetRNNScoreSigTrans;
    +  }
    +
    +  if( m_infoSwitch.m_EleVeto) {
    +    delete m_isEleRNNLoose;
    +    delete m_isEleRNNMedium;
    +    delete m_isEleRNNTight;
    +
    +    delete m_EleRNNScore;
    +
    +    delete m_passEleOLR;
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    delete m_tau_matchedJetWidth;
    +    delete m_tau_matchedJetJvt;
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    delete m_tau_tracks_pt;
    +    delete m_tau_tracks_eta;
    +    delete m_tau_tracks_phi;
    +
    +    delete m_tau_tracks_isCore;
    +    delete m_tau_tracks_isWide;
    +    delete m_tau_tracks_failTrackFilter;
    +    delete m_tau_tracks_passTrkSel;
    +    delete m_tau_tracks_isClCharged;
    +    delete m_tau_tracks_isClIso;
    +    delete m_tau_tracks_isClConv;
    +    delete m_tau_tracks_isClFake;
    +  }
    +
    +}
    +
    +void TauContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    connectBranch<int>         (tree, "isTrigMatched",        &m_isTrigMatched);
    +    connectBranch<vector<int> >(tree, "isTrigMatchedToChain", &m_isTrigMatchedToChain );
    +    connectBranch<string>      (tree, "listTrigChains",       &m_listTrigChains );
    +  }
    +
    +  if ( m_infoSwitch.m_kinematic ){
    +    connectBranch<int>    (tree, "ntrk",       &m_ntrk);
    +    connectBranch<float>  (tree, "charge",     &m_charge );
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& taueff : m_infoSwitch.m_tauEffWPs) {
    +      tree->SetBranchStatus ( (m_name + "_TauEff_SF_" + taueff).c_str() , 1);
    +      tree->SetBranchAddress( (m_name + "_TauEff_SF_" + taueff).c_str() , & (*m_TauEff_SF)[ taueff ] );
    +
    +    }
    +
    +    for (auto& trig : m_infoSwitch.m_trigWPs) {
    +      tree->SetBranchStatus ( (m_name + "_TauTrigEff_SF_" + trig).c_str() , 1 );
    +      tree->SetBranchAddress( (m_name + "_TauTrigEff_SF_" + trig).c_str() , & (*m_TauTrigEff_SF)[ trig ] );
    +
    +    }
    +  }
    +
    +  // might need to delete these
    +  if ( m_infoSwitch.m_JetID ){
    +    connectBranch<int>    (tree, "isJetRNNSigVeryLoose",   &m_isJetRNNSigVeryLoose);
    +    connectBranch<int>    (tree, "isJetRNNSigLoose",       &m_isJetRNNSigLoose);
    +    connectBranch<int>    (tree, "isJetRNNSigMedium",      &m_isJetRNNSigMedium);
    +    connectBranch<int>    (tree, "isJetRNNSigTight",       &m_isJetRNNSigTight);
    +
    +    connectBranch<float>  (tree, "JetRNNScore",         &m_JetRNNScore);
    +    connectBranch<float>  (tree, "JetRNNScoreSigTrans", &m_JetRNNScoreSigTrans);
    +  }
    +
    +  if ( m_infoSwitch.m_EleVeto ){
    +    connectBranch<int>    (tree, "isEleRNNLoose",    &m_isEleRNNLoose);
    +    connectBranch<int>    (tree, "isEleRNNMedium",   &m_isEleRNNMedium);
    +    connectBranch<int>    (tree, "isEleRNNTight",    &m_isEleRNNTight);
    +
    +    connectBranch<float>  (tree, "EleRNNScore",    &m_EleRNNScore);
    +    connectBranch<int>    (tree, "passEleOLR",     &m_passEleOLR);
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    connectBranch<float>  (tree, "matchedJetWidth",    &m_tau_matchedJetWidth);
    +    connectBranch<float>  (tree, "matchedJetJvt",    &m_tau_matchedJetJvt);
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    tree->SetBranchStatus ( (m_name + "_tracks_pt").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_pt").c_str() , &m_tau_tracks_pt );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_eta").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_eta").c_str() , &m_tau_tracks_eta );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_phi").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_phi").c_str() , &m_tau_tracks_phi );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isCore").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isCore").c_str() , &m_tau_tracks_isCore );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isWide").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isWide").c_str() , &m_tau_tracks_isWide );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_failTrackFilter").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_failTrackFilter").c_str() , &m_tau_tracks_failTrackFilter );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_passTrkSel").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_passTrkSel").c_str() , &m_tau_tracks_passTrkSel );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isClCharged").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isClCharged").c_str() , &m_tau_tracks_isClCharged );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isClIso").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isClIso").c_str() , &m_tau_tracks_isClIso );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isClConv").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isClConv").c_str() , &m_tau_tracks_isClConv );
    +
    +    tree->SetBranchStatus ( (m_name + "_tracks_isClFake").c_str() , 1 );
    +    tree->SetBranchAddress( (m_name + "_tracks_isClFake").c_str() , &m_tau_tracks_isClFake );
    +  }
    +
    +}
    +
    +void TauContainer::updateParticle(uint idx, Tau& tau)
    +{
    +  ParticleContainer::updateParticle(idx,tau);
    +
    +  // trigger
    +  if ( m_infoSwitch.m_trigger ) {
    +    tau.isTrigMatched         =     m_isTrigMatched         ->at(idx);
    +    tau.isTrigMatchedToChain  =     m_isTrigMatchedToChain  ->at(idx);
    +    tau.listTrigChains        =     m_listTrigChains        ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    tau.ntrk    =     m_ntrk    ->at(idx);
    +    tau.charge  =     m_charge  ->at(idx);
    +  }
    +
    +  // scale factors w/ sys
    +  // per object
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& taueff : m_infoSwitch.m_tauEffWPs) {
    +      tau.TauEff_SF[ taueff ] = (*m_TauEff_SF)[ taueff ].at(idx);
    +    }
    +
    +    for (auto& trig : m_infoSwitch.m_trigWPs) {
    +      tau.TauTrigEff_SF[ trig ] = (*m_TauTrigEff_SF)[ trig ].at(idx);
    +    }
    +  }
    +
    +  //  might need to delete these
    +  if ( m_infoSwitch.m_JetID ) {
    +    tau.isJetRNNSigVeryLoose   =   m_isJetRNNSigVeryLoose   ->at(idx);
    +    tau.isJetRNNSigLoose       =   m_isJetRNNSigLoose       ->at(idx);
    +    tau.isJetRNNSigMedium      =   m_isJetRNNSigMedium      ->at(idx);
    +    tau.isJetRNNSigTight       =   m_isJetRNNSigTight       ->at(idx);
    +
    +    tau.JetRNNScore         =   m_JetRNNScore         ->at(idx);
    +    tau.JetRNNScoreSigTrans =   m_JetRNNScoreSigTrans ->at(idx);
    +  }
    +
    +  if ( m_infoSwitch.m_EleVeto ) {
    +    tau.isEleRNNLoose   =  m_isEleRNNLoose   ->at(idx);
    +    tau.isEleRNNMedium  =  m_isEleRNNMedium  ->at(idx);
    +    tau.isEleRNNTight   =  m_isEleRNNTight   ->at(idx);
    +
    +    tau.EleRNNScore     =  m_EleRNNScore     ->at(idx);
    +
    +    tau.passEleOLR      =  m_passEleOLR      ->at(idx);
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    tau.matchedJetWidth  = m_tau_matchedJetWidth ->at(idx);
    +    tau.matchedJetJvt    = m_tau_matchedJetJvt ->at(idx);
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    tau.tracks_pt  = m_tau_tracks_pt  ->at(idx);
    +    tau.tracks_eta = m_tau_tracks_eta ->at(idx);
    +    tau.tracks_phi = m_tau_tracks_phi ->at(idx);
    +
    +    tau.tracks_isCore           = m_tau_tracks_isCore           ->at(idx);
    +    tau.tracks_isWide           = m_tau_tracks_isWide           ->at(idx);
    +    tau.tracks_failTrackFilter  = m_tau_tracks_failTrackFilter  ->at(idx);
    +    tau.tracks_passTrkSel       = m_tau_tracks_passTrkSel       ->at(idx);
    +    tau.tracks_isClCharged      = m_tau_tracks_isClCharged      ->at(idx);
    +    tau.tracks_isClIso          = m_tau_tracks_isClIso          ->at(idx);
    +    tau.tracks_isClConv         = m_tau_tracks_isClConv         ->at(idx);
    +    tau.tracks_isClFake         = m_tau_tracks_isClFake         ->at(idx);
    +  }
    +
    +}
    +
    +
    +void TauContainer::setBranches(TTree *tree)
    +{
    +
    +  ParticleContainer::setBranches(tree);
    +
    +  if ( m_infoSwitch.m_trigger ){
    +    // this is true if there's a match for at least one trigger chain
    +    setBranch<int>(tree,"isTrigMatched", m_isTrigMatched);
    +    // a vector of trigger match decision for each tau trigger chain
    +    setBranch<vector<int> >(tree,"isTrigMatchedToChain", m_isTrigMatchedToChain );
    +    // a vector of strings for each tau trigger chain - 1:1 correspondence w/ vector above
    +    setBranch<string>(tree, "listTrigChains", m_listTrigChains );
    +  }
    +
    +  if ( m_infoSwitch.m_kinematic ){
    +    setBranch<int>  (tree,"ntrk", m_ntrk);
    +    setBranch<float>(tree,"charge", m_charge );
    +
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& taueff : m_infoSwitch.m_tauEffWPs) {
    +      tree->Branch( (m_name + "_TauEff_SF_" + taueff).c_str() , & (*m_TauEff_SF)[ taueff ] );
    +    }
    +
    +    for (auto& trig : m_infoSwitch.m_trigWPs) {
    +      tree->Branch( (m_name + "_TauTrigEff_SF_" + trig).c_str() , & (*m_TauTrigEff_SF)[ trig ] );
    +    }
    +  }
    +
    +  // might need to delete these
    +  if ( m_infoSwitch.m_JetID ){
    +    setBranch<int>   (tree,"isJetRNNSigVeryLoose", m_isJetRNNSigVeryLoose);
    +    setBranch<int>   (tree,"isJetRNNSigLoose", m_isJetRNNSigLoose);
    +    setBranch<int>   (tree,"isJetRNNSigMedium", m_isJetRNNSigMedium);
    +    setBranch<int>   (tree,"isJetRNNSigTight", m_isJetRNNSigTight);
    +
    +    setBranch<float> (tree,"JetRNNScore", m_JetRNNScore);
    +    setBranch<float> (tree,"JetRNNScoreSigTrans", m_JetRNNScoreSigTrans);
    +
    +  }
    +
    +  if ( m_infoSwitch.m_EleVeto ){
    +    setBranch<int>   (tree,"isEleRNNLoose", m_isEleRNNLoose);
    +    setBranch<int>   (tree,"isEleRNNMedium", m_isEleRNNMedium);
    +    setBranch<int>   (tree,"isEleRNNTight", m_isEleRNNTight);
    +
    +    setBranch<float> (tree,"EleRNNScore", m_EleRNNScore);
    +
    +    setBranch<int>   (tree,"passEleOLR", m_passEleOLR);
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    setBranch<float>  (tree, "matchedJetWidth",    m_tau_matchedJetWidth);
    +    setBranch<float>  (tree, "matchedJetJvt",    m_tau_matchedJetJvt);
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    tree->Branch( (m_name + "_tracks_pt").c_str() , &m_tau_tracks_pt );
    +    tree->Branch( (m_name + "_tracks_eta").c_str() , &m_tau_tracks_eta );
    +    tree->Branch( (m_name + "_tracks_phi").c_str() , &m_tau_tracks_phi );
    +
    +    tree->Branch( (m_name + "_tracks_isCore").c_str() , &m_tau_tracks_isCore );
    +    tree->Branch( (m_name + "_tracks_isWide").c_str() , &m_tau_tracks_isWide );
    +    tree->Branch( (m_name + "_tracks_failTrackFilter").c_str() , &m_tau_tracks_failTrackFilter );
    +    tree->Branch( (m_name + "_tracks_passTrkSel").c_str() , &m_tau_tracks_passTrkSel );
    +    tree->Branch( (m_name + "_tracks_isClCharged").c_str() , &m_tau_tracks_isClCharged );
    +    tree->Branch( (m_name + "_tracks_isClIso").c_str() , &m_tau_tracks_isClIso );
    +    tree->Branch( (m_name + "_tracks_isClConv").c_str() , &m_tau_tracks_isClConv );
    +    tree->Branch( (m_name + "_tracks_isClFake").c_str() , &m_tau_tracks_isClFake );
    +  }
    +
    +  return;
    +}
    +
    +
    +
    +void TauContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +    m_isTrigMatched->clear();
    +    m_isTrigMatchedToChain->clear();
    +    m_listTrigChains->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +    m_ntrk->clear();
    +    m_charge->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    for (auto& taueff : m_infoSwitch.m_tauEffWPs) {
    +      (*m_TauEff_SF)[ taueff ].clear();
    +    }
    +
    +    for (auto& trig : m_infoSwitch.m_trigWPs) {
    +      (*m_TauTrigEff_SF)[ trig ].clear();
    +    }
    +  }
    +
    +  // might need to delete these
    +  if ( m_infoSwitch.m_JetID ) {
    +    m_isJetRNNSigVeryLoose->clear();
    +    m_isJetRNNSigLoose->clear();
    +    m_isJetRNNSigMedium->clear();
    +    m_isJetRNNSigTight->clear();
    +
    +    m_JetRNNScore->clear();
    +    m_JetRNNScoreSigTrans->clear();
    +  }
    +
    +  if ( m_infoSwitch.m_EleVeto ) {
    +    m_isEleRNNLoose->clear();
    +    m_isEleRNNMedium->clear();
    +    m_isEleRNNTight->clear();
    +
    +    m_EleRNNScore->clear();
    +    m_passEleOLR->clear();
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    m_tau_matchedJetWidth->clear();
    +    m_tau_matchedJetJvt->clear();
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    m_tau_tracks_pt->clear();
    +    m_tau_tracks_eta->clear();
    +    m_tau_tracks_phi->clear();
    +
    +    m_tau_tracks_isCore->clear();
    +    m_tau_tracks_isWide->clear();
    +    m_tau_tracks_failTrackFilter->clear();
    +    m_tau_tracks_passTrkSel->clear();
    +    m_tau_tracks_isClCharged->clear();
    +    m_tau_tracks_isClIso->clear();
    +    m_tau_tracks_isClConv->clear();
    +    m_tau_tracks_isClFake->clear();
    +  }
    +
    +}
    +
    +
    +void TauContainer::FillTau( const xAOD::TauJet* tau ){
    +  return FillTau(static_cast<const xAOD::IParticle*>(tau));
    +}
    +
    +void TauContainer::FillTau( const xAOD::IParticle* particle )
    +{
    +
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::TauJet* tau=dynamic_cast<const xAOD::TauJet*>(particle);
    +
    +  if ( m_infoSwitch.m_trigger ) {
    +
    +    // retrieve map<string,char> w/ <chain,isMatched>
    +    //
    +    static SG::AuxElement::Accessor< std::map<std::string,char> > isTrigMatchedMapTauAcc("isTrigMatchedMapTau");
    +
    +    std::vector<int> matches;
    +
    +    if ( isTrigMatchedMapTauAcc.isAvailable( *tau ) ) {
    +      // loop over map and fill branches
    +      //
    +      for ( auto const &it : (isTrigMatchedMapTauAcc( *tau )) ) {
    +    matches.push_back( static_cast<int>(it.second) );
    +    m_listTrigChains->push_back( it.first );
    +      }
    +    } else {
    +      matches.push_back( -1 );
    +      m_listTrigChains->push_back("NONE");
    +    }
    +
    +    m_isTrigMatchedToChain->push_back(matches);
    +
    +    // if at least one match among the chains is found, say this tau is trigger matched
    +    if ( std::find(matches.begin(), matches.end(), 1) != matches.end() ) { m_isTrigMatched->push_back(1); }
    +    else { m_isTrigMatched->push_back(0); }
    +
    +  }
    +
    +  if ( m_infoSwitch.m_kinematic ) {
    +
    +    m_charge->push_back( tau->charge()  );
    +    m_ntrk  ->push_back( tau->nTracks() );
    +  }
    +
    +  if ( m_infoSwitch.m_effSF && m_mc ) {
    +
    +    std::vector<float> junkSF(1,-1.0);
    +
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTauEffSF;
    +    static std::map< std::string, SG::AuxElement::Accessor< std::vector< float > > > accTauTrigSF;
    +
    +    for (auto& taueff : m_infoSwitch.m_tauEffWPs) {
    +      std::string tauEffSF = "TauEff_SF_syst_" + taueff;
    +      accTauEffSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( taueff , SG::AuxElement::Accessor< std::vector< float > >( tauEffSF ) ) );
    +      safeSFVecFill<float, xAOD::TauJet>( tau, accTauEffSF.at( taueff ), &m_TauEff_SF->at( taueff ), junkSF );
    +    }
    +
    +    for (auto& trig : m_infoSwitch.m_trigWPs) {
    +      std::string trigEffSF = "TauEff_SF_syst_" + trig;
    +      accTauTrigSF.insert( std::pair<std::string, SG::AuxElement::Accessor< std::vector< float > > > ( trig , SG::AuxElement::Accessor< std::vector< float > >( trigEffSF ) ) );
    +      safeSFVecFill<float, xAOD::TauJet>( tau, accTauTrigSF.at( trig ), &m_TauTrigEff_SF->at( trig ), junkSF );
    +    }
    +
    +  }
    +
    +  // might need to delete these
    +  if ( m_infoSwitch.m_JetID ) {
    +
    +    static SG::AuxElement::Accessor<int> isJetRNNSigVeryLooseAcc ("isJetRNNSigVeryLoose");
    +    safeFill<int, int, xAOD::TauJet>(tau, isJetRNNSigVeryLooseAcc, m_isJetRNNSigVeryLoose, -1);
    +
    +    static SG::AuxElement::Accessor<int> isJetRNNSigLooseAcc ("isJetRNNSigLoose");
    +    safeFill<int, int, xAOD::TauJet>(tau, isJetRNNSigLooseAcc, m_isJetRNNSigLoose, -1);
    +
    +    static SG::AuxElement::Accessor<int> isJetRNNSigMediumAcc ("isJetRNNSigMedium");
    +    safeFill<int, int, xAOD::TauJet>(tau, isJetRNNSigMediumAcc, m_isJetRNNSigMedium, -1);
    +
    +    static SG::AuxElement::Accessor<int> isJetRNNSigTightAcc ("isJetRNNSigTight");
    +    safeFill<int, int, xAOD::TauJet>(tau, isJetRNNSigTightAcc, m_isJetRNNSigTight, -1);
    +
    +    static SG::AuxElement::Accessor<float> JetRNNScoreAcc ("JetRNNScore");
    +    safeFill<float, float, xAOD::TauJet>(tau, JetRNNScoreAcc, m_JetRNNScore, -999.);
    +
    +    static SG::AuxElement::Accessor<float> JetRNNScoreSigTransAcc ("JetRNNScoreSigTrans");
    +    safeFill<float, float, xAOD::TauJet>(tau, JetRNNScoreSigTransAcc, m_JetRNNScoreSigTrans, -999.);
    +  }
    +
    +  if ( m_infoSwitch.m_EleVeto ) {
    +
    +    static SG::AuxElement::Accessor<int> isEleRNNLooseAcc ("isEleRNNLoose");
    +    safeFill<int, int, xAOD::TauJet>(tau, isEleRNNLooseAcc, m_isEleRNNLoose, -1);
    +
    +    static SG::AuxElement::Accessor<int> isEleRNNMediumAcc ("isEleRNNMedium");
    +    safeFill<int, int, xAOD::TauJet>(tau, isEleRNNMediumAcc, m_isEleRNNMedium, -1);
    +
    +    static SG::AuxElement::Accessor<int> isEleRNNTightAcc ("isEleRNNTight");
    +    safeFill<int, int, xAOD::TauJet>(tau, isEleRNNTightAcc, m_isEleRNNTight, -1);
    +
    +    static SG::AuxElement::Accessor<float> EleRNNScoreAcc ("EleRNNScore");
    +    safeFill<float, float, xAOD::TauJet>(tau, EleRNNScoreAcc, m_EleRNNScore, -999.);
    +
    +    static SG::AuxElement::Accessor<int> passEleOLRAcc ("passEleOLR");
    +    safeFill<int, int, xAOD::TauJet>(tau, passEleOLRAcc, m_passEleOLR, -1);
    +  }
    +
    +  if( m_infoSwitch.m_xahTauJetMatching) {
    +    static SG::AuxElement::Accessor< float > jetWidthAcc("JetWidth");
    +    safeFill<float, float, xAOD::TauJet>(tau, jetWidthAcc, m_tau_matchedJetWidth, -1.);
    +    static SG::AuxElement::Accessor< float > jetJvtAcc("JetJvt");
    +    safeFill<float, float, xAOD::TauJet>(tau, jetJvtAcc, m_tau_matchedJetJvt, -1.);
    +  }
    +
    +  if( m_infoSwitch.m_trackAll) {
    +    static SG::AuxElement::ConstAccessor< std::vector<float>   >   tauTrackPtAcc("trackPt");
    +    safeVecFill<float, float, xAOD::TauJet>(tau, tauTrackPtAcc, m_tau_tracks_pt);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<float>   >   tauTrackEtaAcc("trackEta");
    +    safeVecFill<float, float, xAOD::TauJet>(tau, tauTrackEtaAcc, m_tau_tracks_eta);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<float>   >   tauTrackPhiAcc("trackPhi");
    +    safeVecFill<float, float, xAOD::TauJet>(tau, tauTrackPhiAcc, m_tau_tracks_phi);
    +
    +    // track classification
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsCoreAcc("trackIsCore");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsCoreAcc, m_tau_tracks_isCore);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsWideAcc("trackIsWide");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsWideAcc, m_tau_tracks_isWide);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackFailTrackFilterAcc("trackFailTrackFilter");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackFailTrackFilterAcc, m_tau_tracks_failTrackFilter);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackPassTrkSelAcc("trackPassTrkSel");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackPassTrkSelAcc, m_tau_tracks_passTrkSel);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsClChargedAcc("trackIsClCharged");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsClChargedAcc, m_tau_tracks_isClCharged);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsClIsoAcc("trackIsClIso");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsClIsoAcc, m_tau_tracks_isClIso);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsClConvAcc("trackIsClConv");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsClConvAcc, m_tau_tracks_isClConv);
    +
    +    static SG::AuxElement::ConstAccessor< std::vector<int>   >   tauTrackIsClFakeAcc("trackIsClFake");
    +    safeVecFill<int, int, xAOD::TauJet>(tau, tauTrackIsClFakeAcc, m_tau_tracks_isClFake);
    +  }
    +
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.html b/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.html new file mode 100644 index 0000000000..9fe88ef2b8 --- /dev/null +++ b/api/program_listing_file_Root_TauEfficiencyCorrector.cxx.html @@ -0,0 +1,658 @@ + + + + + + + + + + + Program Listing for File TauEfficiencyCorrector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File TauEfficiencyCorrector.cxx
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauEfficiencyCorrector.cxx

    +

    Return to documentation for file (Root/TauEfficiencyCorrector.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <map>
    +#include <random>
    +#include <algorithm>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +
    +// EDM include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODTau/TauJetAuxContainer.h"
    +#include "xAODTau/TauJet.h"
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODBase/IParticle.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "AthContainers/DataVector.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/TauEfficiencyCorrector.h"
    +
    +using HelperClasses::ToolName;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TauEfficiencyCorrector)
    +
    +
    +TauEfficiencyCorrector :: TauEfficiencyCorrector () :
    +    Algorithm("TauEfficiencyCorrector")
    +{
    +}
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TauEfficiencyCorrector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing TauEfficiencyCorrector Interface... ");
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +
    +
    +  // *******************************************************
    +
    +  // Create a ToolHandle of the PRW tool which is passed to the TauEfficiencyScaleFactors class later
    +  //
    +  if( isMC() ){
    +    if(!m_pileup_tool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_pileup_tool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_CHECK( m_pileup_tool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_pileup_tool_handle);
    +  }
    +
    +  if (!m_RecommendationTag.empty()) {
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("RecommendationTag",m_RecommendationTag))
    +  };
    +
    +  // just the tool default settings
    +  // https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/TauID/TauAnalysisTools/trunk/doc/README-TauEfficiencyCorrectionsTool.rst
    +
    +  // initialise reco SF no matter what
    +  std::vector<int> configVec;
    +  configVec.push_back({TauAnalysisTools::SFRecoHadTau});
    +
    +  if ( !m_WorkingPointTauJetID.empty() ) {
    +     configVec.push_back({TauAnalysisTools::SFJetIDHadTau});
    +
    +     if ( m_WorkingPointTauJetID == "Loose")     { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNLOOSE));     }
    +     else if ( m_WorkingPointTauJetID == "Medium")    { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNMEDIUM));    }
    +     else if ( m_WorkingPointTauJetID == "Tight")     { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDRNNTIGHT));     }
    +     else {
    +       ANA_MSG_ERROR("Failed to configure WorkingPointTauJetID with unknown " << m_WorkingPointTauJetID);
    +       return EL::StatusCode::FAILURE;
    +     }
    +  } else if ( m_WorkingPointTauJetID.empty() )      {
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("JetIDLevel", (int)TauAnalysisTools::JETIDNONE));
    +    // still consider this a working point
    +    m_WorkingPointTauJetID = "None";
    +  }
    +
    +  if (!m_WorkingPointTauEleID.empty()) {
    +    configVec.push_back({TauAnalysisTools::SFEleIDElectron});
    +
    +    if (m_WorkingPointTauEleID == "Loose")          { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNLOOSE));          }
    +    else if (m_WorkingPointTauEleID == "Medium")         { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNMEDIUM));         }
    +    else if (m_WorkingPointTauEleID == "Tight")         { ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EleIDLevel", (int)TauAnalysisTools::ELEIDRNNTIGHT));         }
    +    else {
    +       ANA_MSG_ERROR("Failed to configure WorkingPointTauEleID with unknown " << m_WorkingPointTauEleID);
    +       return EL::StatusCode::FAILURE;
    +    }
    +  } else if ( m_WorkingPointTauEleID.empty() )      {
    +    // still consider this a working point
    +    m_WorkingPointTauEleID = "None";
    +  }
    +
    +  if (!m_TriggerName.empty()) {
    +    // We always want trigger to be individual
    +    configVec = {TauAnalysisTools::SFTriggerHadTau};
    +
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("TriggerName", m_TriggerName));
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("PileupReweightingTool",m_pileup_tool_handle));
    +
    +  }
    +
    +  ANA_CHECK(m_tauEffCorrTool_handle.setProperty("EfficiencyCorrectionTypes",configVec));
    +  if ( isFastSim() ){
    +    ANA_MSG_INFO( "Setting simulation flavour to Fast Sim");
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("useFastSim", 1));
    +  } else {
    +    ANA_CHECK(m_tauEffCorrTool_handle.setProperty("useFastSim", 0));
    +  }
    +  ANA_CHECK(m_tauEffCorrTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool for Tau Efficiency corrections: " << m_tauEffCorrTool_handle);
    +
    +  // Make a list of systematics to be used, based on configuration input
    +  // Use HelperFunctions::getListofSystematics() for this!  First fill a
    +  // list of identically inclusive lists and then remove unwanted elements
    +
    +  const CP::SystematicSet recSysts = m_tauEffCorrTool_handle->recommendedSystematics();
    +  m_systList = HelperFunctions::getListofSystematics( recSysts, m_systName, m_systVal, msg() );
    +
    +  ANA_MSG_INFO("Will be using TauEfficiencyScaleFactors tool efficiency systematic:");
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( m_systName.empty() ) {
    +    ANA_MSG_INFO("\t Running w/ nominal configuration only!");
    +    break;
    +    }
    +    // IMPORTANT: for the trigger iteration remove the sys if it does not
    +    // contain the word TRIGGER (?)
    +    //else if (syst_it.name().find("RECO") == std::string::npos) {
    +    //  m_systListReco.erase(std::remove(m_systListReco.begin(), m_systListReco.end(), syst_it), m_systListReco.end());
    +    //}
    +    ANA_MSG_INFO("\t " << syst_it.name());
    +  }
    +
    +
    +  // Write output sys names
    +  if ( m_writeSystToMetadata ) {
    +    TFile *fileMD = wk()->getOutputFile ("metadata");
    +    HelperFunctions::writeSystematicsListHist(m_systList, m_outputSystNames, fileMD);
    +  }
    +
    +  // *********************************************************************************
    +
    +  ANA_MSG_INFO( "TauEfficiencyCorrector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  m_numEvent++;
    +
    +  if ( !isMC() ) {
    +    if ( m_numEvent == 1 ) { ANA_MSG_INFO( "Sample is Data! Do not apply any Tau Efficiency correction... "); }
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  ANA_MSG_DEBUG( "Applying Tau Efficiency corrections... ");
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // if m_inputSystNamesTaus = "" --> input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  std::vector<std::string>* systNames_ptr(nullptr);
    +  if ( !m_inputSystNamesTaus.empty() ) ANA_CHECK( HelperFunctions::retrieve(systNames_ptr, m_inputSystNamesTaus, 0, m_store, msg()) );
    +
    +  std::vector<std::string> systNames{""};
    +  if (systNames_ptr) systNames = *systNames_ptr;
    +
    +  // Declare a write status set to true
    +  // For the systematically varied input containers, we won't store again the vector with efficiency systs in TStore ( it will be always the same!)
    +  //
    +  bool writeSystNames(true);
    +
    +  // loop over systematic sets available
    +  for ( auto systName : systNames ) {
    +    const xAOD::TauJetContainer* inputTaus(nullptr);
    +
    +    // some systematics might have rejected the event
    +    if ( m_store->contains<xAOD::TauJetContainer>( m_inContainerName+systName ) ) {
    +      // retrieve input taus
    +      ANA_CHECK( HelperFunctions::retrieve(inputTaus, m_inContainerName+systName, m_event, m_store, msg()) );
    +
    +      ANA_MSG_DEBUG( "Number of taus: " << static_cast<int>(inputTaus->size()) );
    +      ANA_MSG_DEBUG( "Input syst: " << systName );
    +      unsigned int idx(0);
    +      for ( auto tau : *(inputTaus) ) {
    +        ANA_MSG_DEBUG( "Input tau " << idx << ", pt = " << tau->pt() * 1e-3 << " GeV" );
    +        ++idx;
    +      }
    +
    +      // decorate taus w/ SF - there will be a decoration w/ different name for each syst!
    +      this->executeSF( eventInfo, inputTaus, systName.empty(), writeSystNames );
    +
    +      writeSystNames = false;
    +
    +    } // check existence of container
    +
    +  } // close loop on systematic sets available from upstream algo
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_INFO( "Deleting tool instances...");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TauEfficiencyCorrector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TauEfficiencyCorrector :: executeSF ( const xAOD::EventInfo* /*eventInfo*/, const xAOD::TauJetContainer* inputTaus, bool nominal, bool writeSystNames )
    +{
    +  //****************************
    +
    +  //
    +  // In the following, every tau gets decorated with 2 vector<double>'s (for reco/iso efficiency SFs),
    +  // and the event w/ 1 vector<double> (for trigger efficiency SFs)
    +  // Each vector contains the SFs, one SF for each syst (first component of each vector will be the nominal SF).
    +  //
    +  // Additionally, we create these vector<string> with the SF syst names, so that we know which component corresponds to.
    +  // ( there's a 1:1 correspondence with the vector<double> defined above )
    +  //
    +  // These vector<string> are eventually stored in TStore
    +  //
    +
    +  // 1.
    +  // Tau efficiency SFs - this is a per-TAU weight
    +  //
    +  // Firstly, loop over available systematics for this tool - remember: syst == EMPTY_STRING --> nominal
    +  // Every systematic will correspond to a different SF!
    +  //
    +
    +  std::unique_ptr< std::vector< std::string > > sysVariationNames = nullptr;
    +
    +  if ( writeSystNames ) sysVariationNames = std::make_unique< std::vector< std::string > >();
    +
    +  for ( const auto& syst_it : m_systList ) {
    +    if ( !syst_it.name().empty() && !nominal ) continue;
    +
    +    // Create the name of the SF weight to be recorded
    +    std::string sfName = "TauEff_SF_syst" ;
    +    if ( !m_WorkingPointTauEleID.empty() ) { sfName += "_EleIDElectron" + m_WorkingPointTauEleID; }
    +    if ( !m_WorkingPointTauJetID.empty() )          { sfName += "_TauID" + m_WorkingPointTauJetID; }
    +    if ( !m_TriggerName.empty() )                { sfName += "_Trig" + m_TriggerName; }
    +
    +    ANA_MSG_DEBUG( "Tau efficiency SF sys name (to be recorded in xAOD::TStore) is: " << syst_it.name() );
    +    if( writeSystNames ) sysVariationNames->push_back(syst_it.name());
    +
    +    // apply syst
    +    //
    +    if ( m_tauEffCorrTool_handle->applySystematicVariation(syst_it) != EL::StatusCode::SUCCESS ) {
    +      ANA_MSG_ERROR("Failed to configure TauEfficiencyScaleFactors for systematic " << syst_it.name());
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_MSG_DEBUG( "Successfully applied systematic: " << syst_it.name());
    +
    +    // and now apply tau efficiency SF!
    +    //
    +    unsigned int idx(0);
    +    for ( auto tau_itr : *(inputTaus) ) {
    +
    +    ANA_MSG_DEBUG( "Applying tau efficiency SF" );
    +
    +    // obtain tau efficiency SF as a float (to be stored away separately)
    +    //
    +    //  If SF decoration vector doesn't exist, create it (will be done only for the 1st systematic for *this* tau)
    +    //
    +
    +    SG::AuxElement::Decorator< std::vector<float> > sfVec( sfName );
    +    if ( !sfVec.isAvailable( *tau_itr ) ) {
    +          sfVec( *tau_itr ) = std::vector<float>();
    +    }
    +
    +    double tauEffSF(-1.0);
    +    if ( m_tauEffCorrTool_handle->getEfficiencyScaleFactor( *tau_itr, tauEffSF ) != CP::CorrectionCode::Ok ) {
    +      ANA_MSG_WARNING( "Problem in getEfficiencyScaleFactor");
    +      tauEffSF = -1.0;
    +    }
    +    //
    +    // Add it to decoration vector
    +    //
    +    sfVec( *tau_itr ).push_back( tauEffSF );
    +
    +        // tauEff sys names are saved in a vector. Entries positions are preserved!
    +        //
    +    SG::AuxElement::Decorator< std::vector<std::string> > sfVec_sysNames( m_outputSystNames + "_sysNames" );
    +    if ( !sfVec_sysNames.isAvailable( *tau_itr ) ) {
    +          sfVec_sysNames( *tau_itr ) = std::vector<std::string>();
    +        }
    +    sfVec_sysNames( *tau_itr ).push_back( syst_it.name().c_str() );
    +
    +        ANA_MSG_DEBUG( "===>>>");
    +        ANA_MSG_DEBUG( "Tau " << idx << ", pt = " << tau_itr->pt()*1e-3 << " GeV" );
    +        ANA_MSG_DEBUG( "Tau eff. SF decoration: " << sfName );
    +        ANA_MSG_DEBUG( "Systematic: " << syst_it.name() );
    +        ANA_MSG_DEBUG( "Tau eff. SF:");
    +        ANA_MSG_DEBUG( "\t " << tauEffSF << " (from getEfficiencyScaleFactor())" );
    +        ANA_MSG_DEBUG( "--------------------------------------");
    +
    +    ++idx;
    +
    +    } // close tau loop
    +
    +  }  // close loop on reco efficiency SF systematics
    +
    +  // Add list of systematics names to TStore
    +  // We only do this once per event if the list does not exist yet
    +  if ( writeSystNames && !m_store->contains<std::vector<std::string>>( m_outputSystNames ) ) {
    +    ANA_CHECK( m_store->record( std::move(sysVariationNames), m_outputSystNames ));
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TauJetMatching.cxx.html b/api/program_listing_file_Root_TauJetMatching.cxx.html new file mode 100644 index 0000000000..ae97d430e9 --- /dev/null +++ b/api/program_listing_file_Root_TauJetMatching.cxx.html @@ -0,0 +1,591 @@ + + + + + + + + + + + Program Listing for File TauJetMatching.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauJetMatching.cxx

    +

    Return to documentation for file (Root/TauJetMatching.cxx)

    +
    // c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <map>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +//#include "xAODCore/ShallowCopy.h"
    +//#include "AthContainers/ConstDataVector.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODJet/JetContainer.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/TauJetMatching.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +// ROOT include(s):
    +#include "TLorentzVector.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TauJetMatching)
    +
    +
    +TauJetMatching :: TauJetMatching () :
    +    Algorithm("TauJetMatching")
    +{
    +}
    +
    +TauJetMatching::~TauJetMatching() {}
    +
    +EL::StatusCode TauJetMatching :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TauJetMatching" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  //if ( this->numInstances() > 1 ) {
    +  //  m_isUsedBefore = true;
    +  //  ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" );
    +  //}
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_INFO( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing TauJetMatching Interface... ");
    +
    +  // Let's see if the algorithm has been already used before:
    +  // if yes, will write object cutflow in a different histogram!
    +  //
    +  // This is the case when the selector algorithm is used for
    +  // preselecting objects, and then again for the final selection
    +  //
    +  ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className );
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  if ( m_inContainerName.empty() ){
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if ( m_inJetContainerName.empty() ){
    +    ANA_MSG_ERROR( "InputJetContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // ********************************
    +  //
    +  // Initialise TauJetMatchingTool
    +  //
    +  // ********************************
    +
    +  // IMPORTANT: if no working point is specified the one in this configuration will be used
    +
    +  ANA_MSG_INFO( "TauJetMatching Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TauJetMatching :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Tau Selection..." );
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  const xAOD::TauJetContainer* inTaus(nullptr);
    +
    +  const xAOD::JetContainer* inJets(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) );
    +
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_inputAlgoSystNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // fill truth-matching map
    +    //
    +    std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > > match_map;
    +
    +    match_map = findBestMatchDR( inJets, inTaus, m_DeltaR );
    +
    +    executeDecoration(match_map, inTaus);
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) );
    +
    +    ANA_MSG_DEBUG( " input list of syst size: " << static_cast<int>(systNames->size()) );
    +
    +    // loop over systematic sets
    +    //
    +    for ( auto systName : *systNames ) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name: " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName + systName, m_event, m_store, msg()) );
    +      ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) );
    +
    +      std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > > match_map_sys;
    +
    +      match_map_sys = findBestMatchDR( inJets, inTaus, m_DeltaR );
    +
    +      executeDecoration(match_map_sys, inTaus);
    +    }
    +  }
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool TauJetMatching :: executeDecoration ( std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > > match_map, const xAOD::TauJetContainer* inTaus)
    +{
    +  static SG::AuxElement::Decorator< float > JetWidthDecor("JetWidth");
    +  static SG::AuxElement::ConstAccessor<float> jetWidthAcc("Width");
    +
    +  static SG::AuxElement::Decorator< float > JetJvtDecor("JetJvt");
    +  static SG::AuxElement::ConstAccessor<float> jetJvtAcc("Jvt");
    +
    +  ANA_MSG_DEBUG( "Initial Taus: " << static_cast<uint32_t>(inTaus->size()) );
    +
    +  int iTau = -1;
    +
    +  for ( auto tau_itr : *inTaus ) { // duplicated of basic loop
    +    iTau++;
    +
    +    std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > >::const_iterator it_map = match_map.find (iTau);
    +
    +    if (it_map != match_map.end()) {
    +
    +      // jet width
    +      if (jetWidthAcc.isAvailable(*match_map[iTau].second)) {
    +        JetWidthDecor(*tau_itr) = static_cast<float>( jetWidthAcc(*match_map[iTau].second) );
    +      } else {
    +        JetWidthDecor(*tau_itr) = -1.;
    +      }
    +
    +      // jet jvt
    +      if (jetJvtAcc.isAvailable(*match_map[iTau].second)) {
    +        JetJvtDecor(*tau_itr) = static_cast<float>( jetJvtAcc(*match_map[iTau].second) );
    +      } else {
    +        JetJvtDecor(*tau_itr) = -1.;
    +      }
    +
    +
    +    } else {
    +      JetWidthDecor(*tau_itr) = -1.;
    +      JetJvtDecor(*tau_itr) = -1.;
    +    }
    +  }
    +
    +  ANA_MSG_DEBUG( "Left  executeDecoration..." );
    +
    +  return true;
    +}
    +
    +EL::StatusCode TauJetMatching :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauJetMatching :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +float TauJetMatching::getDR(float eta1, float eta2, float phi1, float phi2)
    +{
    + float deta = std::abs(eta1-eta2);
    + float dphi = std::abs(phi1-phi2);
    + dphi = ( dphi <= TMath::Pi() ) ? dphi : ( 2 * TMath::Pi() - dphi );
    + return sqrt(deta*deta + dphi*dphi);
    +}
    +
    +std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > > TauJetMatching::findBestMatchDR(const xAOD::JetContainer* jetCont,
    +                                                                                                            const xAOD::TauJetContainer* tauCont,
    +                                                                                                            float best_DR=1.0)
    +{
    +  // Find tau that best matches a jet using DR.
    +  // If matching is successful, returns a map where the key
    +  // is the  container index of the matched tau and the value
    +  // is the pair of the matched tau and the corresponding jet
    +
    +  float default_best_DR = best_DR;
    +  int ijet = -1;
    +  int best_ijet = -1;
    +  const xAOD::Jet* best_jet = nullptr;
    +
    +  std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet*>> match_map;
    +
    +  for (const auto jet : *jetCont) {
    +      ++ijet;
    +
    +      int itau = -1;
    +      int best_itau = -1;
    +      const xAOD::TauJet* best_tau = nullptr;
    +      float DR = 0;
    +
    +      for (const auto tau : *tauCont) {
    +        ++itau;
    +
    +        DR = this->getDR(tau->eta(),jet->eta(),tau->phi(),jet->phi());
    +
    +        if (DR < best_DR) {
    +          best_DR = DR;
    +          best_tau = tau;
    +          best_jet = jet;
    +          best_itau = itau;
    +          best_ijet = ijet;
    +        }
    +      }
    +
    +      std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > >::const_iterator got = match_map.find (best_itau);
    +
    +      // if a new match is found for a previous
    +      // tau keep the new match if it is better
    +
    +      if (got == match_map.end() and best_itau != -1 and best_ijet != -1) {
    +        match_map[best_itau] = std::pair<const xAOD::TauJet*, const xAOD::Jet*>(best_tau, best_jet);
    +      }
    +      else if (got != match_map.end() and best_itau != -1 and best_ijet != -1) {
    +        float old_DR = this->getDR(match_map[best_itau].first->eta(), match_map[best_itau].second->eta(),match_map[best_itau].first->phi(), match_map[best_itau].second->phi());
    +        if (old_DR > best_DR) {
    +          match_map[best_itau] = std::pair<const xAOD::TauJet*, const xAOD::Jet*>(best_tau, best_jet);
    +        }
    +      }
    +
    +      // reset the best_DR to the default value
    +      best_DR = default_best_DR;
    +  }
    +
    +  return match_map;
    +
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TauSelector.cxx.html b/api/program_listing_file_Root_TauSelector.cxx.html new file mode 100644 index 0000000000..1a7c8dfb41 --- /dev/null +++ b/api/program_listing_file_Root_TauSelector.cxx.html @@ -0,0 +1,1011 @@ + + + + + + + + + + + Program Listing for File TauSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauSelector.cxx

    +

    Return to documentation for file (Root/TauSelector.cxx)

    +
    /*************************************************
    + *
    + * Interface to TauAnalysisTools::TauSelectionTool
    + *
    + * F. Scutti (federico.scutti@cern.ch)
    + * M. Milesi (marco.milesi@cern.ch)
    + *
    + ************************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <map>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODCore/ShallowCopy.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTau/TauJetContainer.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/TauSelector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +// #include "PATCore/TAccept.h"
    +// tool includes
    +#include "TauAnalysisTools/TauSelectionTool.h"
    +#include "TriggerMatchingTool/MatchingTool.h"
    +#include "TriggerMatchingTool/MatchFromCompositeTool.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TauSelector)
    +
    +
    +TauSelector :: TauSelector () :
    +    Algorithm("TauSelector")
    +{
    +}
    +
    +TauSelector::~TauSelector() {}
    +
    +EL::StatusCode TauSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TauSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  if ( this->numInstances() > 1 ) {
    +    m_isUsedBefore = true;
    +    ANA_MSG_INFO( "\t An algorithm of the same type has been already used " << numInstances() << " times" );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_INFO( "Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_INFO( "Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  ANA_MSG_INFO( "Initializing TauSelector Interface... ");
    +
    +  // Let's see if the algorithm has been already used before:
    +  // if yes, will write object cutflow in a different histogram!
    +  //
    +  // This is the case when the selector algorithm is used for
    +  // preselecting objects, and then again for the final selection
    +  //
    +  ANA_MSG_INFO( "Algorithm name: " << m_name << " - of type " << m_className );
    +
    +  if ( m_useCutFlow ) {
    +
    +    // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_tau_cutflowHist_1  = (TH1D*)file->Get("cutflow_taus_1");
    +
    +    m_tau_cutflow_all                  = m_tau_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_tau_cutflow_selected             = m_tau_cutflowHist_1->GetXaxis()->FindBin("selected");
    +
    +    if ( m_isUsedBefore ) {
    +      m_tau_cutflowHist_2 = (TH1D*)file->Get("cutflow_taus_2");
    +
    +      m_tau_cutflow_all                  = m_tau_cutflowHist_2->GetXaxis()->FindBin("all");
    +      m_tau_cutflow_selected             = m_tau_cutflowHist_2->GetXaxis()->FindBin("selected");
    +    }
    +
    +  }
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +
    +  m_outAuxContainerName     = m_outContainerName + "Aux."; // the period is very important!
    +
    +  if ( m_inContainerName.empty() ){
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +  // ********************************
    +  //
    +  // Initialise TauSelectionTool
    +  //
    +  // ********************************
    +
    +  // IMPORTANT: if no working point is specified the one in this configuration will be used
    +  ANA_CHECK( m_tauSelTool_handle.setProperty("ConfigPath",PathResolverFindDataFile(m_ConfigPath).c_str()));
    +  if (!m_JetIDWP.empty()) {
    +
    +    std::map <std::string, int> jetid_wp_map;
    +
    +    jetid_wp_map["JETIDNONE"] = int(TauAnalysisTools::JETIDNONE);
    +    jetid_wp_map["JETIDRNNLOOSE"] = int(TauAnalysisTools::JETIDRNNLOOSE);
    +    jetid_wp_map["JETIDRNNMEDIUM"] = int(TauAnalysisTools::JETIDRNNMEDIUM);
    +    jetid_wp_map["JETIDRNNTIGHT"] = int(TauAnalysisTools::JETIDRNNTIGHT);
    +
    +    if (jetid_wp_map.count(m_JetIDWP) != 0 ) {
    +      ANA_CHECK( m_tauSelTool_handle.setProperty("JetIDWP", jetid_wp_map[m_JetIDWP]));
    +    } else {
    +      ANA_MSG_ERROR( "Unknown requested tau JetIDWP " << m_JetIDWP);
    +      return EL::StatusCode::FAILURE;
    +    }
    +  }
    +
    +  if (!m_EleRNNWP.empty()) {
    +
    +    std::map <std::string, int> elernn_wp_map;
    +
    +    elernn_wp_map["ELEIDNONE"] = int(TauAnalysisTools::ELEIDNONE);
    +    elernn_wp_map["ELEIDRNNLOOSE"] = int(TauAnalysisTools::ELEIDRNNLOOSE);
    +    elernn_wp_map["ELEIDRNNMEDIUM"] = int(TauAnalysisTools::ELEIDRNNMEDIUM);
    +    elernn_wp_map["ELEIDRNNTIGHT"] = int(TauAnalysisTools::ELEIDRNNTIGHT);
    +
    +    if (elernn_wp_map.count(m_EleRNNWP) != 0 ) {
    +      ANA_CHECK( m_tauSelTool_handle.setProperty("EleRNNWP", elernn_wp_map[m_EleRNNWP]));
    +    } else {
    +      ANA_MSG_ERROR( "Unknown requested tau EleRNNWP " << m_EleRNNWP);
    +      return EL::StatusCode::FAILURE;
    +    }
    +  }
    +
    +  ANA_CHECK( m_tauSelTool_handle.setProperty("EleIDWP", m_EleID));
    +
    +  ANA_CHECK(m_tauSelTool_handle.retrieve());
    +  ANA_MSG_DEBUG("Retrieved tool: " << m_tauSelTool_handle);
    +
    +  // **************************************
    +  //
    +  // Initialise Trig::MatchingTool
    +  //
    +  // **************************************
    +  if( !( m_singleTauTrigChains.empty() && m_diTauTrigChains.empty() ) ) {
    +
    +    if( !isPHYS() ) {
    +      // Grab the TrigDecTool from the ToolStore
    +      if(!m_trigDecTool_handle.isUserConfigured()){
    +        ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_CHECK( m_trigDecTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +
    +      ANA_CHECK( m_scoreTool.retrieve());
    +
    +      //  everything went fine, let's initialise the tool!
    +      m_trigTauMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchingTool/MatchingTool");
    +      ANA_CHECK( m_trigTauMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +      ANA_CHECK( m_trigTauMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +      ANA_CHECK( m_trigTauMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigTauMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigTauMatchTool_handle);
    +    } else {
    +      m_trigTauMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchFromCompositeTool/MatchFromCompositeTool");
    +      ANA_CHECK( m_trigTauMatchTool_handle.setProperty("OutputLevel", msg().level() ));
    +      ANA_CHECK( m_trigTauMatchTool_handle.retrieve());
    +      ANA_MSG_DEBUG("Retrieved tool: " << m_trigTauMatchTool_handle);
    +    }
    +
    +  } else {
    +
    +    m_doTrigMatch = false;
    +
    +    ANA_MSG_WARNING("***********************************************************");
    +    ANA_MSG_WARNING( "Will not perform any tau trigger matching at this stage b/c :");
    +    ANA_MSG_WARNING("\t -) could not find the TrigDecisionTool in asg::ToolStore");
    +    ANA_MSG_WARNING("\t AND/OR");
    +    ANA_MSG_WARNING("\t -) all input HLT trigger chain lists are empty");
    +    ANA_MSG_WARNING("However, if you really didn't want to do the matching now, it's all good!");
    +    ANA_MSG_WARNING("***********************************************************");
    +  }
    +
    +  ANA_MSG_INFO( "TauSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TauSelector :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying Tau Selection..." );
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  //
    +  float mcEvtWeight(1.0);
    +  static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +  if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +    ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +    return EL::StatusCode::FAILURE;
    +  }
    +  mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +
    +  m_numEvent++;
    +
    +  // QUESTION: why this must be done in execute(), and does not work in initialize()?
    +  //
    +  if ( m_numEvent == 1 && m_trigTauMatchTool_handle.isInitialized() ) {
    +
    +    // parse input tau trigger chain list, split by comma and fill vector
    +    //
    +    std::string singletau_trig;
    +    std::istringstream ss_singletau_trig(m_singleTauTrigChains);
    +
    +    while ( std::getline(ss_singletau_trig, singletau_trig, ',') ) {
    +    m_singleTauTrigChainsList.push_back(singletau_trig);
    +    }
    +
    +    std::string ditau_trig;
    +    std::istringstream ss_ditau_trig(m_diTauTrigChains);
    +
    +    while ( std::getline(ss_ditau_trig, ditau_trig, ',') ) {
    +    m_diTauTrigChainsList.push_back(ditau_trig);
    +    }
    +
    +    ANA_MSG_INFO( "Input single tau trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_singleTauTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +    ANA_MSG_INFO( "Input di-tau trigger chains that will be considered for matching:\n");
    +    for ( auto const &chain : m_diTauTrigChainsList ) { ANA_MSG_INFO( "\t " << chain); }
    +    ANA_MSG_INFO( "\n");
    +
    +  }
    +
    +  // did any collection pass the cuts?
    +  //
    +  bool eventPass(false);
    +  bool countPass(true); // for cutflow: count for the 1st collection in the syst container - could be better as should only count for the nominal
    +  const xAOD::TauJetContainer* inTaus(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_inputAlgoSystNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName, m_event, m_store, msg()) );
    +
    +    // create output container (if requested)
    +    //
    +    ConstDataVector<xAOD::TauJetContainer>* selectedTaus(nullptr);
    +    if ( m_createSelectedContainer ) { selectedTaus = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS); }
    +
    +    // find the selected taus, and return if event passes object selection
    +    //
    +    eventPass = executeSelection( inTaus, mcEvtWeight, countPass, selectedTaus );
    +
    +    if ( m_createSelectedContainer ) {
    +      if ( eventPass ) {
    +        // add ConstDataVector to TStore
    +    //
    +        ANA_CHECK( m_store->record( selectedTaus, m_outContainerName ));
    +      } else {
    +        // if the event does not pass the selection, CDV won't be ever recorded to TStore, so we have to delete it!
    +    //
    +        delete selectedTaus; selectedTaus = nullptr;
    +      }
    +    }
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgoSystNames, 0, m_store, msg()) );
    +
    +    // prepare a vector of the names of CDV containers for usage by downstream algos
    +    // must be a pointer to be recorded in TStore
    +    //
    +    auto vecOutContainerNames = std::make_unique< std::vector< std::string > >();
    +    ANA_MSG_DEBUG( " input list of syst size: " << static_cast<int>(systNames->size()) );
    +
    +    // loop over systematic sets
    +    //
    +    bool eventPassThisSyst(false);
    +    for ( auto systName : *systNames ) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name: " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inTaus, m_inContainerName + systName, m_event, m_store, msg()) );
    +
    +      // create output container (if requested) - one for each systematic
    +      //
    +      ConstDataVector<xAOD::TauJetContainer>* selectedTaus(nullptr);
    +      if ( m_createSelectedContainer ) { selectedTaus = new ConstDataVector<xAOD::TauJetContainer>(SG::VIEW_ELEMENTS); }
    +
    +      // find the selected Taus, and return if event passes object selection
    +      //
    +      eventPassThisSyst = executeSelection( inTaus, mcEvtWeight, countPass, selectedTaus );
    +
    +      if ( countPass ) { countPass = false; } // only count objects/events for 1st syst collection in iteration (i.e., nominal)
    +
    +      if ( eventPassThisSyst ) {
    +    // save the string of syst set under question if event is passing the selection
    +    //
    +    vecOutContainerNames->push_back( systName );
    +      }
    +
    +      // if for at least one syst set the event passes selection, this will remain true!
    +      //
    +      eventPass = ( eventPass || eventPassThisSyst );
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  output container name: " << m_outContainerName+systName );
    +
    +      if ( m_createSelectedContainer ) {
    +        if ( eventPassThisSyst ) {
    +          // add ConstDataVector to TStore
    +      //
    +          ANA_CHECK( m_store->record( selectedTaus, m_outContainerName+systName ));
    +        } else {
    +          // if the event does not pass the selection for this syst, CDV won't be ever recorded to TStore, so we have to delete it!
    +          delete selectedTaus; selectedTaus = nullptr;
    +        }
    +      }
    +
    +    } // close loop over syst sets
    +
    +    ANA_MSG_DEBUG(" output list of syst size: " << static_cast<int>(vecOutContainerNames->size()) );
    +
    +    // record in TStore the list of systematics names that should be considered down stream
    +    //
    +    ANA_CHECK( m_store->record( std::move(vecOutContainerNames), m_outputAlgoSystNames));
    +
    +  }
    +
    +  // look what we have in TStore
    +  //
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if( !eventPass ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool TauSelector :: executeSelection ( const xAOD::TauJetContainer* inTaus, float mcEvtWeight, bool countPass,
    +                       ConstDataVector<xAOD::TauJetContainer>* selectedTaus )
    +{
    +
    +  int nPass(0); int nObj(0);
    +  const SG::AuxElement::Decorator< char > passSelDecor( m_decorationName.c_str() );
    +
    +  ANA_MSG_DEBUG( "Initial Taus: " << static_cast<uint32_t>(inTaus->size()) );
    +
    +  for ( auto tau_itr : *inTaus ) { // duplicated of basic loop
    +
    +    // if only looking at a subset of Taus make sure all are decorated
    +    //
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *tau_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    bool passSel = this->passCuts( tau_itr );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *tau_itr ) = passSel;
    +    }
    +
    +    if ( passSel ) {
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedTaus->push_back( tau_itr );
    +      }
    +    }
    +  }
    +
    +  // for cutflow: make sure to count passed objects only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  ANA_MSG_DEBUG( "Initial Taus (count obj): " << nObj << " - Selected Taus: " << nPass );
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  //
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    ANA_MSG_DEBUG( "Reject event: nSelectedTaus ("<<nPass<<") < nPassMin ("<<m_pass_min<<")" );
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    ANA_MSG_DEBUG( "Reject event: nSelectedTaus ("<<nPass<<") > nPassMax ("<<m_pass_max<<")" );
    +    return false;
    +  }
    +
    +  // for cutflow: make sure to count passed events only once (i.e., this flag will be true only for nominal)
    +  //
    +  if ( countPass ){
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +
    +  // Perform trigger matching on the "good" (selected) taus
    +  //
    +  // NB: this part will be skipped if:
    +  //
    +  //  1. the user didn't pass any trigger chains to the algo (see initialize(): in that case, the tool is not even initialised!)
    +  //  2. there are no selected taus in the event
    +  //
    +  if ( m_doTrigMatch && selectedTaus ) {
    +
    +    unsigned int nSelectedTaus = selectedTaus->size();
    +
    +    static SG::AuxElement::Decorator< std::map<std::string,char> > isTrigMatchedMapTauDecor( "isTrigMatchedMapTau" );
    +
    +    if ( nSelectedTaus > 0 ) {
    +
    +      ANA_MSG_DEBUG( "Doing single tau trigger matching...");
    +
    +      for ( auto const &chain : m_singleTauTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        for ( auto const tau : *selectedTaus ) {
    +
    +          //  For each tau, decorate w/ a map<string,char> with the 'isMatched' info associated
    +          //  to each trigger chain in the input list.
    +          //  If decoration map doesn't exist for this tau yet, create it (will be done only for the 1st iteration on the chain names)
    +          //
    +          if ( !isTrigMatchedMapTauDecor.isAvailable( *tau ) ) {
    +            isTrigMatchedMapTauDecor( *tau ) = std::map<std::string,char>();
    +          }
    +
    +          // check whether the tau is matched (NOTE: no DR is required for taus)
    +          //
    +          char matched = ( m_trigTauMatchTool_handle->match( *tau, chain ) );
    +
    +          ANA_MSG_DEBUG( "\t\t is tau trigger matched? " << matched);
    +
    +          ( isTrigMatchedMapTauDecor( *tau ) )[chain] = matched;
    +        }
    +      }
    +
    +    }
    +
    +    // If checking dilepton trigger, form lepton pairs and test matching for each one.
    +    // Save a:
    +    //
    +    // multimap< chain, pair< pair<idx_i, idx_j>, ismatched > >
    +    //
    +    // as *event* decoration to store which
    +    // pairs are matched (to a given chain) and which aren't.
    +    // A multimap is used b/c a given key (i.e., a chain) can be associated to more than one pair. This is the case for e.g., trilepton events.
    +    //
    +    // By retrieving this map later on, user can decide what to do with the event
    +    // (Generally one could just loop over the map and save a flag if there's at least one pair that matches a given chain)
    +
    +    if ( nSelectedTaus > 1 && !m_diTauTrigChains.empty() ) {
    +
    +      ANA_MSG_DEBUG( "Doing di-tau trigger matching...");
    +
    +      const xAOD::EventInfo* eventInfo(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +      typedef std::pair< std::pair<unsigned int,unsigned int>, char> ditau_trigmatch_pair;
    +      typedef std::multimap< std::string, ditau_trigmatch_pair >    ditau_trigmatch_pair_map;
    +      static SG::AuxElement::Decorator< ditau_trigmatch_pair_map >  diTauTrigMatchPairMapDecor( "diTauTrigMatchPairMap" );
    +
    +      for ( auto const &chain : m_diTauTrigChainsList ) {
    +
    +        ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +        //  If decoration map doesn't exist for this event yet, create it (will be done only for the 1st iteration on the chain names)
    +        //
    +        if ( !diTauTrigMatchPairMapDecor.isAvailable( *eventInfo ) ) {
    +          diTauTrigMatchPairMapDecor( *eventInfo ) = ditau_trigmatch_pair_map();
    +        }
    +
    +        std::vector<const xAOD::IParticle*> myTaus;
    +
    +        for ( unsigned int itau = 0; itau < selectedTaus->size()-1; ++itau ) {
    +
    +          for ( unsigned int jtau = itau+1; jtau < selectedTaus->size(); ++jtau ) {
    +
    +            // test a new pair
    +            //
    +            myTaus.clear();
    +            myTaus.push_back( selectedTaus->at(itau) );
    +            myTaus.push_back( selectedTaus->at(jtau) );
    +
    +            // check whether the pair is matched (NOTE: no DR is required for taus)
    +            //
    +            char matched = m_trigTauMatchTool_handle->match( myTaus, chain  );
    +
    +            ANA_MSG_DEBUG( "\t\t is the tau pair ("<<itau<<","<<jtau<<") trigger matched? " << matched);
    +
    +            std::pair <unsigned int, unsigned int>  chain_idxs = std::make_pair(itau,jtau);
    +            ditau_trigmatch_pair  chain_decision = std::make_pair(chain_idxs,matched);
    +            diTauTrigMatchPairMapDecor( *eventInfo ).insert( std::pair< std::string, ditau_trigmatch_pair >(chain,chain_decision) );
    +
    +          }
    +        }
    +      } //for m_diTauTrigChainsList
    +    } //if nSelectedTaus > 1 && !m_diTauTrigChains.empty()
    +  } //if m_doTrigMatch && selectedTaus
    +
    +  ANA_MSG_DEBUG( "Left  executeSelection..." );
    +
    +  return true;
    +}
    +
    +
    +EL::StatusCode TauSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_INFO( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TauSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int TauSelector :: passCuts( const xAOD::TauJet* tau ) {
    +
    +  // fill cutflow bin 'all' before any cut
    +  if(!m_isUsedBefore && m_useCutFlow) m_tau_cutflowHist_1->Fill( m_tau_cutflow_all, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_tau_cutflowHist_2->Fill( m_tau_cutflow_all, 1 ); }
    +
    +  // **********************************************************************************************************
    +  //
    +  // TauSelectorTool cut
    +  //
    +
    +  // JetRNNSigID decoration
    +  // ----------------------
    +  static SG::AuxElement::Decorator< int > isJetRNNSigVeryLoose("isJetRNNSigVeryLoose");
    +  static SG::AuxElement::Decorator< int > isJetRNNSigLoose("isJetRNNSigLoose");
    +  static SG::AuxElement::Decorator< int > isJetRNNSigMedium("isJetRNNSigMedium");
    +  static SG::AuxElement::Decorator< int > isJetRNNSigTight("isJetRNNSigTight");
    +
    +  static SG::AuxElement::Decorator< float > JetRNNScore("JetRNNScore");
    +  static SG::AuxElement::Decorator< float > JetRNNScoreSigTrans("JetRNNScoreSigTrans");
    +
    +  isJetRNNSigVeryLoose( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::JetRNNSigVeryLoose));
    +  isJetRNNSigLoose( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::JetRNNSigLoose));
    +  isJetRNNSigMedium( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::JetRNNSigMedium));
    +  isJetRNNSigTight( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::JetRNNSigTight));
    +
    +  JetRNNScore( *tau ) = static_cast<float>(tau->discriminant(xAOD::TauJetParameters::RNNJetScore));
    +  JetRNNScoreSigTrans( *tau ) = static_cast<float>(tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans));
    +
    +  // EleRNN decoration
    +  // -----------------
    +  static SG::AuxElement::Decorator< int > isEleRNNLoose("isEleRNNLoose");
    +  static SG::AuxElement::Decorator< int > isEleRNNMedium("isEleRNNMedium");
    +  static SG::AuxElement::Decorator< int > isEleRNNTight("isEleRNNTight");
    +
    +  static SG::AuxElement::Decorator< float > EleRNNScore("EleRNNScore");
    +
    +
    +  isEleRNNLoose( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::EleRNNLoose));
    +  isEleRNNMedium( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::EleRNNMedium));
    +  isEleRNNTight( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::EleRNNTight));
    +
    +  EleRNNScore( *tau ) = static_cast<float>(tau->discriminant(xAOD::TauJetParameters::RNNEleScore));
    +
    +
    +  // EleID decoration
    +  // -----------------
    +  static SG::AuxElement::Decorator< int > passEleOLR("passEleOLR");
    +
    +  passEleOLR( *tau ) = static_cast<int>(tau->isTau(xAOD::TauJetParameters::PassEleOLR));
    +
    +  if (m_decorateWithTracks) {
    +
    +     // TauTracks decoration
    +     // --------------------
    +     SG::AuxElement::Decorator< std::vector<float> > tauTrackPt( "trackPt" );
    +     SG::AuxElement::Decorator< std::vector<float> > tauTrackEta( "trackEta" );
    +     SG::AuxElement::Decorator< std::vector<float> > tauTrackPhi( "trackPhi" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsCore( "trackIsCore" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsWide( "trackIsWide" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackFailTrackFilter( "trackFailTrackFilter" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackPassTrkSel( "trackPassTrkSel" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsClCharged( "trackIsClCharged" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsClIso( "trackIsClIso" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsClConv( "trackIsClConv" );
    +     SG::AuxElement::Decorator< std::vector<int> > tauTrackIsClFake( "trackIsClFake" );
    +
    +
    +     for (const xAOD::TauTrack* trk : tau->allTracks()){
    +
    +        tauTrackPt( *tau ).push_back(trk->pt());
    +        tauTrackEta( *tau ).push_back(trk->eta());
    +        tauTrackPhi( *tau ).push_back(trk->phi());
    +
    +
    +        if (!trk->flag(xAOD::TauJetParameters::coreTrack)) tauTrackIsCore(*tau).push_back(1);
    +        else tauTrackIsCore(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::wideTrack)) tauTrackIsWide(*tau).push_back(1);
    +        else tauTrackIsWide(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::failTrackFilter)) tauTrackFailTrackFilter(*tau).push_back(1);
    +        else tauTrackFailTrackFilter(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::passTrkSelector)) tauTrackPassTrkSel(*tau).push_back(1);
    +        else tauTrackPassTrkSel(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::classifiedCharged)) tauTrackIsClCharged(*tau).push_back(1);
    +        else tauTrackIsClCharged(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::classifiedIsolation)) tauTrackIsClIso(*tau).push_back(1);
    +        else tauTrackIsClIso(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::classifiedConversion)) tauTrackIsClConv(*tau).push_back(1);
    +        else tauTrackIsClConv(*tau).push_back(0);
    +
    +        if (!trk->flag(xAOD::TauJetParameters::classifiedFake)) tauTrackIsClFake(*tau).push_back(1);
    +        else tauTrackIsClFake(*tau).push_back(0);
    +
    +     }
    +
    +  } // if decorate with tracks
    +
    +  ANA_MSG_DEBUG( "Got decoration values" );
    +
    +
    +  if ( tau->pt() <= m_minPtDAOD ) {
    +    ANA_MSG_DEBUG( "Tau failed minimal pT requirement for usage with derivations");
    +    return 0;
    +  }
    +
    +  if ( ! m_tauSelTool_handle->accept( *tau ) ) {
    +    ANA_MSG_DEBUG( "Tau failed requirements of TauSelectionTool");
    +    return 0;
    +  }
    +
    +  if( !m_isUsedBefore && m_useCutFlow) m_tau_cutflowHist_1->Fill( m_tau_cutflow_selected, 1 );
    +  if ( m_isUsedBefore && m_useCutFlow ) { m_tau_cutflowHist_2->Fill( m_tau_cutflow_selected, 1 ); }
    +
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TrackContainer.cxx.html b/api/program_listing_file_Root_TrackContainer.cxx.html new file mode 100644 index 0000000000..e7eed61a46 --- /dev/null +++ b/api/program_listing_file_Root_TrackContainer.cxx.html @@ -0,0 +1,603 @@ + + + + + + + + + + + Program Listing for File TrackContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackContainer.cxx

    +

    Return to documentation for file (Root/TrackContainer.cxx)

    +
    #include "xAODAnaHelpers/TrackContainer.h"
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <iostream>
    +#include <xAODTracking/TrackParticle.h>
    +
    +using namespace xAH;
    +
    +TrackContainer::TrackContainer(const std::string& name, const std::string& detailStr, float units) : ParticleContainer(name,detailStr,units,true)
    +
    +{
    +  if(m_infoSwitch.m_fitpars){
    +    m_chiSquared = new std::vector<float >;
    +    m_d0 = new std::vector<float >;
    +    m_definingParametersCovMatrix = new std::vector<std::vector<float> >;
    +    m_expectInnermostPixelLayerHit = new std::vector< char >;
    +    m_expectNextToInnermostPixelLayerHit = new std::vector< char >;
    +    m_numberDoF = new std::vector<float >;
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    m_numberOfInnermostPixelLayerHits = new std::vector< char >;
    +    m_numberOfNextToInnermostPixelLayerHits = new std::vector< char >;
    +    m_numberOfPhiHoleLayers = new std::vector< char >;
    +    m_numberOfPhiLayers = new std::vector< char >;
    +    m_numberOfPixelDeadSensors = new std::vector< char >;
    +    m_numberOfPixelHits = new std::vector< char >;
    +    m_numberOfPixelHoles = new std::vector< char >;
    +    m_numberOfPixelSharedHits = new std::vector< char >;
    +    m_numberOfPrecisionHoleLayers = new std::vector< char >;
    +    m_numberOfPrecisionLayers = new std::vector< char >;
    +    m_numberOfSCTDeadSensors = new std::vector< char >;
    +    m_numberOfSCTHits = new std::vector< char >;
    +    m_numberOfSCTHoles = new std::vector< char >;
    +    m_numberOfSCTSharedHits = new std::vector< char >;
    +    m_numberOfTRTHits = new std::vector< char >;
    +    m_numberOfTRTOutliers = new std::vector< char >;
    +  }
    +
    +  m_phi = new std::vector<float >;
    +  m_qOverP = new std::vector<float >;
    +  m_theta = new std::vector<float >;
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      m_vertexLink = new std::vector<Int_t >;
    +      m_vertexLink_persIndex = new std::vector<UInt_t >;
    +      m_vertexLink_persKey = new std::vector<UInt_t >;
    +    */
    +    m_vz = new std::vector<float >;
    +    m_z0 = new std::vector<float >;
    +  }
    +}
    +
    +TrackContainer::~TrackContainer()
    +{
    +  if(m_debug) std::cout << " Deleting TrackContainer "<< std::endl;
    +
    +  if(m_infoSwitch.m_fitpars){
    +    delete m_chiSquared;
    +    delete m_d0;
    +    delete m_definingParametersCovMatrix;
    +    delete m_expectInnermostPixelLayerHit;
    +    delete m_expectNextToInnermostPixelLayerHit;
    +    delete m_numberDoF;
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    delete m_numberOfInnermostPixelLayerHits;
    +    delete m_numberOfNextToInnermostPixelLayerHits;
    +    delete m_numberOfPhiHoleLayers;
    +    delete m_numberOfPhiLayers;
    +    delete m_numberOfPixelDeadSensors;
    +    delete m_numberOfPixelHits;
    +    delete m_numberOfPixelHoles;
    +    delete m_numberOfPixelSharedHits;
    +    delete m_numberOfPrecisionHoleLayers;
    +    delete m_numberOfPrecisionLayers;
    +    delete m_numberOfSCTDeadSensors;
    +    delete m_numberOfSCTHits;
    +    delete m_numberOfSCTHoles;
    +    delete m_numberOfSCTSharedHits;
    +    delete m_numberOfTRTHits;
    +    delete m_numberOfTRTOutliers;
    +  }
    +
    +  delete m_phi;
    +  delete m_qOverP;
    +  delete m_theta;
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      delete m_vertexLink;
    +      delete m_vertexLink_persIndex;
    +      delete m_vertexLink_persKey;
    +    */
    +    delete m_vz;
    +    delete m_z0;
    +  }
    +}
    +
    +void TrackContainer::setTree(TTree *tree)
    +{
    +  ParticleContainer::setTree(tree);
    +
    +  if(m_infoSwitch.m_fitpars){
    +    connectBranch<float>(tree, "chiSquared", &m_chiSquared);
    +    connectBranch<float>(tree, "d0", &m_d0);
    +    connectBranch<std::vector<float> >(tree, "definingParametersCovMatrix", &m_definingParametersCovMatrix);
    +    connectBranch<char>(tree, "expectInnermostPixelLayerHit", &m_expectInnermostPixelLayerHit);
    +    connectBranch<char>(tree, "expectNextToInnermostPixelLayerHit", &m_expectNextToInnermostPixelLayerHit);
    +    connectBranch<float>(tree, "numberDoF", &m_numberDoF);
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    connectBranch<char>(tree, "numberOfInnermostPixelLayerHits", &m_numberOfInnermostPixelLayerHits);
    +    connectBranch<char>(tree, "numberOfNextToInnermostPixelLayerHits", &m_numberOfNextToInnermostPixelLayerHits);
    +    connectBranch<char>(tree, "numberOfPhiHoleLayers", &m_numberOfPhiHoleLayers);
    +    connectBranch<char>(tree, "numberOfPhiLayers", &m_numberOfPhiLayers);
    +    connectBranch<char>(tree, "numberOfPixelDeadSensors", &m_numberOfPixelDeadSensors);
    +    connectBranch<char>(tree, "numberOfPixelHits", &m_numberOfPixelHits);
    +    connectBranch<char>(tree, "numberOfPixelHoles", &m_numberOfPixelHoles);
    +    connectBranch<char>(tree, "numberOfPixelSharedHits", &m_numberOfPixelSharedHits);
    +    connectBranch<char>(tree, "numberOfPrecisionHoleLayers", &m_numberOfPrecisionHoleLayers);
    +    connectBranch<char>(tree, "numberOfPrecisionLayers", &m_numberOfPrecisionLayers);
    +    connectBranch<char>(tree, "numberOfSCTDeadSensors", &m_numberOfSCTDeadSensors);
    +    connectBranch<char>(tree, "numberOfSCTHits", &m_numberOfSCTHits);
    +    connectBranch<char>(tree, "numberOfSCTHoles", &m_numberOfSCTHoles);
    +    connectBranch<char>(tree, "numberOfSCTSharedHits", &m_numberOfSCTSharedHits);
    +    connectBranch<char>(tree, "numberOfTRTHits", &m_numberOfTRTHits);
    +    connectBranch<char>(tree, "numberOfTRTOutliers", &m_numberOfTRTOutliers);
    +  }
    +
    +  connectBranch<float>(tree, "phi", &m_phi);
    +  connectBranch<float>(tree, "qOverP", &m_qOverP);
    +  connectBranch<float>(tree, "theta", &m_theta);
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      connectBranch<Int_t>(tree, "vertexLink", &m_vertexLink);
    +      connectBranch<UInt_t>(tree, "vertexLink_persIndex", &m_vertexLink_persIndex);
    +      connectBranch<UInt_t>(tree, "vertexLink_persKey", &m_vertexLink_persKey);
    +    */
    +    connectBranch<float>(tree, "vz", &m_vz);
    +    connectBranch<float>(tree, "z0", &m_z0);
    +  }
    +}
    +
    +void TrackContainer::updateParticle(uint idx, TrackPart& track)
    +{
    +  if(m_debug) std::cout << "in TrackContainer::updateParticle" << std::endl;
    +  ParticleContainer::updateParticle(idx, track);
    +
    +  if(m_infoSwitch.m_fitpars){
    +    track.chiSquared = m_chiSquared->at(idx);
    +    track.d0 = m_d0->at(idx);
    +    track.definingParametersCovMatrix = m_definingParametersCovMatrix->at(idx);
    +    track.expectInnermostPixelLayerHit = m_expectInnermostPixelLayerHit->at(idx);
    +    track.expectNextToInnermostPixelLayerHit = m_expectNextToInnermostPixelLayerHit->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    track.numberDoF = m_numberDoF->at(idx);
    +    track.numberOfInnermostPixelLayerHits = m_numberOfInnermostPixelLayerHits->at(idx);
    +    track.numberOfNextToInnermostPixelLayerHits = m_numberOfNextToInnermostPixelLayerHits->at(idx);
    +    track.numberOfPhiHoleLayers = m_numberOfPhiHoleLayers->at(idx);
    +    track.numberOfPhiLayers = m_numberOfPhiLayers->at(idx);
    +    track.numberOfPixelDeadSensors = m_numberOfPixelDeadSensors->at(idx);
    +    track.numberOfPixelHits = m_numberOfPixelHits->at(idx);
    +    track.numberOfPixelHoles = m_numberOfPixelHoles->at(idx);
    +    track.numberOfPixelSharedHits = m_numberOfPixelSharedHits->at(idx);
    +    track.numberOfPrecisionHoleLayers = m_numberOfPrecisionHoleLayers->at(idx);
    +    track.numberOfPrecisionLayers = m_numberOfPrecisionLayers->at(idx);
    +    track.numberOfSCTDeadSensors = m_numberOfSCTDeadSensors->at(idx);
    +    track.numberOfSCTHits = m_numberOfSCTHits->at(idx);
    +    track.numberOfSCTHoles = m_numberOfSCTHoles->at(idx);
    +    track.numberOfSCTSharedHits = m_numberOfSCTSharedHits->at(idx);
    +    track.numberOfTRTHits = m_numberOfTRTHits->at(idx);
    +    track.numberOfTRTOutliers = m_numberOfTRTOutliers->at(idx);
    +  }
    +
    +  track.phi = m_phi->at(idx);
    +  track.qOverP = m_qOverP->at(idx);
    +  track.theta = m_theta->at(idx);
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      track.vertexLink = m_vertexLink->at(idx);
    +      track.vertexLink_persIndex = m_vertexLink_persIndex->at(idx);
    +      track.vertexLink_persKey = m_vertexLink_persKey->at(idx);
    +    */
    +    track.vz = m_vz->at(idx);
    +    track.z0 = m_z0->at(idx);
    +  }
    +
    +  if(m_debug) std::cout << "leaving TrackContainer::updateParticle" << std::endl;
    +  return;
    +}
    +
    +void TrackContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +  if(m_infoSwitch.m_fitpars){
    +  setBranch<float>(tree, "chiSquared", m_chiSquared);
    +  setBranch<float>(tree, "d0", m_d0);
    +  setBranch<std::vector<float>>(tree, "definingParametersCovMatrix", m_definingParametersCovMatrix);
    +  setBranch<char>(tree, "expectInnermostPixelLayerHit", m_expectInnermostPixelLayerHit);
    +  setBranch<char>(tree, "expectNextToInnermostPixelLayerHit", m_expectNextToInnermostPixelLayerHit);
    +  setBranch<float>(tree, "numberDoF", m_numberDoF);
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    setBranch<char>(tree, "numberOfInnermostPixelLayerHits", m_numberOfInnermostPixelLayerHits);
    +    setBranch<char>(tree, "numberOfNextToInnermostPixelLayerHits", m_numberOfNextToInnermostPixelLayerHits);
    +    setBranch<char>(tree, "numberOfPhiHoleLayers", m_numberOfPhiHoleLayers);
    +    setBranch<char>(tree, "numberOfPhiLayers", m_numberOfPhiLayers);
    +    setBranch<char>(tree, "numberOfPixelDeadSensors", m_numberOfPixelDeadSensors);
    +    setBranch<char>(tree, "numberOfPixelHits", m_numberOfPixelHits);
    +    setBranch<char>(tree, "numberOfPixelHoles", m_numberOfPixelHoles);
    +    setBranch<char>(tree, "numberOfPixelSharedHits", m_numberOfPixelSharedHits);
    +    setBranch<char>(tree, "numberOfPrecisionHoleLayers", m_numberOfPrecisionHoleLayers);
    +    setBranch<char>(tree, "numberOfPrecisionLayers", m_numberOfPrecisionLayers);
    +    setBranch<char>(tree, "numberOfSCTDeadSensors", m_numberOfSCTDeadSensors);
    +    setBranch<char>(tree, "numberOfSCTHits", m_numberOfSCTHits);
    +    setBranch<char>(tree, "numberOfSCTHoles", m_numberOfSCTHoles);
    +    setBranch<char>(tree, "numberOfSCTSharedHits", m_numberOfSCTSharedHits);
    +    setBranch<char>(tree, "numberOfTRTHits", m_numberOfTRTHits);
    +    setBranch<char>(tree, "numberOfTRTOutliers", m_numberOfTRTOutliers);
    +  }
    +
    +  setBranch<float>(tree, "phi", m_phi);
    +  setBranch<float>(tree, "qOverP", m_qOverP);
    +  setBranch<float>(tree, "theta", m_theta);
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      setBranch<Int_t>(tree, "vertexLink", m_vertexLink);
    +      setBranch<UInt_t>(tree, "vertexLink_persIndex", m_vertexLink_persIndex);
    +      setBranch<UInt_t>(tree, "vertexLink_persKey", m_vertexLink_persKey);
    +    */
    +    setBranch<float>(tree, "vz", m_vz);
    +    setBranch<float>(tree, "z0", m_z0);
    +  }
    +}
    +
    +void TrackContainer::clear()
    +{
    +  ParticleContainer::clear();
    +
    +  if(m_infoSwitch.m_fitpars){
    +    m_chiSquared->clear();
    +    m_d0->clear();
    +    m_definingParametersCovMatrix->clear();
    +    m_expectInnermostPixelLayerHit->clear();
    +    m_expectNextToInnermostPixelLayerHit->clear();
    +    m_numberDoF->clear();
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    m_numberOfInnermostPixelLayerHits->clear();
    +    m_numberOfNextToInnermostPixelLayerHits->clear();
    +    m_numberOfPhiHoleLayers->clear();
    +    m_numberOfPhiLayers->clear();
    +    m_numberOfPixelDeadSensors->clear();
    +    m_numberOfPixelHits->clear();
    +    m_numberOfPixelHoles->clear();
    +    m_numberOfPixelSharedHits->clear();
    +    m_numberOfPrecisionHoleLayers->clear();
    +    m_numberOfPrecisionLayers->clear();
    +    m_numberOfSCTDeadSensors->clear();
    +    m_numberOfSCTHits->clear();
    +    m_numberOfSCTHoles->clear();
    +    m_numberOfSCTSharedHits->clear();
    +    m_numberOfTRTHits->clear();
    +    m_numberOfTRTOutliers->clear();
    +  }
    +
    +  m_phi->clear();
    +  m_qOverP->clear();
    +  m_theta->clear();
    +
    +  if(m_infoSwitch.m_vertex){
    +    /*
    +      m_vertexLink->clear();
    +      m_vertexLink_persIndex->clear();
    +      m_vertexLink_persKey->clear();
    +    */
    +    m_vz->clear();
    +    m_z0->clear();
    +  }
    +}
    +
    +void TrackContainer::FillTrack( const xAOD::TrackParticle* track ){
    +  return FillTrack(static_cast<const xAOD::IParticle*>(track));
    +}
    +
    +void TrackContainer::FillTrack( const xAOD::IParticle* particle ){
    +  if(m_debug) std::cout << "In Fill Track" << std::endl;
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::TrackParticle* track=dynamic_cast<const xAOD::TrackParticle*>(particle);
    +  if(m_debug) std::cout << "Got TrackParticle" << std::endl;
    +
    +  if(m_infoSwitch.m_fitpars){
    +    if(m_debug) std::cout << "Filling fitpars" << std::endl;
    +
    +    m_chiSquared->push_back( track->chiSquared() );
    +    m_d0->push_back( track->d0() );
    +    m_numberDoF->push_back( track->numberDoF() );
    +    //m_definingParametersCovMatrix ->push_back(track->definingParametersCovMatrix() ); // fix this too
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> expectInnermostPixelLayerHit("expectInnermostPixelLayerHit");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, expectInnermostPixelLayerHit, m_expectInnermostPixelLayerHit, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> expectNextToInnermostPixelLayerHit("expectNextToInnermostPixelLayerHit");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, expectNextToInnermostPixelLayerHit, m_expectNextToInnermostPixelLayerHit, -1);
    +  }
    +
    +  if(m_infoSwitch.m_numbers){
    +    if(m_debug) std::cout << "Filling numbers" << std::endl;
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfInnermostPixelLayerHits("numberOfInnermostPixelLayerHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfInnermostPixelLayerHits, m_numberOfInnermostPixelLayerHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfNextToInnermostPixelLayerHits("numberOfNextToInnermostPixelLayerHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfNextToInnermostPixelLayerHits, m_numberOfNextToInnermostPixelLayerHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPhiHoleLayers("numberOfPhiHoleLayers");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPhiHoleLayers, m_numberOfPhiHoleLayers, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPhiLayers("numberOfPhiLayers");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPhiLayers, m_numberOfPhiLayers, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPixelDeadSensors("numberOfPixelDeadSensors");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPixelDeadSensors, m_numberOfPixelDeadSensors, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPixelHits("numberOfPixelHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPixelHits, m_numberOfPixelHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPixelHoles("numberOfPixelHoles");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPixelHoles, m_numberOfPixelHoles, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPixelSharedHits("numberOfPixelSharedHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPixelSharedHits, m_numberOfPixelSharedHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPrecisionHoleLayers("numberOfPrecisionHoleLayers");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPrecisionHoleLayers, m_numberOfPrecisionHoleLayers, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfPrecisionLayers("numberOfPrecisionLayers");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfPrecisionLayers, m_numberOfPrecisionLayers, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfSCTDeadSensors("numberOfSCTDeadSensors");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfSCTDeadSensors, m_numberOfSCTDeadSensors, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfSCTHits("numberOfSCTHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfSCTHits, m_numberOfSCTHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfSCTHoles("numberOfSCTHoles");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfSCTHoles, m_numberOfSCTHoles, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfSCTSharedHits("numberOfSCTSharedHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfSCTSharedHits, m_numberOfSCTSharedHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfTRTHits("numberOfTRTHits");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfTRTHits, m_numberOfTRTHits, -1);
    +
    +    static SG::AuxElement::ConstAccessor<unsigned char> numberOfTRTOutliers("numberOfTRTOutliers");
    +    safeFill<unsigned char, char, xAOD::TrackParticle>(track, numberOfTRTOutliers, m_numberOfTRTOutliers, -1);
    +  }
    +
    +  m_phi->push_back(track->phi() );
    +  m_qOverP->push_back(track->qOverP() );
    +  m_theta->push_back(track->theta() );
    +
    +  if(m_infoSwitch.m_vertex){
    +    if(m_debug) std::cout << "Filling vertex" << std::endl;
    +
    +    //static SG::AuxElement::ConstAccessor<int> vertexLink("vertexLink");
    +    /*
    +      m_vertexLink->push_back(vertexLink(*track) );
    +      //m_vertexLink_persIndex->push_back(track->vertexLink.m_persIndex() );
    +      //m_vertexLink_persKey->push_back(track->vertexLink.m_persKey() );
    +      m_vertexLink_persIndex->push_back( -999 );
    +      m_vertexLink_persKey->push_back( -999 );
    +    */
    +    m_vz->push_back(track->vz() );
    +    m_z0->push_back(track->z0() );
    +  }
    +
    +  if(m_debug) std::cout << "Leave Fill Track" << std::endl;
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TrackHists.cxx.html b/api/program_listing_file_Root_TrackHists.cxx.html new file mode 100644 index 0000000000..4815238e0a --- /dev/null +++ b/api/program_listing_file_Root_TrackHists.cxx.html @@ -0,0 +1,578 @@ + + + + + + + + + + + Program Listing for File TrackHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackHists.cxx

    +

    Return to documentation for file (Root/TrackHists.cxx)

    +
    #include "xAODAnaHelpers/TrackHists.h"
    +
    +#include <math.h>
    +
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +ANA_MSG_SOURCE(msgTrackHists, "TrackHists")
    +
    +TrackHists :: TrackHists (std::string name, std::string detailStr) :
    +  HistogramManager(name, detailStr)
    +{
    +}
    +
    +TrackHists :: ~TrackHists () {}
    +
    +StatusCode TrackHists::initialize() {
    +
    +  // These plots are always made
    +  m_trk_n         = book(m_name, "trk_n",       "trk multiplicity", 10, -0.5, 9.5 );
    +  m_trk_n_l       = book(m_name, "trk_n_l",     "trk multiplicity", 100, -0.5, 99.5 );
    +
    +  m_trk_Pt        = book(m_name, "pt",          "trk p_{T} [GeV]", 100, 0, 10 );
    +  m_trk_Pt_l      = book(m_name, "pt_l",        "trk p_{T} [GeV]", 100, 0, 100 );
    +  m_trk_P         = book(m_name, "p",           "trk |p| [GeV]", 100, 0, 10 );
    +  m_trk_P_l       = book(m_name, "p_l",         "trk |p| [GeV]", 100, 0, 100 );
    +  m_trk_Eta       = book(m_name, "eta",         "trk #eta", 80, -4, 4);
    +  m_trk_Phi       = book(m_name, "phi",         "trk #phi",120, -TMath::Pi(), TMath::Pi() );
    +  m_trk_d0        = book(m_name, "d0",          "d0[mm]", 100,-5.0, 5.0 );
    +  m_trk_d0_s      = book(m_name, "d0_s" ,       "d0[mm]", 100,  -1.0, 1.0 );
    +
    +  m_trk_z0        = book(m_name, "z0",          "z0[mm]", 100,-5.0, 5.0 );
    +  m_trk_z0_s      = book(m_name, "z0_s",        "z0[mm]", 100,-1.0, 1.0 );
    +  m_trk_z0sinT    = book(m_name, "z0sinT",      "z0xsin(#theta)[mm]", 100, -5.0, 5.0 );
    +
    +  m_trk_chi2Prob  = book(m_name, "chi2Prob",    "chi2Prob", 100,   -0.01,     1.0);
    +  m_trk_charge    = book(m_name, "charge" ,     "charge",   3,  -1.5,  1.5   );
    +
    +  //
    +  //  2D plots
    +  //
    +  m_fill2D = false;
    +  if(m_detailStr.find("2D") != std::string::npos ){
    +    m_fill2D = true;
    +
    +    m_trk_Eta_vs_trk_P            = book(m_name, "trk_Eta_vs_trk_P",                "trk |p| [GeV]", 100, 0, 10, "trk #eta", 80, -4, 4);
    +    m_trk_Eta_vs_trk_P_l          = book(m_name, "trk_Eta_vs_trk_P_l",              "trk |p| [GeV]", 100, 0, 100, "trk #eta", 80, -4, 4);
    +    m_trk_Phi_vs_trk_P            = book(m_name, "trk_Phi_vs_trk_P",                "trk |p| [GeV]", 100, 0, 10, "trk #phi",120, -TMath::Pi(), TMath::Pi());
    +    m_trk_Phi_vs_trk_P_l          = book(m_name, "trk_Phi_vs_trk_P_l",              "trk |p| [GeV]", 100, 0, 100, "trk #phi",120, -TMath::Pi(), TMath::Pi());
    +    m_trk_Eta_vs_trk_Phi          = book(m_name, "trk_Eta_vs_trk_Phi",              "trk #phi", 120, -TMath::Pi(), TMath::Pi(), "trk #eta", 80, -4, 4);
    +
    +    m_trk_d0_vs_trk_P             = book(m_name, "trk_d0_vs_trk_P",                 "trk |p| [GeV]", 100, 0, 10, "d0[mm]", 100,-5.0, 5.0);
    +    m_trk_d0_vs_trk_P_l           = book(m_name, "trk_d0_vs_trk_P_l",               "trk |p| [GeV]", 100, 0, 100, "d0[mm]", 100,-5.0, 5.0);
    +    m_trk_z0_vs_trk_P             = book(m_name, "trk_z0_vs_trk_P",                 "trk |p| [GeV]", 100, 0, 10, "z0[mm]", 100,-5.0, 5.0);
    +    m_trk_z0_vs_trk_P_l           = book(m_name, "trk_z0_vs_trk_P_l",               "trk |p| [GeV]", 100, 0, 100, "z0[mm]", 100,-5.0, 5.0);
    +    m_trk_z0sinT_vs_trk_P         = book(m_name, "trk_z0sinT_vs_trk_P",             "trk |p| [GeV]", 100, 0, 10, "z0xsin(#theta)[mm]", 100,-5.0, 5.0);
    +    m_trk_z0sinT_vs_trk_P_l       = book(m_name, "trk_z0sinT_vs_trk_P_l",           "trk |p| [GeV]", 100, 0, 100, "z0xsin(#theta)[mm]", 100,-5.0, 5.0);
    +  }
    +
    +  //
    +  //  IP Details
    +  //
    +  m_fillIPDetails = false;
    +  if(m_detailStr.find("IPDetails") != std::string::npos ){
    +    m_fillIPDetails = true;
    +
    +    m_trk_d0Err        = book(m_name, "d0Err",            "d0Err[mm]",        100,  0, 0.4 );
    +    m_trk_d0_l         = book(m_name, "d0_l" ,            "d0[mm]",           100,  -10.0, 10.0 );
    +    m_trk_d0_ss        = book(m_name, "d0_ss" ,           "d0[mm]",           100,  -0.2, 0.2 );
    +
    +    m_trk_d0Sig        = book(m_name, "d0Sig",            "d0Sig",            240,  -20.0, 40.0 );
    +
    +    m_trk_z0_l         = book(m_name, "z0_l" ,            "z0[mm]",                         100,  -600.0, 600.0 );
    +    m_trk_z0sinT_l     = book(m_name, "z0sinT_l",         "z0xsin(#theta)[mm]",             100,  -20.0, 20.0 );
    +    m_trk_z0Err        = book(m_name, "z0Err",            "z0Err[mm]",                      100,   0, 0.4 );
    +    m_trk_z0Sig        = book(m_name, "z0Sig",            "z0Sig",                          100,  -25.0, 25.0 );
    +    m_trk_z0SigsinT    = book(m_name, "z0SigsinT",        "z0 significance x sin(#theta)",  100,  -25.0, 25.0 );
    +
    +    //m_trk_mc_prob      = book(m_name, "mc_prob",      "mc_prob",     100,  -0.1, 1.1 );
    +    //m_trk_mc_barcode   = book(m_name, "mc_barcode",   "mc_barcode",  100,  -0.1, 0.5e6 );
    +    //m_trk_mc_barcode_s = book(m_name, "mc_barcode_s", "mc_barcode",  100,  -0.1, 25e3 );
    +  }
    +
    +  //
    +  //  Fill Hit Counts Details
    +  //
    +  m_fillHitCounts = false;
    +  if(m_detailStr.find("HitCounts") != std::string::npos ){
    +    m_fillHitCounts = true;
    +    m_trk_nSi        = book(m_name, "nSi",        "nSi",         30,   -0.5, 29.5 );
    +    m_trk_nSiAndDead = book(m_name, "nSiAndDead", "nSi(+Dead)",  30,   -0.5, 29.5 );
    +    m_trk_nSiDead    = book(m_name, "nSiDead",    "nSiDead",     10,   -0.5,  9.5 );
    +    m_trk_nSCT       = book(m_name, "nSCT",       "nSCTHits",    20,   -0.5, 19.5 );
    +    m_trk_nPix       = book(m_name, "nPix",       "nPix",        10,   -0.5,  9.5 );
    +    m_trk_nPixHoles  = book(m_name, "nPixHoles",  "nPixHoles",   10,   -0.5,  9.5 );
    +    m_trk_nBL        = book(m_name, "nBL",        "nBL",          3,   -0.5,  2.5 );
    +    m_trk_nTRT       = book(m_name, "nTRT",       "nTRT",        50,   -0.5, 49.5 );
    +    // m_trk_nTRTHoles  = book(m_name, "nTRTHoles",  "nTRTHoles",   50,   -0.5, 49.5 );
    +    // m_trk_nTRTDead   = book(m_name, "nTRTDead",   "nTRTDead",    50,   -0.5, 49.5 );
    +  }
    +
    +  //
    +  //  TP Errors Details
    +  //
    +  m_fillTPErrors = false;
    +  if(m_detailStr.find("TPErrors") != std::string::npos ){
    +    m_fillTPErrors = true;
    +
    +    //m_chi2ndof TProfile(m_name, "chi2ndofvseta",  "chi2ndofvseta;    eta;       chi2",  20,  -0.1, 2.7, 0, 4, "s" );
    +    //new TProfile(m_name, "chi2ndofvseta",  "chi2ndofvseta;    eta;       chi2",  20,  -0.1, 2.7, 0, 4, "s" );
    +    //new TProfile(m_name, "nhitsvseta",  "nhitsvseta;    eta;       nhits",  20,  -0.1, 2.7, 0, 15 , "s" );
    +    //new TProfile(m_name, "chi2ndofvspt",  "chi2ndofvseta;    pt;       chi2",  50,  -0.1, 20, 0 , 4, "s" );
    +
    +    //  new TProfile(m_name, "d0Errvseta",      "d0Errvseta;    eta;       d0Err",  20,  -0.1, 2.7, 0, 0.4, "s" );
    +    //  new TProfile(m_name, "d0ErrvsIpt",      "d0ErrvsIpt;    Ipt;       d0Err",  20,  -6e-4, 6e4, 0, 0.4, "s" );
    +    //  new TProfile(m_name, "d0Errvsphi",      "d0Errvsphi;    phi;       d0Err",  1000,  -3.2, 3.2, 0, 0.4);
    +    //
    +
    +    //  new TH2F(m_name, "z0d0"    ,    "z0d0;     z0[mm];  d0[mm];",  50,  -300.0, 300.0, 50, -4.0, 4.0  );
    +    //  new TH2F(m_name, "z0sinTd0",    "z0sinTd0;     z0xsin0[mm](signed);  d0[mm](signed);",  50,-2.0, 2.0, 50, -2.0, 2.0  );
    +
    +    //  new TH2F(m_name, "d0vsPt"    ,    "d0vsPt;     d0[mm] (signed);  Pt[GeV];",  100,  -2,2.0, 50, 0, 10  );
    +    //  new TH2F(m_name, "d0SigvsPt"    ,    "d0SigvsPt;     d0Sig(signed);  Pt[GeV];",  240, -20, 40.0, 50, 0, 10  );
    +    m_trk_phiErr       = book(m_name, "phiErr"  ,   "phi Err[rad]",  100,  0, 0.01 );
    +    m_trk_thetaErr     = book(m_name, "thetaErr",   "theta Err",     100,  0, 0.01 );
    +    m_trk_qOpErr       = book(m_name, "qOpErr"  ,   "q/p Err",       100,  0, 1.0e-04);
    +  }
    +
    +  //
    +  //  Chi2 Details
    +  //
    +  m_fillChi2Details = false;
    +  if(m_detailStr.find("Chi2Details") != std::string::npos ){
    +    m_fillChi2Details = true;
    +    m_trk_chi2Prob_l   = book(m_name, "chi2Prob_l",       "chi2Prob",  100,   -0.1,     1.1);
    +    m_trk_chi2Prob_s   = book(m_name, "chi2Prob_s",       "chi2Prob",  100,   -0.01,    0.1);
    +    m_trk_chi2Prob_ss  = book(m_name, "chi2Prob_ss",      "chi2Prob",  100,   -0.001,   0.01);
    +    m_trk_chi2ndof     = book(m_name, "chi2ndof",         "chi2ndof",  100,    0.0,     8.0 );
    +    m_trk_chi2ndof_l   = book(m_name, "chi2ndof_l",       "chi2ndof",  100,    0.0,     80.0 );
    +  }
    +
    +  //
    +  // TrkDebugging
    +  //
    +  m_fillDebugging = false;
    +  if(m_detailStr.find("Debugging") != std::string::npos ){
    +    m_fillDebugging = true;
    +    m_trk_eta_vl      = book(m_name, "eta_vl",        "eta",       100,  -6,    6     );
    +    m_trk_z0_vl       = book(m_name, "z0_vl",         "z0[mm]",    100,  -10000.0, 10000.0 );
    +    m_trk_z0_raw_m    = book(m_name, "z0_raw_m",      "z0[mm]",   100,  -100.0,  100.0 );
    +    m_trk_z0_atlas_m  = book(m_name, "z0_atlas_m",   "z0[mm]",   100,  -100.0,  100.0 );
    +    m_trk_vz          = book(m_name, "vz",            "z0[mm]",   100,  -100.0,  100.0 );
    +    m_trk_z0_m        = book(m_name, "z0_m",         "z0[mm]",   100,  -100.0,  100.0 );
    +    m_trk_d0_vl       = book(m_name, "d0_vl",         "d0[mm]",    100,  -10000.0, 10000.0 );
    +    m_trk_pt_ss       = book(m_name, "pt_ss",         "Pt[GeV",    100,  0,     2.0  );
    +    m_trk_phiManyBins = book(m_name, "phiManyBins" ,  "phi",      1000,  -3.2,  3.2   );
    +
    +  }
    +
    +  //
    +  // vs Lumi Block
    +  //
    +  m_fillVsLumi = false;
    +  if(m_detailStr.find("vsLumiBlock") != std::string::npos ){
    +    m_fillVsLumi = true;
    +
    +    m_lBlock                  = book(m_name, "lBlock",                "LumiBlock",  100, 0, 1000);
    +    m_trk_z0_vs_lBlock        = book(m_name, "z0_vs_lBlock",          "LumiBlock",  100, 0, 1000, "z0",      -100, 100);
    +    m_trk_z0_raw_vs_lBlock    = book(m_name, "z0_raw_vs_lBlock",      "LumiBlock",  100, 0, 1000, "z0 raw",  -100, 100);
    +    m_trk_z0_atlas_vs_lBlock  = book(m_name, "z0_atlas_vs_lBlock",    "LumiBlock",  100, 0, 1000, "z0 atlas", -100, 100);
    +
    +    m_trk_vz_vs_lBlock        = book(m_name, "vz_vs_lBlock",          "LumiBlock",  100, 0, 1000, "vz",       -100, 100);
    +    m_pvz_vs_lBlock           = book(m_name, "pvz_vs_lBlock",         "LumiBlock",  100, 0, 1000, "pvz",      -100, 100);
    +    m_pv_valid_vs_lBlock      = book(m_name, "pv_valid_vs_lBlock",    "LumiBlock",  100, 0, 1000, "valid",    -0.1, 1.1);
    +
    +
    +    m_bsX                     = book(m_name, "bsX",                "beamPos X",  100, -10, 10);
    +    m_bsY                     = book(m_name, "bsY",                "beamPos Y",  100, -10, 10);
    +    m_bsZ                     = book(m_name, "bsZ",                "beamPos Z",  100, -10, 10);
    +    m_bsX_vs_lBlock           = book(m_name, "bsX_vs_lBlock",      "LumiBlock",  100, 0, 1000, "bxX", -1, 1);
    +    m_bsY_vs_lBlock           = book(m_name, "bsY_vs_lBlock",      "LumiBlock",  100, 0, 1000, "bsY", -1, 1);
    +    m_bsZ_vs_lBlock           = book(m_name, "bsZ_vs_lBlock",      "LumiBlock",  100, 0, 1000, "bsZ", -10, 10);
    +
    +    //m_trk_eta_vl      = book(m_name, "eta_vl",        "eta",       100,  -6,    6     );
    +    //m_trk_z0_vl       = book(m_name, "z0_vl",         "z0[mm]",    100,  -10000.0, 10000.0 );
    +    //m_trk_z0_m_raw    = book(m_name, "z0_m_raw",         "z0[mm]",   100,  -100.0,  100.0 );
    +    //m_trk_z0_m        = book(m_name, "z0_m",         "z0[mm]",   100,  -100.0,  100.0 );
    +    //m_trk_d0_vl       = book(m_name, "d0_vl",         "d0[mm]",    100,  -10000.0, 10000.0 );
    +    //m_trk_pt_ss       = book(m_name, "pt_ss",         "Pt[GeV",    100,  0,     2.0  );
    +    //m_trk_phiManyBins = book(m_name, "phiManyBins" ,  "phi",      1000,  -3.2,  3.2   );
    +
    +  }
    +
    +
    +  // if worker is passed to the class add histograms to the output
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode TrackHists::execute( const xAOD::TrackParticleContainer* trks, const xAOD::Vertex *pvx, float eventWeight,  const xAOD::EventInfo* eventInfo ) {
    +  using namespace msgTrackHists;
    +  xAOD::TrackParticleContainer::const_iterator trk_itr = trks->begin();
    +  xAOD::TrackParticleContainer::const_iterator trk_end = trks->end();
    +  for( ; trk_itr != trk_end; ++trk_itr ) {
    +    ANA_CHECK( this->execute( (*trk_itr), pvx, eventWeight, eventInfo ));
    +  }
    +
    +  m_trk_n -> Fill( trks->size(), eventWeight );
    +  m_trk_n_l -> Fill( trks->size(), eventWeight );
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode TrackHists::execute( const xAOD::TrackParticle* trk, const xAOD::Vertex *pvx, float eventWeight,  const xAOD::EventInfo* eventInfo ) {
    +
    +  //basic
    +  float        trkPt       = trk->pt()/1e3;
    +  float        trkP        = -1;
    +  if (fabs(trk->qOverP())>0.) trkP = (1./fabs(trk->qOverP()))/1e3;
    +  float        trkEta      = trk->eta();
    +  float        trkPhi      = trk->phi();
    +  float        chi2        = trk->chiSquared();
    +  float        ndof        = trk->numberDoF();
    +  float        chi2Prob    = TMath::Prob(chi2,ndof);
    +  float        d0          = trk->d0();
    +  float        pvz         = HelperFunctions::getPrimaryVertexZ(pvx);
    +  float        z0          = trk->z0() + trk->vz() - pvz;
    +
    +  float        sinT        = sin(trk->theta());
    +
    +  m_trk_Pt       -> Fill( trkPt,            eventWeight );
    +  m_trk_Pt_l     -> Fill( trkPt,            eventWeight );
    +  m_trk_P        -> Fill( trkP,             eventWeight );
    +  m_trk_P_l      -> Fill( trkP,             eventWeight );
    +  m_trk_Eta      -> Fill( trkEta,           eventWeight );
    +  m_trk_Phi      -> Fill( trkPhi,           eventWeight );
    +  m_trk_d0       -> Fill( d0,               eventWeight );
    +  m_trk_d0_s     -> Fill( d0,               eventWeight );
    +  m_trk_z0       -> Fill( z0,               eventWeight );
    +  m_trk_z0_s     -> Fill( z0,               eventWeight );
    +  m_trk_z0sinT   -> Fill(z0*sinT,           eventWeight );
    +
    +  m_trk_chi2Prob -> Fill( chi2Prob ,        eventWeight );
    +  m_trk_charge   -> Fill( trk->charge() ,   eventWeight );
    +
    +  if(m_fill2D){
    +
    +    m_trk_Eta_vs_trk_P       -> Fill( trkP,   trkEta,   eventWeight );
    +    m_trk_Eta_vs_trk_P_l     -> Fill( trkP,   trkEta,   eventWeight );
    +    m_trk_Phi_vs_trk_P       -> Fill( trkP,   trkPhi,   eventWeight );
    +    m_trk_Phi_vs_trk_P_l     -> Fill( trkP,   trkPhi,   eventWeight );
    +    m_trk_Eta_vs_trk_Phi     -> Fill( trkPhi, trkEta,   eventWeight );
    +    m_trk_d0_vs_trk_P        -> Fill( trkP,   d0,       eventWeight );
    +    m_trk_d0_vs_trk_P_l      -> Fill( trkP,   d0,       eventWeight );
    +    m_trk_z0_vs_trk_P        -> Fill( trkP,   z0,       eventWeight );
    +    m_trk_z0_vs_trk_P_l      -> Fill( trkP,   z0,       eventWeight );
    +    m_trk_z0sinT_vs_trk_P    -> Fill( trkP,   z0*sinT,  eventWeight );
    +    m_trk_z0sinT_vs_trk_P_l  -> Fill( trkP,   z0*sinT,  eventWeight );
    +
    +  }
    +
    +  if(m_fillIPDetails){
    +    float d0Err = sqrt((trk->definingParametersCovMatrixVec().at(0)));
    +    float d0Sig = (d0Err > 0) ? d0/d0Err : -1 ;
    +    m_trk_d0_l         -> Fill(d0    , eventWeight );
    +    m_trk_d0_ss        -> Fill(d0    , eventWeight );
    +    m_trk_d0Err        -> Fill(d0Err , eventWeight );
    +    m_trk_d0Sig        -> Fill(d0Sig , eventWeight );
    +
    +    float z0Err = sqrt((trk->definingParametersCovMatrixVec().at(2)));
    +    float z0Sig = (z0Err > 0) ? z0/z0Err : -1 ;
    +
    +    m_trk_z0_l         -> Fill(z0         , eventWeight );
    +    m_trk_z0sinT_l     -> Fill(z0*sinT,     eventWeight );
    +    m_trk_z0Err        -> Fill(z0Err      , eventWeight );
    +    m_trk_z0Sig        -> Fill(z0Sig      , eventWeight );
    +    m_trk_z0SigsinT    -> Fill(z0Sig*sinT , eventWeight );
    +
    +  }
    +
    +  if(m_fillHitCounts){
    +
    +    uint8_t nBL       = -1;
    +    uint8_t nPix      = -1;
    +    uint8_t nPixDead  = -1;
    +    uint8_t nPixHoles = -1;
    +    uint8_t nSCT      = -1;
    +    uint8_t nSCTDead  = -1;
    +    uint8_t nTRT      = -1;
    +    //uint8_t nTRTHoles = -1;
    +    //uint8_t nTRTDead  = -1;
    +
    +    if(!trk->summaryValue(nBL,       xAOD::numberOfBLayerHits))       ANA_MSG_ERROR("BLayer hits not filled");
    +    if(!trk->summaryValue(nPix,      xAOD::numberOfPixelHits))        ANA_MSG_ERROR("Pix hits not filled");
    +    if(!trk->summaryValue(nPixDead,  xAOD::numberOfPixelDeadSensors)) ANA_MSG_ERROR("Pix Dead not filled");
    +    if(!trk->summaryValue(nPixHoles, xAOD::numberOfPixelHoles))       ANA_MSG_ERROR("Pix holes not filled");
    +    if(!trk->summaryValue(nSCT,      xAOD::numberOfSCTHits))          ANA_MSG_ERROR("SCT hits not filled");
    +    if(!trk->summaryValue(nSCTDead,  xAOD::numberOfSCTDeadSensors))   ANA_MSG_ERROR("SCT Dead not filled");
    +    if(!trk->summaryValue(nTRT,      xAOD::numberOfTRTHits))          ANA_MSG_ERROR("TRT hits not filled");
    +    // if(!trk->summaryValue(nTRTHoles, xAOD::numberOfTRTHoles))         ANA_MSG_ERROR("TRT holes not filled");
    +    // if(!trk->summaryValue(nTRTDead,  xAOD::numberOfTRTDeadStraws))    ANA_MSG_ERROR("TRT Dead not filled");
    +
    +    uint8_t nSi     = nPix     + nSCT;
    +    uint8_t nSiDead = nPixDead + nSCTDead;
    +    m_trk_nBL        -> Fill( nBL         , eventWeight );
    +    m_trk_nSi        -> Fill( nSi         , eventWeight );
    +    m_trk_nSiAndDead -> Fill( nSi+nSiDead , eventWeight );
    +    m_trk_nSiDead    -> Fill( nSiDead     , eventWeight );
    +    m_trk_nSCT       -> Fill( nSCT        , eventWeight );
    +    m_trk_nPix       -> Fill( nPix        , eventWeight );
    +    m_trk_nPixHoles  -> Fill( nPixHoles   , eventWeight );
    +    m_trk_nTRT       -> Fill( nTRT        , eventWeight );
    +    // m_trk_nTRTHoles  -> Fill( nTRTHoles   , eventWeight );
    +    // m_trk_nTRTDead   -> Fill( nTRTDead    , eventWeight );
    +
    +  }
    +
    +  if(m_fillTPErrors){
    +    //m_trk_phiErr       -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(6))) , eventWeight );
    +    //m_trk_thetaErr     -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(10))) , eventWeight );
    +    //m_trk_qOpErr       -> Fill( sqrt((trk->definingParametersCovMatrixVec().at(15))) , eventWeight );
    +  }
    +
    +  if(m_fillChi2Details){
    +    float chi2NDoF     = (ndof > 0) ? chi2/ndof : -1;
    +    m_trk_chi2Prob_l   -> Fill(chi2Prob   , eventWeight );
    +    m_trk_chi2Prob_s   -> Fill(chi2Prob   , eventWeight );
    +    m_trk_chi2Prob_ss  -> Fill(chi2Prob   , eventWeight );
    +    m_trk_chi2ndof     -> Fill(chi2NDoF   , eventWeight );
    +    m_trk_chi2ndof_l   -> Fill(chi2NDoF   , eventWeight );
    +  }
    +
    +  if(m_fillDebugging){
    +    m_trk_eta_vl      -> Fill( trkEta,     eventWeight );
    +    m_trk_z0_vl       -> Fill( z0,         eventWeight );
    +    m_trk_z0_m        -> Fill( z0,         eventWeight );
    +    m_trk_z0_raw_m    -> Fill( trk->z0(),  eventWeight );
    +    m_trk_z0_atlas_m  -> Fill( trk->z0() + trk->vz(),  eventWeight );
    +    m_trk_vz          -> Fill( trk->vz(),  eventWeight );
    +    m_trk_d0_vl       -> Fill( d0,         eventWeight );
    +    m_trk_pt_ss       -> Fill( trkPt,      eventWeight );
    +    m_trk_phiManyBins -> Fill( trkPhi,     eventWeight );
    +  }
    +
    +  if(m_fillVsLumi && eventInfo){
    +    uint32_t lumiBlock = eventInfo->lumiBlock();
    +
    +    m_lBlock                ->Fill(lumiBlock, eventWeight);
    +    m_trk_z0_vs_lBlock      ->Fill(lumiBlock, z0,                     eventWeight);
    +    m_trk_z0_raw_vs_lBlock  ->Fill(lumiBlock, trk->z0(),              eventWeight);
    +    m_trk_z0_atlas_vs_lBlock->Fill(lumiBlock, trk->z0() + trk->vz(),  eventWeight);
    +    m_trk_vz_vs_lBlock      ->Fill(lumiBlock, trk->vz(),              eventWeight);
    +    m_pvz_vs_lBlock         ->Fill(lumiBlock, pvz,                    eventWeight);
    +
    +    m_pv_valid_vs_lBlock    ->Fill(lumiBlock, bool(pvx),              eventWeight);
    +
    +    m_bsX    ->Fill(eventInfo->beamPosX(),              eventWeight);
    +    m_bsY    ->Fill(eventInfo->beamPosY(),              eventWeight);
    +    m_bsZ    ->Fill(eventInfo->beamPosZ(),              eventWeight);
    +
    +    m_bsX_vs_lBlock    ->Fill(lumiBlock, eventInfo->beamPosX(),              eventWeight);
    +    m_bsY_vs_lBlock    ->Fill(lumiBlock, eventInfo->beamPosY(),              eventWeight);
    +    m_bsZ_vs_lBlock    ->Fill(lumiBlock, eventInfo->beamPosZ(),              eventWeight);
    +
    +  }
    +
    +  return StatusCode::SUCCESS;
    +
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TrackHistsAlgo.cxx.html b/api/program_listing_file_Root_TrackHistsAlgo.cxx.html new file mode 100644 index 0000000000..879361453a --- /dev/null +++ b/api/program_listing_file_Root_TrackHistsAlgo.cxx.html @@ -0,0 +1,303 @@ + + + + + + + + + + + Program Listing for File TrackHistsAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackHistsAlgo.cxx

    +

    Return to documentation for file (Root/TrackHistsAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +#include <xAODAnaHelpers/TrackHistsAlgo.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TrackHistsAlgo)
    +
    +TrackHistsAlgo :: TrackHistsAlgo () :
    +    Algorithm("TrackHistsAlgo")
    +{
    +}
    +
    +EL::StatusCode TrackHistsAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +
    +  // let's initialize the algorithm to use the xAODRootAccess package
    +  xAOD::Init("TrackHistsAlgo").ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrackHistsAlgo :: histInitialize ()
    +{
    +
    +  ANA_MSG_INFO( m_name );
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  // needed here and not in initalize since this is called first
    +  if( m_inContainerName.empty() || m_detailStr.empty() ){
    +    ANA_MSG_ERROR( "One or more required configuration values are empty");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +
    +  // declare class and add histograms to output
    +  m_plots = new TrackHists(m_name, m_detailStr);
    +  ANA_CHECK( m_plots -> initialize());
    +  m_plots -> record( wk() );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrackHistsAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode TrackHistsAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode TrackHistsAlgo :: initialize ()
    +{
    +  ANA_MSG_INFO( "TrackHistsAlgo");
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrackHistsAlgo :: execute ()
    +{
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +
    +  float eventWeight(1);
    +  if( eventInfo->isAvailable< float >( "mcEventWeight" ) ) {
    +    eventWeight = eventInfo->auxdecor< float >( "mcEventWeight" );
    +  }
    +
    +  const xAOD::TrackParticleContainer* tracks(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(tracks, m_inContainerName, m_event, m_store, msg()) );
    +
    +  // get primary vertex
    +  const xAOD::VertexContainer *vertices(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +  const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg());
    +
    +  ANA_CHECK( m_plots->execute( tracks, pvx, eventWeight, eventInfo ));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrackHistsAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode TrackHistsAlgo :: finalize () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode TrackHistsAlgo :: histFinalize ()
    +{
    +  // clean up memory
    +  if(m_plots) delete m_plots;
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TrackSelector.cxx.html b/api/program_listing_file_Root_TrackSelector.cxx.html new file mode 100644 index 0000000000..d0fa675d39 --- /dev/null +++ b/api/program_listing_file_Root_TrackSelector.cxx.html @@ -0,0 +1,670 @@ + + + + + + + + + + + Program Listing for File TrackSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackSelector.cxx

    +

    Return to documentation for file (Root/TrackSelector.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/Worker.h>
    +
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +#include "xAODAnaHelpers/TrackSelector.h"
    +#include "InDetTrackSelectionTool/InDetTrackSelectionTool.h"
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +using std::vector;
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TrackSelector)
    +
    +
    +TrackSelector :: TrackSelector () :
    +    Algorithm("TrackSelector")
    +{
    +}
    +
    +EL::StatusCode TrackSelector :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_DEBUG("Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TrackSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +
    +  ANA_MSG_DEBUG("Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +
    +  ANA_MSG_DEBUG("Calling fileExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +
    +  ANA_MSG_DEBUG("Calling changeInput");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +
    +  if(m_useCutFlow) {
    +    TFile *file = wk()->getOutputFile (m_cutFlowStreamName);
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +  }
    +
    +  // parse and split by comma
    +  std::string token;
    +  std::istringstream ss(m_passAuxDecorKeys);
    +  while(std::getline(ss, token, ',')){
    +    m_passKeys.push_back(token);
    +  }
    +  ss.clear();
    +  ss.str(m_failAuxDecorKeys);
    +  while(std::getline(ss, token, ',')){
    +    m_failKeys.push_back(token);
    +  }
    +
    +
    +  if( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_DEBUG("Number of events in file: " << m_event->getEntries() );
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +  ANA_MSG_DEBUG( "Initializing InDetTrackSelectionTool..." );
    +  if(m_pT_min                           != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minPt",                           m_pT_min));
    +  if(m_p_min                            != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minP",                            m_p_min));
    +  if(m_eta_max                          != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxAbsEta",                       m_eta_max));
    +  if(m_d0_max                           != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxD0",                           m_d0_max));
    +  if(m_sigmad0_max                      != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaD0",                      m_sigmad0_max));
    +  if(m_d0oversigmad0_max                != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxD0overSigmaD0",                m_d0oversigmad0_max));
    +  if(m_z0_max                           != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0",                           m_z0_max));
    +  if(m_z0sinT_max                       != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0SinTheta",                   m_z0sinT_max));
    +  if(m_sigmaz0_max                      != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaZ0",                      m_sigmaz0_max));
    +  if(m_sigmaz0sintheta_max              != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxSigmaZ0SinTheta",              m_sigmaz0sintheta_max));
    +  if(m_z0oversigmaz0_max                != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0overSigmaZ0",                m_z0oversigmaz0_max));
    +  if(m_z0sinthetaoversigmaz0sintheta_max!= 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxZ0SinThetaoverSigmaZ0SinTheta",m_z0sinthetaoversigmaz0sintheta_max));
    +  if(m_nInnermostPixel_min              != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNInnermostLayerHits",          m_nInnermostPixel_min));
    +  if(m_nNextToInnermostPixel_min        != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNNextToInnermostLayerHits",    m_nNextToInnermostPixel_min));
    +  if(m_nBothInnermostLayersHits_min     != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNBothInnermostLayersHits",     m_nBothInnermostLayersHits_min));
    +  if(m_nSi_min                          != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSiHits",                      m_nSi_min));
    +  if(m_nSiPhysical_min                  != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSiHitsPhysical",              m_nSiPhysical_min));
    +  if(m_nSiSharedHits_max                != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiSharedHits",                m_nSiSharedHits_max));
    +  if(m_nSiHoles_max                     != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiHoles",                     m_nSiHoles_max));
    +  if(m_nPixelHits_min                   != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNPixelHits",                   m_nPixelHits_min));
    +  if(m_nPixelHitsPhysical_min           != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNPixelHitsPhysical",           m_nPixelHitsPhysical_min));
    +  if(m_nPixelSharedHits_max             != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNPixelSharedHits",             m_nPixelSharedHits_max));
    +  if(m_nPixHoles_max                    != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNPixelHoles",                  m_nPixHoles_max));
    +  if(m_nSctHits_min                     != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSctHits",                     m_nSctHits_min));
    +  if(m_nSctHitsPhysical_min             != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minNSctHitsPhysical",             m_nSctHitsPhysical_min));
    +  if(m_nSctSharedHits_max               != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSctSharedHits",               m_nSctSharedHits_max));
    +  if(m_nSctHoles_max                    != 2e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSctHoles",                    m_nSctHoles_max));
    +  if(m_nSiSharedModules_max             != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxNSiSharedModules",             m_nSiSharedModules_max));
    +  if(m_chi2Prob_min                     != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("minProb",                         m_chi2Prob_min));
    +  if(m_chi2NdofCut_max                  != 1e8)ANA_CHECK(m_trkSelTool_handle.setProperty("maxChiSqperNdf",                  m_chi2NdofCut_max));
    +  if(m_cutLevelString                   != "" )ANA_CHECK(m_trkSelTool_handle.setProperty("CutLevel",                        m_cutLevelString));
    +
    +  ANA_CHECK( m_trkSelTool_handle.retrieve() );
    +
    +  ANA_MSG_DEBUG( "TrackSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: execute ()
    +{
    +
    +  ANA_MSG_DEBUG("Applying Track Selection... " << m_name);
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  //
    +  float mcEvtWeight(1);
    +  if ( eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION) )
    +    mcEvtWeight = eventInfo->mcEventWeight();
    +
    +  if(m_doTracksInJets){
    +    return executeTracksInJets();
    +  } else{
    +    return executeTrackCollection(mcEvtWeight);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrackSelector :: executeTrackCollection (float mcEvtWeight)
    +{
    +  m_numEvent++;
    +
    +  // get the collection from TEvent or TStore
    +  const xAOD::TrackParticleContainer* inTracks(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inTracks, m_inContainerName, m_event, m_store, msg()) );
    +
    +  // get primary vertex
    +  const xAOD::VertexContainer *vertices(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +  const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg());
    +
    +
    +  // create output container (if requested) - deep copy
    +
    +  ConstDataVector<xAOD::TrackParticleContainer>* selectedTracks = 0;
    +  if(m_createSelectedContainer) {
    +    selectedTracks = new ConstDataVector<xAOD::TrackParticleContainer>(SG::VIEW_ELEMENTS);
    +  }
    +
    +  xAOD::TrackParticleContainer::const_iterator trk_itr = inTracks->begin();
    +  xAOD::TrackParticleContainer::const_iterator trk_end = inTracks->end();
    +  int nPass(0); int nObj(0);
    +  for( ; trk_itr != trk_end; ++trk_itr ){
    +
    +    // if only looking at a subset of tracks make sure all are decorrated
    +    if( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if(m_decorateSelectedObjects) {
    +        (*trk_itr)->auxdecor< char >( "passSel" ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    int passSel = this->PassCuts( (*trk_itr), pvx );
    +    if(m_decorateSelectedObjects) {
    +      (*trk_itr)->auxdecor< char >( "passSel" ) = passSel;
    +    }
    +
    +    if(passSel) {
    +      nPass++;
    +      if(m_createSelectedContainer) {
    +        selectedTracks->push_back( *trk_itr );
    +      }
    +    }
    +  }
    +
    +  m_numObject     += nObj;
    +  m_numObjectPass += nPass;
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  if( m_pass_min > 0 && nPass < m_pass_min ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +  if( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    wk()->skipEvent();
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  // add output container to TStore
    +  if( m_createSelectedContainer ) {
    +    ANA_CHECK( m_store->record( selectedTracks, m_outContainerName ));
    +  }
    +
    +  m_numEventPass++;
    +  if(m_useCutFlow) {
    +    m_cutflowHist ->Fill( m_cutflow_bin, 1 );
    +    m_cutflowHistW->Fill( m_cutflow_bin, mcEvtWeight);
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +EL::StatusCode TrackSelector :: executeTracksInJets ()
    +{
    +  ANA_MSG_DEBUG("Applying TracksInJet Selection... " << m_inJetContainerName);
    +  m_numEvent++;
    +
    +  // get input jet collection
    +  const xAOD::JetContainer* inJets(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(inJets, m_inJetContainerName, m_event, m_store, msg()) );
    +
    +  //const xAOD::VertexContainer *vertices(nullptr);
    +  //ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainerName, m_event, m_store, msg()) );
    +  //const xAOD::Vertex *pvx = HelperFunctions::getPrimaryVertex(vertices, msg());
    +
    +  int nPass(0); int nObj(0);
    +
    +  //
    +  //  Accessor for adding the output jets
    +  //
    +  xAOD::Jet::Decorator<vector<const xAOD::TrackParticle*> > m_track_decoration(m_outContainerName.c_str());
    +  xAOD::Jet::Decorator<const xAOD::Vertex*>                 m_vtx_decoration  ((m_outContainerName+"_vtx").c_str());
    +
    +  //
    +  // loop on Jets
    +  //
    +  for ( auto jet_itr : *inJets ) {
    +
    +    //
    +    //  output container with in the jet
    +    //
    +    vector<const xAOD::TrackParticle*> outputTracks;
    +
    +    //
    +    // loop on tracks with in jet
    +    //
    +    const vector<const xAOD::TrackParticle*> inputTracks = jet_itr->auxdata< vector<const xAOD::TrackParticle*>  >(m_inContainerName);
    +    const xAOD::Vertex* pvx                              = jet_itr->auxdata< const xAOD::Vertex*                 >(m_inContainerName+"_vtx");
    +    for(const xAOD::TrackParticle* trkInJet: inputTracks){
    +
    +      nObj++;
    +
    +      //
    +      // Get cut desicion
    +      //
    +      int passSel = this->PassCuts( trkInJet, pvx );
    +
    +      //
    +      // if
    +      //
    +      if(passSel) {
    +    nPass++;
    +    outputTracks.push_back(trkInJet);
    +      }
    +    }// tracks
    +
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +
    +    m_track_decoration(*jet_itr)  = outputTracks;
    +    m_vtx_decoration(*jet_itr)    = jet_itr->auxdata<const xAOD::Vertex*>(m_inContainerName+"_vtx");
    +
    +  }//jets
    +
    +  m_numEventPass++;
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +
    +  ANA_MSG_DEBUG("Calling postExecute");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  ANA_MSG_DEBUG("Deleting tool instances...");
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TrackSelector :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int TrackSelector :: PassCuts( const xAOD::TrackParticle* trk, const xAOD::Vertex *pvx ) {
    +
    +  // InDetTrackSelectionTool
    +  if ( !m_trkSelTool_handle->accept(*trk, pvx) ) { return 0; }
    +
    +  // Cuts not available with the InDetTrackSelectionTool
    +  //
    +  // pT_max
    +  //
    +  if( m_pT_max != 1e8 ) {
    +    if ( trk->pt() > m_pT_max ) { return 0; }
    +  }
    +
    +  //
    +  // eta
    +  //
    +  if( m_eta_min != 1e8 ) {
    +    if( fabs(trk->eta()) < m_eta_min ) { return 0; }
    +  }
    +  if( m_etaSigned_max != 1e8 ) {
    +    if( trk->eta() > m_etaSigned_max ) { return 0; }
    +  }
    +  if( m_etaSigned_min != 1e8 ) {
    +    if( trk->eta() < m_etaSigned_min ) { return 0; }
    +  }
    +
    +
    +
    +  //
    +  //  nBLayer
    +  //
    +  uint8_t nBL       = -1;
    +  if( m_nBL_min != 1e8 ){
    +    //  xAOD::numberOfBLayerHits is deprecated, keeping it for compatibility
    +    if(!trk->summaryValue(nBL, xAOD::numberOfBLayerHits)) ANA_MSG_ERROR( "BLayer hits not filled");
    +    if( nBL < m_nBL_min ) {return 0; }
    +  }
    +
    +  //
    +  //  chi2Prob_max
    +  //
    +  float        chi2        = trk->chiSquared();
    +  float        ndof        = trk->numberDoF();
    +  if( m_chi2Prob_max != 1e8 ){
    +    float        chi2Prob    = TMath::Prob(chi2,ndof);
    +    if( chi2Prob > m_chi2Prob_max) { return 0; }
    +  }
    +
    +  //
    +  //  Pass Keys
    +  //
    +  for(auto& passKey : m_passKeys){
    +    if(!(trk->auxdata< char >(passKey) == '1')) { return 0; }
    +  }
    +
    +  //
    +  //  Fail Keys
    +  //
    +  for(auto& failKey : m_failKeys){
    +    if(!(trk->auxdata< char >(failKey) == '0')) { return 0; }
    +  }
    +
    +
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TracksInJetHists.cxx.html b/api/program_listing_file_Root_TracksInJetHists.cxx.html new file mode 100644 index 0000000000..67744a94d5 --- /dev/null +++ b/api/program_listing_file_Root_TracksInJetHists.cxx.html @@ -0,0 +1,350 @@ + + + + + + + + + + + Program Listing for File TracksInJetHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TracksInJetHists.cxx

    +

    Return to documentation for file (Root/TracksInJetHists.cxx)

    +
    #include "xAODAnaHelpers/TracksInJetHists.h"
    +#include <math.h>
    +#include <xAODTracking/TrackParticle.h>
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +ANA_MSG_SOURCE(msgTracksInJetHists, "TracksInJetHists")
    +
    +TracksInJetHists :: TracksInJetHists (std::string name, std::string detailStr) :
    +  HistogramManager(name, detailStr)
    +{
    +}
    +
    +TracksInJetHists :: ~TracksInJetHists () {}
    +
    +StatusCode TracksInJetHists::initialize() {
    +
    +  //
    +  // TrackHists
    +  //
    +  m_trkPlots = new TrackHists(m_name, "IPDetails HitCounts TPErrors Chi2Details Debugging vsLumiBlock");
    +  m_trkPlots -> initialize();
    +
    +  //
    +  //  d0
    +  //
    +  m_trk_d0        = book(m_name, "d0_signed",          "d0[mm] (signed)",   100,  -2.0, 2.0 );
    +  m_trk_d0Sig     = book(m_name, "d0Sig_signed",       "d0Sig (signed)",   240,   -20.0, 40.0 );
    +  m_trk_d0SigPDF  = book(m_name, "d0Sig_signed_pdf",   "d0Sig (signed)",   42,    -21.0, 21.0 );
    +  m_trk_z0sinTd0  = book(m_name, "z0sinTsigned_vs_d0signed",
    +             "z0xsin0[mm](signed)", 50, -2.0, 2.0,
    +             "d0[mm](signed);",     50, -2.0, 2.0 );
    +
    +
    +  //
    +  //  z0
    +  //
    +  m_trk_z0_signed        = book(m_name, "z0_signed"   ,     "z0[mm] (signed)",               100,  -5.0, 5.0 );
    +  m_trk_z0sinT_signed    = book(m_name, "z0sinT_signed",    "z0xsin(#theta)[mm] (signed)",   100,  -2.0, 2.0 );
    +  m_trk_z0Sig_signed     = book(m_name, "z0Sig_signed",     "z0 significance (signed)",      100,  -25.0, 25.0 );
    +  m_trk_z0Sig_signed_pdf = book(m_name, "z0Sig_signed_pdf", "z0 significance (signed)",       42,  -21.0, 20.0 );
    +  m_trk_z0SigsinT_signed = book(m_name, "z0SigsinT_signed", "z0 significance x sin(#theta)", 100,  -25.0, 25.0 );
    +
    +  //
    +  //  wrt Jet
    +  //
    +  m_trk_jetdPhi = book(m_name, "jetdPhi",  "jetdPhi",  100,  -0.5, 0.5 );
    +  m_trk_jetdEta = book(m_name, "jetdEta",  "jetdEta",  100,  -0.5, 0.5 );
    +  m_trk_jetdR      = book(m_name, "jetdR" ,   "jetdR",    300,  -0.1, 0.5 );
    +  m_trk_jetdR_l    = book(m_name, "jetdR_l",  "jetdR",    300,  -0.1, 1.5 );
    +
    +  // if worker is passed to the class add histograms to the output
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +void TracksInJetHists::record(EL::IWorker* wk) {
    +  HistogramManager::record(wk);
    +  m_trkPlots -> record( wk );
    +}
    +
    +
    +
    +StatusCode TracksInJetHists::execute( const xAOD::TrackParticle* trk, const xAOD::Jet* jet,  const xAOD::Vertex *pvx, float eventWeight,  const xAOD::EventInfo* eventInfo ) {
    +  using namespace msgTracksInJetHists;
    +  //
    +  //  Fill track hists
    +  //
    +  ANA_CHECK( m_trkPlots   ->execute(trk, pvx, eventWeight, eventInfo));
    +
    +  // d0
    +  float sign         = getD0Sign(trk, jet);
    +  float d0_wrtPV     = trk->d0();
    +  float signedD0     = fabs(d0_wrtPV)*sign;
    +  float d0Err_wrtPV  = sqrt((trk->definingParametersCovMatrixVec().at(0)));
    +  float d0Sig_wrtPV  = d0Err_wrtPV ? d0_wrtPV/d0Err_wrtPV : -1;
    +  float d0SigSigned  = sign*fabs(d0Sig_wrtPV);
    +  m_trk_d0       ->Fill(signedD0,    eventWeight);
    +  m_trk_d0Sig    ->Fill(d0SigSigned, eventWeight);
    +  m_trk_d0SigPDF ->Fill(d0SigSigned, eventWeight);
    +
    +  //
    +  // Signed Z0
    +  //
    +  float signZ0           = getZ0Sign(trk, jet, pvx);
    +
    +  float z0               = trk->z0() + trk->vz() - HelperFunctions::getPrimaryVertexZ(pvx);
    +
    +  float z0_wrtPV_signed  = fabs(z0)*signZ0;
    +  float z0Err            = sqrt((trk->definingParametersCovMatrixVec().at(2)));
    +  float sinT             = sin(trk->theta());
    +
    +  m_trk_z0_signed     ->Fill(z0_wrtPV_signed,         eventWeight);
    +  m_trk_z0sinT_signed ->Fill(z0_wrtPV_signed*sinT,    eventWeight);
    +  if(z0Err){
    +    m_trk_z0Sig_signed     ->Fill(z0_wrtPV_signed/z0Err,         eventWeight);
    +    m_trk_z0Sig_signed_pdf ->Fill(z0_wrtPV_signed/z0Err,         eventWeight);
    +    m_trk_z0SigsinT_signed ->Fill(z0_wrtPV_signed/z0Err*sinT,    eventWeight);
    +  }
    +
    +  m_trk_z0sinTd0->Fill(z0_wrtPV_signed*sinT, signedD0, eventWeight);
    +
    +  float dEta = trk->eta() - jet->p4().Eta();
    +  float dPhi = HelperFunctions::dPhi(trk->phi(), jet->p4().Phi());
    +  float dR   = sqrt(dPhi*dPhi + dEta*dEta);
    +  //float dR = trk->p4().DeltaR(jet->p4());
    +
    +  m_trk_jetdPhi ->Fill(HelperFunctions::dPhi(trk->phi(),jet->p4().Phi()), eventWeight);
    +  m_trk_jetdEta ->Fill(trk->eta() - jet->eta(),       eventWeight);
    +  m_trk_jetdR   ->Fill(dR,   eventWeight);
    +  m_trk_jetdR_l ->Fill(dR,   eventWeight);
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +
    +
    +float TracksInJetHists::getD0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet){
    +  float trk_phi    = trk->phi();
    +  float jet_phi    = jet->phi();
    +  float prod       = cos(trk_phi)*sin(jet_phi) - sin(trk_phi)*cos(jet_phi);
    +  float sign_prod  = prod > 0 ? 1 : -1;
    +  float d0_wrtPV   = trk->d0();
    +  float sign_d0    = d0_wrtPV > 0 ? 1 : -1;
    +  float sign       = sign_d0 * sign_prod;
    +  return sign;
    +}
    +
    +
    +float TracksInJetHists::getZ0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx){
    +  float trk_eta  = trk->eta();
    +  float jetEta   = jet->eta();
    +  float dEta     = jetEta - trk_eta;
    +
    +  float trk_z0_wrtPV = trk->z0() + trk->vz() - HelperFunctions::getPrimaryVertexZ(pvx);
    +
    +  float signZ0 = (trk_z0_wrtPV*dEta) > 0 ? 1.0 : -1.0;
    +  return signZ0;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TreeAlgo.cxx.html b/api/program_listing_file_Root_TreeAlgo.cxx.html new file mode 100644 index 0000000000..3aec827cdc --- /dev/null +++ b/api/program_listing_file_Root_TreeAlgo.cxx.html @@ -0,0 +1,931 @@ + + + + + + + + + + + Program Listing for File TreeAlgo.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TreeAlgo.cxx

    +

    Return to documentation for file (Root/TreeAlgo.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +#include <EventLoop/OutputStream.h>
    +
    +#include <xAODJet/JetContainer.h>
    +#include <xAODTracking/VertexContainer.h>
    +#include <xAODEventInfo/EventInfo.h>
    +#include <AthContainers/ConstDataVector.h>
    +#include <xAODEgamma/PhotonContainer.h>
    +#include <xAODCaloEvent/CaloClusterContainer.h>
    +
    +#include <xAODAnaHelpers/TreeAlgo.h>
    +
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TreeAlgo)
    +
    +TreeAlgo :: TreeAlgo () :
    +    Algorithm("TreeAlgo")
    +{
    +}
    +
    +EL::StatusCode TreeAlgo :: setupJob (EL::Job& job)
    +{
    +  job.useXAOD();
    +  xAOD::Init("TreeAlgo").ignore();
    +
    +  EL::OutputStream outForTree(m_treeStreamName);
    +  if(!job.outputHas(m_treeStreamName)) job.outputAdd (outForTree);
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TreeAlgo :: initialize ()
    +{
    +  ANA_MSG_INFO( m_name );
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  // get the file we created already
    +  TFile* treeFile = wk()->getOutputFile (m_treeStreamName);
    +  treeFile->mkdir(m_name.c_str());
    +  treeFile->cd(m_name.c_str());
    +
    +  // to handle more than one jet collections (reco, trig and truth)
    +  std::string token;
    +  std::istringstream ss_reco_containers(m_jetContainerName);
    +  while ( std::getline(ss_reco_containers, token, ' ') ){
    +    m_jetContainers.push_back(token);
    +  }
    +  std::istringstream ss_reco_names(m_jetBranchName);
    +  while ( std::getline(ss_reco_names, token, ' ') ){
    +    m_jetBranches.push_back(token);
    +  }
    +  if( !m_jetContainerName.empty() && m_jetContainers.size()!=m_jetBranches.size()){
    +    ANA_MSG_ERROR( "The number of jet containers must be equal to the number of jet name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +  std::istringstream ss_trig_containers(m_trigJetContainerName);
    +  while ( std::getline(ss_trig_containers, token, ' ') ){
    +    m_trigJetContainers.push_back(token);
    +  }
    +  std::istringstream ss_trig_names(m_trigJetBranchName);
    +  while ( std::getline(ss_trig_names, token, ' ') ){
    +    m_trigJetBranches.push_back(token);
    +  }
    +  if( !m_trigJetContainerName.empty() && m_trigJetContainers.size()!=m_trigJetBranches.size()){
    +    ANA_MSG_ERROR( "The number of trig jet containers must be equal to the number of trig jet name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +  std::istringstream ss_truth_containers(m_truthJetContainerName);
    +  while ( std::getline(ss_truth_containers, token, ' ') ){
    +    m_truthJetContainers.push_back(token);
    +  }
    +  std::istringstream ss_truth_names(m_truthJetBranchName);
    +  while ( std::getline(ss_truth_names, token, ' ') ){
    +    m_truthJetBranches.push_back(token);
    +  }
    +  if( !m_truthJetContainerName.empty() && m_truthJetContainers.size()!=m_truthJetBranches.size()){
    +    ANA_MSG_ERROR( "The number of truth jet containers must be equal to the number of truth jet name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_fat_containers(m_fatJetContainerName);
    +  while ( std::getline(ss_fat_containers, token, ' ') ){
    +    m_fatJetContainers.push_back(token);
    +  }
    +  std::istringstream ss_fat_names(m_fatJetBranchName);
    +  while ( std::getline(ss_fat_names, token, ' ') ){
    +    m_fatJetBranches.push_back(token);
    +  }
    +  if( m_fatJetBranches.size() == 0 ) {
    +    for(auto fatJetContainer : m_fatJetContainers) {
    +      m_fatJetBranches.push_back(fatJetContainer);
    +    }
    +  }
    +  if( !m_fatJetContainerName.empty() && m_fatJetContainers.size()!=m_fatJetBranches.size()){
    +    ANA_MSG_ERROR( "The number of fat jet containers must be equal to the number of fat jet name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_l1_containers(m_l1JetContainerName);
    +  while ( std::getline(ss_l1_containers, token, ' ') ){
    +    m_l1JetContainers.push_back(token);
    +  }
    +  std::istringstream ss_l1_names(m_l1JetBranchName);
    +  while ( std::getline(ss_l1_names, token, ' ') ){
    +    m_l1JetBranches.push_back(token);
    +  }
    +  if( !m_l1JetContainerName.empty() && m_l1JetContainers.size()!=m_l1JetBranches.size()){
    +    ANA_MSG_ERROR( "The number of L1 jet containers must be equal to the number of L1 jet name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_vertex_containers(m_vertexContainerName);
    +  while ( std::getline(ss_vertex_containers, token, ' ') ){
    +    m_vertexContainers.push_back(token);
    +  }
    +  std::istringstream ss_vertex_names(m_vertexBranchName);
    +  while ( std::getline(ss_vertex_names, token, ' ') ){
    +    m_vertexBranches.push_back(token);
    +  }
    +  if( m_vertexContainers.size()!=m_vertexBranches.size()){
    +    ANA_MSG_ERROR( "The number of vertex containers must be equal to the number of vertex name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_cluster_containers(m_clusterContainerName);
    +  while ( std::getline(ss_cluster_containers, token, ' ') ){
    +    m_clusterContainers.push_back(token);
    +  }
    +  std::istringstream ss_cluster_names(m_clusterBranchName);
    +  while ( std::getline(ss_cluster_names, token, ' ') ){
    +    m_clusterBranches.push_back(token);
    +  }
    +  if( !m_clusterContainerName.empty() && m_clusterContainers.size()!=m_clusterBranches.size()){
    +    ANA_MSG_ERROR( "The number of cluster containers must be equal to the number of cluster name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // allow to store different variables for each jet collection (reco, trig, fat only, default: store the same)
    +  std::istringstream ss(m_jetDetailStr);
    +  while ( std::getline(ss, token, '|') ){
    +    m_jetDetails.push_back(token);
    +  }
    +  if( m_jetDetails.size()!=1  && m_jetContainers.size()!=m_jetDetails.size()){
    +    ANA_MSG_ERROR( "The size of m_jetContainers should be equal to the size of m_jetDetailStr. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +  std::istringstream ss_trig_details(m_trigJetDetailStr);
    +  while ( std::getline(ss_trig_details, token, '|') ){
    +    m_trigJetDetails.push_back(token);
    +  }
    +  if( m_trigJetDetails.size()!=1  && m_trigJetContainers.size()!=m_trigJetDetails.size()){
    +    ANA_MSG_ERROR( "The size of m_trigJetContainers should be equal to the size of m_trigJetDetailStr. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_vertex_details(m_vertexDetailStr);
    +  while ( std::getline(ss_vertex_details, token, '|') ){
    +    m_vertexDetails.push_back(token);
    +  }
    +  if( m_vertexDetails.size()>1 && m_vertexContainers.size()!=m_vertexDetails.size()){
    +    ANA_MSG_ERROR( "The size of m_vertexContainers should be equal to the size of m_vertexDetailStr. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_fat_details(m_fatJetDetailStr);
    +  while ( std::getline(ss_fat_details, token, '|') ){
    +    m_fatJetDetails.push_back(token);
    +  }
    +  if( m_fatJetDetails.size()!=1  && m_fatJetContainers.size()!=m_fatJetDetails.size()){
    +    ANA_MSG_ERROR( "The size of m_fatJetContainers should be equal to the size of m_fatJetDetailStr. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  std::istringstream ss_cluster_details(m_clusterDetailStr);
    +  while ( std::getline(ss_cluster_details, token, '|') ){
    +    m_clusterDetails.push_back(token);
    +  }
    +  if( m_clusterDetails.size()!=1  && m_clusterContainers.size()!=m_clusterDetails.size()){
    +    ANA_MSG_ERROR( "The size of m_clusterContainers should be equal to the size of m_clusterDetailStr. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // to handle more than one truth particles collections
    +  std::istringstream ss_truthParticlesContainers(m_truthParticlesContainerName);
    +  while ( std::getline(ss_truthParticlesContainers, token, ' ') ){
    +    m_truthParticlesContainers.push_back(token);
    +  }
    +  std::istringstream ss_truthParticlesNames(m_truthParticlesBranchName);
    +  while ( std::getline(ss_truthParticlesNames, token, ' ') ){
    +    m_truthParticlesBranches.push_back(token);
    +  }
    +  if( !m_truthParticlesContainerName.empty() && m_truthParticlesContainers.size()!=m_truthParticlesBranches.size()){
    +    ANA_MSG_ERROR( "The number of truth particles containers must be equal to the number of truth particles name branches. Exiting");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TreeAlgo :: histInitialize ()
    +{
    +  ANA_MSG_INFO( m_name );
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TreeAlgo :: fileExecute () { return EL::StatusCode::SUCCESS; }
    +EL::StatusCode TreeAlgo :: changeInput (bool /*firstFile*/) { return EL::StatusCode::SUCCESS; }
    +
    +
    +EL::StatusCode TreeAlgo :: execute ()
    +{
    +
    +  // what systematics do we need to process for this event?
    +  // handle the nominal case (merge all) on every event, always
    +  std::vector<std::string> event_systNames({""});
    +  std::vector<std::string> muSystNames;
    +  std::vector<std::string> elSystNames;
    +  std::vector<std::string> tauSystNames;
    +  std::vector<std::string> jetSystNames;
    +  std::vector<std::string> photonSystNames;
    +  std::vector<std::string> fatJetSystNames;
    +  std::vector<std::string> metSystNames;
    +
    +  // this is a temporary pointer that gets switched around to check each of the systematics
    +  std::vector<std::string>* systNames(nullptr);
    +
    +  // note that the way we set this up, none of the below ##SystNames vectors contain the nominal case
    +  // TODO: do we really need to check for duplicates? Maybe, maybe not.
    +  if(!m_muSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_muSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      muSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +
    +  if(!m_elSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_elSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      elSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +
    +  if(!m_tauSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_tauSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      tauSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +
    +  if(!m_jetSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_jetSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      jetSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +  if(!m_fatJetSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_fatJetSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      fatJetSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +  if(!m_photonSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_photonSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      photonSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +  if(!m_metSystsVec.empty()){
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_metSystsVec, 0, m_store, msg()) );
    +    for(const auto& systName: *systNames){
    +      metSystNames.push_back(systName);
    +      if (std::find(event_systNames.begin(), event_systNames.end(), systName) != event_systNames.end()) continue;
    +      event_systNames.push_back(systName);
    +    }
    +  }
    +
    +  TFile* treeFile = wk()->getOutputFile (m_treeStreamName);
    +
    +  // let's make the tdirectory and ttrees
    +  for(const auto& systName: event_systNames){
    +    // check if we have already created the tree
    +    if(m_trees.find(systName) != m_trees.end()) continue;
    +    std::string treeName = systName;
    +    if(systName.empty()) treeName = "nominal";
    +
    +    ANA_MSG_INFO( "Making tree " << m_name << "/" << treeName );
    +    TTree * outTree = new TTree(treeName.c_str(),treeName.c_str());
    +    if ( !outTree ) {
    +      ANA_MSG_ERROR("Failed to instantiate output tree!");
    +      return EL::StatusCode::FAILURE;
    +    }
    +
    +    m_trees[systName] = createTree( m_event, outTree, treeFile, m_units, msgLvl(MSG::DEBUG), m_store );
    +    const auto& helpTree = m_trees[systName];
    +    helpTree->m_vertexContainerName = m_vertexContainers.at(0);
    +
    +    // tell the tree to go into the file
    +    outTree->SetDirectory( treeFile->GetDirectory(m_name.c_str()) );
    +    if(m_autoFlush != 0) outTree->SetAutoFlush(m_autoFlush);
    +    // choose if want to add tree to same directory as ouput histograms
    +    if ( m_outHistDir ) {
    +      if(m_trees.size() > 1) ANA_MSG_WARNING( "You're running systematics! You may find issues in writing all of the output TTrees to the output histogram file... Set `m_outHistDir = false` if you run into issues!");
    +      wk()->addOutput( outTree );
    +    }
    +
    +    // initialize all branch addresses since we just added this tree
    +    helpTree->AddEvent( m_evtDetailStr );
    +    if (!m_trigDetailStr.empty() )              { helpTree->AddTrigger(m_trigDetailStr);                           }
    +    if (!m_muContainerName.empty() )            { helpTree->AddMuons(m_muDetailStr);                               }
    +    if (!m_elContainerName.empty() )            { helpTree->AddElectrons(m_elDetailStr);                           }
    +    if (!m_jetContainerName.empty() )           {
    +      for(unsigned int ll=0; ll<m_jetContainers.size();++ll){
    +        if(m_jetDetails.size()==1) helpTree->AddJets       (m_jetDetailStr, m_jetBranches.at(ll).c_str());
    +    else{ helpTree->AddJets       (m_jetDetails.at(ll), m_jetBranches.at(ll).c_str()); }
    +      }
    +    }
    +    if (!m_l1JetContainerName.empty() )         {
    +      for(unsigned int ll=0; ll<m_l1JetContainers.size();++ll){
    +        helpTree->AddL1Jets(m_l1JetBranches.at(ll).c_str());
    +      }
    +    }
    +    if (!m_trigJetContainerName.empty() )      {
    +      for(unsigned int ll=0; ll<m_trigJetContainers.size();++ll){
    +        if(m_trigJetDetails.size()==1) helpTree->AddJets       (m_trigJetDetailStr, m_trigJetBranches.at(ll).c_str());
    +    else{ helpTree->AddJets       (m_trigJetDetails.at(ll), m_trigJetBranches.at(ll).c_str()); }
    +      }
    +    }
    +    if (!m_truthJetContainerName.empty() )      {
    +      for(unsigned int ll=0; ll<m_truthJetContainers.size();++ll){
    +        helpTree->AddJets       (m_truthJetDetailStr, m_truthJetBranches.at(ll).c_str());
    +      }
    +    }
    +    if ( !m_fatJetContainerName.empty() ) {
    +      for(unsigned int ll=0; ll<m_fatJetContainers.size();++ll){
    +        if(m_fatJetDetails.size()==1) helpTree->AddFatJets       (m_fatJetDetailStr, m_fatJetBranches.at(ll).c_str());
    +    else{ helpTree->AddFatJets       (m_fatJetDetails.at(ll), m_fatJetBranches.at(ll).c_str()); }
    +      }
    +    }
    +    if ( !m_vertexContainerName.empty() && !m_vertexDetailStr.empty() ) {
    +      for(unsigned int ll=0; ll<m_vertexContainers.size();++ll){
    +    if(m_vertexDetails.size()==1) helpTree->AddVertices(m_vertexDetailStr, m_vertexBranches.at(ll).c_str());
    +    else{ helpTree->AddVertices(m_vertexDetails.at(ll), m_vertexBranches.at(ll).c_str()); }
    +      }
    +    }
    +
    +    if (!m_truthFatJetContainerName.empty() )   { helpTree->AddTruthFatJets(m_truthFatJetDetailStr, m_truthFatJetBranchName);               }
    +    if (!m_tauContainerName.empty() )           { helpTree->AddTaus(m_tauDetailStr);                               }
    +    if (!m_METContainerName.empty() )           { helpTree->AddMET(m_METDetailStr);                                }
    +    if (!m_METReferenceContainerName.empty() )  { helpTree->AddMET(m_METReferenceDetailStr, "referenceMet");       }
    +    if (!m_photonContainerName.empty() )        { helpTree->AddPhotons(m_photonDetailStr);                         }
    +    if (!m_truthParticlesContainerName.empty()) {
    +      for(unsigned int ll=0; ll<m_truthParticlesContainers.size();++ll){
    +        helpTree->AddTruthParts(m_truthParticlesDetailStr, m_truthParticlesBranches.at(ll).c_str());
    +      }
    +    }
    +    if (!m_trackParticlesContainerName.empty()) { helpTree->AddTrackParts(m_trackParticlesDetailStr, m_trackParticlesContainerName); }
    +    if (!m_clusterContainerName.empty() )      {
    +      for(unsigned int ll=0; ll<m_clusterContainers.size();++ll){
    +        if(m_clusterDetails.size()==1)
    +          helpTree->AddClusters (m_clusterDetailStr, m_clusterBranches.at(ll).c_str());
    +    else
    +          helpTree->AddClusters (m_clusterDetails.at(ll), m_clusterBranches.at(ll).c_str());
    +      }
    +    }
    +
    +  }
    +
    +  /* THIS IS WHERE WE START PROCESSING THE EVENT AND PLOTTING THINGS */
    +
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +  const xAOD::VertexContainer* vertices(nullptr);
    +  if (m_retrievePV) {
    +    ANA_CHECK( HelperFunctions::retrieve(vertices, m_vertexContainers.at(0), m_event, m_store, msg()) );
    +  }
    +  const xAOD::Vertex* primaryVertex = m_retrievePV ? HelperFunctions::getPrimaryVertex( vertices , msg() ) : nullptr;
    +
    +  for(const auto& systName: event_systNames){
    +    auto& helpTree = m_trees[systName];
    +
    +    // assume the nominal container by default
    +    std::string muSuffix("");
    +    std::string elSuffix("");
    +    std::string tauSuffix("");
    +    std::string jetSuffix("");
    +    std::string photonSuffix("");
    +    std::string clusterSuffix("");
    +    std::string fatJetSuffix("");
    +    std::string metSuffix("");
    +    /*
    +       if we find the systematic in the corresponding vector, we will use that container's systematic version instead of nominal version
    +        NB: since none of these contain the "" (nominal) case because of how I filter it, we handle the merging.. why?
    +        - in each loop to make the ##systNames vectors, we check to see if the systName exists in event_systNames which is initialized
    +        -   to {""} - the nominal case. If the systName exists, we do not add it to the corresponding ##systNames vector, otherwise, we do.
    +        -   This precludes the nominal case in all of the ##systNames vectors, which means the default will always be to run nominal.
    +    */
    +    if (std::find(muSystNames.begin(), muSystNames.end(), systName) != muSystNames.end()) muSuffix = systName;
    +    if (std::find(elSystNames.begin(), elSystNames.end(), systName) != elSystNames.end()) elSuffix = systName;
    +    if (std::find(tauSystNames.begin(), tauSystNames.end(), systName) != tauSystNames.end()) tauSuffix = systName;
    +    if (std::find(jetSystNames.begin(), jetSystNames.end(), systName) != jetSystNames.end()) jetSuffix = systName;
    +    if (std::find(photonSystNames.begin(), photonSystNames.end(), systName) != photonSystNames.end()) photonSuffix = systName;
    +    if (std::find(fatJetSystNames.begin(), fatJetSystNames.end(), systName) != fatJetSystNames.end()) fatJetSuffix = systName;
    +    if (std::find(metSystNames.begin(), metSystNames.end(), systName) != metSystNames.end()) metSuffix = systName;
    +
    +    helpTree->FillEvent( eventInfo, m_event, vertices );
    +
    +    // Fill trigger information
    +    if ( !m_trigDetailStr.empty() )    {
    +      helpTree->FillTrigger( eventInfo );
    +    }
    +
    +    // Fill jet trigger information - this can be used if with layer/cleaning info we need to turn off some variables?
    +    /*if ( !m_trigJetDetailStr.empty() ) {
    +      helpTree->FillJetTrigger();
    +    }*/
    +
    +    // for the containers the were supplied, fill the appropriate vectors
    +    if ( !m_muContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::MuonContainer>(m_muContainerName + muSuffix, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::MuonContainer* inMuon(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inMuon, m_muContainerName+muSuffix, m_event, m_store, msg()) );
    +      helpTree->FillMuons( inMuon, primaryVertex );
    +    }
    +
    +    if ( !m_elContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::ElectronContainer>(m_elContainerName + elSuffix, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::ElectronContainer* inElec(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inElec, m_elContainerName+elSuffix, m_event, m_store, msg()) );
    +      helpTree->FillElectrons( inElec, primaryVertex );
    +    }
    +
    +    if ( !m_jetContainerName.empty() ) {
    +      bool reject = false;
    +      for ( unsigned int ll = 0; ll < m_jetContainers.size(); ++ll ) { // Systs for all jet containers
    +        const xAOD::JetContainer* inJets(nullptr);
    +        if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(m_jetContainers.at(ll)+jetSuffix, m_event, m_store, msg()) ) {
    +          ANA_MSG_DEBUG( "The jet container " + m_jetContainers.at(ll)+jetSuffix + " is not available. Skipping all remaining jet collections");
    +          reject = true;
    +          break;
    +        }
    +        ANA_CHECK( HelperFunctions::retrieve(inJets, m_jetContainers.at(ll)+jetSuffix, m_event, m_store, msg()) );
    +
    +        helpTree->FillJets( inJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_jetBranches.at(ll) );
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a jet container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_l1JetContainerName.empty() ){
    +      bool reject = false;
    +      for ( unsigned int ll = 0; ll < m_l1JetContainers.size(); ++ll ) {
    +        if(m_l1JetContainers.at(ll).find("Fex")== std::string::npos){ // Legacy L1 jets
    +          const xAOD::JetRoIContainer* inL1Jets(nullptr);
    +          if ( !HelperFunctions::isAvailable<xAOD::JetRoIContainer>(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){
    +            ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections");
    +            reject = true;
    +          }
    +          ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) );
    +          helpTree->FillLegacyL1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets );
    +        }else{ // Phase 1 L1 jets
    +          if(m_l1JetContainers.at(ll).find("jFexSR")!= std::string::npos){ // jFEX small-R
    +            const xAOD::jFexSRJetRoIContainer* inL1Jets(nullptr);
    +            if ( !HelperFunctions::isAvailable<xAOD::jFexSRJetRoIContainer>(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){
    +              ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections");
    +              reject = true;
    +            }
    +            ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) );
    +            helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets );
    +          }else if(m_l1JetContainers.at(ll).find("jFexLR")!= std::string::npos){ // jFEX large-R
    +            const xAOD::jFexLRJetRoIContainer* inL1Jets(nullptr);
    +            if ( !HelperFunctions::isAvailable<xAOD::jFexLRJetRoIContainer>(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){
    +              ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections");
    +              reject = true;
    +            }
    +            ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) );
    +            helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets );
    +          }else if(m_l1JetContainers.at(ll).find("gFex")!= std::string::npos){ // gFEX small-R/large-R jets
    +            const xAOD::gFexJetRoIContainer* inL1Jets(nullptr);
    +            if ( !HelperFunctions::isAvailable<xAOD::gFexJetRoIContainer>(m_l1JetContainers.at(ll), m_event, m_store, msg()) ){
    +              ANA_MSG_DEBUG( "The L1 jet container " + m_l1JetContainers.at(ll) + " is not available. Skipping all remaining L1 jet collections");
    +              reject = true;
    +            }
    +            ANA_CHECK( HelperFunctions::retrieve(inL1Jets, m_l1JetContainers.at(ll), m_event, m_store, msg()) );
    +            helpTree->FillPhase1L1Jets( inL1Jets, m_l1JetBranches.at(ll), m_sortL1Jets );
    +          }else{
    +            ANA_MSG_DEBUG( "Phase 1 L1 jet container " + m_l1JetContainers.at(ll) + " is not known." );
    +          }
    +        }
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a L1 jet container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_trigJetContainerName.empty() ) {
    +      bool reject = false;
    +      for(unsigned int ll=0;ll<m_trigJetContainers.size();++ll){
    +        if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(m_trigJetContainers.at(ll), m_event, m_store, msg()) ) {
    +          ANA_MSG_DEBUG( "The trigger jet container " + m_trigJetContainers.at(ll) + " is not available. Skipping all remaining trigger jet collections");
    +          reject = true;
    +          break;
    +        }
    +
    +        const xAOD::JetContainer* inTrigJets(nullptr);
    +        ANA_CHECK( HelperFunctions::retrieve(inTrigJets, m_trigJetContainers.at(ll), m_event, m_store, msg()) );
    +        helpTree->FillJets( inTrigJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_trigJetBranches.at(ll) );
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a trigger jet container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_truthJetContainerName.empty() ) {
    +      bool reject = false;
    +      for ( unsigned int ll = 0; ll < m_truthJetContainers.size(); ++ll) {
    +        if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(m_truthJetContainers.at(ll), m_event, m_store, msg()) ) {
    +          ANA_MSG_DEBUG( "The truth jet container " + m_truthJetContainers.at(ll) + " is not available. Skipping all remaining truth jet collections");
    +          reject = true;
    +          break;
    +        }
    +
    +        const xAOD::JetContainer* inTruthJets(nullptr);
    +        ANA_CHECK( HelperFunctions::retrieve(inTruthJets, m_truthJetContainers.at(ll), m_event, m_store, msg()) );
    +        helpTree->FillJets( inTruthJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_truthJetBranches.at(ll) );
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a truth jet container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_fatJetContainerName.empty() ) {
    +      // bool reject = false;
    +      // std::string token;
    +      // std::istringstream ss(m_fatJetContainerName);
    +      // while ( std::getline(ss, token, ' ') ){
    +        // if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(token+fatJetSuffix, m_event, m_store, msg()) ) {
    +          // reject = true;
    +          // break;
    +        // }
    +
    +        // const xAOD::JetContainer* inFatJets(nullptr);
    +    // ANA_CHECK( HelperFunctions::retrieve(inFatJets, token+fatJetSuffix, m_event, m_store, msg()) );
    +        // helpTree->FillFatJets( inFatJets, token );
    +      // }
    +
    +      // if ( reject ) continue;
    +
    +      bool reject = false;
    +      for(unsigned int ll=0;ll<m_fatJetContainers.size();++ll){
    +        if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(m_fatJetContainers.at(ll)+fatJetSuffix, m_event, m_store, msg()) ) {
    +          ANA_MSG_DEBUG( "The fatjet container " + m_fatJetContainers.at(ll)+fatJetSuffix + " was not retrieved. Skipping all remaining fat jet collections");
    +          reject = true;
    +          break;
    +        }
    +
    +        const xAOD::JetContainer* inFatJets(nullptr);
    +        ANA_CHECK( HelperFunctions::retrieve(inFatJets, m_fatJetContainers.at(ll)+fatJetSuffix, m_event, m_store, msg()) );
    +        helpTree->FillFatJets( inFatJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_fatJetBranches.at(ll) );
    +
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a fat jet container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_truthFatJetContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::JetContainer>(m_truthFatJetContainerName, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::JetContainer* inTruthFatJets(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inTruthFatJets, m_truthFatJetContainerName, m_event, m_store, msg()) );
    +      helpTree->FillTruthFatJets( inTruthFatJets, HelperFunctions::getPrimaryVertexLocation(vertices, msg()), m_truthFatJetBranchName );
    +    }
    +
    +    if ( !m_tauContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::TauJetContainer>(m_tauContainerName, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::TauJetContainer* inTaus(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inTaus, m_tauContainerName, m_event, m_store, msg()) );
    +      helpTree->FillTaus( inTaus );
    +    }
    +
    +    if ( !m_METContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::MissingETContainer>(m_METContainerName + metSuffix, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::MissingETContainer* inMETCont(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inMETCont, m_METContainerName + metSuffix, m_event, m_store, msg()) );
    +      helpTree->FillMET( inMETCont );
    +    }
    +
    +    if ( !m_METReferenceContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::MissingETContainer>(m_METReferenceContainerName, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::MissingETContainer* inMETCont(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inMETCont, m_METReferenceContainerName, m_event, m_store, msg()) );
    +      helpTree->FillMET( inMETCont, "referenceMet" );
    +    }
    +
    +    if ( !m_photonContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::PhotonContainer>(m_photonContainerName + photonSuffix, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::PhotonContainer* inPhotons(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inPhotons, m_photonContainerName+photonSuffix, m_event, m_store, msg()) );
    +      helpTree->FillPhotons( inPhotons );
    +    }
    +
    +    if ( !m_truthParticlesContainerName.empty() ) {
    +      for ( unsigned int ll = 0; ll < m_truthParticlesContainers.size(); ++ll) {
    +        if ( !HelperFunctions::isAvailable<xAOD::TruthParticleContainer>(m_truthParticlesContainers.at(ll), m_event, m_store, msg()) ) continue;
    +
    +        const xAOD::TruthParticleContainer* inTruthParticles(nullptr);
    +        ANA_CHECK( HelperFunctions::retrieve(inTruthParticles, m_truthParticlesContainers.at(ll), m_event, m_store, msg()));
    +        helpTree->FillTruth(inTruthParticles, m_truthParticlesBranches.at(ll));
    +      }
    +    }
    +
    +    if ( !m_trackParticlesContainerName.empty() ) {
    +      if ( !HelperFunctions::isAvailable<xAOD::TrackParticleContainer>(m_trackParticlesContainerName, m_event, m_store, msg()) ) continue;
    +
    +      const xAOD::TrackParticleContainer* inTrackParticles(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(inTrackParticles, m_trackParticlesContainerName, m_event, m_store, msg()));
    +      helpTree->FillTracks(inTrackParticles,m_trackParticlesContainerName);
    +    }
    +
    +    if ( !m_vertexContainerName.empty() && !m_vertexDetailStr.empty() ){
    +      bool reject = false;
    +      for ( unsigned int ll = 0; ll < m_vertexContainers.size(); ++ll ) {
    +        const xAOD::VertexContainer* inVertices(nullptr);
    +        if ( !HelperFunctions::isAvailable<xAOD::VertexContainer>(m_vertexContainers.at(ll), m_event, m_store, msg()) ){
    +          ANA_MSG_DEBUG( "The vertex container " + m_vertexContainers.at(ll) + " is not available. Skipping all remaining vertex collections");
    +          reject = true;
    +    }
    +        ANA_CHECK( HelperFunctions::retrieve(inVertices, m_vertexContainers.at(ll), m_event, m_store, msg()) );
    +        helpTree->FillVertices( inVertices, m_vertexBranches.at(ll));
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a vertex container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    if ( !m_clusterContainerName.empty() ) {
    +      bool reject = false;
    +      for(unsigned int ll=0;ll<m_clusterContainers.size();++ll){
    +        if ( !HelperFunctions::isAvailable<xAOD::CaloClusterContainer>(m_clusterContainers.at(ll), m_event, m_store, msg()) ) {
    +          ANA_MSG_DEBUG( "The cluster container " + m_clusterContainers.at(ll) + " is not available. Skipping all remaining cluster collections");
    +          reject = true;
    +          break;
    +        }
    +
    +        const xAOD::CaloClusterContainer* inClusters(nullptr);
    +        ANA_CHECK( HelperFunctions::retrieve(inClusters, m_clusterContainers.at(ll), m_event, m_store, msg()) );
    +        helpTree->FillClusters( inClusters, m_clusterBranches.at(ll) );
    +      }
    +
    +      if ( reject ) {
    +        ANA_MSG_DEBUG( "There was a cluster container problem - not writing the event");
    +        continue;
    +      }
    +    }
    +
    +    // fill the tree
    +    helpTree->Fill();
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +EL::StatusCode TreeAlgo :: postExecute () { return EL::StatusCode::SUCCESS; }
    +
    +EL::StatusCode TreeAlgo :: finalize () {
    +
    +  ANA_MSG_INFO( "Deleting tree instances...");
    +
    +  for(auto& item: m_trees){
    +    if(item.second) {delete item.second; item.second = nullptr; }
    +  }
    +  m_trees.clear();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TreeAlgo :: histFinalize () { return EL::StatusCode::SUCCESS; }
    +
    +HelpTreeBase* TreeAlgo :: createTree(xAOD::TEvent *event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store) {
    +    return new HelpTreeBase( event, tree, file, units, debug, store );
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TrigMatcher.cxx.html b/api/program_listing_file_Root_TrigMatcher.cxx.html new file mode 100644 index 0000000000..6cd6b87613 --- /dev/null +++ b/api/program_listing_file_Root_TrigMatcher.cxx.html @@ -0,0 +1,393 @@ + + + + + + + + + + + Program Listing for File TrigMatcher.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrigMatcher.cxx

    +

    Return to documentation for file (Root/TrigMatcher.cxx)

    +
    /********************************************
    + *
    + * Interface to CP trigger matching tool(s).
    + *
    + *******************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include <xAODEventInfo/EventInfo.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/TrigMatcher.h>
    +
    +#include "TriggerMatchingTool/MatchFromCompositeTool.h"
    +
    +// ROOT include(s):
    +#include <TFile.h>
    +#include <TObjArray.h>
    +#include <TObjString.h>
    +
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TrigMatcher)
    +
    +TrigMatcher :: TrigMatcher ()
    +: Algorithm("TrigMatcher")
    +{
    +}
    +
    +TrigMatcher::~TrigMatcher() {}
    +
    +EL::StatusCode TrigMatcher :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TrigMatcher" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrigMatcher :: initialize ()
    +{
    +  ANA_MSG_INFO( "Initializing TrigMatcher Interface... ");
    +
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +
    +  // Standard containers
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  // Configuration
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  if( !isPHYS() ) {
    +    // Grab the TrigDecTool from the ToolStore
    +    if(!m_trigDecTool_handle.isUserConfigured()){
    +      ANA_MSG_FATAL("A configured " << m_trigDecTool_handle.typeAndName() << " must have been previously created! Are you creating one in xAH::BasicEventSelection?" );
    +      return EL::StatusCode::FAILURE;
    +    }
    +    ANA_CHECK( m_trigDecTool_handle.retrieve());
    +    ANA_MSG_DEBUG("Retrieved tool: " << m_trigDecTool_handle);
    +  }
    +
    +  // ***************************************
    +  //
    +  // Initialise Trig::TrigMatchingTool
    +  //
    +  // ***************************************
    +  if( !m_trigChains.empty() ) {
    +    std::string trig;
    +    std::istringstream ss(m_trigChains);
    +    while ( std::getline(ss, trig, ',') ) {
    +      m_trigChainsList.push_back(trig);
    +    }
    +  }
    +
    +  ANA_CHECK( m_scoreTool.retrieve());
    +
    +  //  everything went fine, let's initialise the tool!
    +  //
    +  if( !isPHYS() ) {
    +    m_trigMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchingTool/MatchingTool");
    +    ANA_CHECK( m_trigMatchTool_handle.setProperty( "TrigDecisionTool", m_trigDecTool_handle ));
    +    ANA_CHECK( m_trigMatchTool_handle.setProperty( "ScoringTool", m_scoreTool ));
    +  } else { // For DAOD_PHYS samples
    +    m_trigMatchTool_handle = asg::AnaToolHandle<Trig::IMatchingTool>("Trig::MatchFromCompositeTool/MatchFromCompositeTool");
    +  }
    +  ANA_CHECK( m_trigMatchTool_handle.retrieve() );
    +
    +  // **********************************************************************************************
    +
    +  ANA_MSG_INFO( "TrigMatcher Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrigMatcher :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +
    +  ANA_MSG_DEBUG( "Applying trigger matching... ");
    +
    +  const xAOD::IParticleContainer* inParticles(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +  //
    +  if ( m_systNames.empty() ) {
    +
    +    // this will be the collection processed - no matter what!!
    +    //
    +    ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName, m_event, m_store, msg()) );
    +    ANA_CHECK( executeMatching( inParticles ) );
    +
    +  } else { // get the list of systematics to run over
    +
    +    // get vector of string giving the syst names of the upstream algo from TStore (rememeber: 1st element is a blank string: nominal case!)
    +    //
    +    std::vector< std::string >* systNames(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(systNames, m_systNames, 0, m_store, msg()) );
    +
    +    // loop over systematic sets
    +    //
    +    for ( auto systName : *systNames) {
    +
    +      ANA_MSG_DEBUG( " syst name: " << systName << "  input container name:  " << m_inContainerName+systName );
    +
    +      ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName + systName, m_event, m_store, msg()));
    +      ANA_CHECK( executeMatching( inParticles ) );
    +    }
    +
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +EL::StatusCode TrigMatcher :: executeMatching ( const xAOD::IParticleContainer* inParticles )
    +{
    +  static const SG::AuxElement::Decorator< std::vector< std::string > > isTrigMatchedDecor( "trigMatched" );
    +
    +  for( auto particle : *inParticles )
    +    {
    +      ANA_MSG_DEBUG( "Trigger matching an object");
    +
    +      if ( !isTrigMatchedDecor.isAvailable( *particle ) )
    +    isTrigMatchedDecor( *particle ) = std::vector<std::string>();
    +
    +      for ( auto const &chain : m_trigChainsList ) {
    +    ANA_MSG_DEBUG( "\t checking trigger chain " << chain);
    +
    +    bool matched = m_trigMatchTool_handle->match( *particle, chain, 0.07 );
    +    ANA_MSG_DEBUG( "\t\t result = " << matched );
    +    if(matched) isTrigMatchedDecor( *particle ).push_back( chain );
    +      }
    +    }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TruthContainer.cxx.html b/api/program_listing_file_Root_TruthContainer.cxx.html new file mode 100644 index 0000000000..9fce8cdfea --- /dev/null +++ b/api/program_listing_file_Root_TruthContainer.cxx.html @@ -0,0 +1,679 @@ + + + + + + + + + + + Program Listing for File TruthContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TruthContainer.cxx

    +

    Return to documentation for file (Root/TruthContainer.cxx)

    +
    #include "xAODAnaHelpers/TruthContainer.h"
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <iostream>
    +#include <xAODTruth/TruthVertex.h>
    +#include <xAODTruth/TruthParticle.h>
    +//#include "xAODTruth/TruthEventContainer.h"
    +
    +using namespace xAH;
    +
    +TruthContainer::TruthContainer(const std::string& name, const std::string& detailStr, float units)
    +  : ParticleContainer(name,detailStr,units,true)
    +
    +{
    +  m_pdgId   = new std::vector<int>();
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    m_status  = new std::vector<int>();
    +    m_barcode = new std::vector<int>();
    +  }
    +
    +  if(m_infoSwitch.m_type){
    +    m_is_higgs  = new std::vector<int>();
    +    m_is_bhad   = new std::vector<int>();
    +  }
    +
    +  if(m_infoSwitch.m_bVtx){
    +    m_Bdecay_x  = new std::vector<float>();
    +    m_Bdecay_y  = new std::vector<float>();
    +    m_Bdecay_z  = new std::vector<float>();
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    m_nParents        = new std::vector<int>();
    +    m_parent_pdgId    = new std::vector< std::vector<int> >();
    +    m_parent_barcode  = new std::vector< std::vector<int> >();
    +    m_parent_status   = new std::vector< std::vector<int> >();
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    m_nChildren      = new std::vector<int>();
    +    m_child_pdgId    = new std::vector< std::vector<int> >();
    +    m_child_barcode  = new std::vector< std::vector<int> >();
    +    m_child_status   = new std::vector< std::vector<int> >();
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    m_pt_dressed  = new std::vector<float>();
    +    m_eta_dressed = new std::vector<float>();
    +    m_phi_dressed = new std::vector<float>();
    +    m_e_dressed   = new std::vector<float>();
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    m_origin = new std::vector<unsigned int>();
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    m_particleType = new std::vector<unsigned int>();
    +  }
    +
    +}
    +
    +TruthContainer::~TruthContainer()
    +{
    +  if(m_debug) std::cout << " Deleting TruthContainer "  << std::endl;
    +
    +  delete m_pdgId;
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    delete m_status;
    +    delete m_barcode;
    +  }
    +
    +
    +  if(m_infoSwitch.m_type){
    +    delete m_is_higgs;
    +    delete m_is_bhad ;
    +  }
    +
    +  if(m_infoSwitch.m_bVtx){
    +    delete m_Bdecay_x;
    +    delete m_Bdecay_y;
    +    delete m_Bdecay_z;
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    delete m_nParents;
    +    delete m_parent_pdgId;
    +    delete m_parent_barcode;
    +    delete m_parent_status;
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    delete m_nChildren;
    +    delete m_child_pdgId;
    +    delete m_child_barcode;
    +    delete m_child_status;
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    delete m_pt_dressed;
    +    delete m_eta_dressed;
    +    delete m_phi_dressed;
    +    delete m_e_dressed;
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    delete m_origin;
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    delete m_particleType;
    +  }
    +
    +}
    +
    +void TruthContainer::setTree(TTree *tree)
    +{
    +  //
    +  // Connect branches
    +  ParticleContainer::setTree(tree);
    +
    +  connectBranch<int>(tree,"pdgId",                      &m_pdgId);
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    connectBranch<int>(tree,"status",                     &m_status);
    +    connectBranch<int>(tree,"barcode",                    &m_barcode);
    +  }
    +
    +  if(m_infoSwitch.m_type){
    +    connectBranch<int>(tree,"is_higgs",  &m_is_higgs);
    +    connectBranch<int>(tree,"is_bhad",   &m_is_bhad);
    +  }
    +
    +  if(m_infoSwitch.m_bVtx){
    +    connectBranch<float>(tree,"Bdecay_x",   &m_Bdecay_x);
    +    connectBranch<float>(tree,"Bdecay_y",   &m_Bdecay_y);
    +    connectBranch<float>(tree,"Bdecay_z",   &m_Bdecay_z);
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    connectBranch<int>(tree,"nParents",   &m_nParents);
    +    connectBranch<std::vector<int> >(tree,"parent_pdgId",   &m_parent_pdgId);
    +    connectBranch<std::vector<int> >(tree,"parent_barcode", &m_parent_barcode);
    +    connectBranch<std::vector<int> >(tree,"parent_status",  &m_parent_status);
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    connectBranch<int>         (tree,"nChildren",     &m_nChildren);
    +    connectBranch<std::vector<int> >(tree,"child_pdgId",   &m_child_pdgId);
    +    connectBranch<std::vector<int> >(tree,"child_barcode", &m_child_barcode);
    +    connectBranch<std::vector<int> >(tree,"child_status",  &m_child_status);
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    connectBranch<float> (tree,"pt_dressed",  &m_pt_dressed);
    +    connectBranch<float> (tree,"eta_dressed", &m_eta_dressed);
    +    connectBranch<float> (tree,"phi_dressed", &m_phi_dressed);
    +    connectBranch<float> (tree,"e_dressed",   &m_e_dressed);
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    connectBranch<unsigned int> (tree,"origin",  &m_origin);
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    connectBranch<unsigned int> (tree,"type",  &m_particleType);
    +  }
    +
    +}
    +
    +void TruthContainer::updateParticle(uint idx, TruthPart& truth)
    +{
    +  if(m_debug) std::cout << "in TruthContainer::updateParticle " << std::endl;
    +  ParticleContainer::updateParticle(idx,truth);
    +
    +  truth.pdgId = m_pdgId->at(idx);
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    truth.status  = m_status->at(idx);
    +    truth.barcode = m_barcode->at(idx);
    +  }
    +
    +
    +  if(m_infoSwitch.m_type){
    +    truth.is_higgs = (bool)m_is_higgs->at(idx);
    +    truth.is_bhad  = (bool)m_is_bhad ->at(idx);
    +  }
    +
    +
    +  if(m_infoSwitch.m_bVtx){
    +    truth.Bdecay_x = m_Bdecay_x->at(idx);
    +    truth.Bdecay_y = m_Bdecay_y->at(idx);
    +    truth.Bdecay_z = m_Bdecay_z->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    truth.nParents       = m_nParents->at(idx);
    +    truth.parent_pdgId   = m_parent_pdgId->at(idx);
    +    truth.parent_barcode = m_parent_barcode->at(idx);
    +    truth.parent_status  = m_parent_status ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    truth.nChildren     = m_nChildren->at(idx);
    +    truth.child_pdgId   = m_child_pdgId->at(idx);
    +    truth.child_barcode = m_child_barcode->at(idx);
    +    truth.child_status  = m_child_status ->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    truth.pt_dressed  = m_pt_dressed->at(idx);
    +    truth.eta_dressed = m_eta_dressed->at(idx);
    +    truth.phi_dressed = m_phi_dressed->at(idx);
    +    truth.e_dressed   = m_e_dressed->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    truth.origin = m_origin->at(idx);
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    truth.type = m_particleType->at(idx);
    +  }
    +
    +  if(m_debug) std::cout << "leave TruthContainer::updateParticle " << std::endl;
    +  return;
    +}
    +
    +
    +
    +void TruthContainer::setBranches(TTree *tree)
    +{
    +  ParticleContainer::setBranches(tree);
    +
    +  setBranch<int>(tree,"pdgId",                      m_pdgId              );
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    setBranch<int>(tree,"status",                     m_status             );
    +    setBranch<int>(tree,"barcode",                    m_barcode             );
    +  }
    +
    +  if(m_infoSwitch.m_type){
    +    setBranch<int>(tree,"is_higgs",                      m_is_higgs              );
    +    setBranch<int>(tree,"is_bhad",                       m_is_bhad              );
    +  }
    +
    +
    +  if(m_infoSwitch.m_bVtx){
    +    setBranch<float>(tree,"Bdecay_x",                      m_Bdecay_x              );
    +    setBranch<float>(tree,"Bdecay_y",                      m_Bdecay_y              );
    +    setBranch<float>(tree,"Bdecay_z",                      m_Bdecay_z              );
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    setBranch<int>         (tree,"nParents",                      m_nParents              );
    +    setBranch<std::vector<int> >(tree,"parent_pdgId",                  m_parent_pdgId          );
    +    setBranch<std::vector<int> >(tree,"parent_barcode",                m_parent_barcode        );
    +    setBranch<std::vector<int> >(tree,"parent_status",                 m_parent_status         );
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    setBranch<int>         (tree,"nChildren",                    m_nChildren            );
    +    setBranch<std::vector<int> >(tree,"child_pdgId",                  m_child_pdgId          );
    +    setBranch<std::vector<int> >(tree,"child_barcode",                m_child_barcode        );
    +    setBranch<std::vector<int> >(tree,"child_status",                 m_child_status         );
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    setBranch<float> (tree,"pt_dressed", m_pt_dressed );
    +    setBranch<float> (tree,"eta_dressed", m_eta_dressed );
    +    setBranch<float> (tree,"phi_dressed", m_phi_dressed );
    +    setBranch<float> (tree,"e_dressed", m_e_dressed );
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    setBranch<unsigned int> (tree,"origin",m_origin);
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    setBranch<unsigned int> (tree,"type",m_particleType);
    +  }
    +
    +  return;
    +}
    +
    +
    +void TruthContainer::clear()
    +{
    +
    +  ParticleContainer::clear();
    +
    +  m_pdgId ->clear();
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    m_status->clear();
    +    m_barcode->clear();
    +  }
    +
    +  if(m_infoSwitch.m_type){
    +    m_is_higgs  ->clear();
    +    m_is_bhad   ->clear();
    +  }
    +
    +  if(m_infoSwitch.m_bVtx){
    +    m_Bdecay_x->clear();
    +    m_Bdecay_y->clear();
    +    m_Bdecay_z->clear();
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    m_nParents->clear();
    +    m_parent_pdgId->clear();
    +    m_parent_barcode->clear();
    +    m_parent_status->clear();
    +  }
    +
    +  if(m_infoSwitch.m_children){
    +    m_nChildren->clear();
    +    m_child_pdgId->clear();
    +    m_child_barcode->clear();
    +    m_child_status->clear();
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    m_pt_dressed->clear();
    +    m_eta_dressed->clear();
    +    m_phi_dressed->clear();
    +    m_e_dressed->clear();
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    m_origin->clear();
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    m_particleType->clear();
    +  }
    +
    +  return;
    +}
    +
    +void TruthContainer::FillTruth( const xAOD::TruthParticle* truth ){
    +  return FillTruth(static_cast<const xAOD::IParticle*>(truth));
    +}
    +
    +void TruthContainer::FillTruth( const xAOD::IParticle* particle ){
    +  if(m_debug) std::cout << "In Fill Truth " << std::endl;
    +  ParticleContainer::FillParticle(particle);
    +
    +  const xAOD::TruthParticle* truth=dynamic_cast<const xAOD::TruthParticle*>(particle);
    +  if(m_debug) std::cout << "Got TP " << std::endl;
    +
    +  m_pdgId  ->push_back( truth->pdgId() );
    +  if(!m_infoSwitch.m_pdgIdOnly){
    +    m_status ->push_back( truth->status() );
    +    m_barcode->push_back( truth->barcode() );
    +  }
    +  if(m_debug)   std::cout << "Filled status " << std::endl;
    +
    +  if(m_infoSwitch.m_type){
    +    if(m_debug) std::cout << "Filling  type " << std::endl;
    +    m_is_higgs->push_back( (int)truth->isHiggs()        );
    +    m_is_bhad ->push_back( (int)truth->isBottomHadron() );
    +  }
    +
    +
    +
    +  if(m_infoSwitch.m_bVtx){
    +    if(m_debug) std::cout << "Filling  bVtx " << std::endl;
    +    if(truth->isBottomHadron() && truth->hasDecayVtx()){
    +      const xAOD::TruthVertex* vtx = truth->decayVtx();
    +      m_Bdecay_x->push_back(vtx->x());
    +      m_Bdecay_y->push_back(vtx->y());
    +      m_Bdecay_z->push_back(vtx->z());
    +    }
    +    else{
    +      m_Bdecay_x->push_back(-999999.);
    +      m_Bdecay_y->push_back(-999999.);
    +      m_Bdecay_z->push_back(-999999.);
    +    }
    +  }
    +
    +  if(m_infoSwitch.m_parents){
    +    int nParents = truth->nParents();
    +    m_nParents->push_back(nParents);
    +
    +    m_parent_pdgId  ->push_back(std::vector<int>());
    +    m_parent_barcode->push_back(std::vector<int>());
    +    m_parent_status ->push_back(std::vector<int>());
    +    for(int iparent = 0; iparent < nParents; ++iparent){
    +      const xAOD::TruthParticle* parent = truth->parent(iparent);
    +      if(parent){
    +    m_parent_pdgId  ->back().push_back(parent->pdgId());
    +    m_parent_barcode->back().push_back(parent->barcode());
    +    m_parent_status ->back().push_back(parent->status());
    +      }else{
    +    m_parent_pdgId  ->back().push_back(-99);
    +    m_parent_barcode->back().push_back(-99);
    +    m_parent_status ->back().push_back(-99);
    +      }
    +    }
    +  }
    +
    +
    +  if(m_infoSwitch.m_children){
    +    int nChildren = truth->nChildren();
    +    m_nChildren->push_back(nChildren);
    +
    +    m_child_pdgId  ->push_back(std::vector<int>());
    +    m_child_barcode->push_back(std::vector<int>());
    +    m_child_status ->push_back(std::vector<int>());
    +    for(int ichild = 0; ichild < nChildren; ++ichild){
    +      const xAOD::TruthParticle* child = truth->child(ichild);
    +      if(child){
    +    m_child_pdgId  ->back().push_back(child->pdgId());
    +    m_child_barcode->back().push_back(child->barcode());
    +    m_child_status ->back().push_back(child->status());
    +      }else{
    +    m_child_pdgId  ->back().push_back(-99);
    +    m_child_barcode->back().push_back(-99);
    +    m_child_status ->back().push_back(-99);
    +      }
    +    }
    +  }
    +
    +  if(m_infoSwitch.m_dressed){
    +    if( truth->isAvailable<float>("pt_dressed") ){
    +      float pt_dressed = truth->auxdata<float>("pt_dressed");
    +      m_pt_dressed->push_back(pt_dressed / m_units);
    +    } else {
    +      m_pt_dressed->push_back(-999);
    +    }
    +    if( truth->isAvailable<float>("eta_dressed") ){
    +      float eta_dressed = truth->auxdata<float>("eta_dressed");
    +      m_eta_dressed->push_back(eta_dressed);
    +    } else {
    +      m_eta_dressed->push_back(-999);
    +    }
    +    if( truth->isAvailable<float>("phi_dressed") ){
    +      float phi_dressed = truth->auxdata<float>("phi_dressed");
    +      m_phi_dressed->push_back(phi_dressed);
    +    } else {
    +      m_phi_dressed->push_back(-999);
    +    }
    +    if( truth->isAvailable<float>("e_dressed") ){
    +      float e_dressed = truth->auxdata<float>("e_dressed");
    +      m_e_dressed->push_back(e_dressed / m_units);
    +    } else {
    +      m_e_dressed->push_back(-999);
    +    }
    +  }
    +
    +  if(m_infoSwitch.m_origin){
    +    if( truth->isAvailable<unsigned int>("classifierParticleOrigin") ){
    +      unsigned int origin = truth->auxdata<unsigned int>("classifierParticleOrigin");
    +      m_origin->push_back(origin);
    +    } else {
    +      m_origin->push_back(0); // Non-defined
    +    }
    +  }
    +
    +  if(m_infoSwitch.m_particleType){
    +    if( truth->isAvailable<unsigned int>("classifierParticleType") ){
    +      unsigned int type = truth->auxdata<unsigned int>("classifierParticleType");
    +      m_particleType->push_back(type);
    +    } else {
    +      m_particleType->push_back(0); // Unknown
    +    }
    +  }
    +
    +  if(m_debug) std::cout << "Leave Fill Truth " << std::endl;
    +  return;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_TruthSelector.cxx.html b/api/program_listing_file_Root_TruthSelector.cxx.html new file mode 100644 index 0000000000..2524dc0354 --- /dev/null +++ b/api/program_listing_file_Root_TruthSelector.cxx.html @@ -0,0 +1,628 @@ + + + + + + + + + + + Program Listing for File TruthSelector.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TruthSelector.cxx

    +

    Return to documentation for file (Root/TruthSelector.cxx)

    +
    /************************************
    + *
    + * Truth selector tool
    + *
    + * J.Alison (john.alison@cern.ch)
    + *
    + ************************************/
    +
    +// c++ include(s):
    +#include <iostream>
    +#include <typeinfo>
    +#include <sstream>
    +
    +// EL include(s):
    +#include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +
    +// EDM include(s):
    +#include "xAODTruth/TruthParticleContainer.h"
    +#include "xAODCore/ShallowCopy.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/SystematicRegistry.h"
    +
    +// package include(s):
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/TruthSelector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +// external tools include(s):
    +
    +// ROOT include(s):
    +#include "TFile.h"
    +#include "TObjArray.h"
    +#include "TObjString.h"
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(TruthSelector)
    +
    +TruthSelector :: TruthSelector () :
    +    Algorithm("TruthSelector")
    +{
    +}
    +
    +EL::StatusCode TruthSelector :: setupJob (EL::Job& job)
    +{
    +  ANA_MSG_INFO( "Calling setupJob");
    +
    +  job.useXAOD ();
    +  xAOD::Init( "TruthSelector" ).ignore(); // call before opening first file
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: histInitialize ()
    +{
    +  ANA_MSG_INFO( "Calling histInitialize");
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: fileExecute ()
    +{
    +  ANA_MSG_INFO( "Calling fileExecute");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: changeInput (bool /*firstFile*/)
    +{
    +  ANA_MSG_INFO( "Calling changeInput");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: initialize ()
    +{
    +  ANA_MSG_INFO( "Calling initialize");
    +
    +  if ( m_useCutFlow ) {
    +
    +   // retrieve the file in which the cutflow hists are stored
    +    //
    +    TFile *file     = wk()->getOutputFile (m_cutFlowStreamName);
    +
    +    // retrieve the event cutflows
    +    //
    +    m_cutflowHist  = (TH1D*)file->Get("cutflow");
    +    m_cutflowHistW = (TH1D*)file->Get("cutflow_weighted");
    +    m_cutflow_bin  = m_cutflowHist->GetXaxis()->FindBin(m_name.c_str());
    +    m_cutflowHistW->GetXaxis()->FindBin(m_name.c_str());
    +
    +    // retrieve the object cutflow
    +    //
    +    m_truth_cutflowHist_1 = (TH1D*)file->Get("cutflow_truths_1");
    +
    +    m_truth_cutflow_all             = m_truth_cutflowHist_1->GetXaxis()->FindBin("all");
    +    m_truth_cutflow_ptmax_cut       = m_truth_cutflowHist_1->GetXaxis()->FindBin("ptmax_cut");
    +    m_truth_cutflow_ptmin_cut       = m_truth_cutflowHist_1->GetXaxis()->FindBin("ptmin_cut");
    +    m_truth_cutflow_eta_cut         = m_truth_cutflowHist_1->GetXaxis()->FindBin("eta_cut");
    +
    +  }
    +
    +  if ( m_inContainerName.empty() ) {
    +    ANA_MSG_ERROR( "InputContainer is empty!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  m_decor   = "passSel";
    +
    +  if ( m_decorateSelectedObjects ) {
    +    ANA_MSG_INFO(" Decorate Jets with " << m_decor);
    +  }
    +
    +
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +
    +  ANA_MSG_INFO( "Number of events in file: " << m_event->getEntries() );
    +
    +  m_numEvent      = 0;
    +  m_numObject     = 0;
    +  m_numEventPass  = 0;
    +  m_weightNumEventPass  = 0;
    +  m_numObjectPass = 0;
    +
    +  ANA_MSG_INFO( "TruthSelector Interface succesfully initialized!" );
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: execute ()
    +{
    +  ANA_MSG_DEBUG( "Applying Jet Selection... ");
    +
    +  // retrieve event
    +  const xAOD::EventInfo* eventInfo(nullptr);
    +  ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +  // MC event weight
    +  float mcEvtWeight(1.0);
    +  static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +  if ( ! mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +    ANA_MSG_ERROR( "mcEventWeight is not available as decoration! Aborting" );
    +    return EL::StatusCode::FAILURE;
    +  }
    +  mcEvtWeight = mcEvtWeightAcc( *eventInfo );
    +
    +  m_numEvent++;
    +
    +  // did any collection pass the cuts?
    +  bool pass(false);
    +  bool count(true); // count for the 1st collection in the container - could be better as
    +                    // shoudl only count for the nominal
    +  const xAOD::TruthParticleContainer* inTruthParts(nullptr);
    +
    +  // if input comes from xAOD, or just running one collection,
    +  // then get the one collection and be done with it
    +
    +  // this will be the collection processed - no matter what!!
    +  ANA_CHECK( HelperFunctions::retrieve(inTruthParts, m_inContainerName, m_event, m_store, msg()) );
    +
    +  pass = executeSelection( inTruthParts, mcEvtWeight, count, m_outContainerName);
    +
    +  // look what we have in TStore
    +  if(msgLvl(MSG::VERBOSE)) m_store->print();
    +
    +  if ( !pass ) {
    +    wk()->skipEvent();
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +
    +}
    +
    +bool TruthSelector :: executeSelection ( const xAOD::TruthParticleContainer* inTruthParts,
    +                     float mcEvtWeight,
    +                     bool count,
    +                     std::string outContainerName
    +                     )
    +{
    +
    +  // create output container (if requested)
    +  ConstDataVector<xAOD::TruthParticleContainer>* selectedTruthParts(nullptr);
    +  if ( m_createSelectedContainer ) {
    +    selectedTruthParts = new ConstDataVector<xAOD::TruthParticleContainer>(SG::VIEW_ELEMENTS);
    +  }
    +
    +  int nPass(0); int nObj(0);
    +
    +  static SG::AuxElement::Decorator< char > passSelDecor( m_decor );
    +
    +  for ( auto truth_itr : *inTruthParts ) { // duplicated of basic loop
    +
    +    // if only looking at a subset of jets make sure all are decorated
    +    if ( m_nToProcess > 0 && nObj >= m_nToProcess ) {
    +      if ( m_decorateSelectedObjects ) {
    +        passSelDecor( *truth_itr ) = -1;
    +      } else {
    +        break;
    +      }
    +      continue;
    +    }
    +
    +    nObj++;
    +    int passSel = this->PassCuts( truth_itr );
    +    if ( m_decorateSelectedObjects ) {
    +      passSelDecor( *truth_itr ) = passSel;
    +    }
    +
    +    if ( passSel ) {
    +      nPass++;
    +      if ( m_createSelectedContainer ) {
    +        selectedTruthParts->push_back( truth_itr );
    +      }
    +    }
    +  }
    +
    +  if ( count ) {
    +    m_numObject     += nObj;
    +    m_numObjectPass += nPass;
    +  }
    +
    +  // add ConstDataVector to TStore
    +  if ( m_createSelectedContainer ) {
    +    ANA_CHECK( m_store->record( selectedTruthParts, outContainerName ));
    +  }
    +
    +  // apply event selection based on minimal/maximal requirements on the number of objects per event passing cuts
    +  if ( m_pass_min > 0 && nPass < m_pass_min ) {
    +    return false;
    +  }
    +  if ( m_pass_max >= 0 && nPass > m_pass_max ) {
    +    return false;
    +  }
    +
    +  if ( count ) {
    +    m_numEventPass++;
    +    m_weightNumEventPass += mcEvtWeight;
    +  }
    +
    +  return true;
    +}
    +
    +
    +EL::StatusCode TruthSelector :: postExecute ()
    +{
    +  ANA_MSG_DEBUG( "Calling postExecute");
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: finalize ()
    +{
    +  ANA_MSG_INFO( m_name );
    +
    +  if ( m_useCutFlow ) {
    +    ANA_MSG_INFO( "Filling cutflow");
    +    m_cutflowHist ->SetBinContent( m_cutflow_bin, m_numEventPass        );
    +    m_cutflowHistW->SetBinContent( m_cutflow_bin, m_weightNumEventPass  );
    +  }
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode TruthSelector :: histFinalize ()
    +{
    +  ANA_MSG_INFO( "Calling histFinalize");
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +int TruthSelector :: PassCuts( const xAOD::TruthParticle* truthPart ) {
    +
    +  // fill cutflow bin 'all' before any cut
    +  if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_all, 1 );
    +
    +  // pT
    +  if ( m_pT_max != 1e8 ) {
    +    if ( truthPart->pt() > m_pT_max ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_ptmax_cut, 1 );
    +
    +  if ( m_pT_min != 1e8 ) {
    +    if ( truthPart->pt() < m_pT_min ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_ptmin_cut, 1 );
    +
    +  // eta
    +  if ( m_eta_max != 1e8 ) {
    +    if ( fabs(truthPart->eta()) > m_eta_max ) { return 0; }
    +  }
    +  if ( m_eta_min != 1e8 ) {
    +    if ( fabs(truthPart->eta()) < m_eta_min ) { return 0; }
    +  }
    +  if(m_useCutFlow) m_truth_cutflowHist_1->Fill( m_truth_cutflow_eta_cut, 1 );
    +
    +  // mass
    +  if ( m_mass_max != 1e8 ) {
    +    if ( truthPart->m() > m_mass_max ) { return 0; }
    +  }
    +  if ( m_mass_min != 1e8 ) {
    +    if ( truthPart->m() < m_mass_min ) { return 0; }
    +  }
    +
    +  // rapidity
    +  if ( m_rapidity_max != 1e8 ) {
    +    if ( truthPart->rapidity() > m_rapidity_max ) { return 0; }
    +  }
    +
    +  if ( m_rapidity_min != 1e8 ) {
    +    if ( truthPart->rapidity() < m_rapidity_min ) { return 0; }
    +  }
    +
    +  // selections for particles from MCTruthClassifier
    +
    +  // type
    +  if ( !m_typeOptions.empty() ) { // check w.r.t. multiple possible type values
    +    if ( m_type != 1000 ) { ANA_MSG_WARNING( "single and multiple type conditions were selected, only the former will be used" );
    +    } else {
    +      std::string token;
    +      std::vector<unsigned int> typeVec;
    +      std::istringstream ss(m_typeOptions);
    +      while ( std::getline(ss, token, '|') ) typeVec.push_back(std::stoi(token));
    +      bool found = false;
    +      if( truthPart->isAvailable<unsigned int>("classifierParticleType") ){
    +        unsigned int type = truthPart->auxdata<unsigned int>("classifierParticleType");
    +        for (unsigned int i=0;i<typeVec.size();++i){
    +          if (type == typeVec.at(i)) found = true;
    +        }
    +        if (!found) { return 0; }
    +      } else {
    +        ANA_MSG_WARNING( "classifierParticleType is not available" );
    +      }
    +    }
    +  }
    +  if ( m_type != 1000 ) { // single type value
    +    if( truthPart->isAvailable<unsigned int>("classifierParticleType") ){
    +      unsigned int type = truthPart->auxdata<unsigned int>("classifierParticleType");
    +      if ( type != m_type ) { return 0; }
    +    } else {
    +      ANA_MSG_WARNING( "classifierParticleType is not available" );
    +    }
    +  }
    +
    +  // origin
    +  if ( !m_originOptions.empty() ) { // check w.r.t. multiple possible origin values
    +    if ( m_origin != 1000 ) { ANA_MSG_WARNING( "single and multiple origin conditions were selected, only the former will be used" );
    +    } else {
    +      std::string token;
    +      std::vector<unsigned int> originVec;
    +      std::istringstream ss(m_originOptions);
    +      while ( std::getline(ss, token, '|') ) originVec.push_back(std::stoi(token));
    +      bool found = false;
    +      if( truthPart->isAvailable<unsigned int>("classifierParticleOrigin") ){
    +        unsigned int origin = truthPart->auxdata<unsigned int>("classifierParticleOrigin");
    +        for (unsigned int i=0;i<originVec.size();++i){
    +          if (origin == originVec.at(i)) found = true;
    +        }
    +        if (!found) { return 0; }
    +      } else {
    +        ANA_MSG_WARNING( "classifierParticleOrigin is not available" );
    +      }
    +    }
    +  }
    +  if ( m_origin != 1000 ) { // single origin value
    +    if( truthPart->isAvailable<unsigned int>("classifierParticleOrigin") ){
    +      unsigned int origin = truthPart->auxdata<unsigned int>("classifierParticleOrigin");
    +      if ( origin != m_origin ) { return 0; }
    +    } else {
    +      ANA_MSG_WARNING( "classifierParticleOrigin is not available" );
    +    }
    +  }
    +
    +  // pt_dressed
    +  if ( m_pT_dressed_min != 1e8 ) {
    +    if( truthPart->isAvailable<float>("pt_dressed") ){
    +      float pT_dressed = truthPart->auxdata<float>("pt_dressed");
    +      if ( pT_dressed < m_pT_dressed_min ) { return 0; }
    +    } else {
    +      ANA_MSG_WARNING( "pt_dressed is not available" );
    +    }
    +  }
    +
    +  // eta_dressed
    +  if ( m_eta_dressed_min != 1e8 ) {
    +    if( truthPart->isAvailable<float>("eta_dressed") ){
    +      float eta_dressed = truthPart->auxdata<float>("eta_dressed");
    +      if ( eta_dressed < m_eta_dressed_min ) { return 0; }
    +    } else {
    +      ANA_MSG_WARNING( "eta_dressed is not available" );
    +    }
    +  }
    +  if ( m_eta_dressed_max != 1e8 ) {
    +    if( truthPart->isAvailable<float>("eta_dressed") ){
    +      float eta_dressed = truthPart->auxdata<float>("eta_dressed");
    +      if ( eta_dressed > m_eta_dressed_max ) { return 0; }
    +    } else {
    +      ANA_MSG_WARNING( "eta_dressed is not available" );
    +    }
    +  }
    +
    +  return 1;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_VertexContainer.cxx.html b/api/program_listing_file_Root_VertexContainer.cxx.html new file mode 100644 index 0000000000..66d64e69cf --- /dev/null +++ b/api/program_listing_file_Root_VertexContainer.cxx.html @@ -0,0 +1,307 @@ + + + + + + + + + + + Program Listing for File VertexContainer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File VertexContainer.cxx

    +

    Return to documentation for file (Root/VertexContainer.cxx)

    +
    #include "xAODAnaHelpers/VertexContainer.h"
    +#include <iostream>
    +
    +using namespace xAH;
    +
    +VertexContainer::VertexContainer(const std::string& detailStr, const std::string& name)
    +{
    +  m_name      = name;
    +  m_detailStr = detailStr;
    +  if(m_detailStr!=""){
    +    m_vertex_x  = new std::vector<float>();
    +    m_vertex_y  = new std::vector<float>();
    +    m_vertex_z  = new std::vector<float>();
    +  }
    +}
    +
    +VertexContainer::~VertexContainer()
    +{
    +  if(m_detailStr!=""){
    +    delete m_vertex_x;
    +    delete m_vertex_y;
    +    delete m_vertex_z;
    +  }
    +}
    +
    +void VertexContainer::setTree(TTree *tree)
    +{
    +  if(m_detailStr!=""){
    +    connectBranch<float>(tree,"x",&m_vertex_x);
    +    connectBranch<float>(tree,"y",&m_vertex_y);
    +    connectBranch<float>(tree,"z",&m_vertex_z);
    +  }
    +}
    +
    +void VertexContainer::setBranches(TTree *tree)
    +{
    +  if(m_detailStr!=""){
    +    setBranch<float>(tree,"x",m_vertex_x);
    +    setBranch<float>(tree,"y",m_vertex_y);
    +    setBranch<float>(tree,"z",m_vertex_z);
    +  }
    +  return;
    +}
    +
    +void VertexContainer::clear()
    +{
    +  if(m_detailStr!=""){
    +    m_vertex_x->clear();
    +    m_vertex_y->clear();
    +    m_vertex_z->clear();
    +  }
    +  return;
    +}
    +
    +void VertexContainer::FillVertices( const xAOD::VertexContainer* vertices){
    +  if(m_detailStr == "primary"){ // hard-scatter vertex only
    +    int pvLocation = HelperFunctions::getPrimaryVertexLocation( vertices );
    +    if (pvLocation >= 0) {
    +      m_vertex_x->push_back(vertices->at(pvLocation)->x());
    +      m_vertex_y->push_back(vertices->at(pvLocation)->y());
    +      m_vertex_z->push_back(vertices->at(pvLocation)->z());
    +    } else {
    +      m_vertex_x->push_back( -999.0 );
    +      m_vertex_y->push_back( -999.0 );
    +      m_vertex_z->push_back( -999.0 );
    +    }
    +  } else if (m_detailStr == "all"){
    +    for( auto vertex : *vertices) {
    +      m_vertex_x->push_back( vertex->x() );
    +      m_vertex_y->push_back( vertex->y() );
    +      m_vertex_z->push_back( vertex->z() );
    +    }
    +  }
    +}
    +
    +void VertexContainer::FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices){
    +  if(m_detailStr == "primary"){ // hard-scatter vertex only
    +    int hsBarcode = -999;
    +    const xAOD::TruthVertex* hsTruthVertex(nullptr);
    +    for ( auto *truthVertex : *truthVertices ) {
    +      if ( truthVertex->barcode()<0 && truthVertex->barcode()>hsBarcode ) {
    +        hsBarcode = truthVertex->barcode();
    +        hsTruthVertex = truthVertex;
    +      }
    +    }
    +    m_vertex_x->push_back( hsTruthVertex->x() );
    +    m_vertex_y->push_back( hsTruthVertex->y() );
    +    m_vertex_z->push_back( hsTruthVertex->z() );
    +  } else if (m_detailStr == "all"){
    +    for( auto truthVertex : *truthVertices) {
    +      m_vertex_x->push_back( truthVertex->x() );
    +      m_vertex_y->push_back( truthVertex->y() );
    +      m_vertex_z->push_back( truthVertex->z() );
    +    }
    +  }
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_VtxHists.cxx.html b/api/program_listing_file_Root_VtxHists.cxx.html new file mode 100644 index 0000000000..d92c506155 --- /dev/null +++ b/api/program_listing_file_Root_VtxHists.cxx.html @@ -0,0 +1,548 @@ + + + + + + + + + + + Program Listing for File VtxHists.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File VtxHists.cxx

    +

    Return to documentation for file (Root/VtxHists.cxx)

    +
    #include "xAODAnaHelpers/VtxHists.h"
    +#include <xAODTracking/TrackParticle.h>
    +
    +#include <math.h>
    +
    +ANA_MSG_SOURCE(msgVtxHists, "VtxHists")
    +
    +VtxHists :: VtxHists (std::string name, std::string detailStr) :
    +  HistogramManager(name, detailStr)
    +{
    +}
    +
    +VtxHists :: ~VtxHists () {}
    +
    +StatusCode VtxHists::initialize() {
    +
    +  // These plots are always made
    +  h_type        = book(m_name, "type",          "vtx type",  10,   -0.5,     9.5);
    +  h_nTrks       = book(m_name, "nTrks",         "nTrks",    100,   -0.5,    99.5);
    +  h_nTrks_l     = book(m_name, "nTrks_l",       "nTrks",    100,   -0.5,   499.5);
    +
    +
    +  //
    +  //  Trk details
    +  //
    +  m_fillTrkDetails = false;
    +  if(m_detailStr.find("TrkDetails") != std::string::npos ){
    +    m_fillTrkDetails = true;
    +    h_trk_Pt       = book(m_name, "trkPt",         "trkPt",    100,   -0.5,    9.5);
    +    h_trk_Pt_l     = book(m_name, "trkPt_l",       "trkPt",    100,   -0.5,   99.5);
    +
    +    h_pt_miss_x       = book(m_name, "Pt_miss_x",       "Pt_miss_x",      100,   -5.5,    4.5);
    +    h_pt_miss_x_l     = book(m_name, "Pt_miss_x_l",     "Pt_miss_x_l",    100,   -50.5,   49.5);
    +
    +    h_pt_miss_y       = book(m_name, "Pt_miss_y",       "Pt_miss_y",      100,   -5.5,    4.5);
    +    h_pt_miss_y_l     = book(m_name, "Pt_miss_y_l",     "Pt_miss_y_l",    100,   -50.5,   49.5);
    +
    +    h_pt_miss         = book(m_name, "Pt_miss",         "Pt_miss",      100,   -0.5,    9.5);
    +    h_pt_miss_l       = book(m_name, "Pt_miss_l",       "Pt_miss_l",    100,   -0.5,   99.5);
    +  }
    +
    +  //
    +  //  Iso Trk details
    +  //
    +  m_fillIsoTrkDetails = false;
    +  if(m_detailStr.find("IsoTrkDetails") != std::string::npos ){
    +    m_fillIsoTrkDetails = true;
    +
    +    h_trkIsoAll       = book(m_name, "ptCone20All",         "ptCone20All",    100,   -0.5,    9.5);
    +    h_trkIso          = book(m_name, "ptCone20",            "ptCone20",       100,   -0.5,    9.5);
    +
    +    h_dZ0Before        = book(m_name, "dZ0Before",            "dZ0Before",       100,   -0.1,    100);
    +
    +    h_nIsoTrks       = book(m_name, "nIsoTrks",         "nIsoTrks",    100,   -0.5,    99.5);
    +    h_nIsoTrks_l     = book(m_name, "nIsoTrks_l",       "nIsoTrks",    100,   -0.5,   499.5);
    +
    +    h_IsoTrk_Pt       = book(m_name, "isoTrkPt",         "IsoTrkPt",    100,   -0.5,    9.5);
    +    h_IsoTrk_Pt_l     = book(m_name, "isoTrkPt_l",       "IsoTrkPt",    100,   -0.5,   99.5);
    +
    +    h_pt_miss_iso_x       = book(m_name, "Pt_miss_iso_x",       "Pt_miss_x",      100,   -5.5,    4.5);
    +    h_pt_miss_iso_x_l     = book(m_name, "Pt_miss_iso_x_l",     "Pt_miss_x_l",    100,   -50.5,   49.5);
    +
    +    h_pt_miss_iso_y       = book(m_name, "Pt_miss_iso_y",       "Pt_miss_y",      100,   -5.5,    4.5);
    +    h_pt_miss_iso_y_l     = book(m_name, "Pt_miss_iso_y_l",     "Pt_miss_y_l",    100,   -50.5,   49.5);
    +
    +    h_pt_miss_iso         = book(m_name, "Pt_miss_iso",         "Pt_miss",      100,   -0.5,    9.5);
    +    h_pt_miss_iso_l       = book(m_name, "Pt_miss_iso_l",       "Pt_miss_l",    100,   -0.5,   99.5);
    +
    +
    +    h_nIsoTrks1GeV       = book(m_name,  "nIsoTracks1GeV",   "nIsoTracks1GeV",  100,  -0.5,  99.5 );
    +    h_nIsoTrks2GeV       = book(m_name,  "nIsoTracks2GeV",   "nIsoTracks2GeV",  100,  -0.5,  99.5 );
    +    h_nIsoTrks5GeV       = book(m_name,  "nIsoTracks5GeV",   "nIsoTracks5GeV",  100,  -0.5,  99.5 );
    +    h_nIsoTrks10GeV      = book(m_name,  "nIsoTracks10GeV",  "nIsoTracks10GeV", 100,  -0.5,  99.5 );
    +    h_nIsoTrks15GeV      = book(m_name,  "nIsoTracks15GeV",  "nIsoTracks15GeV", 100,  -0.5,  99.5 );
    +    h_nIsoTrks20GeV      = book(m_name,  "nIsoTracks20GeV",  "nIsoTracks20GeV", 100,  -0.5,  99.5 );
    +    h_nIsoTrks25GeV      = book(m_name,  "nIsoTracks25GeV",  "nIsoTracks25GeV", 100,  -0.5,  99.5 );
    +    h_nIsoTrks30GeV      = book(m_name,  "nIsoTracks30GeV",  "nIsoTracks30GeV", 100,  -0.5,  99.5 );
    +
    +    m_nLeadIsoTrackPts = 10;
    +    for(uint iLeadTrks = 0; iLeadTrks < m_nLeadIsoTrackPts; ++iLeadTrks){
    +      std::stringstream ss;
    +      ss << iLeadTrks;
    +      h_IsoTrk_max_Pt.push_back(       book(m_name, "IsoTrkPt_"+ss.str(),        "IsoTrkPt("+ss.str()+")",    100,   -0.5,    9.5)  );
    +      h_IsoTrk_max_Pt_l.push_back(     book(m_name, "IsoTrkPt_"+ss.str()+"_l",   "IsoTrkPt("+ss.str()+")",    100,   -0.5,   99.5)  );
    +    }
    +
    +  }
    +
    +
    +  //
    +  //  Trk Pt details
    +  //
    +  m_fillTrkPtDetails = false;
    +  if(m_detailStr.find("TrkPtDetails") != std::string::npos ){
    +    m_fillTrkPtDetails = true;
    +    h_nTrks1GeV       = book(m_name,  "nTracks1GeV",   "nTracks1GeV",  100,  -0.5,  99.5 );
    +    h_nTrks2GeV       = book(m_name,  "nTracks2GeV",   "nTracks2GeV",  100,  -0.5,  99.5 );
    +    h_nTrks5GeV       = book(m_name,  "nTracks5GeV",   "nTracks5GeV",  100,  -0.5,  99.5 );
    +    h_nTrks10GeV      = book(m_name,  "nTracks10GeV",  "nTracks10GeV", 100,  -0.5,  99.5 );
    +    h_nTrks15GeV      = book(m_name,  "nTracks15GeV",  "nTracks15GeV", 100,  -0.5,  99.5 );
    +    h_nTrks20GeV      = book(m_name,  "nTracks20GeV",  "nTracks20GeV", 100,  -0.5,  99.5 );
    +    h_nTrks25GeV      = book(m_name,  "nTracks25GeV",  "nTracks25GeV", 100,  -0.5,  99.5 );
    +    h_nTrks30GeV      = book(m_name,  "nTracks30GeV",  "nTracks30GeV", 100,  -0.5,  99.5 );
    +
    +    m_nLeadTrackPts = 10;
    +    for(uint iLeadTrks = 0; iLeadTrks < m_nLeadTrackPts; ++iLeadTrks){
    +      std::stringstream ss;
    +      ss << iLeadTrks;
    +      h_trk_max_Pt.push_back(       book(m_name, "trkPt_"+ss.str(),        "trkPt("+ss.str()+")",    100,   -0.5,    9.5)  );
    +      h_trk_max_Pt_l.push_back(     book(m_name, "trkPt_"+ss.str()+"_l",       "trkPt("+ss.str()+")",    100,   -0.5,   99.5)  );
    +    }
    +
    +  }
    +
    +
    +
    +  // if worker is passed to the class add histograms to the output
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode VtxHists::execute( const xAOD::VertexContainer* vtxs, float eventWeight ) {
    +  using namespace msgVtxHists;
    +  for(auto vtx_itr :  *vtxs ) {
    +    ANA_CHECK( this->execute( vtx_itr, eventWeight ));
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode VtxHists::execute( const xAOD::VertexContainer* vtxs, const xAOD::TrackParticleContainer* trks, float eventWeight ) {
    +  using namespace msgVtxHists;
    +  for(auto vtx_itr :  *vtxs ) {
    +    ANA_CHECK( this->execute( vtx_itr, trks, eventWeight ));
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode VtxHists::execute( const xAOD::Vertex* vtx, const xAOD::TrackParticleContainer* trks, float eventWeight ) {
    +  using namespace msgVtxHists;
    +  ANA_CHECK( this->execute( vtx, eventWeight));
    +
    +  if(m_fillIsoTrkDetails){
    +
    +    unsigned int nTrksAll = vtx->nTrackParticles();
    +
    +    uint nIsoTracks1GeV  = 0;
    +    uint nIsoTracks2GeV  = 0;
    +    uint nIsoTracks5GeV  = 0;
    +    uint nIsoTracks10GeV = 0;
    +    uint nIsoTracks15GeV = 0;
    +    uint nIsoTracks20GeV = 0;
    +    uint nIsoTracks25GeV = 0;
    +    uint nIsoTracks30GeV = 0;
    +
    +    std::vector<float> pt_iso_vec;
    +
    +    float pt_miss_iso_x = 0;
    +    float pt_miss_iso_y = 0;
    +
    +    for(uint iTrkItr = 0; iTrkItr< nTrksAll; ++iTrkItr){
    +      const xAOD::TrackParticle* thisTrk = vtx->trackParticle(iTrkItr);
    +      float trkPt = thisTrk->pt()/1e3;
    +
    +
    +      if(trkPt < 1) continue;
    +
    +      float trk_pt_cone20 = getIso(thisTrk, trks);
    +
    +      pt_miss_iso_x += thisTrk->p4().Px()/1e3;
    +      pt_miss_iso_y += thisTrk->p4().Py()/1e3;
    +
    +      h_trkIsoAll      -> Fill( trk_pt_cone20,       eventWeight );
    +
    +      if(trk_pt_cone20/trkPt > 0.1) continue;
    +
    +      h_trkIso         -> Fill( trk_pt_cone20,       eventWeight );
    +
    +      h_IsoTrk_Pt      -> Fill( trkPt,       eventWeight );
    +      h_IsoTrk_Pt_l    -> Fill( trkPt,       eventWeight );
    +
    +      pt_iso_vec.push_back(trkPt);
    +
    +      if(trkPt >  1) ++nIsoTracks1GeV;
    +      if(trkPt >  2) ++nIsoTracks2GeV;
    +      if(trkPt >  5) ++nIsoTracks5GeV;
    +      if(trkPt > 10) ++nIsoTracks10GeV;
    +      if(trkPt > 15) ++nIsoTracks15GeV;
    +      if(trkPt > 20) ++nIsoTracks20GeV;
    +      if(trkPt > 25) ++nIsoTracks25GeV;
    +      if(trkPt > 30) ++nIsoTracks30GeV;
    +
    +    }
    +
    +
    +    // Sort track pts
    +    //std::sort(numbers.begin(), numbers.end(), std::greater<int>());
    +    std::sort(pt_iso_vec.begin(), pt_iso_vec.end(), std::greater<float>());
    +
    +    // Leading track Pts
    +    for(uint iLeadTrks = 0; iLeadTrks < m_nLeadIsoTrackPts; ++iLeadTrks){
    +      float this_pt = (pt_iso_vec.size() > iLeadTrks) ? pt_iso_vec.at(iLeadTrks) : 0;
    +      h_IsoTrk_max_Pt.at(iLeadTrks)      -> Fill( this_pt,       eventWeight );
    +      h_IsoTrk_max_Pt_l.at(iLeadTrks)    -> Fill( this_pt,       eventWeight );
    +    }
    +
    +    h_nIsoTrks1GeV       -> Fill( nIsoTracks1GeV,        eventWeight );
    +    h_nIsoTrks2GeV       -> Fill( nIsoTracks2GeV,        eventWeight );
    +    h_nIsoTrks5GeV       -> Fill( nIsoTracks5GeV,        eventWeight );
    +    h_nIsoTrks10GeV      -> Fill( nIsoTracks10GeV,       eventWeight );
    +    h_nIsoTrks15GeV      -> Fill( nIsoTracks15GeV,       eventWeight );
    +    h_nIsoTrks20GeV      -> Fill( nIsoTracks20GeV,       eventWeight );
    +    h_nIsoTrks25GeV      -> Fill( nIsoTracks25GeV,       eventWeight );
    +    h_nIsoTrks30GeV      -> Fill( nIsoTracks30GeV,       eventWeight );
    +
    +    h_pt_miss_iso_x      -> Fill(pt_miss_iso_x ,       eventWeight );
    +    h_pt_miss_iso_x_l    -> Fill(pt_miss_iso_x ,       eventWeight );
    +
    +    h_pt_miss_iso_y      -> Fill(pt_miss_iso_y ,       eventWeight );
    +    h_pt_miss_iso_y_l    -> Fill(pt_miss_iso_y ,       eventWeight );
    +
    +    float pt_miss_iso = sqrt(pt_miss_iso_x*pt_miss_iso_x + pt_miss_iso_y*pt_miss_iso_y);
    +    h_pt_miss_iso      -> Fill(pt_miss_iso ,       eventWeight );
    +    h_pt_miss_iso_l    -> Fill(pt_miss_iso ,       eventWeight );
    +
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +StatusCode VtxHists::execute( const xAOD::Vertex* vtx, float eventWeight ) {
    +
    +  //basic
    +  h_type       -> Fill( vtx->vertexType(),            eventWeight );
    +
    +  unsigned int nTrks = vtx->nTrackParticles();
    +  h_nTrks      -> Fill( nTrks,       eventWeight );
    +  h_nTrks_l    -> Fill( nTrks,       eventWeight );
    +
    +  if(m_fillTrkDetails){
    +
    +    uint nTracks1GeV = 0;
    +    uint nTracks2GeV = 0;
    +    uint nTracks5GeV = 0;
    +    uint nTracks10GeV = 0;
    +    uint nTracks15GeV = 0;
    +    uint nTracks20GeV = 0;
    +    uint nTracks25GeV = 0;
    +    uint nTracks30GeV = 0;
    +
    +    std::vector<float> pt_vec;
    +
    +    float pt_miss_x = 0;
    +    float pt_miss_y = 0;
    +
    +    for(uint iTrkItr = 0; iTrkItr< nTrks; ++iTrkItr){
    +      const xAOD::TrackParticle* thisTrk = vtx->trackParticle(iTrkItr);
    +      float trkPt = thisTrk->pt()/1e3;
    +
    +      h_trk_Pt      -> Fill( trkPt,       eventWeight );
    +      h_trk_Pt_l    -> Fill( trkPt,       eventWeight );
    +
    +      if(!m_fillTrkDetails) continue;
    +
    +      if(trkPt > 1) pt_vec.push_back(trkPt);
    +
    +      pt_miss_x += thisTrk->p4().Px()/1e3;
    +      pt_miss_y += thisTrk->p4().Py()/1e3;
    +
    +      if(trkPt >  1) ++nTracks1GeV;
    +      if(trkPt >  2) ++nTracks2GeV;
    +      if(trkPt >  5) ++nTracks5GeV;
    +      if(trkPt > 10) ++nTracks10GeV;
    +      if(trkPt > 15) ++nTracks15GeV;
    +      if(trkPt > 20) ++nTracks20GeV;
    +      if(trkPt > 25) ++nTracks25GeV;
    +      if(trkPt > 30) ++nTracks30GeV;
    +
    +    }
    +
    +    if(m_fillTrkPtDetails){
    +
    +      // Sort track pts
    +      //std::sort(numbers.begin(), numbers.end(), std::greater<int>());
    +      std::sort(pt_vec.begin(), pt_vec.end(), std::greater<float>());
    +
    +      // Leading track Pts
    +      for(uint iLeadTrks = 0; iLeadTrks < m_nLeadTrackPts; ++iLeadTrks){
    +    float this_pt = (pt_vec.size() > iLeadTrks) ? pt_vec.at(iLeadTrks) : 0;
    +    h_trk_max_Pt.at(iLeadTrks)      -> Fill( this_pt,       eventWeight );
    +    h_trk_max_Pt_l.at(iLeadTrks)    -> Fill( this_pt,       eventWeight );
    +      }
    +
    +      h_nTrks1GeV       -> Fill( nTracks1GeV,        eventWeight );
    +      h_nTrks2GeV       -> Fill( nTracks2GeV,        eventWeight );
    +      h_nTrks5GeV       -> Fill( nTracks5GeV,        eventWeight );
    +      h_nTrks10GeV      -> Fill( nTracks10GeV,       eventWeight );
    +      h_nTrks15GeV      -> Fill( nTracks15GeV,       eventWeight );
    +      h_nTrks20GeV      -> Fill( nTracks20GeV,       eventWeight );
    +      h_nTrks25GeV      -> Fill( nTracks25GeV,       eventWeight );
    +      h_nTrks30GeV      -> Fill( nTracks30GeV,       eventWeight );
    +
    +      h_pt_miss_x      -> Fill(pt_miss_x ,       eventWeight );
    +      h_pt_miss_x_l    -> Fill(pt_miss_x ,       eventWeight );
    +
    +      h_pt_miss_y      -> Fill(pt_miss_y ,       eventWeight );
    +      h_pt_miss_y_l    -> Fill(pt_miss_y ,       eventWeight );
    +
    +      float pt_miss = sqrt(pt_miss_x*pt_miss_x + pt_miss_y*pt_miss_y);
    +      h_pt_miss      -> Fill(pt_miss ,       eventWeight );
    +      h_pt_miss_l    -> Fill(pt_miss ,       eventWeight );
    +    }
    +
    +  }
    +
    +  return StatusCode::SUCCESS;
    +
    +}
    +
    +float VtxHists::getIso( const xAOD::TrackParticle *inTrack,            const xAOD::TrackParticleContainer* trks, float z0_cut , float cone_size)
    +{
    +  float iso = 0;
    +
    +  for(auto trk_itr :  *trks ) {
    +
    +    float dZ0 = abs(trk_itr->z0() - inTrack->z0());
    +    h_dZ0Before->Fill(dZ0, 1.0);
    +    if(dZ0 > z0_cut) continue;
    +
    +    float dR = trk_itr->p4().DeltaR(inTrack->p4());
    +    if(dR > cone_size) continue;
    +    if(dR == 0) continue;
    +    iso += trk_itr->pt()/1e3;
    +  }
    +
    +  return iso;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_Root_Writer.cxx.html b/api/program_listing_file_Root_Writer.cxx.html new file mode 100644 index 0000000000..65658b73d0 --- /dev/null +++ b/api/program_listing_file_Root_Writer.cxx.html @@ -0,0 +1,439 @@ + + + + + + + + + + + Program Listing for File Writer.cxx — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Writer.cxx

    +

    Return to documentation for file (Root/Writer.cxx)

    +
    #include <EventLoop/Job.h>
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Worker.h>
    +#include <xAODAnaHelpers/Writer.h>
    +
    +#include "EventLoop/OutputStream.h"
    +#include "xAODCore/ShallowCopy.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/JetAuxContainer.h"
    +
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +// this is needed to distribute the algorithm to the workers
    +ClassImp(Writer)
    +
    +
    +
    +Writer :: Writer () :
    +    Algorithm("Writer")
    +{
    +}
    +
    +EL::StatusCode Writer :: setupJob (EL::Job& job)
    +{
    +  // Here you put code that sets up the job on the submission object
    +  // so that it is ready to work with your algorithm, e.g. you can
    +  // request the D3PDReader service or add output files.  Any code you
    +  // put here could instead also go into the submission script.  The
    +  // sole advantage of putting it here is that it gets automatically
    +  // activated/deactivated when you add/remove the algorithm from your
    +  // job, which may or may not be of value to you.
    +  // let's initialize the algorithm to use the xAODRootAccess package
    +  job.useXAOD ();
    +  xAOD::Init( "Writer" ).ignore(); // call before opening first file
    +
    +  m_jetContainerNames       = HelperFunctions::SplitString( m_jetContainerNamesStr,      ',' );
    +  m_electronContainerNames  = HelperFunctions::SplitString( m_electronContainerNamesStr, ',' );
    +  m_muonContainerNames      = HelperFunctions::SplitString( m_muonContainerNamesStr,     ',' );
    +
    +  if ( m_outputLabel.Length() == 0 ) {
    +    ANA_MSG_ERROR( "No OutputLabel specified!");
    +    return EL::StatusCode::FAILURE;
    +  }
    +
    +  // tell EventLoop about our output xAOD:
    +  EL::OutputStream out(m_outputLabel.Data());
    +  job.outputAdd (out);
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: histInitialize ()
    +{
    +  // Here you do everything that needs to be done at the very
    +  // beginning on each worker node, e.g. create histograms and output
    +  // trees.  This method gets called before any input files are
    +  // connected.
    +  ANA_CHECK( xAH::Algorithm::algInitialize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: fileExecute ()
    +{
    +  // Here you do everything that needs to be done exactly once for every
    +  // single file, e.g. collect a list of all lumi-blocks processed
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: changeInput (bool /*firstFile*/)
    +{
    +  // Here you do everything you need to do when we change input files,
    +  // e.g. resetting branch addresses on trees.  If you are using
    +  // D3PDReader or a similar service this method is not needed.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: initialize ()
    +{
    +  // Here you do everything that you need to do after the first input
    +  // file has been connected and before the first event is processed,
    +  // e.g. create additional histograms based on which variables are
    +  // available in the input files.  You can also create all of your
    +  // histograms and trees in here, but be aware that this method
    +  // doesn't get called if no events are processed.  So any objects
    +  // you create here won't be available in the output if you have no
    +  // input events.
    +  m_event = wk()->xaodEvent();
    +  m_store = wk()->xaodStore();
    +  m_numEvent      = 0;
    +
    +  // output xAOD
    +  TFile * file = wk()->getOutputFile (m_outputLabel.Data());
    +  ANA_CHECK( m_event->writeTo(file));
    +
    +  //FIXME add this as well
    +// Set which variables not to write out:
    +// event->setAuxItemList( "AntiKt4LCTopoJetsAux.", "-NumTrkPt1000.-NumTrkPt500" );
    +// // Set which variable to do write out:
    +// event->setAuxItemList( "GoodJetsAux.", "JetGhostArea.TrackCount" );
    +
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: execute ()
    +{
    +  // Here you do everything that needs to be done on every single
    +  // events, e.g. read input variables, apply cuts, and fill
    +  // histograms and trees.  This is where most of your actual analysis
    +  // code will go.
    +  m_numEvent++;
    +
    +  // try to find the containers in m_event - if there then copy entire container directly
    +  // if not found in m_event, look in m_store - user created - write aux store as well
    +  for( auto contName : m_jetContainerNames ) {
    +
    +    const xAOD::JetContainer* inJetsConst(nullptr);
    +    // look in event
    +    if ( HelperFunctions::retrieve(inJetsConst, contName.Data(), m_event, 0, msg()).isSuccess() ) {
    +      // without modifying the contents of it:
    +      ANA_MSG_INFO( " Write a collection " << contName.Data() << inJetsConst->size() );
    +      m_event->copy( contName.Data() );
    +      ANA_MSG_INFO( " Wrote a collection " << contName.Data());
    +      continue;
    +    }
    +
    +    // look in store
    +    xAOD::JetContainer* inJets(nullptr);
    +    if ( HelperFunctions::retrieve(inJets, contName.Data(), 0, m_store, msg()).isSuccess() ){
    +//      // FIXME add something like this
    +//      jets_shallowCopy.second->setShallowIO( false ); // true = shallow copy, false = deep copy
    +//      // if true should have something like this line somewhere:
    +
    +      // Record the objects into the output xAOD:
    +      ANA_MSG_INFO( " Write a collection " << contName.Data() << inJets->size() );
    +      if( ! m_event->record( inJets, contName.Data() ) ) {
    +        ANA_MSG_ERROR(m_name << ": Could not record " << contName.Data());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_INFO( " Wrote a collection " << contName.Data());
    +
    +      // get pointer to associated aux container
    +      xAOD::JetAuxContainer* inJetsAux = 0;
    +      ANA_MSG_INFO( " Wrote a aux store " << contName.Data());
    +      TString auxName( contName + "Aux." );
    +      if ( HelperFunctions::retrieve(inJetsAux, auxName.Data(), 0, m_store, msg()).isSuccess() ){
    +        ANA_MSG_ERROR(m_name << ": Could not get Aux data for " << contName.Data());
    +        return EL::StatusCode::FAILURE;
    +      }
    +      ANA_MSG_INFO( " Wrote a aux store " << contName.Data());
    +
    +      if( ! m_event->record( inJetsAux, auxName.Data() ) ) {
    +        ANA_MSG_ERROR( m_name << ": Could not record aux store for " << contName.Data());
    +        return EL::StatusCode::FAILURE;
    +      }
    +    }
    +    // could not find the container - problems
    +    else {
    +      ANA_MSG_ERROR( m_name << ": Could not find " << contName.Data());
    +      return EL::StatusCode::FAILURE;
    +    }
    +  }
    +
    +  // add similar loop for electron and muons
    +
    +  m_event->fill();
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: postExecute ()
    +{
    +  // Here you do everything that needs to be done after the main event
    +  // processing.  This is typically very rare, particularly in user
    +  // code.  It is mainly used in implementing the NTupleSvc.
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: finalize ()
    +{
    +  // This method is the mirror image of initialize(), meaning it gets
    +  // called after the last event has been processed on the worker node
    +  // and allows you to finish up any objects you created in
    +  // initialize() before they are written to disk.  This is actually
    +  // fairly rare, since this happens separately for each worker node.
    +  // Most of the time you want to do your post-processing on the
    +  // submission node after all your histogram outputs have been
    +  // merged.  This is different from histFinalize() in that it only
    +  // gets called on worker nodes that processed input events.
    +
    +  // finalize and close our output xAOD file ( and write MetaData tree )
    +  TFile * file = wk()->getOutputFile(m_outputLabel.Data());
    +  ANA_CHECK( m_event->finishWritingTo( file ));
    +
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    +EL::StatusCode Writer :: histFinalize ()
    +{
    +  // This method is the mirror image of histInitialize(), meaning it
    +  // gets called after the last event has been processed on the worker
    +  // node and allows you to finish up any objects you created in
    +  // histInitialize() before they are written to disk.  This is
    +  // actually fairly rare, since this happens separately for each
    +  // worker node.  Most of the time you want to do your
    +  // post-processing on the submission node after all your histogram
    +  // outputs have been merged.  This is different from finalize() in
    +  // that it gets called on all worker nodes regardless of whether
    +  // they processed input events.
    +  ANA_CHECK( xAH::Algorithm::algFinalize());
    +  return EL::StatusCode::SUCCESS;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Algorithm.h.html b/api/program_listing_file_xAODAnaHelpers_Algorithm.h.html new file mode 100644 index 0000000000..44b7abcacb --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Algorithm.h.html @@ -0,0 +1,353 @@ + + + + + + + + + + + Program Listing for File Algorithm.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Algorithm.h

    +

    Return to documentation for file (xAODAnaHelpers/Algorithm.h)

    +
    #ifndef xAODAnaHelpers_Algorithm_H
    +#define xAODAnaHelpers_Algorithm_H
    +
    +// Infrastructure include(s):
    +#include "xAODRootAccess/Init.h"
    +#include "xAODRootAccess/TEvent.h"
    +#include "xAODRootAccess/TStore.h"
    +#include "xAODMetaData/FileMetaData.h"
    +
    +// EL include(s):
    +#include <EventLoop/StatusCode.h>
    +#include <EventLoop/Algorithm.h>
    +#include <EventLoop/Worker.h>
    +
    +#include <string>
    +
    +// for StatusCode::isSuccess
    +#include "AsgMessaging/MessageCheck.h"
    +#include "AsgMessaging/StatusCode.h"
    +#include "AsgTools/ToolStore.h"
    +#include "AsgTools/AnaToolHandle.h"
    +
    +// for resolving paths of various calibration files
    +#include "PathResolver/PathResolver.h"
    +
    +// messaging includes
    +#include <AsgMessaging/MsgStream.h>
    +#include <AsgMessaging/MsgStreamMacros.h>
    +#include <AsgMessaging/MessageCheck.h>
    +
    +
    +namespace xAH {
    +
    +  class Algorithm : public EL::Algorithm {
    +      public:
    +        Algorithm(std::string className = "Algorithm");
    +        ~Algorithm();
    +        ClassDef(Algorithm, 1);
    +
    +        StatusCode algInitialize();
    +
    +        StatusCode algFinalize();
    +
    +        std::string m_name = "UnnamedAlgorithm";
    +
    +        bool m_debug = false;
    +        bool m_verbose = false;
    +
    +        MSG::Level m_msgLevel = MSG::INFO;
    +
    +        // output stream name for cutflow
    +        std::string m_cutFlowStreamName = "cutflow";
    +
    +        std::string m_systName = "";
    +        float m_systVal = 0.0;
    +
    +        std::string m_systValVectorString = "";
    +
    +        std::vector<float> m_systValVector;
    +
    +        StatusCode parseSystValVector();
    +
    +        std::string m_eventInfoContainerName = "EventInfo";
    +
    +        std::string m_vertexContainerName = "PrimaryVertices";
    +
    +        int m_isMC = -1;
    +
    +        int m_isFastSim = -1;
    +
    +        int m_isAF3 = -1;
    +
    +        bool m_useRun3navigation = false;
    +
    +        std::string m_HLTSummary = "HLTNav_Summary_DAODSlimmed";
    +
    +        bool m_forceFastSim = false;
    +        bool m_forceFullSim = false;
    +        bool m_forceData    = false;
    +
    +        bool m_setAFII = false;
    +        bool m_setAF3 = false;
    +
    +
    +      protected:
    +        std::string m_className = "Algorithm";
    +
    +        xAOD::TEvent* m_event = nullptr;
    +        xAOD::TStore* m_store = nullptr;
    +
    +        bool isMC();
    +
    +        bool isFastSim();
    +
    +        bool isAF3();
    +
    +    bool isPHYS();
    +
    +        void registerInstance();
    +        int numInstances();
    +
    +        void unregisterInstance();
    +
    +        template< typename T >
    +        StatusCode checkToolStore( const std::string& tool_name ) {
    +
    +            if ( !asg::ToolStore::contains<T>(tool_name) ) {
    +              m_toolAlreadyUsed[tool_name] = false;
    +              ANA_MSG_INFO("Tool " << tool_name << " is being used for the first time!" );
    +            } else {
    +              m_toolAlreadyUsed[tool_name] = true;
    +              ANA_MSG_INFO("Tool " << tool_name << " has been already used!" );
    +            }
    +
    +            return StatusCode::SUCCESS;
    +        }
    +
    +        inline bool isToolAlreadyUsed( const std::string& tool_name ) {
    +           return ( m_toolAlreadyUsed.find(tool_name)->second );
    +        }
    +
    +
    +        template <typename T>
    +    void setToolName(__attribute__((unused)) asg::AnaToolHandle<T>& handle, __attribute__((unused)) const std::string& name = "") const { }
    +
    +        std::string getAddress() const {
    +          const void * address = static_cast<const void*>(this);
    +          std::stringstream ss;
    +          ss << address;
    +          return ss.str();
    +        }
    +
    +      private:
    +        bool m_registered = false;
    +
    +        static std::map<std::string, int> m_instanceRegistry;
    +
    +        std::map<std::string, bool> m_toolAlreadyUsed;
    +  };
    +
    +}
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html b/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html new file mode 100644 index 0000000000..7ebc7db552 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.html @@ -0,0 +1,332 @@ + + + + + + + + + + + Program Listing for File BJetEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File BJetEfficiencyCorrector.h
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File BJetEfficiencyCorrector.h

    +

    Return to documentation for file (xAODAnaHelpers/BJetEfficiencyCorrector.h)

    +
    #ifndef xAODAnaHelpers_BJetEfficiencyCorrector_H
    +#define xAODAnaHelpers_BJetEfficiencyCorrector_H
    +// EDM includes
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODJet/JetContainer.h"
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/ISystematicsTool.h"
    +
    +// external tools include(s):
    +#include "FTagAnalysisInterfaces/IBTaggingSelectionTool.h"
    +#include "FTagAnalysisInterfaces/IBTaggingEfficiencyTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class BJetEfficiencyCorrector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  std::string m_inContainerName = "";
    +  std::string m_inputAlgo = "";
    +
    +  // systematics
    +  std::string m_systName = "";
    +  std::string m_outputSystName = "BJetEfficiency_Algo";
    +  bool        m_writeSystToMetadata = false;
    +
    +  std::string m_corrFileName = "xAODBTaggingEfficiency/13p6TeV/2023-22-13p6TeV-MC21-CDI_Test_2023-08-1_v1.root";
    +
    +  std::string m_jetAuthor = "AntiKt4EMPFlowJets";
    +  float       m_minPt = 20e3;
    +  std::string m_taggerName = "DL1r";
    +  bool        m_useDevelopmentFile = true;
    +  bool        m_coneFlavourLabel = true;
    +  std::string m_systematicsStrategy = "SFEigen";
    +  bool        m_errorOnTagWeightFailure = true;
    +  bool        m_alwaysGetTagWeight = false;
    +
    +  bool        m_isRun3 = false;
    +
    +  // allowed operating points:
    +  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTaggingCalibrationDataInterface#xAOD_interface
    +  //For the fixed cut, valid options are: [ "FixedCutBEff_60", "FixedCutBEff_70", "FixedCutBEff_77", "FixedCutBEff_85" ]
    +
    +  std::string m_operatingPt = "FixedCutBEff_70";
    +  std::string m_operatingPtCDI = "";
    +  bool m_getScaleFactors = false;
    +  bool m_useContinuous = false;
    +  std::string m_decor = "BTag";
    +  bool m_tagDecisionOnly = false;
    +
    +  bool m_setMapIndex = false;
    +  std::string m_DSIDtoGenerator_filename = "xAODAnaHelpers/DSIDtoGenerator.txt";
    +
    +  float m_orBJetPtUpperThres=-1;
    +
    +  std::string m_EfficiencyCalibration = "";
    +  bool m_allowCalibrationFallback = false;
    +
    +  std::string m_EigenvectorReductionB = "Loose";
    +  std::string m_EigenvectorReductionC = "Loose";
    +  std::string m_EigenvectorReductionLight = "Loose";
    +
    +private:
    +
    +  std::string m_decorSF = "";
    +  std::string m_decorWeight = ""; // only for continuous b-tagging
    +  std::string m_decorQuantile = ""; // only for continuous b-tagging
    +
    +  std::map<int,std::string> m_DSIDtoGenerator;
    +  std::map<std::string,unsigned int> m_MCIndexes;
    +
    +  std::vector<std::string> m_inputAlgoList;
    +
    +  bool m_runAllSyst = false;
    +
    +  // tools
    +  asg::AnaToolHandle<IBTaggingSelectionTool> m_BJetSelectTool_handle{"BTaggingSelectionTool" , this};
    +  asg::AnaToolHandle<IBTaggingEfficiencyTool> m_BJetEffSFTool_handle{"BTaggingEfficiencyTool", this};
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +
    +  // this is a standard constructor
    +  BJetEfficiencyCorrector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  EL::StatusCode executeEfficiencyCorrection(const xAOD::JetContainer* inJets,
    +                         const xAOD::EventInfo* eventInfo,
    +                         bool doNominal);
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // Functions needed only if m_setMapIndex is true
    +  unsigned int getMCIndex (int dsid);
    +  void makeMCIndexMap (std::string effCalib);
    +  std::string getFlavorLabel (const xAOD::Jet &jet) const;
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(BJetEfficiencyCorrector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.html b/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.html new file mode 100644 index 0000000000..4422c7f50e --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.html @@ -0,0 +1,431 @@ + + + + + + + + + + + Program Listing for File BasicEventSelection.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File BasicEventSelection.h

    +

    Return to documentation for file (xAODAnaHelpers/BasicEventSelection.h)

    +
    #ifndef xAODAnaHelpers_BasicEventSelection_H
    +#define xAODAnaHelpers_BasicEventSelection_H
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "AsgAnalysisInterfaces/IGoodRunsListSelectionTool.h"
    +#include "AsgAnalysisInterfaces/IPileupReweightingTool.h"
    +#include "TrigConfInterfaces/ITrigConfigTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +#include "PATInterfaces/IWeightTool.h"
    +
    +class BasicEventSelection : public xAH::Algorithm
    +{
    +  public:
    +
    +  // Dijet+ISR TLA specific options
    +    bool m_isTLAData = false;
    +
    +  // Sample type settings
    +    bool m_truthLevelOnly = false;
    +
    +    bool m_setAFII = false;
    +    bool m_setAF3 = false;
    +    bool m_setFS = false;
    +
    +  // GRL
    +    bool m_applyGRLCut = false;
    +    std::string m_GRLxml = "";
    +    std::string m_GRLExcludeList = "";
    +
    +    bool m_cleanPowheg = false;
    +
    +    bool  m_reweightSherpa22 = false;
    +
    +  //PU Reweighting
    +    bool m_doPUreweighting = false;
    +    bool m_doPUreweightingSys = false;
    +
    +    std::string m_lumiCalcFileNames = "";
    +    std::string m_PRWFileNames = "";
    +    bool m_autoconfigPRW = false;
    +    bool m_useCommonPRWFiles = false;
    +    std::string m_prwActualMu2016File = "";
    +    std::string m_prwActualMu2017File = "";
    +    std::string m_prwActualMu2018File = "";
    +    std::string m_prwActualMu2022File = "";
    +    std::string m_prwActualMu2023File = "";
    +    std::string m_commonPRWFileMC20a = "PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root";
    +    std::string m_commonPRWFileMC20d = "PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root";
    +    std::string m_commonPRWFileMC20e = "PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root";
    +    std::string m_commonPRWFileMC23a = "PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root";
    +    std::string m_commonPRWFileMC23c = "PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root";
    +    std::string m_commonPRWFileMC23d = "PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root";
    +    std::string m_mcCampaign;
    +    std::string m_periodConfig = "auto";
    +
    +    bool m_checkStreams = false;
    +
    +    int m_actualMuMin = -1; // Default to off
    +    int m_actualMuMax = -1; // Default to off
    +
    +    bool m_calcBCIDInfo = false;
    +
    +    // Primary Vertex
    +    bool m_applyPrimaryVertexCut = false;
    +    int m_PVNTrack = 2;
    +
    +    // Event Cleaning
    +    bool m_applyEventCleaningCut = false;
    +    bool m_applyCoreFlagsCut = false;
    +
    +    // Jet Cleaning
    +    // Jet Cleaning (see also https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/HowToCleanJets2017)
    +    bool m_applyJetCleaningEventFlag = false;
    +    bool m_applyIsBadBatmanFlag = false;
    +
    +    // Print Branch List
    +    bool m_printBranchList = false;
    +
    +  // Trigger
    +    std::string m_triggerSelection = "";
    +
    +    std::string m_extraTriggerSelection = "";
    +
    +    bool m_applyTriggerCut = false;
    +
    +    bool m_storeTrigDecisions = false;
    +
    +    bool m_storePassL1 = false;
    +
    +    bool m_storePassHLT = false;
    +
    +    bool m_storeTrigKeys = false;
    +
    +    bool m_storePrescaleWeight = true;
    +
    +  // Metadata
    +    std::string m_derivationName = "";
    +    bool m_useMetaData = true;
    +
    +    /* Output Stream Names */
    +
    +    /*
    +        The following public variables allow for rerouting of the
    +        metadata and cutflow histograms to non-default output
    +        streams. E.g. can combine all outputs into a single stream
    +    */
    +
    +    // output stream names
    +    std::string m_metaDataStreamName = "metadata";
    +    std::string m_duplicatesStreamName = "duplicates_tree";
    +
    +    bool m_checkDuplicatesData = false;
    +    bool m_checkDuplicatesMC = false;
    +
    +    // determines whether to add additional debugging histograms on data
    +    bool m_doRunByRunCutflows = false;
    +
    +  private:
    +
    +    std::set<std::pair<uint32_t,uint32_t> > m_RunNr_VS_EvtNr;
    +    // trigger unprescale chains
    +    std::vector<std::string> m_triggerUnprescaleList;
    +    // decisions of triggers which are saved but not cut on, converted into a list
    +    std::vector<std::string> m_extraTriggerSelectionList;
    +
    +    // tools
    +    asg::AnaToolHandle<IGoodRunsListSelectionTool> m_grl_handle                  {"GoodRunsListSelectionTool"                                      , this};
    +    asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle          {"CP::PileupReweightingTool/Pileup"                                            };
    +    asg::AnaToolHandle<TrigConf::ITrigConfigTool>  m_trigConfTool_handle         {"TrigConf::xAODConfigTool/xAODConfigTool"                        , this};
    +    asg::AnaToolHandle<Trig::TrigDecisionTool>     m_trigDecTool_handle          {"Trig::TrigDecisionTool/TrigDecisionTool"                                     };
    +    //asg::AnaToolHandle<IWeightTool>                m_reweightSherpa22_tool_handle{"PMGTools::PMGSherpa22VJetsWeightTool/PMGSherpa22VJetsWeightTool", this}; //!
    +
    +    int m_eventCounter;
    +
    +    // sumW
    +    TH1D* m_histSumW = nullptr;
    +
    +    // read from MetaData
    +    TH1D* m_histEventCount = nullptr;
    +    uint64_t m_MD_initialNevents;
    +    uint64_t m_MD_finalNevents;
    +    double m_MD_initialSumW;
    +    double m_MD_finalSumW;
    +    double m_MD_initialSumWSquared;
    +    double m_MD_finalSumWSquared;
    +    std::string m_mcCampaignMD;
    +
    +    // cutflow
    +    TH1D* m_cutflowHist = nullptr;
    +    TH1D* m_cutflowHistW = nullptr;
    +    int m_cutflow_all;
    +    int m_cutflow_init;
    +    int m_cutflow_duplicates;
    +    int m_cutflow_grl;
    +    int m_cutflow_lar;
    +    int m_cutflow_tile;
    +    int m_cutflow_SCT;
    +    int m_cutflow_core;
    +    int m_cutflow_jetcleaning;
    +    int m_cutflow_isbadbatman;
    +    int m_cutflow_npv;
    +    int m_cutflow_trigger;
    +
    +    // extra run-by-run event count cutflow
    +    TH1D* m_runByrun_beforeCuts = nullptr;
    +    TH1D* m_runByrun_afterCuts  = nullptr;
    +
    +    // object cutflow
    +    TH1D* m_el_cutflowHist_1 = nullptr;
    +    TH1D* m_el_cutflowHist_2 = nullptr;
    +    TH1D* m_mu_cutflowHist_1 = nullptr;
    +    TH1D* m_mu_cutflowHist_2 = nullptr;
    +    TH1D* m_ph_cutflowHist_1 = nullptr;
    +    TH1D* m_tau_cutflowHist_1 = nullptr;
    +    TH1D* m_tau_cutflowHist_2 = nullptr;
    +    TH1D* m_jet_cutflowHist_1 = nullptr;
    +    TH1D* m_trk_cutflowHist_1 = nullptr;
    +    TH1D* m_truth_cutflowHist_1= nullptr;
    +
    +    TTree*   m_duplicatesTree = nullptr;
    +    int      m_duplRunNumber;
    +    long int m_duplEventNumber;
    +
    +    // variables that don't get filled at submission time should be
    +    // protected from being send from the submission node to the worker
    +    // node (done by the //!)
    +
    +    StatusCode autoconfigurePileupRWTool();
    +
    +  public:
    +    // Tree *myTree; //!
    +    // TH1 *myHist; //!
    +    //
    +
    +    // this is a standard constructor
    +    BasicEventSelection ();
    +
    +    // these are the functions inherited from Algorithm
    +    virtual EL::StatusCode setupJob (EL::Job& job);
    +    virtual EL::StatusCode fileExecute ();
    +    virtual EL::StatusCode histInitialize ();
    +    virtual EL::StatusCode changeInput (bool firstFile);
    +    virtual EL::StatusCode initialize ();
    +    virtual EL::StatusCode execute ();
    +    virtual EL::StatusCode postExecute ();
    +    virtual EL::StatusCode finalize ();
    +    virtual EL::StatusCode histFinalize ();
    +
    +    // this is needed to distribute the algorithm to the workers
    +    ClassDef(BasicEventSelection, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Cluster.h.html b/api/program_listing_file_xAODAnaHelpers_Cluster.h.html new file mode 100644 index 0000000000..d5ff0f710a --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Cluster.h.html @@ -0,0 +1,223 @@ + + + + + + + + + + + Program Listing for File Cluster.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Cluster.h

    +

    Return to documentation for file (xAODAnaHelpers/Cluster.h)

    +
    #ifndef xAODAnaHelpers_Cluster_H
    +#define xAODAnaHelpers_Cluster_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +
    +namespace xAH {
    +
    +  class Cluster : public Particle { };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Cluster_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.html b/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.html new file mode 100644 index 0000000000..9f4c953017 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.html @@ -0,0 +1,250 @@ + + + + + + + + + + + Program Listing for File ClusterContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/ClusterContainer.h)

    +
    #ifndef xAODAnaHelpers_ClusterContainer_H
    +#define xAODAnaHelpers_ClusterContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODCaloEvent/CaloClusterContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +#include <xAODAnaHelpers/Cluster.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ;
    +
    +namespace xAH {
    +
    +  class ClusterContainer : public ParticleContainer<Cluster,HelperClasses::ClusterInfoSwitch>
    +    {
    +    public:
    +      ClusterContainer(const std::string& name = "clus", const std::string& detailStr="", float units = 1e3, bool mc = false);
    +      virtual ~ClusterContainer();
    +
    +      virtual void setTree(TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillCluster( const xAOD::CaloCluster* cluster );
    +      virtual void FillCluster( const xAOD::IParticle* particle );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +      virtual void updateParticle(uint idx, Cluster& cluster);
    +
    +    };
    +}
    +#endif // xAODAnaHelpers_ClusterContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.html b/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.html new file mode 100644 index 0000000000..e999a7ec53 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ClusterHists.h.html @@ -0,0 +1,248 @@ + + + + + + + + + + + Program Listing for File ClusterHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterHists.h

    +

    Return to documentation for file (xAODAnaHelpers/ClusterHists.h)

    +
    #ifndef xAODAnaHelpers_ClusterHists_H
    +#define xAODAnaHelpers_ClusterHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include "xAODCaloEvent/CaloClusterContainer.h"
    +
    +ANA_MSG_HEADER(msgClusterHists)
    +
    +class ClusterHists : public HistogramManager
    +{
    +  public:
    +    ClusterHists(std::string name, std::string detailStr );
    +    ~ClusterHists();
    +
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::CaloClusterContainer* ccls, float eventWeight );
    +    StatusCode execute( const xAOD::CaloCluster* ccl, float eventWeight );
    +    using HistogramManager::book; // make other overloaded versions of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +
    +  protected:
    +    // bools to control which histograms are filled
    +    bool m_fillDebugging;
    +
    +  private:
    +    // Histograms
    +    TH1F* m_ccl_n;
    +    TH1F* m_ccl_e;
    +    TH1F* m_ccl_eta;
    +    TH1F* m_ccl_phi;
    +    TH2F* m_ccl_eta_vs_phi;
    +    TH2F* m_ccl_e_vs_eta;
    +    TH2F* m_ccl_e_vs_phi;
    +};
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.html new file mode 100644 index 0000000000..43f62aa04e --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + Program Listing for File ClusterHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ClusterHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/ClusterHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_ClusterHistsAlgo_H
    +#define xAODAnaHelpers_ClusterHistsAlgo_H
    +
    +#include <xAODAnaHelpers/ClusterHists.h>
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class ClusterHistsAlgo : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  std::string m_inContainerName = "";
    +
    +  // configuration variables
    +  std::string m_detailStr = "";
    +
    +private:
    +  ClusterHists* m_plots = nullptr;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  ClusterHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(ClusterHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_DebugTool.h.html b/api/program_listing_file_xAODAnaHelpers_DebugTool.h.html new file mode 100644 index 0000000000..68700fc20b --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_DebugTool.h.html @@ -0,0 +1,249 @@ + + + + + + + + + + + Program Listing for File DebugTool.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File DebugTool.h

    +

    Return to documentation for file (xAODAnaHelpers/DebugTool.h)

    +
    #ifndef xAODAnaHelpers_DebugTool_H
    +#define xAODAnaHelpers_DebugTool_H
    +
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class DebugTool : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // configuration variables
    +
    +  bool m_printStore = false;
    +
    +public:
    +
    +  // this is a standard constructor
    +  DebugTool ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(DebugTool, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Electron.h.html b/api/program_listing_file_xAODAnaHelpers_Electron.h.html new file mode 100644 index 0000000000..2e8f8322c9 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Electron.h.html @@ -0,0 +1,317 @@ + + + + + + + + + + + Program Listing for File Electron.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Electron.h

    +

    Return to documentation for file (xAODAnaHelpers/Electron.h)

    +
    #ifndef xAODAnaHelpers_Electron_H
    +#define xAODAnaHelpers_Electron_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +
    +namespace xAH {
    +
    +  class Electron : public Particle
    +  {
    +  public:
    +
    +    // kinematics
    +    float  caloCluster_eta;
    +    float  charge;
    +
    +    // trigger
    +    int               isTrigMatched;
    +    std::vector<int>  isTrigMatchedToChain;
    +    std::vector<std::string> listTrigChains;
    +
    +    // isolation
    +    std::map< std::string, int > isIsolated;
    +    float etcone20;
    +    float ptcone20;
    +    float ptcone30;
    +    float ptcone40;
    +    float ptvarcone20;
    +    float ptvarcone30;
    +    float ptvarcone40;
    +    float topoetcone20;
    +    float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500;
    +    float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000;
    +    float topoetcone30;
    +    float topoetcone40;
    +    float neflowisol20;
    +    float topoetcone20_CloseByCorr;
    +    float ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr;
    +
    +    // PID
    +    std::map< std::string, int > PID;
    +
    +    // scale factors w/ sys
    +    // per object
    +    std::vector< float > RecoEff_SF;
    +
    +    std::map< std::string, std::vector< float > > PIDEff_SF;
    +    std::map< std::string, std::vector< float > > IsoEff_SF;
    +    std::map< std::string, std::vector< float > > TrigEff_SF;
    +    std::map< std::string, std::vector< float > > TrigMCEff;
    +    //const std::vector< std::string > m_PIDWPs = {"LooseAndBLayerLLH","MediumLLH","TightLLH"};
    +    //const std::vector< std::string > m_isolWPs = {"","_isolFixedCutLoose","_isolFixedCutTight","_isolFixedCutTightTrackOnly","_isolGradient","_isolGradientLoose","_isolLoose","_isolLooseTrackOnly","_isolTight"};
    +
    +    // reco parameters
    +    int  author;
    +    int  OQ;
    +
    +    // track parameters
    +    float  trkd0;
    +    float  trkd0sig;
    +    float  trkz0;
    +    float  trkz0sintheta;
    +    float  trkphi0;
    +    float  trktheta;
    +    float  trkcharge;
    +    float  trkqOverP;
    +
    +    // track hit content
    +    int  trknSiHits;
    +    int  trknPixHits;
    +    int  trknPixHoles;
    +    int  trknSCTHits;
    +    int  trknSCTHoles;
    +    int  trknTRTHits;
    +    int  trknTRTHoles;
    +    int  trknBLayerHits;
    +    int  trknInnermostPixLayHits; // not available in DC14
    +    float trkPixdEdX;            // not available in DC14
    +
    +    // prompt lepton
    +    float PromptLeptonInput_DL1mu;
    +    float PromptLeptonInput_DRlj;
    +    float PromptLeptonInput_LepJetPtFrac;
    +    float PromptLeptonInput_PtFrac;
    +    float PromptLeptonInput_PtRel;
    +    int   PromptLeptonInput_TrackJetNTrack;
    +    float PromptLeptonInput_ip2;
    +    float PromptLeptonInput_ip3;
    +    float PromptLeptonInput_rnnip;
    +    int   PromptLeptonInput_sv1_jf_ntrkv;
    +    float PromptLeptonIso;
    +    float PromptLeptonVeto;
    +
    +    // passSel
    +    char passSel;
    +    // passOR
    +    char passOR;
    +    // isLRT
    +    char isLRT;
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.html new file mode 100644 index 0000000000..30bed93929 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Program Listing for File ElectronCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronCalibrator.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronCalibrator.h)

    +
    #ifndef xAODAnaHelpers_ElectronCalibrator_H
    +#define xAODAnaHelpers_ElectronCalibrator_H
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +
    +// external tools include(s):
    +#include "ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h"
    +#include "IsolationCorrections/IsolationCorrectionTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class ElectronCalibrator : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +// configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +  bool    m_sort = true;
    +
    +// systematics
    +  std::string m_inputAlgoSystNames = "";
    +
    +  std::string m_outputAlgoSystNames = "ElectronCalibrator_Syst";
    +
    +  bool        m_writeSystToMetadata = false;
    +
    +  std::string m_esModel = "";
    +  std::string m_decorrelationModel = "";
    +
    +  bool m_applyIsolationCorrection = false;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  std::string m_outAuxContainerName;
    +  std::string m_outSCContainerName;
    +  std::string m_outSCAuxContainerName;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // tools
    +  CP::EgammaCalibrationAndSmearingTool *m_EgammaCalibrationAndSmearingTool = nullptr;
    +  CP::IsolationCorrectionTool          *m_IsolationCorrectionTool = nullptr;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +
    +  // this is a standard constructor
    +  ElectronCalibrator ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(ElectronCalibrator, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.html new file mode 100644 index 0000000000..98d9a49453 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.html @@ -0,0 +1,329 @@ + + + + + + + + + + + Program Listing for File ElectronContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronContainer.h)

    +
    #ifndef xAODAnaHelpers_ElectronContainer_H
    +#define xAODAnaHelpers_ElectronContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODEgamma/ElectronContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +#include <xAODAnaHelpers/Electron.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +  class ElectronContainer : public ParticleContainer<Electron,HelperClasses::ElectronInfoSwitch>
    +    {
    +    public:
    +      ElectronContainer(const std::string& name = "el", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true);
    +      virtual ~ElectronContainer();
    +
    +      virtual void setTree(TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillElectron( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex );
    +      virtual void FillElectron( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +      virtual void updateParticle(uint idx, Electron& elec);
    +
    +    private:
    +
    +      // kinematics
    +      std::vector<float>*  m_caloCluster_eta;
    +      std::vector<float>* m_charge;
    +
    +      // trigger
    +      std::vector<int>*  m_isTrigMatched;
    +      std::vector<std::vector<int> >* m_isTrigMatchedToChain;
    +      std::vector<std::vector<std::string> >* m_listTrigChains;
    +
    +      // isolation
    +      std::map< std::string, std::vector< int >* >* m_isIsolated;
    +      std::vector<float>* m_topoetcone20;
    +      std::vector<float>* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500;
    +      std::vector<float>* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000;
    +      std::vector<float>* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500;
    +      std::vector<float>* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000;
    +      std::vector<float>* m_neflowisol20;
    +      std::vector<float>* m_topoetcone20_CloseByCorr;
    +      std::vector<float>* m_ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr;
    +      std::vector<float>* m_ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr;
    +
    +      // PID
    +      std::map< std::string, std::vector< int >* >* m_PID;
    +
    +      // scale factors w/ sys
    +      // per object
    +      std::vector< std::vector< float > >* m_RecoEff_SF;
    +
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_PIDEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_IsoEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_TrigEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_TrigMCEff;
    +
    +      // reco parameters
    +      std::vector<int>* m_author;
    +      std::vector<int>* m_OQ;
    +
    +      // track parameters
    +      std::vector<float>* m_trkd0;
    +      std::vector<float>* m_trkd0sig;
    +      std::vector<float>* m_trkz0;
    +      std::vector<float>* m_trkz0sintheta;
    +      std::vector<float>* m_trkphi0;
    +      std::vector<float>* m_trktheta;
    +      std::vector<float>* m_trkcharge;
    +      std::vector<float>* m_trkqOverP;
    +
    +      // track hit content
    +      std::vector<int>*   m_trknSiHits;
    +      std::vector<int>*   m_trknPixHits;
    +      std::vector<int>*   m_trknPixHoles;
    +      std::vector<int>*   m_trknSCTHits;
    +      std::vector<int>*   m_trknSCTHoles;
    +      std::vector<int>*   m_trknTRTHits;
    +      std::vector<int>*   m_trknTRTHoles;
    +      std::vector<int>*   m_trknBLayerHits;
    +      std::vector<int>*   m_trknInnermostPixLayHits; // not available in DC14
    +      std::vector<float>* m_trkPixdEdX;            // not available in DC14
    +
    +      // prompt lepton
    +      std::vector<float>* m_PromptLeptonInput_DL1mu;
    +      std::vector<float>* m_PromptLeptonInput_DRlj;
    +      std::vector<float>* m_PromptLeptonInput_LepJetPtFrac;
    +      std::vector<float>* m_PromptLeptonInput_PtFrac;
    +      std::vector<float>* m_PromptLeptonInput_PtRel;
    +      std::vector<int>*   m_PromptLeptonInput_TrackJetNTrack;
    +      std::vector<float>* m_PromptLeptonInput_ip2;
    +      std::vector<float>* m_PromptLeptonInput_ip3;
    +      std::vector<float>* m_PromptLeptonInput_rnnip;
    +      std::vector<int>*   m_PromptLeptonInput_sv1_jf_ntrkv;
    +      std::vector<float>* m_PromptLeptonIso;
    +      std::vector<float>* m_PromptLeptonVeto;
    +
    +      // passSel
    +      std::vector<char>* m_passSel;
    +      // passOR
    +      std::vector<char>* m_passOR;
    +      // isLRT
    +      std::vector<char>* m_isLRT;
    +    };
    +}
    +#endif // xAODAnaHelpers_ElectronContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html new file mode 100644 index 0000000000..8e82838fe3 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.html @@ -0,0 +1,323 @@ + + + + + + + + + + + Program Listing for File ElectronEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File ElectronEfficiencyCorrector.h
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronEfficiencyCorrector.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronEfficiencyCorrector.h)

    +
    #ifndef xAODAnaHelpers_ElectronEfficiencyCorrector_H
    +#define xAODAnaHelpers_ElectronEfficiencyCorrector_H
    +
    +// EDM include(s):
    +#include "xAODEgamma/ElectronContainer.h"
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +
    +// external tools include(s):
    +#include "ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class ElectronEfficiencyCorrector : public xAH::Algorithm
    +{
    +public:
    +  std::string  m_inContainerName = "";
    +
    +// systematics
    +  std::string m_inputSystNamesElectrons;
    +
    +  bool m_writeSystToMetadata = false;
    +
    +  float m_systValPID = 0.0;
    +  float m_systValIso = 0.0;
    +  float m_systValReco = 0.0;
    +  float m_systValTrig = 0.0;
    +  std::string m_systNamePID = "";
    +  std::string m_systNameIso = "";
    +  std::string m_systNameReco = "";
    +  std::string m_systNameTrig = "";
    +  std::string m_outputSystNamesPID = "EleEffCorr_PIDSyst";
    +  std::string m_outputSystNamesIso = "EleEffCorr_IsoSyst";
    +  std::string m_outputSystNamesReco = "EleEffCorr_RecoSyst";
    +  std::string m_outputSystNamesTrig = "EleEffCorr_TrigSyst";
    +
    +  std::string m_correlationModel = "FULL";
    +
    +  std::string m_WorkingPointPID = "";
    +
    +  std::string m_WorkingPointIso = "";
    +
    +  std::string m_WorkingPointReco = "";
    +
    +  std::string m_WorkingPointTrig = "";
    +  // @brief Get per-electron trigger SF (default: true) [if false it will take into account combinatorics using all electrons from the input electron container]
    +  bool        m_usePerElectronTriggerSFs = true;
    +
    +  std::string m_overrideMapFilePath = "";
    +
    +  std::string m_overrideMapFilePathTrig = "";
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  // To include the nominal in the Recp/Iso/Trig/TTVA efficiency SFs output, use "All", or include "Nominal" in the list
    +  std::vector<CP::SystematicSet> m_systListPID;
    +  std::vector<CP::SystematicSet> m_systListIso;
    +  std::vector<CP::SystematicSet> m_systListReco;
    +  std::vector<CP::SystematicSet> m_systListTrig;
    +
    +  // tools
    +  AsgElectronEfficiencyCorrectionTool  *m_asgElEffCorrTool_elSF_PID = nullptr;
    +  std::string m_pidEffSF_tool_name;
    +  AsgElectronEfficiencyCorrectionTool  *m_asgElEffCorrTool_elSF_Iso = nullptr;
    +  std::string m_IsoEffSF_tool_name;
    +  AsgElectronEfficiencyCorrectionTool  *m_asgElEffCorrTool_elSF_Reco = nullptr;
    +  std::string m_RecoEffSF_tool_name;
    +  AsgElectronEfficiencyCorrectionTool  *m_asgElEffCorrTool_elSF_Trig = nullptr;
    +  std::string m_TrigEffSF_tool_name;
    +  AsgElectronEfficiencyCorrectionTool  *m_asgElEffCorrTool_elSF_TrigMCEff = nullptr;
    +  std::string m_TrigMCEff_tool_name;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +
    +  // Tree *myTree; //!
    +  // TH1 *myHist;  //!
    +
    +
    +  // this is a standard constructor
    +  ElectronEfficiencyCorrector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode executeSF ( const xAOD::ElectronContainer* inputElectrons, bool nominal, bool writeSystNames );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(ElectronEfficiencyCorrector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.html new file mode 100644 index 0000000000..bdaa5941a7 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronHists.h.html @@ -0,0 +1,279 @@ + + + + + + + + + + + Program Listing for File ElectronHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronHists.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronHists.h)

    +
    #ifndef xAODAnaHelpers_ElectronHists_H
    +#define xAODAnaHelpers_ElectronHists_H
    +
    +#include "xAODAnaHelpers/IParticleHists.h"
    +#include <xAODEgamma/ElectronContainer.h>
    +#include "xAODAnaHelpers/Electron.h"
    +#include "xAODAnaHelpers/EventInfo.h"
    +#include <AthContainers/DataVector.h>
    +
    +ANA_MSG_HEADER(msgElectronHists)
    +
    +class ElectronHists : public IParticleHists
    +{
    +  public:
    +
    +
    +    ElectronHists(std::string name, std::string detailStr);
    +    virtual ~ElectronHists() ;
    +
    +    virtual StatusCode initialize();
    +    virtual StatusCode execute( const xAOD::Electron* electron, float eventWeight, const xAOD::EventInfo* eventInfo = 0);
    +    virtual StatusCode execute( const xAH::Electron*  electron, float eventWeight, const xAH::EventInfo*  eventInfo = 0);
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using IParticleHists::execute; // overload
    +
    +  protected:
    +
    +    virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAH::Particle* particle,   float eventWeight, const xAH::EventInfo*  eventInfo = 0 );
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::ElectronInfoSwitch* m_infoSwitch;
    +
    +  private:
    +
    +    // Isolation
    +    std::map<std::string, TH1F *> m_isIsolated;
    +
    +    // PID
    +    std::map<std::string, TH1F *> m_PID;
    +
    +    // clean
    +    TH1F* m_ptcone20;
    +    TH1F* m_ptcone30;
    +    TH1F* m_ptcone40;
    +    TH1F* m_ptvarcone20;
    +    TH1F* m_ptvarcone30;
    +    TH1F* m_ptvarcone40;
    +    TH1F* m_topoetcone20;
    +    TH1F* m_topoetcone30;
    +    TH1F* m_topoetcone40;
    +
    +    // rel
    +    TH1F* m_ptcone20_rel;
    +    TH1F* m_ptcone30_rel;
    +    TH1F* m_ptcone40_rel;
    +    TH1F* m_ptvarcone20_rel;
    +    TH1F* m_ptvarcone30_rel;
    +    TH1F* m_ptvarcone40_rel;
    +    TH1F* m_topoetcone20_rel;
    +    TH1F* m_topoetcone30_rel;
    +    TH1F* m_topoetcone40_rel;
    +
    +
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.html new file mode 100644 index 0000000000..ce65461836 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Program Listing for File ElectronHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_ElectronHistsAlgo_H
    +#define xAODAnaHelpers_ElectronHistsAlgo_H
    +
    +#include "xAODAnaHelpers/IParticleHistsAlgo.h"
    +
    +class ElectronHistsAlgo : public IParticleHistsAlgo
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  ElectronHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode execute ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode AddHists( std::string name );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(ElectronHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.html b/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.html new file mode 100644 index 0000000000..07eb7cd17a --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.html @@ -0,0 +1,408 @@ + + + + + + + + + + + Program Listing for File ElectronSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ElectronSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/ElectronSelector.h)

    +
    #ifndef xAODAnaHelpers_ElectronSelector_H
    +#define xAODAnaHelpers_ElectronSelector_H
    +
    +// EDM include(s):
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODTracking/Vertex.h"
    +#include "EgammaAnalysisInterfaces/IAsgDeadHVCellRemovalTool.h"
    +
    +// package include(s):
    +#include "xAODAnaHelpers/ParticlePIDManager.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "IsolationSelection/IIsolationSelectionTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +#include "TriggerMatchingTool/IMatchingTool.h"
    +#include "TriggerMatchingTool/IMatchScoringTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// forward-declare for now until IsolationSelectionTool interface is updated
    +namespace CP {
    +  class IsolationSelectionTool;
    +}
    +
    +class ElectronSelector : public xAH::Algorithm
    +{
    +public:
    +
    +  bool m_useCutFlow = true;
    +
    +  /* configuration variables */
    +
    +  std::string    m_inContainerName = "";
    +  std::string    m_outContainerName = "";
    +
    +// systematics
    +  std::string    m_inputAlgoSystNames = "";
    +  std::string    m_outputAlgoSystNames = "ElectronSelector_Syst";
    +
    +  bool           m_decorateSelectedObjects = true;
    +  bool           m_createSelectedContainer = false;
    +  int            m_nToProcess = -1;
    +  int            m_pass_min = -1;
    +  int            m_pass_max = -1;
    +  float          m_pT_max = 1e8;
    +  float          m_pT_min = 1e8;
    +
    +  float          m_eta_max = 1e8;
    +
    +  bool           m_vetoCrack = true;
    +
    +  float          m_d0_max = 1e8;
    +
    +  float          m_d0sig_max = 1e8;
    +
    +  float          m_z0sintheta_max = 1e8;
    +
    +  bool           m_doAuthorCut = true;
    +  bool           m_doOQCut = true;
    +  bool m_applyDeadHVCellVeto = false;
    +
    +
    +  bool           m_readIDFlagsFromDerivation = false;
    +
    +  bool          m_doModifiedEleId = false;
    +
    +
    +  bool           m_doLHPID = true;
    +  bool           m_doLHPIDcut = false;
    +  std::string    m_LHOperatingPoint = "Loose";
    +
    +
    +  bool           m_doCutBasedPID = false;
    +  bool           m_doCutBasedPIDcut = false;
    +  std::string    m_CutBasedOperatingPoint = "Loose";
    +
    +/* isolation */
    +  std::string    m_MinIsoWPCut = "";
    +  std::string    m_IsoWPList = "FCLoose,FCTight,Gradient,FCHighPtCaloOnly";
    +  std::string    m_CaloIsoEff = "0.1*x+90";
    +  std::string    m_TrackIsoEff = "98";
    +  std::string    m_CaloBasedIsoType = "topoetcone20";
    +  std::string    m_TrackBasedIsoType = "ptvarcone20";
    +
    +/* trigger matching */
    +  std::string    m_singleElTrigChains = "";
    +  std::string    m_diElTrigChains = "";
    +  double         m_minDeltaR = 0.07;
    +
    +  bool m_applyCrackVetoCleaning = false;
    +
    +  bool           m_merged_electrons = false;
    +  std::string    m_trigInputPrefix = "";
    +
    +  std::string    m_isoDecSuffix = "";
    +
    +
    +private:
    +
    +  bool           m_doBLTrackQualityCut;
    +
    +  std::string    m_outAuxContainerName;
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +/* event-level cutflow */
    +
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +  bool  m_isUsedBefore = false;
    +
    +  /* object-level cutflow */
    +
    +  TH1D* m_el_cutflowHist_1 = nullptr;
    +  TH1D* m_el_cutflowHist_2 = nullptr;
    +
    +  int   m_el_cutflow_all;
    +  int   m_el_cutflow_author_cut;
    +  int   m_el_cutflow_OQ_cut;
    +  int   m_el_cutflow_deadHVCell_cut;
    +  int   m_el_cutflow_ptmax_cut;
    +  int   m_el_cutflow_ptmin_cut;
    +  int   m_el_cutflow_eta_cut;
    +  int   m_el_cutflow_z0sintheta_cut;
    +  int   m_el_cutflow_d0_cut;
    +  int   m_el_cutflow_d0sig_cut;
    +  int   m_el_cutflow_BL_cut;
    +  int   m_el_cutflow_PID_cut;
    +  int   m_el_cutflow_iso_cut;
    +
    +  std::vector<std::string> m_IsoKeys;
    +
    +
    +
    +  /* tools */
    +
    +  asg::AnaToolHandle<CP::IIsolationSelectionTool> m_isolationSelectionTool_handle{"CP::IsolationSelectionTool/IsolationSelectionTool", this};
    +  // this only exists because the interface needs to be updated, complain on pathelp, remove forward declaration for this when fixed
    +  CP::IsolationSelectionTool*                     m_isolationSelectionTool{nullptr};
    +  asg::AnaToolHandle<Trig::TrigDecisionTool>      m_trigDecTool_handle           {"Trig::TrigDecisionTool/TrigDecisionTool"                       };
    +  asg::AnaToolHandle<Trig::IMatchingTool>         m_trigElectronMatchTool_handle;
    +  asg::AnaToolHandle<Trig::IMatchScoringTool>     m_scoreTool                    {"Trig::DRScoringTool/DRScoringTool"                             };
    +
    +  bool m_doTrigMatch = true;
    +
    +  /* PID manager(s) */
    +  ElectronLHPIDManager*                    m_el_LH_PIDManager = nullptr;
    +  ElectronCutBasedPIDManager*              m_el_CutBased_PIDManager = nullptr;
    +
    +  asg::AnaToolHandle<IAsgDeadHVCellRemovalTool> m_deadHVTool;
    +
    +  /* other private members */
    +
    +  std::vector<std::string>            m_singleElTrigChainsList;
    +  std::vector<std::string>            m_diElTrigChainsList;
    +
    +public:
    +
    +  /* this is a standard constructor */
    +
    +  ElectronSelector ();
    +
    +  ~ElectronSelector();
    +
    +  /* these are the functions inherited from Algorithm */
    +
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  /* added functions not from Algorithm */
    +
    +  bool executeSelection( const xAOD::ElectronContainer* inElectrons, float mcEvtWeight, bool countPass,
    +                         ConstDataVector<xAOD::ElectronContainer>* selectedElectrons );
    +  virtual int passCuts( const xAOD::Electron* electron, const xAOD::Vertex *primaryVertex );
    +
    +  /* this is needed to distribute the algorithm to the workers */
    +  ClassDef(ElectronSelector, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_EventInfo.h.html b/api/program_listing_file_xAODAnaHelpers_EventInfo.h.html new file mode 100644 index 0000000000..8c7c71db2e --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_EventInfo.h.html @@ -0,0 +1,326 @@ + + + + + + + + + + + Program Listing for File EventInfo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File EventInfo.h

    +

    Return to documentation for file (xAODAnaHelpers/EventInfo.h)

    +
    #ifndef xAODAnaHelpers_EventInfo_H
    +#define xAODAnaHelpers_EventInfo_H
    +
    +#include <TTree.h>
    +#include <string>
    +
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODTracking/VertexContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +namespace xAH {
    +
    +  class EventInfo
    +  {
    +  public:
    +    EventInfo(const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSyst = true);
    +    ~EventInfo();
    +
    +    void setTree    (TTree *tree);
    +    void setBranches(TTree *tree);
    +    void clear();
    +    void FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event = nullptr, const xAOD::VertexContainer* vertices = nullptr);
    +    template <typename T_BR>
    +      void connectBranch(TTree *tree, std::string name, T_BR *variable);
    +
    +  public:
    +
    +    HelperClasses::EventInfoSwitch  m_infoSwitch;
    +    bool m_mc;
    +    bool m_debug;
    +    bool m_storeSyst;
    +    float m_units;
    +
    +  public:
    +
    +    int      m_runNumber;
    +    Long64_t m_eventNumber;
    +    int      m_lumiBlock;
    +    uint32_t m_coreFlags;
    +    uint32_t m_timeStamp;
    +    uint32_t m_timeStampNSOffset;
    +    bool     m_TileError;
    +    bool     m_LArError;
    +    bool     m_SCTError;
    +    uint32_t m_TileFlags;
    +    uint32_t m_LArFlags;
    +    uint32_t m_SCTFlags;
    +    bool     m_eventClean_LooseBad;
    +    bool     m_eventClean_TightBad;
    +    int      m_mcEventNumber;
    +    int      m_mcChannelNumber;
    +    float    m_mcEventWeight;
    +    std::vector<float> m_mcEventWeights;
    +    float    m_weight_pileup;
    +    float    m_weight_pileup_up;
    +    float    m_weight_pileup_down;
    +    float    m_correctedAvgMu;
    +    float    m_correctedAndScaledAvgMu;
    +    float    m_correctedMu;
    +    float    m_correctedAndScaledMu;
    +    int      m_rand_run_nr;
    +    int      m_rand_lumiblock_nr;
    +    int      m_bcid;
    +    int      m_DistEmptyBCID;
    +    int      m_DistLastUnpairedBCID;
    +    int      m_DistNextUnpairedBCID;
    +
    +    // event pileup
    +    int      m_npv;
    +    float    m_actualMu;
    +    float    m_averageMu;
    +
    +    // event shapeEM
    +    double   m_rhoEM;
    +    double   m_rhoEMPFLOW;
    +    double   m_rhoLC;
    +
    +    // beam spot weight
    +    float    m_beamspotweight;
    +
    +    // truth
    +    int      m_pdgId1;
    +    int      m_pdgId2;
    +    int      m_pdfId1;
    +    int      m_pdfId2;
    +    float    m_x1;
    +    float    m_x2;
    +    //float m_scale;
    +    float    m_q;
    +    //float m_pdf1;
    +    //float m_pdf2;
    +    float    m_xf1;
    +    float    m_xf2;
    +
    +    // CaloCluster
    +    std::vector<float> m_caloCluster_pt;
    +    std::vector<float> m_caloCluster_eta;
    +    std::vector<float> m_caloCluster_phi;
    +    std::vector<float> m_caloCluster_e;
    +
    +  };
    +
    +  template <typename T_BR> void EventInfo::connectBranch(TTree *tree, std::string name, T_BR *variable)
    +    {
    +      tree->SetBranchStatus  (name.c_str()  , 1);
    +      tree->SetBranchAddress (name.c_str()  , variable);
    +    }
    +
    +
    +}
    +
    +
    +
    +#endif // xAODAnaHelpers_EventInfo_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_FatJet.h.html b/api/program_listing_file_xAODAnaHelpers_FatJet.h.html new file mode 100644 index 0000000000..bcec0be1ca --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_FatJet.h.html @@ -0,0 +1,301 @@ + + + + + + + + + + + Program Listing for File FatJet.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File FatJet.h

    +

    Return to documentation for file (xAODAnaHelpers/FatJet.h)

    +
    #ifndef xAODAnaHelpers_FatJet_H
    +#define xAODAnaHelpers_FatJet_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +#include "xAODAnaHelpers/Jet.h"
    +
    +namespace xAH {
    +
    +  class FatJet : public Particle
    +    {
    +    public:
    +
    +      // scale
    +      float JetConstitScaleMomentum_eta;
    +      float JetConstitScaleMomentum_phi;
    +      float JetConstitScaleMomentum_m;
    +      float JetConstitScaleMomentum_pt;
    +
    +      float JetEMScaleMomentum_eta;
    +      float JetEMScaleMomentum_phi;
    +      float JetEMScaleMomentum_m;
    +      float JetEMScaleMomentum_pt;
    +
    +      // area
    +      float GhostArea;
    +      float ActiveArea;
    +      float VoronoiArea;
    +      float ActiveArea4vec_pt;
    +      float ActiveArea4vec_eta;
    +      float ActiveArea4vec_phi;
    +      float ActiveArea4vec_m;
    +
    +      // substructure
    +      float  Split12;
    +      float  Split23;
    +      float  Split34;
    +      float  tau1_wta;
    +      float  tau2_wta;
    +      float  tau3_wta;
    +      float  tau21_wta;
    +      float  tau32_wta;
    +      float  ECF1;
    +      float  ECF2;
    +      float  ECF3;
    +      float  C2;
    +      float  D2;
    +      float  NTrimSubjets;
    +      int    NClusters;
    +      int    nTracks;
    +      int    ungrtrk500;
    +      float  EMFrac;
    +      int    nChargedParticles;
    +
    +      // constituent
    +      int    numConstituents;
    +
    +      // constituentAll
    +      std::vector<float>  constituentWeights;
    +      std::vector<float>  constituent_pt;
    +      std::vector<float>  constituent_eta;
    +      std::vector<float>  constituent_phi;
    +      std::vector<float>  constituent_e;
    +
    +      // truth
    +      TLorentzVector truth_p4;
    +
    +      // bosons
    +      int nTQuarks;
    +      int nHBosons;
    +      int nWBosons;
    +      int nZBosons;
    +
    +      // VTag
    +      int Wtag_medium;
    +      int Ztag_medium;
    +
    +      int Wtag_tight;
    +      int Ztag_tight;
    +
    +      std::unordered_map<std::string, std::vector<xAH::Jet>> trkJets;
    +
    +      // muonCorrection
    +      float muonCorrected_pt;
    +      float muonCorrected_eta;
    +      float muonCorrected_phi;
    +      float muonCorrected_m;
    +    };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.html b/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.html new file mode 100644 index 0000000000..689d9a145c --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.html @@ -0,0 +1,344 @@ + + + + + + + + + + + Program Listing for File FatJetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File FatJetContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/FatJetContainer.h)

    +
    #ifndef xAODAnaHelpers_FatJetContainer_H
    +#define xAODAnaHelpers_FatJetContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODJet/JetContainer.h>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/FatJet.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +#include <xAODAnaHelpers/JetContainer.h>
    +
    +
    +namespace xAH {
    +
    +    class FatJetContainer : public ParticleContainer<FatJet,HelperClasses::JetInfoSwitch>
    +    {
    +    public:
    +      FatJetContainer(const std::string& name = "fatjet", const std::string& detailStr="", const std::string& subjetDetailStr="kinematic", const std::string& suffix="",
    +              float units = 1e3, bool mc = false);
    +      virtual ~FatJetContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillFatJet( const xAOD::Jet* jet           , int pvLocation=0 );
    +      virtual void FillFatJet( const xAOD::IParticle* particle, int pvLocation=0 );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +      float       m_trackJetPtCut  =10e3; // slimming pT cut on associated track jets
    +      float       m_trackJetEtaCut =2.5;  // slimmint eta cut on associated track jets
    +
    +    protected:
    +
    +      virtual void updateParticle(uint idx, FatJet& jet);
    +
    +    private:
    +
    +      bool SelectTrackJet(const xAOD::Jet* TrackJet);
    +      float GetEMFrac(const xAOD::Jet& jet);
    +
    +    private:
    +
    +      //
    +      // Vector branches
    +      //
    +
    +      // scales
    +      std::vector<float> *m_JetConstitScaleMomentum_eta;
    +      std::vector<float> *m_JetConstitScaleMomentum_phi;
    +      std::vector<float> *m_JetConstitScaleMomentum_m;
    +      std::vector<float> *m_JetConstitScaleMomentum_pt;
    +
    +      std::vector<float> *m_JetEMScaleMomentum_eta;
    +      std::vector<float> *m_JetEMScaleMomentum_phi;
    +      std::vector<float> *m_JetEMScaleMomentum_m;
    +      std::vector<float> *m_JetEMScaleMomentum_pt;
    +
    +      // area
    +      std::vector<float> *m_GhostArea;
    +      std::vector<float> *m_ActiveArea;
    +      std::vector<float> *m_VoronoiArea;
    +
    +      std::vector<float> *m_ActiveArea4vec_pt;
    +      std::vector<float> *m_ActiveArea4vec_eta;
    +      std::vector<float> *m_ActiveArea4vec_phi;
    +      std::vector<float> *m_ActiveArea4vec_m;
    +
    +      // substructure
    +      std::vector<float> *m_Split12;
    +      std::vector<float> *m_Split23;
    +      std::vector<float> *m_Split34;
    +      std::vector<float> *m_tau1_wta;
    +      std::vector<float> *m_tau2_wta;
    +      std::vector<float> *m_tau3_wta;
    +      std::vector<float> *m_tau21_wta;
    +      std::vector<float> *m_tau32_wta;
    +      std::vector<float> *m_ECF1;
    +      std::vector<float> *m_ECF2;
    +      std::vector<float> *m_ECF3;
    +      std::vector<float> *m_C2;
    +      std::vector<float> *m_D2;
    +      std::vector<float> *m_NTrimSubjets;
    +      std::vector<int>   *m_NClusters;
    +      std::vector<int>   *m_nTracks;
    +      std::vector<int>   *m_ungrtrk500;
    +      std::vector<float> *m_EMFrac;
    +      std::vector<int>   *m_nChargedParticles;
    +
    +      // constituent
    +      std::vector< int > *m_numConstituents;
    +
    +      // constituentAll
    +      std::vector< std::vector<float> >  *m_constituentWeights;
    +      std::vector< std::vector<float> >  *m_constituent_pt;
    +      std::vector< std::vector<float> >  *m_constituent_eta;
    +      std::vector< std::vector<float> >  *m_constituent_phi;
    +      std::vector< std::vector<float> >  *m_constituent_e;
    +
    +      // truth
    +      std::vector<float> *m_truth_m;
    +      std::vector<float> *m_truth_pt;
    +      std::vector<float> *m_truth_phi;
    +      std::vector<float> *m_truth_eta;
    +
    +      // bosonCount
    +      std::vector< int > *m_nTQuarks;
    +      std::vector< int > *m_nHBosons;
    +      std::vector< int > *m_nWBosons;
    +      std::vector< int > *m_nZBosons;
    +
    +      // Assocated Track Jets
    +      std::unordered_map<std::string, xAH::JetContainer*> m_trkJets;
    +      std::unordered_map<std::string, std::vector<std::vector<unsigned int>>* > m_trkJetsIdx;
    +
    +      // muonCorrection
    +      std::vector<float> *m_muonCorrected_pt;
    +      std::vector<float> *m_muonCorrected_eta;
    +      std::vector<float> *m_muonCorrected_phi;
    +      std::vector<float> *m_muonCorrected_m;
    +
    +    };
    +}
    +
    +
    +
    +#endif // xAODAnaHelpers_FatJetContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.html b/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.html new file mode 100644 index 0000000000..d4c73a4759 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.html @@ -0,0 +1,278 @@ + + + + + + + + + + + Program Listing for File HLTJetGetter.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HLTJetGetter.h

    +

    Return to documentation for file (xAODAnaHelpers/HLTJetGetter.h)

    +
    /******************************************
    + *
    + * This class gets HLT jets from the TDT and can be expanded to get other features
    + *
    + * Merlin Davies (merlin.davies@cern.ch)
    + * Caterina Doglioni (caterina.doglioni@cern.ch)
    + * John Alison (john.alison@cern.ch)
    + *
    + *
    + ******************************************/
    +
    +#ifndef xAODAnaHelpers_HLTJetGetter_H
    +#define xAODAnaHelpers_HLTJetGetter_H
    +
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +
    +namespace TrigConf {
    +    class xAODConfigTool;
    +}
    +
    +namespace Trig {
    +    class TrigDecisionTool;
    +}
    +
    +
    +class HLTJetGetter : public xAH::Algorithm
    +{
    +
    +public:
    +
    +  /* configuration variables */
    +  std::string m_triggerList = ".*";
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +private:
    +
    +  //Trig::TrigDecisionTool*        m_trigDecTool = nullptr;   //!
    +  asg::AnaToolHandle<Trig::TrigDecisionTool>              m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"    };
    +  TrigConf::xAODConfigTool*      m_trigConfTool = nullptr;
    +  bool                           m_ownTDTAndTCT = false;
    +
    +public:
    +
    +  // this is a standard constructor
    +  HLTJetGetter ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(HLTJetGetter, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.html b/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.html new file mode 100644 index 0000000000..f3aa7012c1 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.html @@ -0,0 +1,316 @@ + + + + + + + + + + + Program Listing for File HLTJetRoIBuilder.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HLTJetRoIBuilder.h

    +

    Return to documentation for file (xAODAnaHelpers/HLTJetRoIBuilder.h)

    +
    //#ifndef xAODAnaHelpers_HLTJetRoIBuilder_H
    +//#define xAODAnaHelpers_HLTJetRoIBuilder_H
    +//
    +//
    +//#include "xAODAnaHelpers/Algorithm.h"
    +//
    +//#include "AsgTools/AnaToolHandle.h"
    +//#include "xAODAnaHelpers/OnlineBeamSpotTool.h"
    +//#include "TrigDecisionTool/TrigDecisionTool.h"
    +//
    +//class HLTJetRoIBuilder : public xAH::Algorithm
    +//{
    +//
    +//  public:
    +//
    +//    // configuration variables
    +//
    +//    /**
    +//      @brief name of trigger chain to load
    +//     */
    +//    std::string m_trigItem = "";
    +//    std::string m_trigItemVeto = "";
    +//
    +//    /**
    +//      @brief Do we load a full BJet trigger chain?
    +//     */
    +//    bool        m_doHLTBJet = true;
    +//
    +//    /**
    +//      @brief Do we load a jet trigger chain?
    +//     */
    +//    bool        m_doHLTJet = false;
    +//
    +//    /**
    +//      @brief Do we read in the HLT tracks?
    +//     */
    +//    bool        m_readHLTTracks = true;
    +//
    +//
    +//    /**
    +//      @brief Do we read in the HLT vertices?
    +//     */
    +//    bool        m_readHLTVtx = true;
    +//
    +//
    +//    /**
    +//      @brief Name of the output container
    +//     */
    +//    std::string m_outContainerName = "";
    +//
    +//  private:
    +//
    +//    asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"}; //!
    +//
    +//    std::string                  m_jetName = "EFJet";       //!
    +//    std::string                  m_trkName = "InDetTrigTrackingxAODCnv_Bjet_IDTrig";       //!
    +//    std::string                  m_vtxName = "EFHistoPrmVtx";       //!
    +//    xAH::OnlineBeamSpotTool      m_onlineBSTool;  //!
    +//
    +//    EL::StatusCode buildHLTBJets ();
    +//    EL::StatusCode buildHLTJets  ();
    +//
    +//  public:
    +//
    +//    // this is a standard constructor
    +//    HLTJetRoIBuilder ();
    +//
    +//    // these are the functions inherited from Algorithm
    +//    virtual EL::StatusCode setupJob (EL::Job& job);
    +//    virtual EL::StatusCode fileExecute ();
    +//    virtual EL::StatusCode histInitialize ();
    +//    virtual EL::StatusCode changeInput (bool firstFile);
    +//    virtual EL::StatusCode initialize ();
    +//    virtual EL::StatusCode execute ();
    +//    virtual EL::StatusCode postExecute ();
    +//    virtual EL::StatusCode finalize ();
    +//    virtual EL::StatusCode histFinalize ();
    +//
    +//
    +//    /// @cond
    +//    // this is needed to distribute the algorithm to the workers
    +//    ClassDef(HLTJetRoIBuilder, 1);
    +//    /// @endcond
    +//
    +//    template<class Object, class Collection>
    +//      const Object* getTrigObject(Trig::Feature<Collection>& feature){
    +//
    +//      const Collection* trigCol = feature.cptr();
    +//      if ( !trigCol ) {
    +//        ANA_MSG_ERROR("ERROR: No Trig Collection pointer");
    +//        return 0;
    +//      }
    +//
    +//      if(trigCol->size() != 1){
    +//        ANA_MSG_ERROR("ERROR Trig Collection size " << trigCol->size());
    +//        return 0;;
    +//      }
    +//
    +//      return trigCol->at(0);
    +//    }
    +//
    +//};
    +//
    +//
    +//#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.html b/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.html new file mode 100644 index 0000000000..5cca8109bc --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.html @@ -0,0 +1,634 @@ + + + + + + + + + + + Program Listing for File HelpTreeBase.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelpTreeBase.h

    +

    Return to documentation for file (xAODAnaHelpers/HelpTreeBase.h)

    +
    /********************************************************
    + * HelpTreeBase:
    + *
    + * This class is meant to help the user write out a tree.
    + * Some branches are included by default while others
    + * need to be added by the user
    + *
    + * John Alison (john.alison@cern.ch)
    + * Gabriel Facini (gabriel.facini@cern.ch)
    + * Marco Milesi (marco.milesi@cern.ch)
    + * Jeff Dandoy (jeff.dandoy@cern.ch)
    + *
    + ********************************************************/
    +
    +// Dear emacs, this is -*-c++-*-
    +#ifndef xAODAnaHelpers_HelpTreeBase_H
    +#define xAODAnaHelpers_HelpTreeBase_H
    +
    +
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODCaloEvent/CaloClusterContainer.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODTrigger/JetRoIContainer.h"
    +#include "xAODTruth/TruthParticleContainer.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODMissingET/MissingETContainer.h"
    +#include "xAODTracking/TrackParticleContainer.h"
    +
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/EventInfo.h"
    +#include "xAODAnaHelpers/MetContainer.h"
    +#include "xAODAnaHelpers/JetContainer.h"
    +#include "xAODAnaHelpers/L1JetContainer.h"
    +#include "xAODAnaHelpers/VertexContainer.h"
    +#include "xAODAnaHelpers/ElectronContainer.h"
    +#include "xAODAnaHelpers/PhotonContainer.h"
    +#include "xAODAnaHelpers/ClusterContainer.h"
    +#include "xAODAnaHelpers/FatJetContainer.h"
    +#include "xAODAnaHelpers/TruthContainer.h"
    +#include "xAODAnaHelpers/TrackContainer.h"
    +#include "xAODAnaHelpers/MuonContainer.h"
    +#include "xAODAnaHelpers/TauContainer.h"
    +#include "xAODRootAccess/TEvent.h"
    +#include "xAODRootAccess/TStore.h"
    +
    +
    +#include <map>
    +
    +// root includes
    +#include "TTree.h"
    +#include "TFile.h"
    +
    +namespace TrigConf {
    +  class xAODConfigTool;
    +}
    +
    +namespace Trig {
    +  class TrigDecisionTool;
    +}
    +
    +typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ;
    +
    +class HelpTreeBase {
    +
    +public:
    +
    +  HelpTreeBase(xAOD::TEvent *event, TTree* tree, TFile* file, const float units = 1e3, bool debug = false, xAOD::TStore* store = nullptr, std::string nominalTreeName = "nominal" );
    +  HelpTreeBase(TTree* tree, TFile* file, xAOD::TEvent *event = nullptr, xAOD::TStore* store = nullptr, const float units = 1e3, bool debug = false, std::string nominalTreeName = "nominal" );
    +  virtual ~HelpTreeBase();
    +
    +  void AddEvent         (const std::string& detailStr = "");
    +  void AddTrigger       (const std::string& detailStr = "");
    +  void AddJetTrigger    (const std::string& detailStr = "");
    +  void AddMuons         (const std::string& detailStr = "", const std::string& muonName = "muon");
    +  void AddElectrons     (const std::string& detailStr = "", const std::string& elecName = "el");
    +  void AddPhotons       (const std::string& detailStr = "", const std::string& photonName = "ph");
    +  void AddClusters      (const std::string& detailStr = "", const std::string& clusterName = "cl");
    +  void AddJets          (const std::string& detailStr = "", const std::string& jetName = "jet");
    +  void AddL1Jets        (const std::string& jetName   = "");
    +  void AddTruthParts    (const std::string& detailStr = "", const std::string& truthName = "xAH_truth");
    +  void AddTrackParts    (const std::string& detailStr = "", const std::string& trackName = "trk");
    +  void AddVertices      (const std::string& detailStr = "", const std::string& vertexName = "vertex"); // options for detailStr: "all" or "primary"
    +  void AddTruthVertices (const std::string& detailStr = "", const std::string& vertexName = "truth_vertex"); // options for detailStr: "all" or "primary"
    +
    +  void AddFatJets     (const std::string& detailStr = "", const std::string& fatjetName = "fatjet", const std::string& subjetDetailStr="", const std::string& suffix="");
    +  void AddTruthFatJets(const std::string& detailStr = "", const std::string& truthFatJetName = "truth_fatjet");
    +
    +  void AddTaus        (const std::string& detailStr = "", const std::string& tauName = "tau");
    +  void AddMET         (const std::string& detailStr = "", const std::string& metName = "met");
    +
    +  static std::string FatJetCollectionName(const std::string& fatjetName = "fatjet", const std::string& suffix = "");
    +
    +  xAOD::TEvent* m_event;
    +  xAOD::TStore* m_store;
    +
    +  std::string m_vertexContainerName = "PrimaryVertices";
    +  std::string m_truthVertexContainerName = "TruthVertices";
    +
    +  // control which branches are filled
    +  HelperClasses::TriggerInfoSwitch*    m_trigInfoSwitch;
    +
    +  std::string                  m_triggerSelection;
    +  TrigConf::xAODConfigTool*    m_trigConfTool;
    +  Trig::TrigDecisionTool*      m_trigDecTool;
    +
    +  void FillEvent( const xAOD::EventInfo* eventInfo, xAOD::TEvent* event = nullptr, const xAOD::VertexContainer* vertices = nullptr );
    +
    +  void FillTrigger( const xAOD::EventInfo* eventInfo );
    +  void FillJetTrigger();
    +
    +  void FillMuons( const xAOD::MuonContainer* muons, const xAOD::Vertex* primaryVertex, const std::string& muonName = "muon" );
    +  void FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex, const std::string& muonName = "muon" );
    +
    +  void FillElectrons( const xAOD::ElectronContainer* electrons, const xAOD::Vertex* primaryVertex, const std::string& elecName = "el" );
    +  void FillElectron ( const xAOD::Electron* elec, const xAOD::Vertex* primaryVertex, const std::string& elecName = "el" );
    +
    +  void FillPhotons( const xAOD::PhotonContainer* photons, const std::string& photonName = "ph" );
    +  void FillPhoton ( const xAOD::Photon*          photon,  const std::string& photonName = "ph" );
    +
    +  void FillClusters( const xAOD::CaloClusterContainer* clusters, const std::string& clusterName = "cl" );
    +  void FillCluster ( const xAOD::CaloCluster*          cluster,  const std::string& clusterName = "cl" );
    +
    +  void FillJets( const xAOD::JetContainer* jets, int pvLocation = -1, const std::string& jetName = "jet" );
    +  void FillJet( const xAOD::Jet* jet_itr, const xAOD::Vertex* pv, int pvLocation, const std::string& jetName = "jet" );
    +  void FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, const std::string& jetName = "L1Jet", bool sortL1Jets = false );
    +
    +  template <typename T>
    +  void FillPhase1L1Jets(T*& jets, const std::string& jetName = "L1Jet", bool sortL1Jets = false){
    +
    +    this->ClearL1Jets(jetName);
    +
    +    xAH::L1JetContainer* thisL1Jet = m_l1Jets[jetName];
    +
    +    thisL1Jet->FillPhase1L1Jets(jets,sortL1Jets);
    +  }
    +
    +  void FillTruth( const xAOD::TruthParticleContainer* truth, const std::string& truthName = "xAH_truth" );
    +  void FillTruth( const xAOD::TruthParticle* truthPart, const std::string& truthName );
    +
    +  void FillTracks( const xAOD::TrackParticleContainer* tracks, const std::string& trackName = "trk" );
    +  void FillTrack( const xAOD::TrackParticle* trackPart, const std::string& trackName );
    +
    +  void FillVertices( const xAOD::VertexContainer* vertices, const std::string& vertexName = "vertex" );
    +  void FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices, const std::string& truthVertexName = "truth_vertex" );
    +
    +  void FillFatJets( const xAOD::JetContainer* fatJets , int pvLocation = 0, const std::string& fatjetName = "fatjet", const std::string& suffix = "");
    +  void FillFatJet ( const xAOD::Jet* fatjet_itr,        int pvLocation = 0, const std::string& fatjetName = "fatjet", const std::string& suffix = "");
    +
    +  void FillTruthFatJets( const xAOD::JetContainer* truthFatJets,     int pvLocation = 0, const std::string& truthFatJetName="truth_fatjet" );
    +  void FillTruthFatJet ( const xAOD::Jet*          truth_fatjet_itr, int pvLocation = 0, const std::string& truthFatJetName="truth_fatjet" );
    +
    +  void FillTaus( const xAOD::TauJetContainer* taus, const std::string& tauName = "tau" );
    +  void FillTau ( const xAOD::TauJet* tau,           const std::string& tauName = "tau" );
    +  void FillMET( const xAOD::MissingETContainer* met, const std::string& metName = "met" );
    +
    +  void Fill();
    +  void ClearEvent();
    +  void ClearTrigger();
    +  void ClearJetTrigger();
    +  void ClearMuons         (const std::string& jetName = "muon");
    +  void ClearElectrons     (const std::string& elecName = "el");
    +  void ClearPhotons       (const std::string& photonName = "ph");
    +  void ClearClusters      (const std::string& clusterName = "cl");
    +  void ClearJets          (const std::string& jetName = "jet");
    +  void ClearL1Jets        (const std::string& jetName = "L1Jet");
    +  void ClearTruth         (const std::string& truthName);
    +  void ClearTracks    (const std::string& trackName);
    +  void ClearFatJets       (const std::string& fatjetName, const std::string& suffix="");
    +  void ClearTruthFatJets  (const std::string& truthFatJetName = "truth_fatjet");
    +  void ClearTaus          (const std::string& tauName = "tau" );
    +  void ClearMET           (const std::string& metName = "met");
    +  void ClearVertices      (const std::string& vertexName = "vertex");
    +  void ClearTruthVertices (const std::string& vertexName = "truth_vertex");
    +
    +  bool writeTo( TFile *file );
    +
    +  virtual void AddEventUser(const std::string& detailStr = "")      {
    +    if(m_debug) Info("AddEventUser","Empty function called from HelpTreeBase %s",detailStr.c_str());
    +    return;
    +  };
    +
    +  virtual void AddTriggerUser(const std::string& detailStr = "")      {
    +    if(m_debug) Info("AddTriggerUser","Empty function called from HelpTreeBase %s",detailStr.c_str());
    +    return;
    +  };
    +
    +  virtual void AddJetTriggerUser(const std::string& detailStr = "")      {
    +    if(m_debug) Info("AddJetTriggerUser","Empty function called from HelpTreeBase %s",detailStr.c_str());
    +    return;
    +  };
    +
    +  virtual void AddMuonsUser(const std::string& detailStr = "", const std::string& muonName="muon"){
    +    if(m_debug) Info("AddMuonsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),muonName.c_str());
    +    return;
    +    };
    +
    +  virtual void AddElectronsUser(const std::string& detailStr = "", const std::string& elecName="el"){
    +    if(m_debug) Info("AddElectronsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),elecName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddPhotonsUser(const std::string& detailStr = "", const std::string& photonName="ph"){
    +    if(m_debug) Info("AddPhotonsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),photonName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddClustersUser(const std::string& detailStr = "", const std::string& clusterName="cl"){
    +    if(m_debug) Info("AddClustersUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),clusterName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddJetsUser(const std::string& detailStr = "", const std::string& jetName = "jet")       {
    +    if(m_debug) Info("AddJetsUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(), jetName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddTruthUser(const std::string& truthName = "", const std::string& detailStr = "xAH_truth")       {
    +    if(m_debug) Info("AddTruthUser","Empty function called from HelpTreeBase %s %s",truthName.c_str(), detailStr.c_str());
    +    return;
    +  };
    +
    +  virtual void AddTracksUser(const std::string& trackName = "", const std::string& detailStr = "trk")       {
    +    if(m_debug) Info("AddTracksUser","Empty function called from HelpTreeBase %s %s",trackName.c_str(), detailStr.c_str());
    +    return;
    +  };
    +
    +  virtual void AddFatJetsUser(const std::string& detailStr = "", const std::string& fatjetName = "", const std::string& suffix = "")       {
    +    if(m_debug) Info("AddFatJetsUser","Empty function called from HelpTreeBase %s for %s with suffix %s", detailStr.c_str(), fatjetName.c_str(), suffix.c_str());
    +    return;
    +  };
    +
    +  virtual void AddTruthFatJetsUser(const std::string& detailStr = "", const std::string& truthFatJetName = "truth_fatjet")       {
    +    if(m_debug) Info("AddTruthFatJetsUser","Empty function called from HelpTreeBase %s for %s", detailStr.c_str(), truthFatJetName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddTausUser(const std::string& detailStr = "", const std::string& tauName="tau")   {
    +    if(m_debug) Info("AddTausUser","Empty function called from HelpTreeBase %s %s",detailStr.c_str(),tauName.c_str());
    +    return;
    +  };
    +
    +  virtual void AddMETUser(const std::string& detailStr = "", const std::string& metName = "met")       {
    +    if(m_debug) Info("AddMETUser","Empty function called from HelpTreeBase %s for %s",detailStr.c_str(), metName.c_str());
    +    return;
    +  };
    +
    +  virtual void ClearEventUser       ()     { return; };
    +  virtual void ClearTriggerUser     ()   { return; };
    +  virtual void ClearMuonsUser       (const std::string& /*muonName = muon"*/)     { return; };
    +  virtual void ClearElectronsUser   (const std::string& /*elecName = "el"*/) { return; };
    +  virtual void ClearPhotonsUser     (const std::string& /*photonName = "ph"*/) { return; };
    +  virtual void ClearClustersUser    (const std::string& /*clusterName = "cl"*/) { return; };
    +  virtual void ClearTruthUser       (const std::string& /*truthName*/)      { return; };
    +  virtual void ClearTracksUser      (const std::string& /*trackName*/)       { return; };
    +  virtual void ClearJetsUser        (const std::string& /*jetName = "jet"*/ )       { return; };
    +  virtual void ClearFatJetsUser     (const std::string& /*fatjetName = "fatjet"*/, const std::string& /*suffix = ""*/)   { return; };
    +  virtual void ClearTruthFatJetsUser(const std::string& /*truthFatJetName = "truth_fatjet"*/)   { return; };
    +  virtual void ClearTausUser        (const std::string& /*tauName = "tau"*/)        { return; };
    +  virtual void ClearMETUser         (const std::string& /*metName = "met"*/)       { return; };
    +
    +  virtual void FillEventUser    ( const xAOD::EventInfo*  )        { return; };
    +  virtual void FillMuonsUser    ( const xAOD::Muon*,        const std::string& /*muonName = "muon"*/, const xAOD::Vertex* ) { return; };
    +  virtual void FillElectronsUser( const xAOD::Electron*,    const std::string& /*elecName = "el"*/, const xAOD::Vertex* )   { return; };
    +  virtual void FillPhotonsUser  ( const xAOD::Photon*,      const std::string& /*photonName = "ph"*/ )     { return; };
    +  virtual void FillClustersUser ( const xAOD::CaloCluster*, const std::string& /*clusterName = "cl"*/ )     { return; };
    +  virtual void FillJetsUser     ( const xAOD::Jet*,         const std::string& /*jetName = "jet"*/  )               { return; };
    +  virtual void FillTruthUser    ( const xAOD::TruthParticle*, const std::string& /*truthName*/ )               { return; };
    +  virtual void FillTracksUser   ( const xAOD::TrackParticle*, const std::string& /*trackName*/ )               { return; };
    +  virtual void FillFatJetsUser( const xAOD::Jet* /*jet*/, int /*pvLocation = 0*/, const std::string& /*fatjetName = "fatjet"*/, const std::string& /*suffix = ""*/) { return; };
    +  virtual void FillTruthFatJetsUser( const xAOD::Jet* /*jet*/, int /*pvLocation = 0*/, const std::string& /*fatjetName = "truth_fatjet"*/   )            { return; };
    +  virtual void FillTausUser( const xAOD::TauJet*,           const std::string& /*tauName = "tau"*/  )            { return; };
    +  virtual void FillMETUser( const xAOD::MissingETContainer*, const std::string& /*metName = "met"*/ ) { return; };
    +  virtual void FillTriggerUser( const xAOD::EventInfo*  )      { return; };
    +  virtual void FillJetTriggerUser()                            { return; };
    +
    + protected:
    +
    +  template<typename T, typename U, typename V>
    +    void safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor<T>& accessor, std::vector<U>& destination, U defaultValue, int m_units = 1);
    +
    +  template<typename T, typename U, typename V>
    +    void safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor<std::vector<T> >& accessor, std::vector<std::vector<U> >& destination, int m_units = 1);
    +
    +  template<typename T>
    +    void setBranch(std::string prefix, std::string varName, std::vector<T>* localVectorPtr);
    +
    +protected:
    +
    +  TTree* m_tree;
    +
    +  int m_units; //For MeV to GeV conversion in output
    +
    +  bool m_debug;
    +  bool m_isMC;
    +  std::string m_nominalTreeName;
    +  bool m_nominalTree;
    +
    +  // event
    +  xAH::EventInfo*      m_eventInfo;
    +
    +  // trigger
    +  int m_passL1;
    +  int m_passHLT;
    +  unsigned int m_masterKey;
    +  unsigned int m_L1PSKey;
    +  unsigned int m_HLTPSKey;
    +  std::vector<std::string>  m_elTrigForMatching;   /* each event can have a list of electron trigger chains to which each electron could be matched.
    +                           / This list is created when configuring ElectronSelector.cxx, where the electron trigger matching is actually performed
    +                           */
    +
    +  // jet trigger
    +  std::vector<std::string> m_passedTriggers;
    +  std::vector<std::string> m_disabledTriggers;
    +  std::vector<float> m_triggerPrescales;
    +  std::vector<float> m_triggerPrescalesLumi;
    +  std::vector<std::string>  m_isPassBitsNames;
    +  std::vector<unsigned int> m_isPassBits;
    +
    +  //
    +  //  Jets
    +  //
    +  std::map<std::string, xAH::JetContainer*> m_jets;
    +
    +  //
    +  // L1 Jets
    +  //
    +  std::map<std::string, xAH::L1JetContainer*> m_l1Jets;
    +
    +  //
    +  // Truth
    +  //
    +  std::map<std::string, xAH::TruthContainer*> m_truth;
    +
    +  //
    +  // Tracks
    +  //
    +  std::map<std::string, xAH::TrackContainer*> m_tracks;
    +
    +  //
    +  // fat jets
    +  //
    +  std::map<std::string, xAH::FatJetContainer*> m_fatjets;
    +
    +  //
    +  // truth fat jets
    +  //
    +  std::map<std::string, xAH::FatJetContainer*> m_truth_fatjets;
    +
    +  //
    +  // muons
    +  //
    +  std::map<std::string, xAH::MuonContainer*> m_muons;
    +  std::map<std::string, std::vector<std::string> > m_MuonRecoEff_SF_sysNames;
    +  std::map<std::string, std::vector<std::string> > m_MuonIsoEff_SF_sysNames;
    +  std::map<std::string, std::map<std::string, std::vector<std::string> > > m_MuonTrigEff_SF_sysNames;
    +  std::vector<std::string>  m_MuonTTVAEff_SF_sysNames;
    +
    +  //
    +  // electrons
    +  //
    +  std::map<std::string, xAH::ElectronContainer*> m_elecs;
    +
    +  //
    +  // photons
    +  //
    +  std::map<std::string, xAH::PhotonContainer*> m_photons;
    +
    +  //
    +  // clusters
    +  //
    +  std::map<std::string, xAH::ClusterContainer*> m_clusters;
    +
    +
    +  //
    +  // taus
    +  //
    +  std::map<std::string, xAH::TauContainer*> m_taus;
    +
    +  //
    +  // met
    +  //
    +  std::map<std::string, xAH::MetContainer* > m_met;
    +
    +  //
    +  // vertices
    +  //
    +  std::map<std::string, xAH::VertexContainer*> m_vertices;
    +  std::map<std::string, xAH::VertexContainer*> m_truth_vertices;
    +
    +};
    +
    +
    +template<typename T, typename U, typename V>
    +void HelpTreeBase::safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor<T>& accessor, std::vector<U>& destination, U defaultValue, int m_units){
    +  if ( accessor.isAvailable( *xAODObj ) ) {
    +    destination.push_back( accessor( *xAODObj ) / m_units );
    +  } else {
    +    destination.push_back( defaultValue );
    +  }
    +  return;
    +}
    +
    +template<typename T, typename U, typename V>
    +void HelpTreeBase::safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor<std::vector<T> >& accessor, std::vector<std::vector<U> >& destination, int m_units){
    +  destination.push_back( std::vector<U>() );
    +
    +  if ( accessor.isAvailable( *xAODObj ) ) {
    +    for(U itemInVec : accessor(*xAODObj))        destination.back().push_back(itemInVec / m_units);
    +  }
    +  return;
    +}
    +
    +
    +template<typename T>
    +void HelpTreeBase::setBranch(std::string prefix, std::string varName, std::vector<T>* localVectorPtr){
    +  m_tree->Branch((prefix+"_"+varName).c_str(),        localVectorPtr);
    +}
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.html b/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.html new file mode 100644 index 0000000000..ba442169af --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HelperClasses.h.html @@ -0,0 +1,553 @@ + + + + + + + + + + + Program Listing for File HelperClasses.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelperClasses.h

    +

    Return to documentation for file (xAODAnaHelpers/HelperClasses.h)

    +
    #ifndef xAODAnaHelpers_HELPERCLASSES_H
    +#define xAODAnaHelpers_HELPERCLASSES_H
    +
    +#include <map>
    +#include <iostream>
    +#include <sstream>
    +
    +#include "TString.h"
    +
    +/* stuff below is for templating getContainer */
    +#include <RootCoreUtils/ThrowMsg.h>
    +#include <AthContainers/ConstDataVector.h>
    +
    +#include <xAODRootAccess/TEvent.h>
    +#include <xAODRootAccess/TStore.h>
    +
    +#include <xAODEventInfo/EventInfo.h>
    +
    +namespace HelperClasses {
    +
    +  enum class ContainerType {
    +      UNKNOWN      = 0,
    +      CONSTDV      = 1,
    +      CONSTCONT    = 2,
    +  };
    +
    +  enum class ToolName {
    +      MUONSELECTOR,
    +      ELECTRONSELECTOR,
    +      PHOTONSELECTOR,
    +      JETSELECTOR,
    +      BJETSELECTOR,
    +      CALIBRATOR,
    +      CORRECTOR,
    +      SELECTOR,
    +      DEFAULT
    +  };
    +
    +  template <typename T>
    +  class EnumParser
    +  {
    +     std::multimap <std::string, T> enumMap;
    +   public:
    +     EnumParser();
    +
    +     T parseEnum(const std::string &value)
    +     {
    +        typename std::multimap <std::string, T>::const_iterator iValue = enumMap.find(value);
    +        if (iValue == enumMap.end()){
    +            std::cerr << "Could not find input string in enum!" << std::endl;
    +        }
    +        return iValue->second;
    +     }
    +  };
    +
    +
    +  class InfoSwitch {
    +  protected:
    +    const std::string m_configStr;
    +    std::set<std::string> m_configDetails;
    +  public:
    +    InfoSwitch(const std::string configStr) : m_configStr(configStr) {
    +        // parse and split by space
    +        std::string token;
    +        std::istringstream ss(m_configStr);
    +        while ( std::getline(ss, token, ' ') )
    +            m_configDetails.insert(token);
    +    };
    +    bool has_exact(const std::string flag) { return m_configDetails.find(flag) != m_configDetails.end(); };
    +    bool has_match(const std::string flag) { return m_configStr.find(flag) != std::string::npos; };
    +    std::string get_working_point(const std::string flag);
    +    std::vector<std::string> get_working_points(const std::string flag);
    +  };
    +
    +  class EventInfoSwitch : public InfoSwitch {
    +  public:
    +    bool m_noDataInfo;
    +    bool m_eventCleaning;
    +    bool m_bcidInfo;
    +    bool m_pileup;
    +    bool m_pileupsys;
    +    bool m_shapeEM;
    +    bool m_shapeEMPFLOW;
    +    bool m_shapeLC;
    +    bool m_truth;
    +    bool m_caloClus;
    +    bool m_weightsSys;
    +    bool m_beamspotweight;
    +    EventInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); };
    +  protected:
    +    void initialize();
    +  };
    +
    +  class TriggerInfoSwitch : public InfoSwitch {
    +  public:
    +    bool m_basic;
    +    bool m_menuKeys;
    +    bool m_passTriggers;
    +    bool m_passTrigBits;
    +    bool m_prescales;
    +    bool m_prescalesLumi;
    +    TriggerInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); };
    +  protected:
    +    void initialize();
    +  };
    +
    +  class IParticleInfoSwitch : public InfoSwitch {
    +  public:
    +    bool m_noMultiplicity;
    +    bool m_kinematic;
    +    int  m_numLeading;
    +    bool m_useTheS;
    +    IParticleInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); }
    +    virtual ~IParticleInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class MuonInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_trigger;
    +    bool m_isolation;
    +    bool m_isolationKinematics;
    +    bool m_quality;
    +    bool m_trackparams;
    +    bool m_trackhitcont;
    +    bool m_effSF;
    +    bool m_energyLoss;
    +    bool m_promptlepton;
    +
    +    std::vector< std::string > m_recoWPs;
    +    std::vector< std::string > m_isolWPs;
    +    std::vector< std::string > m_trigWPs;
    +
    +    bool m_passSel;
    +    bool m_passOR;
    +
    +    bool m_doLRT;
    +    bool m_closeByCorr;
    +
    +    bool m_recoEff_sysNames;
    +    bool m_isoEff_sysNames;
    +    bool m_trigEff_sysNames;
    +    bool m_ttvaEff_sysNames;
    +
    +
    +    MuonInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); };
    +    virtual ~MuonInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class ElectronInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_trigger;
    +    bool m_isolation;
    +    bool m_isolationKinematics;
    +    bool m_quality;
    +    bool m_PID;
    +    bool m_recoparams;
    +    bool m_trackparams;
    +    bool m_trackhitcont;
    +    bool m_effSF;
    +    bool m_promptlepton;
    +    std::vector< std::string > m_PIDWPs;
    +    std::vector< std::string > m_PIDSFWPs;
    +    std::vector< std::string > m_isolWPs;
    +    std::vector< std::string > m_trigWPs;
    +    bool m_passSel;
    +    bool m_passOR;
    +    bool m_doLRT;
    +    bool m_closeByCorr;
    +    ElectronInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); };
    +    virtual ~ElectronInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class PhotonInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_isolation;
    +    bool m_PID;
    +    bool m_purity;
    +    bool m_effSF;
    +    bool m_trigger;
    +    std::vector<std::string> m_isoCones;
    +    PhotonInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }
    +    virtual ~PhotonInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class ClusterInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    ClusterInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); }
    +    virtual ~ClusterInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class JetInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_trigger;
    +    bool m_substructure;
    +    bool m_ntrimsubjets;
    +    bool m_bosonCount;
    +    bool m_VTags;
    +    bool m_rapidity;
    +    bool m_clean;
    +    bool m_cleanLight;
    +    bool m_cleanLLP;
    +    bool m_cleanTrig;
    +    bool m_timing;
    +    bool m_energy;
    +    bool m_energyLight;
    +    bool m_scales;
    +    bool m_constscaleEta;
    +    bool m_detectorEta;
    +    bool m_resolution;
    +    bool m_truth;
    +    bool m_truthDetails;
    +    bool m_layer;
    +    bool m_trackPV;
    +    bool m_trackAll;
    +    bool m_fJvt;
    +    bool m_chargedPFOPV;
    +    bool m_jvt;
    +    bool m_NNJvt;
    +    bool m_allTrack;
    +    bool m_allTrackDetail;
    +    bool m_allTrackPVSel;
    +    bool m_constituent;
    +    bool m_constituentAll;
    +    bool m_flavorTag;
    +    bool m_flavorTagHLT;
    +    bool m_flavorTagTLA;
    +    bool m_btag_jettrk;
    +    bool m_jetFitterDetails;
    +    bool m_svDetails;
    +    bool m_ipDetails;
    +    bool m_tracksInJet;
    +    bool m_hltVtxComp;
    +    bool m_onlineBS;
    +    bool m_onlineBSTool;
    +    bool m_charge;
    +    bool m_passSel;
    +    bool m_passOR;
    +    bool m_etaPhiMap;
    +    bool m_vsLumiBlock;
    +    bool m_vsActualMu;
    +    bool m_lumiB_runN;
    +    bool m_byEta;
    +    bool m_byAverageMu;
    +    bool m_area;
    +    bool m_JVC;
    +    bool m_muonCorrection;
    +    std::string              m_trackName;
    +    std::vector<std::string> m_trackJetNames;
    +    std::string              m_sfJVTName;
    +    std::string              m_sffJVTName;
    +    std::map<std::string,std::vector<std::pair<std::string,uint>>> m_jetBTag;
    +    std::vector<std::string> m_jetBTagCts;
    +    JetInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); };
    +    virtual ~JetInfoSwitch() {}
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class TruthInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_type;
    +    bool m_bVtx;
    +    bool m_parents;
    +    bool m_children;
    +    bool m_dressed;
    +    bool m_origin;
    +    bool m_particleType;
    +    bool m_pdgIdOnly;
    +    TruthInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); };
    +  protected:
    +    void initialize();
    +  };
    +
    +  class TrackInfoSwitch : public InfoSwitch {
    +  public:
    +    bool m_noMultiplicity;
    +    bool m_kinematic;
    +    bool m_fitpars;
    +    bool m_numbers;
    +    bool m_vertex;
    +    bool m_useTheS;
    +  TrackInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); };
    +  protected:
    +    void initialize();
    +  };
    +
    +  class TauInfoSwitch : public IParticleInfoSwitch {
    +  public:
    +    bool m_trigger;
    +    bool m_JetID;
    +    bool m_EleVeto;
    +    bool m_xahTauJetMatching;
    +    bool m_trackAll;
    +    bool m_trackparams;
    +    bool m_trackhitcont;
    +    bool m_effSF;
    +
    +    std::vector< std::string > m_tauEffWPs;
    +    std::vector< std::string > m_trigWPs;
    +
    +    TauInfoSwitch(const std::string configStr) : IParticleInfoSwitch(configStr) { initialize(); };
    +    virtual ~TauInfoSwitch() { }
    +  protected:
    +    virtual void initialize();
    +  };
    +
    +  class METInfoSwitch : public InfoSwitch {
    +  public:
    +    bool m_metClus;
    +    bool m_metTrk;
    +    bool m_sigClus;
    +    bool m_sigTrk;
    +    bool m_sigResolutionClus;
    +    bool m_sigResolutionTrk;
    +    bool m_refEle;
    +    bool m_refGamma;
    +    bool m_refTau;
    +    bool m_refMuons;
    +    bool m_refJet;
    +    bool m_refJetTrk;
    +    bool m_softClus;
    +    bool m_softTrk;
    +    bool m_noExtra; // adds only what it is being asked (false by default)
    +    METInfoSwitch(const std::string configStr) : InfoSwitch(configStr) { initialize(); };
    +  protected:
    +    void initialize();
    +  };
    +
    +} // close namespace HelperClasses
    +
    +
    +# endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.html b/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.html new file mode 100644 index 0000000000..71bbb494ba --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.html @@ -0,0 +1,605 @@ + + + + + + + + + + + Program Listing for File HelperFunctions.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HelperFunctions.h

    +

    Return to documentation for file (xAODAnaHelpers/HelperFunctions.h)

    +
    #ifndef xAODAnaHelpers_HELPERFUNCTIONS_H
    +#define xAODAnaHelpers_HELPERFUNCTIONS_H
    +
    +// for typing in template
    +#include <typeinfo>
    +#include <cxxabi.h>
    +// Gaudi/Athena include(s):
    +#include "AthContainers/normalizedTypeinfoName.h"
    +
    +// local includes
    +#include "AsgMessaging/StatusCode.h"
    +#include <AsgMessaging/MessageCheck.h>
    +
    +#include <SampleHandler/SampleHandler.h>
    +
    +// jet reclustering and trimming
    +#include <fastjet/JetDefinition.hh>
    +#include "xAODJet/JetContainer.h"
    +
    +#include "xAODTracking/VertexContainer.h"
    +#include "AthContainers/ConstDataVector.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/ISystematicsTool.h"
    +
    +// ROOT includes
    +#include "TTree.h"
    +#include "TBranch.h"
    +#include "TFile.h"
    +#include "TH1D.h"
    +#include "TObjArray.h"
    +
    +// messaging includes
    +#include <AsgMessaging/MsgStream.h>
    +
    +// Functions that need to have a dictionary built. PyROOT does not
    +// seem to like the HelperFunctions namespace for some reason.
    +namespace xAH {
    +
    +  void addRucio(SH::SampleHandler& sh, const std::string& name, const std::string& dslist);
    +
    +} // close namespace xAH
    +
    +namespace HelperFunctions {
    +  MsgStream& msg( MSG::Level lvl = MSG::INFO );
    +
    +  // primary vertex
    +  bool passPrimaryVertexSelection(const xAOD::VertexContainer* vertexContainer, int Ntracks = 2);
    +  int countPrimaryVertices(const xAOD::VertexContainer* vertexContainer, int Ntracks = 2);
    +  const xAOD::Vertex* getPrimaryVertex(const xAOD::VertexContainer* vertexContainer, MsgStream& msg);
    +  inline const xAOD::Vertex* getPrimaryVertex(const xAOD::VertexContainer* vertexContainer) { return getPrimaryVertex(vertexContainer, msg()); }
    +  float getPrimaryVertexZ(const xAOD::Vertex* pvx);
    +  int getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer, MsgStream& msg);
    +  inline int getPrimaryVertexLocation(const xAOD::VertexContainer* vertexContainer){ return getPrimaryVertexLocation(vertexContainer, msg()); }
    +  bool applyPrimaryVertexSelection( const xAOD::JetContainer* jets, const xAOD::VertexContainer* vertices );
    +  std::string replaceString(std::string subjet, const std::string& search, const std::string& replace);
    +  std::vector<TString> SplitString(TString& orig, const char separator);
    +  float dPhi(float phi1, float phi2);
    +  bool has_exact(const std::string input, const std::string flag);
    +
    +  std::size_t string_pos( const std::string& haystack, const std::string& needle, unsigned int N );
    +
    +  /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\
    +  |                                                                            |
    +  |   Author  : Marco Milesi                                                   |
    +  |   Email   : marco.milesi@cern.ch                                           |
    +  |   Logic copied from:
    +    PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/trunk/Root/Tools.cxx          |
    +
    +  Function to check if file is Full xAOD
    +
    +  \*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    +
    +  StatusCode isAvailableMetaData(TTree* metaData);
    +  bool isFilePrimaryxAOD(TFile* inputFile);
    +
    +  /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\
    +  |                                                                            |
    +  |   Author  : Giordon Stark                                                  |
    +  |   Email   : gstark@cern.ch                                                 |
    +  |   Thanks to Ben Nachman for inspiration                                    |
    +  |                                                                            |
    +  |   jetReclustering():                                                       |
    +  |       Takes a set of small-R jets and reclusters to large-R jets           |
    +  |                                                                            |
    +  |       @jets                                                                |
    +  |         jet container to recluster and trim                                |
    +  |       @radius   [1.0]                                                      |
    +  |         radius of large-R jet                                              |
    +  |       @fcut     [0.05]                                                     |
    +  |         trimming cut to apply                                              |
    +  |       @rc_alg   [fastjet::kt_algorithm]                                    |
    +  |         clustering algorithm                                               |
    +  |                                                                            |
    +  |                                                                            |
    +  |   jetTrimming():                                                           |
    +  |       Takes a jet or a set of jets and applies an fcut on subjets          |
    +  |         and reclusters into a TLorentzVector                               |
    +  |                                                                            |
    +  |       @jet(s)                                                              |
    +  |         jet (container to loop over and) to apply trimming                 |
    +  |       @radius   [0.3]                                                      |
    +  |         radius of subjets to form                                          |
    +  |       @fcut     [0.05]                                                     |
    +  |         trimming cut to apply on subjets                                   |
    +  |       @s_alg    [fastjet::kt_algorithm]                                    |
    +  |         algorithm for building subjets                                     |
    +  |                                                                            |
    +  \*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    +  std::vector<TLorentzVector> jetReclustering(
    +    const xAOD::JetContainer* jets,
    +    double radius = 1.0,
    +    double fcut = 0.05,
    +    fastjet::JetAlgorithm rc_alg = fastjet::antikt_algorithm);
    +  /* http://www.lpthe.jussieu.fr/~salam/fastjet/repo/doxygen-3.0alpha2/classfastjet_1_1Filter.html#usage */
    +  std::vector<TLorentzVector> jetTrimming(
    +    const xAOD::JetContainer* jets,
    +    double radius = 0.3,
    +    double fcut = 0.05,
    +    fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm);
    +  TLorentzVector jetTrimming(
    +    const xAOD::Jet* jet,
    +    double radius = 0.3,
    +    double fcut = 0.05,
    +    fastjet::JetAlgorithm s_alg = fastjet::kt_algorithm);
    +
    +
    +
    +  // miscellaneous
    +  bool sort_pt(const xAOD::IParticle* partA, const xAOD::IParticle* partB);
    +
    +  std::vector< CP::SystematicSet > getListofSystematics( const CP::SystematicSet inSysts, std::string systNames, float systVal, MsgStream& msg );
    +
    +  void writeSystematicsListHist( const std::vector< CP::SystematicSet > &systs, std::string histName, TFile *file );
    +
    +  /*    type_name<T>()      The awesome type demangler!
    +          - normally, typeid(T).name() is gibberish with gcc. This decodes it. Fucking magic man.
    +
    +          @ useXAOD [true]  If set to false, will use the standard demangling
    +                            tool. Otherwise, use built-in StoreGate tool
    +
    +        Example Usage:
    +        template <typename T>
    +        void echoType(){
    +          std::cout << "This is type " << HelperFunctions::type_name<T>() << std::endl;
    +        }
    +  */
    +  template <typename T>
    +  std::string type_name(bool useXAOD=true) {
    +    if(useXAOD) return SG::normalizedTypeinfoName( typeid(T) );
    +
    +    int status;
    +    std::string tname = typeid(T).name();
    +    char *demangled_name = abi::__cxa_demangle(tname.c_str(), NULL, NULL, &status);
    +    if(status == 0) {
    +        tname = demangled_name;
    +        std::free(demangled_name);
    +    }
    +    return tname;
    +  }
    +
    +  template< typename T1, typename T2 >
    +  StatusCode makeSubsetCont( T1*& intCont, T2*& outCont, MsgStream& msg, const std::string& flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT){
    +     std::string funcName{"in makeSubsetCont<"+type_name<T1>()+","+type_name<T2>()+">(): "};
    +
    +     if ( tool_name == HelperClasses::ToolName::DEFAULT ) {
    +
    +       for ( auto in_itr : *(intCont) ) { outCont->push_back( in_itr ); }
    +       return StatusCode::SUCCESS;
    +
    +     }
    +
    +     if ( flagSelect.empty() ) {
    +       msg << MSG::ERROR << funcName << "flagSelect is an empty string, and passing a non-DEFAULT tool (presumably a SELECTOR). Please pass a non-empty flagSelect!" << endmsg;
    +       return StatusCode::FAILURE;
    +     }
    +
    +     SG::AuxElement::ConstAccessor<char> myAccessor(flagSelect);
    +
    +     for ( auto in_itr : *(intCont) ) {
    +
    +       if ( !myAccessor.isAvailable(*(in_itr)) ) {
    +         std::stringstream ss; ss << in_itr->type();
    +         msg << MSG::ERROR << funcName << "flag " << flagSelect << " is missing for object of type " << ss.str() << " ! Will not make a subset of its container" << endmsg;
    +         return StatusCode::FAILURE;
    +       }
    +
    +         if ( myAccessor(*(in_itr)) ) { outCont->push_back( in_itr ); }
    +
    +     }
    +
    +     return StatusCode::SUCCESS;
    +
    +   }
    +  template< typename T1, typename T2 >
    +  StatusCode makeSubsetCont( T1*& intCont, T2*& outCont, const std::string& flagSelect = "", HelperClasses::ToolName tool_name = HelperClasses::ToolName::DEFAULT) { return makeSubsetCont<T1, T2>(intCont, outCont, msg(), flagSelect, tool_name); }
    +
    +  template <typename T>
    +  StatusCode retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store, MsgStream& msg){
    +    std::string funcName{"in retrieve<"+type_name<T>()+">(" + name + "): "};
    +    if((event == NULL) && (store == NULL)){
    +      msg << MSG::ERROR << funcName << "Both TEvent and TStore objects are null. Cannot retrieve anything." << endmsg;
    +      return StatusCode::FAILURE;
    +    }
    +    msg << MSG::DEBUG << funcName << "\tAttempting to retrieve " << name << " of type " << type_name<T>() << endmsg;
    +    if((event != NULL) && (store == NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TEvent" << endmsg;
    +    if((event == NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore" << endmsg;
    +    if((event != NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore, xAOD::TEvent" << endmsg;
    +    if((store != NULL) && (store->contains<T>(name))){
    +      msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TStore" << endmsg;
    +      if(!store->retrieve( cont, name ).isSuccess()) return StatusCode::FAILURE;
    +      msg << MSG::DEBUG << funcName << "\t\t\tRetrieved from xAOD::TStore" << endmsg;
    +    } else if((event != NULL) && (event->contains<T>(name))){
    +      msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TEvent" << endmsg;
    +      if(!event->retrieve( cont, name ).isSuccess()) return StatusCode::FAILURE;
    +      msg << MSG::DEBUG << funcName << "\t\t\tRetrieved from xAOD::TEvent" << endmsg;
    +    } else {
    +      msg << MSG::DEBUG << funcName << "\t\tNot found at all" << endmsg;
    +      return StatusCode::FAILURE;
    +    }
    +    return StatusCode::SUCCESS;
    +  }
    +  /* retrieve() overload for no msgStream object passed in */
    +  template <typename T>
    +  StatusCode retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store) { return retrieve<T>(cont, name, event, store, msg()); }
    +  template <typename T>
    +  StatusCode __attribute__((deprecated("retrieve<T>(..., bool) is deprecated. See https://github.com/UCATLAS/xAODAnaHelpers/pull/882"))) retrieve(T*& cont, std::string name, xAOD::TEvent* event, xAOD::TStore* store, bool debug) { return retrieve<T>(cont, name, event, store, msg()); }
    +
    +  template <typename T>
    +  bool isAvailable(std::string name, xAOD::TEvent* event, xAOD::TStore* store, MsgStream& msg){
    +    /* Checking Order:
    +        - check if store contains 'xAOD::JetContainer' named 'name'
    +        --- checkstore store
    +        - check if event contains 'xAOD::JetContainer' named 'name'
    +        --- checkstore event
    +    */
    +    std::string funcName{"in isAvailable<"+type_name<T>()+">(" + name + "): "};
    +    msg << MSG::DEBUG << funcName << "\tAttempting to retrieve " << name << " of type " << type_name<T>() << endmsg;
    +    if(store == NULL)                      msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TEvent" << endmsg;
    +    if(event == NULL)                      msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore" << endmsg;
    +    if((event != NULL) && (store != NULL)) msg << MSG::DEBUG << funcName << "\t\tLooking inside: xAOD::TStore, xAOD::TEvent" << endmsg;
    +    if((store != NULL) && (store->contains<T>(name))){
    +      msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TStore" << endmsg;;
    +      return true;
    +    } else if((event != NULL) && (event->contains<T>(name))){
    +      msg << MSG::DEBUG << funcName << "\t\t\tFound inside xAOD::TEvent" << endmsg;
    +      return true;
    +    } else {
    +      msg << MSG::DEBUG << funcName << "\t\tNot found at all" << endmsg;
    +      return false;
    +    }
    +    return false;
    +  }
    +  /* isAvailable() overload for no msgStream object passed in */
    +  template <typename T>
    +  bool isAvailable(std::string name, xAOD::TEvent* event, xAOD::TStore* store) { return isAvailable<T>(name, event, store, msg()); }
    +
    +  // stolen from here
    +  // https://svnweb.cern.ch/trac/atlasoff/browser/Event/xAOD/xAODEgamma/trunk/xAODEgamma/EgammaTruthxAODHelpers.h#L20
    +  // util becomes a general xAOD tool
    +  template<class T>
    +    const T* getLink(const xAOD::IParticle* particle, std::string name){
    +      if (!particle) return 0;
    +      typedef ElementLink< DataVector<T> > Link_t;
    +
    +      if (!particle->isAvailable< Link_t >(name) ) {
    +        return 0;
    +      }
    +      const Link_t link = particle->auxdata<Link_t>(name);
    +      if (!link.isValid()) {
    +        return 0;
    +      }
    +      return *link;
    +    }
    +
    +  //
    +  // For Sorting
    +  //
    +  struct pt_sort
    +  {
    +
    +    inline bool operator() (const TLorentzVector& lhs, const TLorentzVector& rhs)
    +    {
    +      return (lhs.Pt() > rhs.Pt());
    +    }
    +
    +    inline bool operator() (const TLorentzVector* lhs, const TLorentzVector* rhs)
    +    {
    +      return (lhs->Pt() > rhs->Pt());
    +    }
    +
    +    inline bool operator() (const xAOD::IParticle& lhs, const xAOD::IParticle& rhs)
    +    {
    +      return (lhs.pt() > rhs.pt());
    +    }
    +
    +    inline bool operator() (const xAOD::IParticle* lhs, const xAOD::IParticle* rhs)
    +    {
    +      return (lhs->pt() > rhs->pt());
    +    }
    +  };
    +
    +
    +  template<typename T>
    +    T sort_container_pt(T* inCont){
    +    T sortedCont(SG::VIEW_ELEMENTS);
    +    for(auto el : *inCont) sortedCont.push_back( el );
    +    std::sort(sortedCont.begin(), sortedCont.end(), pt_sort());
    +    return sortedCont;
    +  }
    +
    +  template<typename T>
    +    const T sort_container_pt(const T* inCont){
    +    ConstDataVector<T> sortedCont(SG::VIEW_ELEMENTS);
    +
    +    for(auto el : *inCont) sortedCont.push_back( el );
    +    std::sort(sortedCont.begin(), sortedCont.end(), pt_sort());
    +    return *sortedCont.asDataVector();
    +  }
    +
    +  /* return true if there's a least one non-empty string (i.e., syst name) in input list */
    +  inline bool found_non_dummy_sys(std::vector<std::string>* sys_list) {
    +    if ( sys_list ) {
    +      for ( auto sys : *sys_list ) {
    +    if ( !sys.empty() ) { return true; }
    +      }
    +    }
    +    return false;
    +  }
    +
    +  template <typename T1, typename T2, typename T3>
    +  StatusCode makeDeepCopy(xAOD::TStore* m_store, std::string containerName, const T1* cont){
    +    T1* cont_new = new T1;
    +    T2* auxcont_new = new T2;
    +    cont_new->setStore(auxcont_new);
    +
    +    if(!m_store->record(cont_new, containerName).isSuccess()){
    +      std::cout << "can't record " << containerName << std::endl;
    +      return StatusCode::FAILURE;
    +    }
    +    if(!m_store->record(auxcont_new, containerName+"Aux.").isSuccess()){
    +      std::cout << "can't record aux" << containerName << std::endl;
    +      return StatusCode::FAILURE;
    +    }
    +
    +    for(const auto p: *cont){
    +      T3* p_new = new T3;
    +      cont_new->push_back(p_new);
    +      *p_new = *p;
    +    }
    +    return StatusCode::SUCCESS;
    +  }
    +
    +  template <typename T1, typename T2>
    +  StatusCode recordOutput(xAOD::TEvent* m_event, xAOD::TStore* m_store, std::string containerName){
    +    T1* cont(nullptr);
    +    T2* auxcont(nullptr);
    +
    +    if(!m_store->retrieve(cont, containerName).isSuccess()) return StatusCode::FAILURE;
    +    if(!m_store->retrieve(auxcont, containerName+"Aux.").isSuccess()) return StatusCode::FAILURE;
    +
    +    if(!m_event->record(cont, containerName).isSuccess()) return StatusCode::FAILURE;
    +    if(!m_event->record(auxcont, containerName+"Aux.").isSuccess()) return StatusCode::FAILURE;
    +    return StatusCode::SUCCESS;
    +  }
    +
    +  template <typename T_BR> void connectBranch(std::string name, TTree *tree, const std::string& branch, std::vector<T_BR> **variable)
    +    {
    +      tree->SetBranchStatus  ((name+"_"+branch).c_str()  , 1);
    +      tree->SetBranchAddress ((name+"_"+branch).c_str()  , variable);
    +    }
    +
    +  // function to remove duplicates from a vector. Thank you, oh internet!
    +  // http://stackoverflow.com/questions/9237216/removing-duplicates-in-a-vector-of-strings
    +  template <typename T>
    +  void remove_duplicates(std::vector<T>& vec)
    +  {
    +    std::sort(vec.begin(), vec.end());
    +    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
    +  }
    +
    +  enum ShowerType {Unknown, Pythia8, Herwig7p1, Herwig7p2, Sherpa221, Sherpa2210, Sherpa2212, AmcPy8, AmcH7, Pythia8_517, Sherpa2214, Sherpa_Unknown};
    +
    +  ShowerType getMCShowerType(const std::string& sample_name, const std::string& m_taggerName);
    +
    +
    +} // close namespace HelperFunctions
    +
    +# endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.html b/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.html new file mode 100644 index 0000000000..2b19158cf2 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_HistogramManager.h.html @@ -0,0 +1,319 @@ + + + + + + + + + + + Program Listing for File HistogramManager.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File HistogramManager.h

    +

    Return to documentation for file (xAODAnaHelpers/HistogramManager.h)

    +
    #ifndef xAODAnaHelpers_HistogramManager_H
    +#define xAODAnaHelpers_HistogramManager_H
    +
    +#include <ctype.h>
    +#include <TH1.h>
    +#include <TH1F.h>
    +#include <TH2F.h>
    +#include <TH3F.h>
    +#include <TProfile.h>
    +#include <EventLoop/IWorker.h>
    +#include <xAODRootAccess/TEvent.h>
    +
    +// for StatusCode::isSuccess
    +#include <AsgMessaging/StatusCode.h>
    +#include <AsgMessaging/MessageCheck.h>
    +
    +class MsgStream;
    +
    +class HistogramManager {
    +
    +  protected:
    +    std::string m_name;
    +    std::string m_detailStr;
    +    std::vector< TH1* > m_allHists;
    +    mutable MsgStream m_msg;
    +
    +  public:
    +    HistogramManager(std::string name, std::string detailStr);
    +    virtual ~HistogramManager();
    +
    +    virtual StatusCode initialize(){      return StatusCode::SUCCESS; };
    +    virtual StatusCode execute(){         return StatusCode::SUCCESS; };
    +    virtual StatusCode finalize(){        return StatusCode::SUCCESS; };
    +
    +    TH1F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, double xlow, double xhigh);
    +
    +    TH2F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, double xlow, double xhigh,
    +               std::string xyabel, int ybins, double ylow, double yhigh);
    +
    +    TH3F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, double xlow, double xhigh,
    +               std::string ylabel, int ybins, double ylow, double yhigh,
    +               std::string zlabel, int zbins, double zlow, double zhigh);
    +
    +    TH1F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, const Double_t* xbinsArr);
    +
    +    TH2F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, const Double_t* xbinsArr,
    +               std::string ylabel, int ybins, double ylow, double yhigh);
    +
    +    TH2F* book(std::string name, std::string title,
    +               std::string xyabel, int xbins, double xlow, double xhigh,
    +               std::string ylabel, int ybins, const Double_t* ybinsArr);
    +
    +    TH2F* book(std::string name, std::string title,
    +               std::string xyabel, int xbins, const Double_t* xbinsArr,
    +               std::string ylabel, int ybins, const Double_t* ybinsArr);
    +
    +    TH3F* book(std::string name, std::string title,
    +               std::string xlabel, int xbins, const Double_t* xbinsArr,
    +               std::string ylabel, int ybins, const Double_t* ybinsArr,
    +               std::string zlabel, int zbins, const Double_t* zbinsArr);
    +
    +    TProfile* book(std::string name, std::string title,
    +           std::string xlabel, int xbins, double xlow, double xhigh,
    +           std::string ylabel, double ylow, double yhigh,
    +           std::string option = "");
    +
    +    TProfile* book(std::string name, std::string title,
    +           int xbins, const Double_t* xbinsArr, double ylow, double yhigh);
    +
    +    TProfile* book(std::string name, std::string title,
    +           int xbins, double xlow, double xhigh,
    +       double ylow, double yhigh);
    +
    +    void record(EL::IWorker* wk);
    +
    +    MsgStream& msg () const;
    +    MsgStream& msg (int level) const;
    +
    +    typedef std::unordered_map< std::string, TH1* > HistMap_t;
    +
    +    HistMap_t m_histMap;
    +
    +    TH1* findHist(const std::string& histName);
    +
    +    void fillHist(const std::string& histName, double value);
    +    void fillHist(const std::string& histName, double value, double weight);
    +    void fillHist(const std::string& histName, double valueX, double valueY, double weight);
    +    void fillHist(const std::string& histName, double valueX, double valueY, double valueZ, double weight);
    +    void fillProfile(const std::string& histName, double valueX, double valueY, double weight);
    +
    +  private:
    +    void Sumw2(TH1* hist, bool flag=true);
    +
    +    void record(TH1* hist);
    +
    +    void SetLabel(TH1* hist, std::string xlabel);
    +    void SetLabel(TH1* hist, std::string xlabel, std::string ylabel);
    +    void SetLabel(TH1* hist, std::string xlabel, std::string ylabel, std::string zlabel);
    +
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.html b/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.html new file mode 100644 index 0000000000..30b415066d --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_IParticleHists.h.html @@ -0,0 +1,329 @@ + + + + + + + + + + + Program Listing for File IParticleHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IParticleHists.h

    +

    Return to documentation for file (xAODAnaHelpers/IParticleHists.h)

    +
    #ifndef xAODAnaHelpers_IParticleHists_H
    +#define xAODAnaHelpers_IParticleHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/ParticleContainer.h"
    +
    +#include <xAODAnaHelpers/Jet.h>
    +#include <xAODAnaHelpers/EventInfo.h>
    +#include <xAODBase/IParticleContainer.h>
    +#include <AsgMessaging/MessageCheck.h>
    +
    +ANA_MSG_HEADER(msgIParticleHists)
    +
    +class IParticleHists : public HistogramManager
    +{
    +  public:
    +
    +    IParticleHists(std::string name, std::string detailStr, std::string prefix="", std::string title="");
    +    virtual ~IParticleHists() ;
    +
    +    bool m_debug;
    +    virtual StatusCode initialize();
    +    StatusCode execute( const xAOD::IParticleContainer* particles, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +
    +    template <class T_PARTICLE, class T_INFOSWITCH>
    +      StatusCode execute( const xAH::ParticleContainer<T_PARTICLE, T_INFOSWITCH>* particles, float eventWeight, const xAH::EventInfo* eventInfo = 0);
    +
    +    //StatusCode execute( const xAH::ParticleContainer* particles, float eventWeight, const xAH::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAH::Particle* particle, float eventWeight, const xAH::EventInfo* eventInfo = 0);
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +
    +  protected:
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::IParticleInfoSwitch* m_infoSwitch;
    +
    +  private:
    +    std::string m_prefix;
    +    std::string m_title;
    +
    +    //basic
    +    TH1F* m_Pt_l;
    +    TH1F* m_Pt;
    +    TH1F* m_Pt_m;
    +    TH1F* m_Pt_s;
    +    TH1F* m_Eta;
    +    TH1F* m_Phi;
    +    TH1F* m_M;
    +    TH1F* m_E;
    +    TH1F* m_Rapidity;
    +
    +    // kinematic
    +    TH1F* m_Px;
    +    TH1F* m_Py;
    +    TH1F* m_Pz;
    +    TH1F* m_Et;
    +    TH1F* m_Et_m;
    +    TH1F* m_Et_s;
    +
    +    //NLeadingParticles
    +    std::vector< TH1F* > m_NPt_l;
    +    std::vector< TH1F* > m_NPt;
    +    std::vector< TH1F* > m_NPt_m;
    +    std::vector< TH1F* > m_NPt_s;
    +    std::vector< TH1F* > m_NEta;
    +    std::vector< TH1F* > m_NPhi;
    +    std::vector< TH1F* > m_NM;
    +    std::vector< TH1F* > m_NE;
    +    std::vector< TH1F* > m_NRapidity;
    +
    +    // kinematic
    +    std::vector< TH1F* > m_NEt;
    +    std::vector< TH1F* > m_NEt_m;
    +    std::vector< TH1F* > m_NEt_s;
    +};
    +
    +
    +template <class T_PARTICLE, class T_INFOSWITCH>
    +StatusCode IParticleHists::execute( const xAH::ParticleContainer<T_PARTICLE, T_INFOSWITCH>* particles, float eventWeight, const xAH::EventInfo* eventInfo) {
    +  using namespace msgIParticleHists;
    +  unsigned int nPart = particles->size();
    +  for(unsigned int i = 0;  i<nPart; ++i){
    +    ANA_CHECK( this->execute( static_cast<const xAH::Particle*>(&particles->at(i)), eventWeight, eventInfo) );
    +
    +  }
    +
    +  if( m_infoSwitch->m_numLeading > 0){
    +    int numParticles = std::min( m_infoSwitch->m_numLeading, (int)particles->size() );
    +    for(int iParticle=0; iParticle < numParticles; ++iParticle){
    +      const TLorentzVector& partP4 = particles->at(iParticle).p4;
    +
    +      m_NPt_l.at(iParticle)->        Fill( partP4.Pt(),   eventWeight);
    +      m_NPt.at(iParticle)->        Fill( partP4.Pt(),   eventWeight);
    +      m_NPt_m.at(iParticle)->        Fill( partP4.Pt(),   eventWeight);
    +      m_NPt_s.at(iParticle)->        Fill( partP4.Pt(),   eventWeight);
    +      m_NEta.at(iParticle)->       Fill( partP4.Eta(),      eventWeight);
    +      m_NPhi.at(iParticle)->       Fill( partP4.Phi(),      eventWeight);
    +      m_NM.at(iParticle)->         Fill( partP4.M(),    eventWeight);
    +      m_NE.at(iParticle)->         Fill( partP4.E(),    eventWeight);
    +      m_NRapidity.at(iParticle)->  Fill( partP4.Rapidity(), eventWeight);
    +
    +      if(m_infoSwitch->m_kinematic){
    +         m_NEt  .at(iParticle)->        Fill( partP4.Et(),   eventWeight);
    +         m_NEt_m.at(iParticle)->        Fill( partP4.Et(),   eventWeight);
    +         m_NEt_s.at(iParticle)->        Fill( partP4.Et(),   eventWeight);
    +      }
    +
    +    }
    +  }
    +
    +  return StatusCode::SUCCESS;
    +}
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.html new file mode 100644 index 0000000000..67a51893be --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.html @@ -0,0 +1,327 @@ + + + + + + + + + + + Program Listing for File IParticleHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IParticleHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/IParticleHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_IParticleHistsAlgo_H
    +#define xAODAnaHelpers_IParticleHistsAlgo_H
    +
    +#include <SampleHandler/MetaObject.h>
    +#include <SampleHandler/MetaFields.h>
    +
    +// algorithm wrapper
    +#include <xAODAnaHelpers/Algorithm.h>
    +#include <xAODAnaHelpers/IParticleHists.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +class IParticleHistsAlgo : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  std::string m_inContainerName = "";
    +  std::string m_detailStr = "";
    +  std::string m_inputAlgo = "";
    +  std::string m_histPrefix;
    +  std::string m_histTitle;
    +
    +private:
    +  std::map< std::string, IParticleHists* > m_plots;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  IParticleHistsAlgo (std::string className = "IParticleHistsAlgo");
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  template<class HIST_T, class CONT_T> EL::StatusCode execute ()
    +  {
    +    static SG::AuxElement::Accessor< float > mcEvtWeightAcc("mcEventWeight");
    +
    +    const xAOD::EventInfo* eventInfo(nullptr);
    +    ANA_CHECK( HelperFunctions::retrieve(eventInfo, m_eventInfoContainerName, m_event, m_store, msg()) );
    +
    +    float eventWeight(1);
    +    if ( mcEvtWeightAcc.isAvailable( *eventInfo ) ) {
    +      eventWeight = mcEvtWeightAcc( *eventInfo );
    +    }
    +    // if(isMC())
    +    //   {
    +    //  double xs     =wk()->metaData()->castDouble(SH::MetaFields::crossSection    ,1);
    +    //  double eff    =wk()->metaData()->castDouble(SH::MetaFields::filterEfficiency,1);
    +    //  double kfac   =wk()->metaData()->castDouble(SH::MetaFields::kfactor         ,1);
    +    //  eventWeight *= xs * eff * kfac;
    +    //   }
    +
    +    // this will hold the collection processed
    +    const CONT_T* inParticles = 0;
    +
    +    // if input comes from xAOD, or just running one collection,
    +    // then get the one collection and be done with it
    +    if( m_inputAlgo.empty() ) {
    +      ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName, m_event, m_store, msg()) );
    +
    +      // pass the photon collection
    +      ANA_CHECK( static_cast<HIST_T*>(m_plots[""])->execute( inParticles, eventWeight, eventInfo ));
    +    }
    +    else { // get the list of systematics to run over
    +
    +      // get vector of string giving the names
    +      std::vector<std::string>* systNames(nullptr);
    +      ANA_CHECK( HelperFunctions::retrieve(systNames, m_inputAlgo, 0, m_store, msg()) );
    +
    +      // loop over systematics
    +      for( auto systName : *systNames ) {
    +    ANA_CHECK( HelperFunctions::retrieve(inParticles, m_inContainerName+systName, m_event, m_store, msg()) );
    +    if( m_plots.find( systName ) == m_plots.end() ) { this->AddHists( systName ); }
    +    ANA_CHECK( static_cast<HIST_T*>(m_plots[systName])->execute( inParticles, eventWeight, eventInfo ));
    +      }
    +    }
    +
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode AddHists( std::string name);
    +
    +  template<class HIST_T> EL::StatusCode AddHists( std::string name ) {
    +    std::string fullname(m_name);
    +    fullname += name; // add systematic
    +    HIST_T* particleHists = new HIST_T( fullname, m_detailStr ); // add systematic
    +    particleHists->m_debug = msgLvl(MSG::DEBUG);
    +    ANA_CHECK( particleHists->initialize());
    +    particleHists->record( wk() );
    +    m_plots[name] = particleHists;
    +
    +    return EL::StatusCode::SUCCESS;
    +  }
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(IParticleHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.html b/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.html new file mode 100644 index 0000000000..d3dca9fae3 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.html @@ -0,0 +1,300 @@ + + + + + + + + + + + Program Listing for File IsoCloseByCorr.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File IsoCloseByCorr.h

    +

    Return to documentation for file (xAODAnaHelpers/IsoCloseByCorr.h)

    +
    #ifndef XAODANAHELPERS_ISOCLOSEBYCORR_H
    +#define XAODANAHELPERS_ISOCLOSEBYCORR_H
    +
    +// EDM include(s):
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODTau/TauJetContainer.h"
    +
    +// external tools include(s):
    +#include "AssociationUtils/OverlapRemovalInit.h"
    +#include "AssociationUtils/OverlapRemovalTool.h"
    +#include "AssociationUtils/ToolBox.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +#include "IsolationSelection/IsolationSelectionTool.h"
    +#include "IsolationSelection/IsolationCloseByCorrectionTool.h"
    +#include "InDetTrackSelectionTool/InDetTrackSelectionTool.h"
    +
    +class IsoCloseByCorr : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +
    +  bool     m_decorateSelectedObjects;
    +  std::string m_decor = "passOR";
    +
    +  // Electrons
    +  std::string  m_inContainerName_Electrons = "";
    +  std::string  m_inputAlgoElectrons = "";
    +  std::string  m_el_iso_WP = "";
    +  // Muons
    +  std::string  m_inContainerName_Muons = "";
    +  std::string  m_outContainerName_Muons = "";
    +  std::string  m_mu_iso_WP = "";
    +  // Photons
    +  bool m_doPhotons = false;
    +  std::string  m_inContainerName_Photons = "";
    +  std::string  m_outContainerName_Photons = "";
    +
    +protected:
    +  int dummyVaraibleToKeepExample;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +private:
    +  asg::AnaToolHandle<CP::IsolationSelectionTool> m_IsoSelCloseBy_tool;
    +  std::string m_IsoSelToolCloseBy_name;
    +
    +  asg::AnaToolHandle<CP::IsolationCloseByCorrectionTool> m_IsoCloseByCorr_tool;
    +  std::string m_IsoCloseByCorr_tool_name;
    +
    +  asg::AnaToolHandle<InDet::InDetTrackSelectionTool> m_trackSelection_tool;
    +  std::string m_trackSelectionTool_name;
    +
    +public:
    +
    +  // this is a standard constructor
    +  IsoCloseByCorr ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(IsoCloseByCorr, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Jet.h.html b/api/program_listing_file_xAODAnaHelpers_Jet.h.html new file mode 100644 index 0000000000..b287a4a410 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Jet.h.html @@ -0,0 +1,540 @@ + + + + + + + + + + + Program Listing for File Jet.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Jet.h

    +

    Return to documentation for file (xAODAnaHelpers/Jet.h)

    +
    #ifndef xAODAnaHelpers_Jet_H
    +#define xAODAnaHelpers_Jet_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +#include "xAODAnaHelpers/MuonContainer.h"
    +
    +
    +namespace xAH {
    +
    +  class Jet : public Particle
    +    {
    +    public:
    +      enum BTaggerOP {
    +    None,
    +    DL1r_FixedCutBEff_60  , DL1r_FixedCutBEff_70  , DL1r_FixedCutBEff_77  , DL1r_FixedCutBEff_85  ,
    +    DL1dv00_FixedCutBEff_60  , DL1dv00_FixedCutBEff_70  , DL1dv00_FixedCutBEff_77  , DL1dv00_FixedCutBEff_85  ,
    +    DL1dv01_FixedCutBEff_60  , DL1dv01_FixedCutBEff_70  , DL1dv01_FixedCutBEff_77  , DL1dv01_FixedCutBEff_85  ,
    +    GN120220509_FixedCutBEff_60  , GN120220509_FixedCutBEff_70  , GN120220509_FixedCutBEff_77  , GN120220509_FixedCutBEff_85  ,
    +    DL1dv00_Continuous, DL1r_Continuous, DL1dv01_Continuous, GN120220509_Continuous , // Continuous
    +  GN2v00LegacyWP_FixedCutBEff_60  , GN2v00LegacyWP_FixedCutBEff_70  , GN2v00LegacyWP_FixedCutBEff_77  , GN2v00LegacyWP_FixedCutBEff_85  ,
    +  GN2v00NewAliasWP_FixedCutBEff_60  , GN2v00NewAliasWP_FixedCutBEff_70  , GN2v00NewAliasWP_FixedCutBEff_77  , GN2v00NewAliasWP_FixedCutBEff_85  ,
    +  GN2v01_FixedCutBEff_65  , GN2v01_FixedCutBEff_70  , GN2v01_FixedCutBEff_77  , GN2v01_FixedCutBEff_85  , GN2v01_FixedCutBEff_90  ,
    +    GN2v01_Continuous , // Continuous
    +      };
    +
    +      float rapidity;
    +
    +      // trigger
    +      int               isTrigMatched;
    +      std::vector<int>  isTrigMatchedToChain;
    +      std::string       listTrigChains;
    +
    +      // clean
    +      float Timing;
    +      float LArQuality;
    +      float HECQuality;
    +      float NegativeE;
    +      float AverageLArQF;
    +      float BchCorrCell;
    +      float N90Constituents;
    +      float LArBadHVEFrac;
    +      int   LArBadHVNCell;
    +      float ChargedFraction;
    +      float OotFracClusters5;
    +      float OotFracClusters10;
    +      float LeadingClusterPt;
    +      float LeadingClusterSecondLambda;
    +      float LeadingClusterCenterLambda;
    +      float LeadingClusterSecondR;
    +      int   clean_passLooseBad;
    +      int   clean_passLooseBadLLP;
    +      int   clean_passLooseBadTrigger;
    +      int   clean_passLooseBadTriggerUgly;
    +      int   clean_passLooseBadUgly;
    +      int   clean_passTightBad;
    +      int   clean_passTightBadUgly;
    +
    +      // energy
    +      float HECFrac;
    +      float EMFrac;
    +      float CentroidR;
    +      float FracSamplingMax;
    +      float FracSamplingMaxIndex;
    +      float LowEtConstituentsFrac;
    +      float GhostMuonSegmentCount;
    +      float Width;
    +
    +      // trackPV
    +      float NumTrkPt1000PV;
    +      float SumPtTrkPt1000PV;
    +      float TrackWidthPt1000PV;
    +      float NumTrkPt500PV;
    +      float SumPtTrkPt500PV;
    +      float TrackWidthPt500PV;
    +      float JVFPV;
    +
    +      // trackAll or trackPV
    +      float Jvt;
    +      float JvtJvfcorr;
    +      float JvtRpt;
    +
    +      // chargedPFOPV
    +      float SumPtChargedPFOPt500PV;
    +      float fCharged;
    +
    +      //JVC
    +      float JVC;
    +
    +      // flavTag
    +      float SV0;
    +      float SV1;
    +      float IP3D;
    +      float SV1IP3D;
    +      float COMBx;
    +      float DL1r;
    +      float DL1r_pu;
    +      float DL1r_pc;
    +      float DL1r_pb;
    +      float DL1dv00;
    +      float DL1dv00_pu;
    +      float DL1dv00_pc;
    +      float DL1dv00_pb;
    +      float DL1dv01;
    +      float DL1dv01_pu;
    +      float DL1dv01_pc;
    +      float DL1dv01_pb;
    +      float fastDIPS;
    +      float fastDIPS_pu;
    +      float fastDIPS_pc;
    +      float fastDIPS_pb;
    +      float GN1;
    +      float GN1_pu;
    +      float GN1_pc;
    +      float GN1_pb;
    +      float GN2v00LegacyWP;
    +      float GN2v00LegacyWP_pu;
    +      float GN2v00LegacyWP_pc;
    +      float GN2v00LegacyWP_pb;
    +      float GN2v00NewAliasWP;
    +      float GN2v00NewAliasWP_pu;
    +      float GN2v00NewAliasWP_pc;
    +      float GN2v00NewAliasWP_pb;
    +      float GN2v01;
    +      float GN2v01_pu;
    +      float GN2v01_pc;
    +      float GN2v01_pb;
    +      float GN2v01_ptau;
    +      int  HadronConeExclTruthLabelID;
    +      int  HadronConeExclExtendedTruthLabelID;
    +
    +      float vtxOnlineValid;
    +      float vtxHadDummy;
    +
    +      float bs_online_vx;
    +      float bs_online_vy;
    +      float bs_online_vz;
    +
    +      float vtx_offline_x0;
    +      float vtx_offline_y0;
    +      float vtx_offline_z0;
    +
    +      float vtx_online_x0;
    +      float vtx_online_y0;
    +      float vtx_online_z0;
    +
    +      float vtx_online_bkg_x0;
    +      float vtx_online_bkg_y0;
    +      float vtx_online_bkg_z0;
    +
    +      float JetFitter_nVTX           ;
    +      float JetFitter_nSingleTracks  ;
    +      float JetFitter_nTracksAtVtx   ;
    +      float JetFitter_mass           ;
    +      float JetFitter_energyFraction ;
    +      float JetFitter_significance3d ;
    +      float JetFitter_deltaeta       ;
    +      float JetFitter_deltaphi       ;
    +      float JetFitter_N2Tpar         ;
    +
    +      float sv0_NGTinSvx  ;
    +      float sv0_N2Tpair   ;
    +      float sv0_massvx    ;
    +      float sv0_efracsvx  ;
    +      float sv0_normdist  ;
    +      float sv1_pu        ;
    +      float sv1_pb        ;
    +      float sv1_pc        ;
    +      float sv1_c         ;
    +      float sv1_cu        ;
    +      float sv1_NGTinSvx  ;
    +      float sv1_N2Tpair   ;
    +      float sv1_massvx    ;
    +      float sv1_efracsvx  ;
    +      float sv1_normdist  ;
    +      float sv1_Lxy       ;
    +      float sv1_sig3d     ;
    +      float sv1_L3d       ;
    +      float sv1_distmatlay;
    +      float sv1_dR        ;
    +
    +      float IP2D_pu     ;
    +      float IP2D_pb     ;
    +      float IP2D_pc     ;
    +      float IP2D        ;
    +      float IP2D_c      ;
    +      float IP2D_cu     ;
    +      float nIP2DTracks ;
    +
    +      std::vector<float> IP2D_gradeOfTracks         ;
    +      std::vector<float> IP2D_flagFromV0ofTracks    ;
    +      std::vector<float> IP2D_valD0wrtPVofTracks    ;
    +      std::vector<float> IP2D_sigD0wrtPVofTracks    ;
    +      std::vector<float> IP2D_weightBofTracks       ;
    +      std::vector<float> IP2D_weightCofTracks       ;
    +      std::vector<float> IP2D_weightUofTracks       ;
    +
    +      float IP3D_pu     ;
    +      float IP3D_pb     ;
    +      float IP3D_pc     ;
    +      float IP3D_c      ;
    +      float IP3D_cu     ;
    +      float nIP3DTracks ;
    +
    +      std::vector<float> IP3D_gradeOfTracks      ;
    +      std::vector<float> IP3D_flagFromV0ofTracks ;
    +      std::vector<float> IP3D_valD0wrtPVofTracks ;
    +      std::vector<float> IP3D_sigD0wrtPVofTracks ;
    +      std::vector<float> IP3D_valZ0wrtPVofTracks ;
    +      std::vector<float> IP3D_sigZ0wrtPVofTracks ;
    +      std::vector<float> IP3D_weightBofTracks    ;
    +      std::vector<float> IP3D_weightCofTracks    ;
    +      std::vector<float> IP3D_weightUofTracks    ;
    +
    +      // jetBTag
    +
    +      int is_DL1r_FixedCutBEff_60;
    +      std::vector<float> SF_DL1r_FixedCutBEff_60;
    +      int is_DL1r_FixedCutBEff_70;
    +      std::vector<float> SF_DL1r_FixedCutBEff_70;
    +      int is_DL1r_FixedCutBEff_77;
    +      std::vector<float> SF_DL1r_FixedCutBEff_77;
    +      int is_DL1r_FixedCutBEff_85;
    +      std::vector<float> SF_DL1r_FixedCutBEff_85;
    +      int is_DL1dv00_FixedCutBEff_60;
    +      std::vector<float> SF_DL1dv00_FixedCutBEff_60;
    +      int is_DL1dv00_FixedCutBEff_70;
    +      std::vector<float> SF_DL1dv00_FixedCutBEff_70;
    +      int is_DL1dv00_FixedCutBEff_77;
    +      std::vector<float> SF_DL1dv00_FixedCutBEff_77;
    +      int is_DL1dv00_FixedCutBEff_85;
    +      std::vector<float> SF_DL1dv00_FixedCutBEff_85;
    +      int is_DL1dv01_FixedCutBEff_60;
    +      std::vector<float> SF_DL1dv01_FixedCutBEff_60;
    +      int is_DL1dv01_FixedCutBEff_70;
    +      std::vector<float> SF_DL1dv01_FixedCutBEff_70;
    +      int is_DL1dv01_FixedCutBEff_77;
    +      std::vector<float> SF_DL1dv01_FixedCutBEff_77;
    +      int is_DL1dv01_FixedCutBEff_85;
    +      std::vector<float> SF_DL1dv01_FixedCutBEff_85;
    +      int is_GN120220509_FixedCutBEff_60;
    +      std::vector<float> SF_GN120220509_FixedCutBEff_60;
    +      int is_GN120220509_FixedCutBEff_70;
    +      std::vector<float> SF_GN120220509_FixedCutBEff_70;
    +      int is_GN120220509_FixedCutBEff_77;
    +      std::vector<float> SF_GN120220509_FixedCutBEff_77;
    +      int is_GN120220509_FixedCutBEff_85;
    +      std::vector<float> SF_GN120220509_FixedCutBEff_85;
    +      int is_GN2v00LegacyWP_FixedCutBEff_60;
    +      std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_60;
    +      int is_GN2v00LegacyWP_FixedCutBEff_70;
    +      std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_70;
    +      int is_GN2v00LegacyWP_FixedCutBEff_77;
    +      std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_77;
    +      int is_GN2v00LegacyWP_FixedCutBEff_85;
    +      std::vector<float> SF_GN2v00LegacyWP_FixedCutBEff_85;
    +      int is_GN2v00NewAliasWP_FixedCutBEff_60;
    +      std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_60;
    +      int is_GN2v00NewAliasWP_FixedCutBEff_70;
    +      std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_70;
    +      int is_GN2v00NewAliasWP_FixedCutBEff_77;
    +      std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_77;
    +      int is_GN2v00NewAliasWP_FixedCutBEff_85;
    +      std::vector<float> SF_GN2v00NewAliasWP_FixedCutBEff_85;
    +      int is_GN2v01_FixedCutBEff_65;
    +      std::vector<float> SF_GN2v01_FixedCutBEff_65;
    +      int is_GN2v01_FixedCutBEff_70;
    +      std::vector<float> SF_GN2v01_FixedCutBEff_70;
    +      int is_GN2v01_FixedCutBEff_77;
    +      std::vector<float> SF_GN2v01_FixedCutBEff_77;
    +      int is_GN2v01_FixedCutBEff_85;
    +      std::vector<float> SF_GN2v01_FixedCutBEff_85;
    +      int is_GN2v01_FixedCutBEff_90;
    +      std::vector<float> SF_GN2v01_FixedCutBEff_90;
    +
    +      // Continuous
    +      int is_DL1r_Continuous;
    +      std::vector<float> SF_DL1r_Continuous;
    +      std::vector<float> inEffSF_DL1r_Continuous;
    +      int is_DL1dv00_Continuous;
    +      std::vector<float> SF_DL1dv00_Continuous;
    +      std::vector<float> inEffSF_DL1dv00_Continuous;
    +      int is_DL1dv01_Continuous;
    +      std::vector<float> SF_DL1dv01_Continuous;
    +      std::vector<float> inEffSF_DL1dv01_Continuous;
    +      int is_GN120220509_Continuous;
    +      std::vector<float> SF_GN120220509_Continuous;
    +      std::vector<float> inEffSF_GN120220509_Continuous;
    +      int is_GN2v00LegacyWP_Continuous;
    +      std::vector<float> SF_GN2v00LegacyWP_Continuous;
    +      std::vector<float> inEffSF_GN2v00LegacyWP_Continuous;
    +      int is_GN2v00NewAliasWP_Continuous;
    +      std::vector<float> SF_GN2v00NewAliasWP_Continuous;
    +      std::vector<float> inEffSF_GN2v00NewAliasWP_Continuous;
    +      int is_GN2v01_Continuous;
    +      std::vector<float> SF_GN2v01_Continuous;
    +      std::vector<float> inEffSF_GN2v01_Continuous;
    +
    +      // truth
    +      int   ConeTruthLabelID;
    +      int   TruthCount;
    +      float TruthLabelDeltaR_B;
    +      float TruthLabelDeltaR_C;
    +      float TruthLabelDeltaR_T;
    +      int   PartonTruthLabelID;
    +      float GhostTruthAssociationFraction;
    +      TLorentzVector truth_p4;
    +
    +      // charge
    +      double charge;
    +
    +      // passSel
    +      char passSel;
    +
    +      // passOR
    +      char passOR;
    +
    +      const Muon* matchedMuon =nullptr;
    +      const Jet * matchedJet  =nullptr;
    +
    +    public:
    +      int is_btag(BTaggerOP op) const;
    +      const std::vector<float>& SF_btag(BTaggerOP op) const;
    +
    +      void muonInJetCorrection(const xAH::MuonContainer* muons);
    +
    +    };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.html b/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.html new file mode 100644 index 0000000000..943ff91484 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.html @@ -0,0 +1,349 @@ + + + + + + + + + + + Program Listing for File JetCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetCalibrator.h

    +

    Return to documentation for file (xAODAnaHelpers/JetCalibrator.h)

    +
    /********************************************************
    + * JetCalibrator:
    + *
    + * This class handles jet calibration and systematics
    + *
    + * Jeff Dandoy (jeff.dandoy@cern.ch)
    + *
    + ********************************************************/
    +
    +#ifndef xAODAnaHelpers_JetCalibrator_H
    +#define xAODAnaHelpers_JetCalibrator_H
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "JetCalibTools/IJetCalibrationTool.h"
    +#include "JetCPInterfaces/ICPJetUncertaintiesTool.h"
    +#include "JetInterface/IJetSelector.h"
    +#include "JetCPInterfaces/IJetTileCorrectionTool.h"
    +// #include "ParticleJetTools/JetTruthLabelingTool.h"
    +#include "xAODCore/ShallowCopy.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class JetCalibrator : public xAH::Algorithm
    +{
    +public:
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +  std::string m_jetAlgo = "";
    +  std::string m_outputAlgo = "";
    +  bool        m_writeSystToMetadata = false;
    +
    +
    +  bool        m_recalibrateHLTJets = false;
    +  std::string m_HLTVertexContainerName = "HLT_IDVertex_FS";
    +  std::string m_HLTAvgMuDecor = "EventInfo.AvgMu";
    +  std::string m_EvtInfoHLTNPVDecor = "";
    +
    +  std::string m_calibGSCDepth = "";
    +
    +  std::string m_calibConfigDir = "";
    +  std::string m_calibConfigData = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config";
    +  std::string m_calibConfigFullSim = "JES_data2017_2016_2015_Recommendation_Aug2018_rel21.config";
    +  std::string m_calibConfigAFII = "JES_MC16Recommendation_AFII_EMTopo_April2018_rel21.config";
    +  std::string m_calibSequence = "";
    +  std::string m_uncertConfig = "";
    +  std::string m_uncertMCType = "";
    +  std::string m_overrideCalibArea = "";
    +  std::string m_overrideUncertCalibArea = "";
    +  std::string m_overrideAnalysisFile = "";
    +  std::string m_overrideUncertPath = "";
    +
    +  bool m_forceInsitu = false;
    +  bool m_forceSmear = false;
    +  bool m_jetCalibToolsDEV = false;
    +
    +  bool m_addGhostMuonsToJets = false;
    +
    +  bool m_doCleaning = true;
    +  std::string m_jetCleanCutLevel = "LooseBad";
    +  bool m_saveAllCleanDecisions = false;
    +  bool m_jetCleanUgly = false;
    +
    +  bool    m_sort = true;
    +  bool    m_cleanParent = false;
    +  bool    m_applyFatJetPreSel = false;
    +
    +  bool m_useLargeRTruthLabelingTool = true;
    +  std::string m_truthLabelName = "R10TruthLabel_R21Consolidated";
    +  bool m_isTruthJetCol = false;
    +  bool m_useTRUTH3 = true;
    +  std::string m_truthParticleContainerName = "TruthParticles";
    +  std::string m_truthBosonContainerName = "TruthBosonsWithDecayParticles";
    +  std::string m_truthTopQuarkContainerName = "TruthTopQuarkWithDecayParticles";
    +
    +// systematics
    +  bool m_doJetTileCorr = false;
    +
    +  bool m_pseudoData = false;
    +
    +  bool m_mcAndPseudoData = false;
    +
    +private:
    +  bool m_runSysts = false;
    +
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  std::string m_calibConfig;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // tools
    +  asg::AnaToolHandle<IJetCalibrationTool>        m_JetCalibrationTool_handle   {"JetCalibrationTool"   , this};
    +  asg::AnaToolHandle<ICPJetUncertaintiesTool>    m_JetUncertaintiesTool_handle {"JetUncertaintiesTool" , this};
    +  asg::AnaToolHandle<ICPJetUncertaintiesTool>    m_pseudodataJERTool_handle    {"PseudodataJERTool"    , this};
    +  asg::AnaToolHandle<IJetSelector>               m_JetCleaningTool_handle      {"JetCleaningTool"      , this};
    +  // asg::AnaToolHandle<CP::IJetTileCorrectionTool> m_JetTileCorrectionTool_handle{"JetTileCorrectionTool", this}; //!
    +  // asg::AnaToolHandle<JetTruthLabelingTool>       m_JetTruthLabelingTool_handle {"JetTruthLabelingTool" , this}; //!
    +
    +  std::vector<asg::AnaToolHandle<IJetSelector>>  m_AllJetCleaningTool_handles;
    +  std::vector<std::string>  m_decisionNames;
    +
    +  // Helper functions
    +  EL::StatusCode executeSystematic(const CP::SystematicSet& thisSyst, const xAOD::JetContainer* inJets,
    +                                   std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*>& calibJetsSC,
    +                                   std::vector<std::string>& vecOutContainerNames, bool isPDCopy);
    +  EL::StatusCode initializeUncertaintiesTool(asg::AnaToolHandle<ICPJetUncertaintiesTool>& uncToolHandle, bool isData);
    +
    +public:
    +
    +  // this is a standard constructor
    +  JetCalibrator ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(JetCalibrator, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_JetContainer.h.html b/api/program_listing_file_xAODAnaHelpers_JetContainer.h.html new file mode 100644 index 0000000000..c1203d0623 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_JetContainer.h.html @@ -0,0 +1,767 @@ + + + + + + + + + + + Program Listing for File JetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/JetContainer.h)

    +
    #ifndef xAODAnaHelpers_JetContainer_H
    +#define xAODAnaHelpers_JetContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODJet/JetContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/Jet.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +#include "InDetTrackSelectionTool/InDetTrackSelectionTool.h"
    +
    +
    +namespace xAH {
    +
    +    class JetContainer : public ParticleContainer<Jet,HelperClasses::JetInfoSwitch>
    +    {
    +    public:
    +      JetContainer(const std::string& name = "jet", const std::string& detailStr="", float units = 1e3, bool mc = false);
    +      virtual ~JetContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillJet( const xAOD::Jet* jet,            const xAOD::Vertex* pv, int pvLocation );
    +      virtual void FillJet( const xAOD::IParticle* particle, const xAOD::Vertex* pv, int pvLocation );
    +
    +      virtual void updateParticle(uint idx, Jet& jet);
    +
    +//template<typename T>
    +//  void setBranch(TTree* tree, std::string varName, std::vector<T>* localVectorPtr);
    +
    +    private:
    +
    +      InDet::InDetTrackSelectionTool * m_trkSelTool;
    +
    +      //
    +      // Vector branches
    +
    +      // rapidity
    +      std::vector<float> *m_rapidity;
    +
    +      // trigger
    +      std::vector<int>               *m_isTrigMatched;
    +      std::vector<std::vector<int> > *m_isTrigMatchedToChain;
    +      std::vector<std::string>       *m_listTrigChains;
    +
    +      // clean
    +      std::vector<float> *m_Timing;
    +      std::vector<float> *m_LArQuality;
    +      std::vector<float> *m_HECQuality;
    +      std::vector<float> *m_NegativeE;
    +      std::vector<float> *m_AverageLArQF;
    +      std::vector<float> *m_BchCorrCell;
    +      std::vector<float> *m_N90Constituents;
    +      std::vector<float> *m_LArBadHVEnergyFrac;
    +      std::vector<int>   *m_LArBadHVNCell;
    +      std::vector<float> *m_ChargedFraction;
    +      std::vector<float> *m_OotFracClusters5;
    +      std::vector<float> *m_OotFracClusters10;
    +      std::vector<float> *m_LeadingClusterPt;
    +      std::vector<float> *m_LeadingClusterSecondLambda;
    +      std::vector<float> *m_LeadingClusterCenterLambda;
    +      std::vector<float> *m_LeadingClusterSecondR;
    +      std::vector<int>   *m_clean_passLooseBad;
    +      std::vector<int>   *m_clean_passLooseBadLLP;
    +      std::vector<int>   *m_clean_passLooseBadUgly;
    +      std::vector<int>   *m_clean_passLooseBadTrigger;
    +      std::vector<int>   *m_clean_passLooseBadTriggerUgly;
    +      std::vector<int>   *m_clean_passTightBad;
    +      std::vector<int>   *m_clean_passTightBadUgly;
    +
    +      // energy
    +      std::vector<float> *m_HECFrac;
    +      std::vector<float> *m_EMFrac;
    +      std::vector<float> *m_CentroidR;
    +      std::vector<float> *m_FracSamplingMax;
    +      std::vector<float> *m_FracSamplingMaxIndex;
    +      std::vector<float> *m_LowEtConstituentsFrac;
    +      std::vector<float> *m_GhostMuonSegmentCount;
    +      std::vector<float> *m_Width;
    +
    +      // scales
    +      std::vector<float> *m_emScalePt;
    +      std::vector<float> *m_constScalePt;
    +      std::vector<float> *m_pileupScalePt;
    +      std::vector<float> *m_originConstitScalePt;
    +      std::vector<float> *m_etaJESScalePt;
    +      std::vector<float> *m_gscScalePt;
    +      std::vector<float> *m_jmsScalePt;
    +      std::vector<float> *m_insituScalePt;
    +
    +      std::vector<float> *m_emScaleM;
    +      std::vector<float> *m_constScaleM;
    +      std::vector<float> *m_pileupScaleM;
    +      std::vector<float> *m_originConstitScaleM;
    +      std::vector<float> *m_etaJESScaleM;
    +      std::vector<float> *m_gscScaleM;
    +      std::vector<float> *m_jmsScaleM;
    +      std::vector<float> *m_insituScaleM;
    +
    +      // constScale Eta
    +      std::vector<float> *m_constScaleEta;
    +
    +      // detector Eta
    +      std::vector<float> *m_detectorEta;
    +
    +      // layer
    +      std::vector< std::vector<float> > *m_EnergyPerSampling;
    +
    +      // tracksAll
    +      std::vector< std::vector<int> >   *m_NumTrkPt1000;
    +      std::vector< std::vector<float> > *m_SumPtTrkPt1000;
    +      std::vector< std::vector<float> > *m_TrackWidthPt1000;
    +      std::vector< std::vector<int> >   *m_NumTrkPt500;
    +      std::vector< std::vector<float> > *m_SumPtTrkPt500;
    +      std::vector< std::vector<float> > *m_TrackWidthPt500;
    +      std::vector< std::vector<float> > *m_JVF;
    +
    +      // trackPV
    +      std::vector<float> *m_NumTrkPt1000PV;
    +      std::vector<float> *m_SumPtTrkPt1000PV;
    +      std::vector<float> *m_TrackWidthPt1000PV;
    +      std::vector<float> *m_NumTrkPt500PV;
    +      std::vector<float> *m_SumPtTrkPt500PV;
    +      std::vector<float> *m_TrackWidthPt500PV;
    +      std::vector<float> *m_JVFPV;
    +
    +
    +      // trackAll or trackPV
    +      std::vector<float> *m_Jvt;
    +      std::vector<int> *m_JvtPass_Loose;
    +      std::vector< std::vector<float> > *m_JvtEff_SF_Loose;
    +      std::vector<int> *m_JvtPass_Medium;
    +      std::vector< std::vector<float> > *m_JvtEff_SF_Medium;
    +      std::vector<int> *m_JvtPass_Tight;
    +      std::vector< std::vector<float> > *m_JvtEff_SF_Tight;
    +      std::vector<float> *m_JvtJvfcorr;
    +      std::vector<float> *m_JvtRpt;
    +      std::vector<float> *m_fJvt;
    +      std::vector<int> *m_fJvtPass_Loose;
    +      std::vector< std::vector<float> > *m_fJvtEff_SF_Loose;
    +      std::vector<int> *m_fJvtPass_Medium;
    +      std::vector< std::vector<float> > *m_fJvtEff_SF_Medium;
    +      std::vector<int> *m_fJvtPass_Tight;
    +      std::vector< std::vector<float> > *m_fJvtEff_SF_Tight;
    +
    +      // NNJvt
    +      std::vector<float> *m_NNJvt;
    +      std::vector<bool> *m_NNJvtPass;
    +      std::vector<int> *m_JvtPass_FixedEffPt;
    +      std::vector< std::vector<float> > *m_JvtEff_SF_FixedEffPt;
    +      std::vector<int> *m_JvtPass_TightFwd;
    +      std::vector< std::vector<float> > *m_JvtEff_SF_TightFwd;
    +
    +      // chargedPFOPV
    +      std::vector<float> *m_SumPtChargedPFOPt500PV;
    +      std::vector<float> *m_fCharged;
    +
    +      // allTrack
    +      std::vector<int>                  *m_GhostTrackCount;
    +      std::vector<float>                *m_GhostTrackPt;
    +      std::vector< std::vector<float> > *m_GhostTrack_pt;
    +      std::vector< std::vector<float> > *m_GhostTrack_qOverP;
    +      std::vector< std::vector<float> > *m_GhostTrack_eta;
    +      std::vector< std::vector<float> > *m_GhostTrack_phi;
    +      std::vector< std::vector<float> > *m_GhostTrack_e;
    +      std::vector< std::vector<float> > *m_GhostTrack_d0;
    +      std::vector< std::vector<float> > *m_GhostTrack_z0;
    +
    +      // allTrackDetail
    +      std::vector< std::vector<int> > *m_GhostTrack_nPixelHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nSCTHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nTRTHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nPixelSharedHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nPixelSplitHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nInnermostPixelLayerHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nInnermostPixelLayerSharedHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nInnermostPixelLayerSplitHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nNextToInnermostPixelLayerHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nNextToInnermostPixelLayerSharedHits;
    +      std::vector< std::vector<int> > *m_GhostTrack_nNextToInnermostPixelLayerSplitHits;
    +
    +      // constituent
    +      std::vector< int >                *m_numConstituents;
    +      std::vector< std::vector<float> > *m_constituentWeights;
    +      std::vector< std::vector<float> > *m_constituent_pt;
    +      std::vector< std::vector<float> > *m_constituent_eta;
    +      std::vector< std::vector<float> > *m_constituent_phi;
    +      std::vector< std::vector<float> > *m_constituent_e;
    +
    +
    +      // flavTag
    +      std::vector<int>   *m_HadronConeExclTruthLabelID;
    +      std::vector<int>   *m_HadronConeExclExtendedTruthLabelID;
    +
    +      std::vector<float> *m_DL1r;
    +      std::vector<float> *m_DL1r_pu;
    +      std::vector<float> *m_DL1r_pc;
    +      std::vector<float> *m_DL1r_pb;
    +      std::vector<float> *m_DL1dv00;
    +      std::vector<float> *m_DL1dv00_pu;
    +      std::vector<float> *m_DL1dv00_pc;
    +      std::vector<float> *m_DL1dv00_pb;
    +      std::vector<float> *m_DL1dv01;
    +      std::vector<float> *m_DL1dv01_pu;
    +      std::vector<float> *m_DL1dv01_pc;
    +      std::vector<float> *m_DL1dv01_pb;
    +      std::vector<float> *m_fastDIPS;
    +      std::vector<float> *m_fastDIPS_pu;
    +      std::vector<float> *m_fastDIPS_pb;
    +      std::vector<float> *m_fastDIPS_pc;
    +      std::vector<float> *m_GN1;
    +      std::vector<float> *m_GN1_pu;
    +      std::vector<float> *m_GN1_pc;
    +      std::vector<float> *m_GN1_pb;
    +      std::vector<float> *m_GN2v00LegacyWP;
    +      std::vector<float> *m_GN2v00LegacyWP_pu;
    +      std::vector<float> *m_GN2v00LegacyWP_pc;
    +      std::vector<float> *m_GN2v00LegacyWP_pb;
    +      std::vector<float> *m_GN2v00NewAliasWP;
    +      std::vector<float> *m_GN2v00NewAliasWP_pu;
    +      std::vector<float> *m_GN2v00NewAliasWP_pc;
    +      std::vector<float> *m_GN2v00NewAliasWP_pb;
    +      std::vector<float> *m_GN2v01;
    +      std::vector<float> *m_GN2v01_pu;
    +      std::vector<float> *m_GN2v01_pc;
    +      std::vector<float> *m_GN2v01_pb;
    +      std::vector<float> *m_GN2v01_ptau;
    +
    +      // Jet Fitter
    +      std::vector<float>  *m_JetFitter_nVTX           ;
    +      std::vector<float>  *m_JetFitter_nSingleTracks  ;
    +      std::vector<float>  *m_JetFitter_nTracksAtVtx   ;
    +      std::vector<float>  *m_JetFitter_mass           ;
    +      std::vector<float>  *m_JetFitter_energyFraction ;
    +      std::vector<float>  *m_JetFitter_significance3d ;
    +      std::vector<float>  *m_JetFitter_deltaeta       ;
    +      std::vector<float>  *m_JetFitter_deltaphi       ;
    +      std::vector<float>  *m_JetFitter_N2Tpar         ;
    +
    +
    +      // SV Details
    +      std::vector<float> *m_SV0;
    +      std::vector<float> *m_sv0_NGTinSvx  ;
    +      std::vector<float> *m_sv0_N2Tpair   ;
    +      std::vector<float> *m_sv0_massvx    ;
    +      std::vector<float> *m_sv0_efracsvx  ;
    +      std::vector<float> *m_sv0_normdist  ;
    +
    +      std::vector<float> *m_SV1;
    +      std::vector<float> *m_SV1IP3D;
    +      std::vector<float> *m_COMBx;
    +      std::vector<float> *m_sv1_pu        ;
    +      std::vector<float> *m_sv1_pb        ;
    +      std::vector<float> *m_sv1_pc        ;
    +      std::vector<float> *m_sv1_c         ;
    +      std::vector<float> *m_sv1_cu        ;
    +      std::vector<float> *m_sv1_NGTinSvx  ;
    +      std::vector<float> *m_sv1_N2Tpair   ;
    +      std::vector<float> *m_sv1_massvx    ;
    +      std::vector<float> *m_sv1_efracsvx  ;
    +      std::vector<float> *m_sv1_normdist  ;
    +      std::vector<float> *m_sv1_Lxy       ;
    +      std::vector<float> *m_sv1_sig3d       ;
    +      std::vector<float> *m_sv1_L3d       ;
    +      std::vector<float> *m_sv1_distmatlay;
    +      std::vector<float> *m_sv1_dR        ;
    +
    +      // IP3D
    +      std::vector<float> *m_IP2D_pu                   ;
    +      std::vector<float> *m_IP2D_pb                   ;
    +      std::vector<float> *m_IP2D_pc                   ;
    +      std::vector<float> *m_IP2D                      ;
    +      std::vector<float> *m_IP2D_c                    ;
    +      std::vector<float> *m_IP2D_cu                   ;
    +      std::vector<float> *m_nIP2DTracks               ;
    +
    +      std::vector<std::vector<float> > *m_IP2D_gradeOfTracks        ;
    +      std::vector<std::vector<float> > *m_IP2D_flagFromV0ofTracks   ;
    +      std::vector<std::vector<float> > *m_IP2D_valD0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP2D_sigD0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP2D_weightBofTracks      ;
    +      std::vector<std::vector<float> > *m_IP2D_weightCofTracks      ;
    +      std::vector<std::vector<float> > *m_IP2D_weightUofTracks      ;
    +
    +      std::vector<float> *m_IP3D_pu                   ;
    +      std::vector<float> *m_IP3D_pb                   ;
    +      std::vector<float> *m_IP3D_pc                   ;
    +      std::vector<float> *m_IP3D                      ;
    +      std::vector<float> *m_IP3D_c                    ;
    +      std::vector<float> *m_IP3D_cu                   ;
    +      std::vector<float> *m_nIP3DTracks               ;
    +      std::vector<std::vector<float> > *m_IP3D_gradeOfTracks        ;
    +      std::vector<std::vector<float> > *m_IP3D_flagFromV0ofTracks   ;
    +      std::vector<std::vector<float> > *m_IP3D_valD0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP3D_sigD0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP3D_valZ0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP3D_sigZ0wrtPVofTracks   ;
    +      std::vector<std::vector<float> > *m_IP3D_weightBofTracks      ;
    +      std::vector<std::vector<float> > *m_IP3D_weightCofTracks      ;
    +      std::vector<std::vector<float> > *m_IP3D_weightUofTracks      ;
    +
    +      std::vector<float> *m_vtxOnlineValid;
    +      std::vector<float> *m_vtxHadDummy;
    +
    +
    +      std::vector<float> *m_bs_online_vx;
    +      std::vector<float> *m_bs_online_vy;
    +      std::vector<float> *m_bs_online_vz;
    +
    +
    +      std::vector<float> *m_vtx_offline_x0;
    +      std::vector<float> *m_vtx_offline_y0;
    +      std::vector<float> *m_vtx_offline_z0;
    +
    +      std::vector<float> *m_vtx_online_x0;
    +      std::vector<float> *m_vtx_online_y0;
    +      std::vector<float> *m_vtx_online_z0;
    +
    +      std::vector<float> *m_vtx_online_bkg_x0;
    +      std::vector<float> *m_vtx_online_bkg_y0;
    +      std::vector<float> *m_vtx_online_bkg_z0;
    +
    +      struct btagOpPoint {
    +        bool m_mc;
    +        std::string m_accessorName;
    +    Jet::BTaggerOP m_op = Jet::BTaggerOP::None;
    +        bool m_isContinuous;
    +
    +    // branches
    +        std::vector<int>*                  m_isTag;
    +        std::vector< std::vector<float> >* m_sf;
    +        std::vector< std::vector<float> >* m_ineffSf; // for continuous
    +
    +        btagOpPoint(bool mc, const std::string& tagger, const std::string& wp)
    +      : m_mc(mc), m_accessorName(tagger+"_"+wp)
    +    {
    +          m_isTag     = new std::vector<int>();
    +          m_sf        = new std::vector< std::vector<float> >();
    +
    +          m_isContinuous = (wp == "Continuous");
    +          if(m_isContinuous)
    +            m_ineffSf = new std::vector< std::vector<float> >();
    +
    +      else if(m_accessorName=="DL1r_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_60;
    +      else if(m_accessorName=="DL1r_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_70;
    +      else if(m_accessorName=="DL1r_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_77;
    +      else if(m_accessorName=="DL1r_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::DL1r_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="DL1dv00_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_60;
    +      else if(m_accessorName=="DL1dv00_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_70;
    +      else if(m_accessorName=="DL1dv00_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_77;
    +      else if(m_accessorName=="DL1dv00_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::DL1dv00_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="DL1dv01_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_60;
    +      else if(m_accessorName=="DL1dv01_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_70;
    +      else if(m_accessorName=="DL1dv01_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_77;
    +      else if(m_accessorName=="DL1dv01_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::DL1dv01_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="GN120220509_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_60;
    +      else if(m_accessorName=="GN120220509_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_70;
    +      else if(m_accessorName=="GN120220509_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_77;
    +      else if(m_accessorName=="GN120220509_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::GN120220509_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60;
    +      else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70;
    +      else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77;
    +      else if(m_accessorName=="GN2v00LegacyWP_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_60")
    +        m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60;
    +      else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70;
    +      else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77;
    +      else if(m_accessorName=="GN2v00NewAliasWP_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85;
    +
    +          else if(m_accessorName=="GN2v01_FixedCutBEff_65")
    +        m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_65;
    +      else if(m_accessorName=="GN2v01_FixedCutBEff_70")
    +        m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_70;
    +      else if(m_accessorName=="GN2v01_FixedCutBEff_77")
    +        m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_77;
    +      else if(m_accessorName=="GN2v01_FixedCutBEff_85")
    +        m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_85;
    +      else if(m_accessorName=="GN2v01_FixedCutBEff_90")
    +        m_op=Jet::BTaggerOP::GN2v01_FixedCutBEff_90;
    +
    +  }
    +
    +        ~btagOpPoint()
    +    {
    +          delete m_isTag;
    +          delete m_sf;
    +          if(m_isContinuous)
    +            delete m_ineffSf;
    +        }
    +
    +        void setTree(TTree *tree, const std::string& jetName)
    +    {
    +      std::string branch = m_isContinuous ? "Quantile_"+m_accessorName : "is_"+m_accessorName;
    +      HelperFunctions::connectBranch<int>                   (jetName, tree, branch,               &m_isTag);
    +      if(m_mc)
    +        {
    +          HelperFunctions::connectBranch<std::vector<float> >(jetName, tree,"SF_"+m_accessorName, &m_sf);
    +          if(m_isContinuous)
    +        HelperFunctions::connectBranch<std::vector<float>>(jetName, tree, "InefficiencySF_"+m_accessorName, &m_ineffSf);
    +        }
    +        }
    +
    +        void setBranch(TTree *tree, const std::string& jetName)
    +    {
    +          std::string id = m_isContinuous ? "_Quantile_" : "_is_";
    +          tree->Branch((jetName+id+m_accessorName).c_str(), &m_isTag);
    +          if ( m_mc )
    +        {
    +          tree->Branch((jetName+"_SF_"+m_accessorName).c_str()              , &m_sf);
    +          if(m_isContinuous)
    +        tree->Branch((jetName+"_InefficiencySF_"+m_accessorName).c_str(), &m_ineffSf);
    +        }
    +        }
    +
    +        void clear()
    +    {
    +          m_isTag->clear();
    +          m_sf->clear();
    +          if(m_isContinuous)
    +            m_ineffSf->clear();
    +        }
    +
    +        void Fill( const xAOD::Jet* jet )
    +    {
    +          static const std::vector<float> junk(1,-999);
    +
    +          if( m_isContinuous )
    +        {
    +          SG::AuxElement::ConstAccessor< int > quantile("BTag_Quantile_"+m_accessorName);
    +          m_isTag->push_back( quantile.isAvailable(*jet) ? quantile(*jet) : -1 );
    +
    +          if(m_mc)
    +        {
    +          SG::AuxElement::ConstAccessor< std::vector<float> > sf(     "BTag_SF_"            +m_accessorName);
    +          SG::AuxElement::ConstAccessor< std::vector<float> > ineffSf("BTag_InefficiencySF_"+m_accessorName);
    +
    +          m_sf     ->push_back(      sf.isAvailable( *jet ) ?      sf( *jet ) : junk);
    +          m_ineffSf->push_back( ineffSf.isAvailable( *jet ) ? ineffSf( *jet ) : junk);
    +        }
    +        }
    +          else
    +        {
    +          SG::AuxElement::ConstAccessor< char > isTag("BTag_"+m_accessorName);
    +          m_isTag->push_back( isTag.isAvailable(*jet) ? isTag(*jet) : -1 );
    +
    +          if(m_mc)
    +        {
    +          SG::AuxElement::ConstAccessor< std::vector<float> > sf("BTag_SF_"+m_accessorName);
    +          m_sf->push_back( sf.isAvailable( *jet ) ? sf( *jet ) : junk);
    +        }
    +        }
    +
    +        } // Fill
    +      };
    +
    +      std::vector<btagOpPoint*> m_btags;
    +
    +      // JVC
    +      std::vector<double> *m_JetVertexCharge_discriminant;
    +
    +      // area
    +      std::vector<float> *m_GhostArea;
    +      std::vector<float> *m_ActiveArea;
    +      std::vector<float> *m_VoronoiArea;
    +      std::vector<float> *m_ActiveArea4vec_pt;
    +      std::vector<float> *m_ActiveArea4vec_eta;
    +      std::vector<float> *m_ActiveArea4vec_phi;
    +      std::vector<float> *m_ActiveArea4vec_m;
    +
    +      // truth
    +      std::vector<int>   *m_ConeTruthLabelID;
    +      std::vector<int>   *m_TruthCount;
    +      std::vector<float> *m_TruthLabelDeltaR_B;
    +      std::vector<float> *m_TruthLabelDeltaR_C;
    +      std::vector<float> *m_TruthLabelDeltaR_T;
    +      std::vector<int>   *m_PartonTruthLabelID;
    +      std::vector<float> *m_GhostTruthAssociationFraction;
    +      std::vector<float> *m_truth_E;
    +      std::vector<float> *m_truth_pt;
    +      std::vector<float> *m_truth_phi;
    +      std::vector<float> *m_truth_eta;
    +
    +
    +      // truth detail
    +      std::vector<int>   *m_GhostBHadronsFinalCount;
    +      std::vector<int>   *m_GhostBHadronsInitialCount;
    +      std::vector<int>   *m_GhostBQuarksFinalCount;
    +      std::vector<float> *m_GhostBHadronsFinalPt;
    +      std::vector<float> *m_GhostBHadronsInitialPt;
    +      std::vector<float> *m_GhostBQuarksFinalPt;
    +
    +      std::vector<int>   *m_GhostCHadronsFinalCount;
    +      std::vector<int>   *m_GhostCHadronsInitialCount;
    +      std::vector<int>   *m_GhostCQuarksFinalCount;
    +      std::vector<float> *m_GhostCHadronsFinalPt;
    +      std::vector<float> *m_GhostCHadronsInitialPt;
    +      std::vector<float> *m_GhostCQuarksFinalPt;
    +
    +      std::vector<int>   *m_GhostTausFinalCount;
    +      std::vector<float> *m_GhostTausFinalPt;
    +
    +      std::vector<int>   *m_truth_pdgId;
    +      std::vector<float> *m_truth_partonPt;
    +      std::vector<float> *m_truth_partonDR;
    +
    +      // charge
    +      std::vector<double> *m_charge;
    +
    +      // passSel
    +      std::vector<char> *m_passSel;
    +
    +      // passOR
    +      std::vector<char> *m_passOR;
    +    };
    +}
    +
    +
    +
    +#endif // xAODAnaHelpers_JetContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_JetHists.h.html b/api/program_listing_file_xAODAnaHelpers_JetHists.h.html new file mode 100644 index 0000000000..02c4721478 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_JetHists.h.html @@ -0,0 +1,583 @@ + + + + + + + + + + + Program Listing for File JetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetHists.h

    +

    Return to documentation for file (xAODAnaHelpers/JetHists.h)

    +
    #ifndef xAODAnaHelpers_JetHists_H
    +#define xAODAnaHelpers_JetHists_H
    +
    +#include "xAODAnaHelpers/IParticleHists.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/TracksInJetHists.h"
    +#include <xAODJet/JetContainer.h>
    +#include "xAODAnaHelpers/Jet.h"
    +#include "xAODAnaHelpers/EventInfo.h"
    +#include "xAODAnaHelpers/OnlineBeamSpotTool.h"
    +
    +ANA_MSG_HEADER(msgJetHists)
    +
    +class JetHists : public IParticleHists
    +{
    +  public:
    +
    +
    +  JetHists(std::string name, std::string detailStr, const std::string& prefix="jet", const std::string& titleprefix="jet");
    +    virtual ~JetHists() ;
    +
    +    virtual StatusCode initialize();
    +    virtual StatusCode execute( const xAOD::Jet* jet, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAH::Jet* jet,  float eventWeight, const xAH::EventInfo* eventInfo = 0);
    +    virtual StatusCode finalize();
    +
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using IParticleHists::execute; // overload
    +    virtual void record(EL::IWorker* wk);
    +
    +  protected:
    +
    +    virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAH::Particle* particle,   float eventWeight, const xAH::EventInfo* eventInfo = 0 );
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::JetInfoSwitch* m_infoSwitch;
    +
    +  private:
    +
    +    std::string m_titlePrefix;
    +    xAH::OnlineBeamSpotTool      m_onlineBSTool;
    +
    +    // clean
    +    TH1F* m_jetTime;
    +    TH1F* m_LArQuality;
    +    TH1F* m_hecq;
    +    TH1F* m_negE;
    +    TH1F* m_avLArQF;
    +    TH1F* m_bchCorrCell;
    +    TH1F* m_N90Const;
    +    //TH1F* m_LArQmean;
    +    //TH1F* m_LArBadHVEFrac;
    +    //TH1F* m_LArBadHVNCell;
    +    TH1F* m_ChargedFraction;
    +    //TH1F* m_OotFracClusters5;
    +    //TH1F* m_OotFracClusters10;
    +    //TH1F* m_LeadingClusterPt;
    +    //TH1F* m_LeadingClusterSecondLambda;
    +    //TH1F* m_LeadingClusterCenterLambda;
    +    //TH1F* m_LeadingClusterSecondR;
    +    //TH1F* m_clean_passLooseBad;
    +    //TH1F* m_clean_passLooseBadUgly;
    +    //TH1F* m_clean_passTightBad;
    +    //TH1F* m_clean_passTightBadUgly;
    +
    +
    +    //layer
    +    TH1F* m_PreSamplerB;
    +    TH1F* m_EMB1;
    +    TH1F* m_EMB2;
    +    TH1F* m_EMB3;
    +    TH1F* m_PreSamplerE;
    +    TH1F* m_EME1;
    +    TH1F* m_EME2;
    +    TH1F* m_EME3;
    +    TH1F* m_HEC0;
    +    TH1F* m_HEC1;
    +    TH1F* m_HEC2;
    +    TH1F* m_HEC3;
    +    TH1F* m_TileBar0;
    +    TH1F* m_TileBar1;
    +    TH1F* m_TileBar2;
    +    TH1F* m_TileGap1;
    +    TH1F* m_TileGap2;
    +    TH1F* m_TileGap3;
    +    TH1F* m_TileExt0;
    +    TH1F* m_TileExt1;
    +    TH1F* m_TileExt2;
    +    TH1F* m_FCAL0;
    +    TH1F* m_FCAL1;
    +    TH1F* m_FCAL2;
    +
    +    // area
    +    TH1F* m_actArea;
    +
    +
    +    TH1F* m_chf;
    +
    +    //energy
    +    TH1F* m_HECf;
    +    TH1F* m_EMf;
    +    TH1F* m_centroidR;
    +    TH1F* m_fracSampMax;
    +    TH1F* m_fracSampMaxIdx;
    +    TH1F* m_lowEtFrac;
    +    //TH1F* m_GhostMuonSegmentCount;
    +    //TH1F* m_Width;
    +
    +
    +    // resolution
    +    TH1F* m_jetGhostTruthPt;
    +    TH2F* m_jetPt_vs_resolution;
    +    TH2F* m_jetGhostTruthPt_vs_resolution;
    +
    +    // truth jets
    +    TH1F* m_truthLabelID;
    +    TH1F* m_hadronConeExclTruthLabelID;
    +    TH1F* m_partonTruthLabelID;
    +    TH1F* m_truthCount;
    +    TH1F* m_truthPt;
    +    TH1F* m_truthPt_m;
    +    TH1F* m_truthPt_l;
    +    TH1F* m_truthEta;
    +    TH1F* m_truthPhi;
    +    TH1F* m_truthDr_B;
    +    TH1F* m_truthDr_C;
    +    TH1F* m_truthDr_T;
    +    //TH1F *m_GhostTruthAssociationFraction;
    +
    +    // Detailed truth jet plots
    +    TH1F* m_truthCount_BhadFinal;
    +    TH1F* m_truthCount_BhadInit ;
    +    TH1F* m_truthCount_BQFinal  ;
    +    TH1F* m_truthPt_BhadFinal;
    +    TH1F* m_truthPt_BhadInit ;
    +    TH1F* m_truthPt_BQFinal  ;
    +
    +    TH1F* m_truthCount_ChadFinal;
    +    TH1F* m_truthCount_ChadInit ;
    +    TH1F* m_truthCount_CQFinal  ;
    +    TH1F* m_truthPt_ChadFinal;
    +    TH1F* m_truthPt_ChadInit ;
    +    TH1F* m_truthPt_CQFinal  ;
    +
    +
    +    TH1F* m_truthCount_TausFinal;
    +    TH1F* m_truthPt_TausFinal   ;
    +
    +    // JVC
    +    TH1F* m_JVC;
    +
    +    // Flavor Tag
    +    TH1F* m_COMB   ;
    +    TH1F* m_SV0             ;
    +    TH1F* m_JetFitter       ;
    +
    +    TProfile* m_vtxClass_vs_lBlock;
    +    TProfile* m_vtxEff10_vs_lBlock;
    +    TProfile* m_vtxEff1_vs_lBlock;
    +    TProfile* m_vtxEff10_raw_vs_lBlock;
    +    TProfile* m_vtxEff1_raw_vs_lBlock;
    +    TProfile* m_vtxEff10_noDummy_vs_lBlock;
    +    TProfile* m_vtxEff1_noDummy_vs_lBlock;
    +
    +    TH1F* m_trkSum_ntrk     ;
    +    TH1F* m_trkSum_sPt      ;
    +    TH1F* m_trkSum_vPt      ;
    +    TH1F* m_trkSum_vAbsEta  ;
    +    TH1F* m_width           ;
    +    TH1F* m_n_trk_sigd0cut  ;
    +    TH1F* m_trk3_d0sig      ;
    +    TH1F* m_trk3_z0sig      ;
    +    TH1F* m_sv_scaled_efc   ;
    +    TH1F* m_jf_scaled_efc   ;
    +
    +    TH1F* m_jf_nVTX           ;
    +    TH1F* m_jf_nSingleTracks  ;
    +    TH1F* m_jf_nTracksAtVtx   ;
    +    TH1F* m_jf_mass           ;
    +    TH1F* m_jf_energyFraction ;
    +    TH1F* m_jf_significance3d ;
    +    TH1F* m_jf_deltaeta       ;
    +    TH1F* m_jf_deltaeta_l     ;
    +    TH1F* m_jf_deltaphi       ;
    +    TH1F* m_jf_deltaphi_l     ;
    +    TH1F* m_jf_deltaR         ;
    +    TH1F* m_jf_N2Tpar         ;
    +    TH1F* m_jf_pb             ;
    +    TH1F* m_jf_pc             ;
    +    TH1F* m_jf_pu             ;
    +    TH1F* m_jf_mass_unco      ;
    +    TH1F* m_jf_dR_flight      ;
    +
    +    TH1F* m_sv0_NGTinSvx ;
    +    TH1F* m_sv0_N2Tpair  ;
    +    TH1F* m_sv0_massvx   ;
    +    TH1F* m_sv0_efracsvx ;
    +    TH1F* m_sv0_normdist ;
    +
    +    TH1F* m_SV1_pu       ;
    +    TH1F* m_SV1_pb       ;
    +    TH1F* m_SV1_pc       ;
    +    TH1F* m_SV1          ;
    +    TH1F* m_SV1_c        ;
    +    TH1F* m_SV1_cu       ;
    +    TH1F* m_sv1_NGTinSvx ;
    +    TH1F* m_sv1_N2Tpair  ;
    +    TH1F* m_sv1_massvx   ;
    +    TH1F* m_sv1_efracsvx ;
    +    TH1F* m_sv1_normdist ;
    +    TH1F* m_SV1_Lxy        ;
    +    TH1F* m_SV1_sig3d        ;
    +    TH1F* m_SV1_L3d        ;
    +    TH1F* m_SV1_distmatlay ;
    +    TH1F* m_SV1_dR         ;
    +
    +    TH1F* m_nIP2DTracks              ;
    +    TH1F* m_IP2D_gradeOfTracks       ;
    +    TH1F* m_IP2D_flagFromV0ofTracks  ;
    +    TH1F* m_IP2D_valD0wrtPVofTracks  ;
    +    TH1F* m_IP2D_sigD0wrtPVofTracks  ;
    +    TH1F* m_IP2D_sigD0wrtPVofTracks_l;
    +    TH1F* m_IP2D_errD0wrtPVofTracks  ;
    +    TH1F* m_IP2D_weightBofTracks     ;
    +    TH1F* m_IP2D_weightCofTracks     ;
    +    TH1F* m_IP2D_weightUofTracks     ;
    +    TH1F* m_IP2D_pu                  ;
    +    TH1F* m_IP2D_pb                  ;
    +    TH1F* m_IP2D_pc                  ;
    +    TH1F* m_IP2D                     ;
    +    TH1F* m_IP2D_c                   ;
    +    TH1F* m_IP2D_cu                  ;
    +
    +    TH1F* m_nIP3DTracks              ;
    +    TH1F* m_IP3D_gradeOfTracks       ;
    +    TH1F* m_IP3D_flagFromV0ofTracks  ;
    +    TH1F* m_IP3D_valD0wrtPVofTracks  ;
    +    TH1F* m_IP3D_sigD0wrtPVofTracks  ;
    +    TH1F* m_IP3D_sigD0wrtPVofTracks_l;
    +    TH1F* m_IP3D_errD0wrtPVofTracks  ;
    +    TH1F* m_IP3D_valZ0wrtPVofTracks  ;
    +    TH1F* m_IP3D_sigZ0wrtPVofTracks  ;
    +    TH1F* m_IP3D_sigZ0wrtPVofTracks_l;
    +    TH1F* m_IP3D_errZ0wrtPVofTracks  ;
    +    TH1F* m_IP3D_weightBofTracks     ;
    +    TH1F* m_IP3D_weightCofTracks     ;
    +    TH1F* m_IP3D_weightUofTracks     ;
    +    TH1F* m_IP3D_pu                  ;
    +    TH1F* m_IP3D_pb                  ;
    +    TH1F* m_IP3D_pc                  ;
    +    TH1F* m_IP3D                     ;
    +    TH1F* m_IP3D_c                   ;
    +    TH1F* m_IP3D_cu                  ;
    +
    +    // substructure
    +    TH1F* m_tau1;
    +    TH1F* m_tau2;
    +    TH1F* m_tau3;
    +    TH1F* m_tau21;
    +    TH1F* m_tau32;
    +    TH1F* m_tau1_wta;
    +    TH1F* m_tau2_wta;
    +    TH1F* m_tau3_wta;
    +    TH1F* m_tau21_wta;
    +    TH1F* m_tau32_wta;
    +    TH1F* m_numConstituents;
    +
    +    // Tracks in Jets
    +    TH1F* m_nTrk;
    +    TracksInJetHists* m_tracksInJet;
    +
    +    // By eta
    +    TH1F* m_jetPt_eta_0_1;
    +    TH1F* m_jetPt_eta_1_2;
    +    TH1F* m_jetPt_eta_2_2p5;
    +    TH1F* m_jetPt_eta_1_2p5;
    +
    +    // bs information
    +    TH1F* m_bs_online_vx;
    +    TH1F* m_bs_online_vy;
    +    TH1F* m_bs_online_vz;
    +    TH1F* m_bs_online_vz_l;
    +
    +    TH1F* m_eta_bs_online_vz_0_1  ;
    +    TH1F* m_eta_bs_online_vz_1_1p5;
    +    TH1F* m_eta_bs_online_vz_1p5_2;
    +
    +    // HLT Vertex Comp
    +    TH1F*     m_vtx_offline_x0;
    +    TH1F*     m_vtx_offline_y0;
    +    TH1F*     m_vtx_offline_z0;
    +    TH1F*     m_vtx_offline_z0_s;
    +    TH1F*     m_vtx_online_x0;
    +    TH1F*     m_vtx_online_y0;
    +    TH1F*     m_vtx_online_z0;
    +    TH1F*     m_vtx_online_z0_s;
    +    TH1F*     m_vtx_online_x0_raw;
    +    TH1F*     m_vtx_online_y0_raw;
    +    TH1F*     m_vtx_online_z0_raw;
    +
    +    TH1F* m_vtxOnlineValid;
    +    TH1F* m_vtxOfflineValid;
    +    TH1F* m_vtxDiffz0;
    +    TH1F* m_vtxDiffz0_m;
    +    TH1F* m_vtxDiffz0_s;
    +
    +    TH1F* m_vtxBkgDiffz0;
    +    TH1F* m_vtxBkgDiffz0_m;
    +    TH1F* m_vtxBkgDiffz0_s;
    +
    +    TH1F* m_vtxDiffx0;
    +    TH1F* m_vtxDiffx0_l;
    +
    +    TH1F* m_vtxDiffy0;
    +    TH1F* m_vtxDiffy0_l;
    +
    +    TH1F* m_vtxClass;
    +    TProfile*   m_vtxDiffx0_vs_lBlock    ;
    +    TProfile*   m_vtxDiffy0_vs_lBlock    ;
    +    TProfile*   m_vtxDiffz0_vs_lBlock    ;
    +
    +    TH2F* m_lumiB_runN;
    +    TH2F* m_lumiB_runN_vtxClass     ;
    +    TH2F* m_lumiB_runN_vtxDiffz0    ;
    +    TH2F* m_lumiB_runN_lumiB        ;
    +    TH2F* m_lumiB_runN_bs_online_vz ;
    +    TH2F* m_lumiB_runN_bs_den       ;
    +
    +    TProfile*   m_vtx_online_x0_vs_vtx_online_z0;
    +    TProfile*   m_vtx_online_y0_vs_vtx_online_z0;
    +
    +    // trackPV
    +    //TH1F* m_NumTrkPt1000PV;
    +    //TH1F* m_SumPtTrkPt1000PV;
    +    //TH1F* m_TrackWidthPt1000PV;
    +    //TH1F* m_NumTrkPt500PV;
    +    //TH1F* m_SumPtTrkPt500PV;
    +    //TH1F* m_TrackWidthPt500PV;
    +    //TH1F* m_JVFPV;
    +
    +    // trackAll or trackPV
    +    //TH1F* m_Jvt;
    +    //TH1F* m_JvtJvfcorr;
    +    //TH1F* m_JvtRpt;
    +
    +
    +    // charge
    +    //TH1F *m_charge;
    +
    +    TH1F* m_actualMu;                   // !
    +    TH1F* m_avgMu;
    +    TH1F* m_jetPt_avgMu_00_15;
    +    TH1F* m_jetPt_avgMu_15_25;
    +    TH1F* m_jetPt_avgMu_25;
    +    TH2F* m_avgMu_vs_jetPt;
    +
    +    // Eta-phi map
    +    TH2F* m_etaPhi;
    +
    +    // Some other 2D plots
    +    TH2F* m_vtxDiffz0_vs_vtx_offline_z0;
    +    TH2F* m_vtxDiffz0_s_vs_vtx_offline_z0;
    +    TH2F* m_vtxDiffz0_s_vs_vtxDiffx0;
    +    TH2F* m_vtxDiffz0_s_vs_vtxDiffy0;
    +
    +    // TProfile in prep for showing it is flat
    +    TH2F*  m_vtxClass_vs_jetPt;
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.html new file mode 100644 index 0000000000..dde84eba80 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.html @@ -0,0 +1,248 @@ + + + + + + + + + + + Program Listing for File JetHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/JetHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_JetHistsAlgo_H
    +#define xAODAnaHelpers_JetHistsAlgo_H
    +
    +#include "xAODAnaHelpers/IParticleHistsAlgo.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class JetHistsAlgo : public IParticleHistsAlgo
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  JetHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode execute ();
    +
    +  // these are the functions not inherited from Algorithm
    +  EL::StatusCode AddHists( std::string name );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(JetHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_JetSelector.h.html b/api/program_listing_file_xAODAnaHelpers_JetSelector.h.html new file mode 100644 index 0000000000..79ba5e2ac6 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_JetSelector.h.html @@ -0,0 +1,442 @@ + + + + + + + + + + + Program Listing for File JetSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File JetSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/JetSelector.h)

    +
    #ifndef xAODAnaHelpers_JetSelector_H
    +#define xAODAnaHelpers_JetSelector_H
    +
    +// EDM include(s):
    +#include "xAODJet/Jet.h"
    +#include "xAODJet/JetContainer.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "ParticleJetTools/JetPileupLabelingTool.h"
    +#include "JetMomentTools/JetVertexNNTagger.h"
    +#include "JetAnalysisInterfaces/IJvtEfficiencyTool.h"
    +#include "PATCore/IAsgSelectionTool.h"
    +#include "JetInterface/IJetModifier.h"
    +#include "FTagAnalysisInterfaces/IBTaggingSelectionTool.h"
    +#include "TriggerMatchingTool/IMatchingTool.h"
    +#include "TriggerMatchingTool/IMatchScoringTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +
    +class JetSelector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  bool m_useCutFlow = true;
    +
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +  std::string m_truthJetContainer = "AntiKt4TruthJets";
    +  std::string m_inputAlgo = "";
    +  std::string m_outputAlgo = "";
    +  bool        m_writeSystToMetadata = false;
    +  std::string m_jetScaleType = "";
    +  std::string m_decor = "passSel";
    +  bool m_decorateSelectedObjects = true;
    +  bool m_createSelectedContainer = false;
    +  int m_nToProcess = -1;
    +  bool m_cleanJets = true;
    +  int m_cleanEvtLeadJets = -1;
    +  bool m_cleanEvent = false;
    +  bool m_markCleanEvent = false;
    +  std::string m_jetScale4Selection = "Final";
    +  bool m_doMCCleaning = false;
    +  float m_mcCleaningCut = 1.4;
    +  int m_pass_min = -1;
    +  int m_pass_max = -1;
    +  float m_pT_max = 1e8;
    +  float m_pT_min = 1e8;
    +  float m_ET_max = 1e8;
    +  float m_ET_min = 1e8;
    +  float m_eta_max = 1e8;
    +  float m_eta_min = 1e8;
    +  float m_detEta_max = 1e8;
    +  float m_detEta_min = 1e8;
    +  float m_mass_max = 1e8;
    +  float m_mass_min = 1e8;
    +  float m_rapidity_max = 1e8;
    +  float m_rapidity_min = 1e8;
    +  int   m_truthLabel =  -1;
    +  bool  m_useHadronConeExcl = true;
    +
    +  bool m_doJVF = false;
    +  float m_pt_max_JVF = 50e3;
    +  float m_eta_max_JVF = 2.4;
    +  float m_JVFCut = 0.5;
    +  bool m_doTruthJetTagging = true;
    +  bool m_doJVT = false;
    +  bool m_noJVTVeto = false;
    +  bool m_dofJVT = false;
    +  bool m_dofJVTVeto = true;
    +  float m_pt_max_JVT = 60e3;
    +  float m_eta_max_JVT = 2.4;
    +  bool m_jvtUsedBefore=false;
    +  bool m_haveTruthJets = true;
    +  bool m_getJVTSF = true;
    +
    +  float m_JVTCut = -1.0;
    +
    +  std::string m_WorkingPointJVT = "FixedEffPt";
    +
    +  std::string m_SFFileJVT = ""; // empty string means to apply dummy SFs
    +  std::string m_outputSystNamesJVT = "JetJvtEfficiency_JVTSyst";
    +  bool m_recalculateJvtScores = true;
    +
    +  float         m_systValJVT = 0.0;
    +  std::string   m_systNameJVT = "";
    +
    +  std::string m_WorkingPointfJVT = "Loose";
    +
    +  std::string m_SFFilefJVT = ""; // empty string means to apply dummy SFs
    +
    +  std::string m_outputSystNamesfJVT = "JetJvtEfficiency_fJVTSyst";
    +
    +  float         m_systValfJVT = 0.0;
    +  std::string   m_systNamefJVT = "";
    +  bool m_fjvtUsedBefore=false;
    +
    +  bool          m_doJetTimingCut = false;
    +  float         m_jetTiming_max = -1;
    +
    +  bool  m_doBTagCut = false;
    +  std::string m_corrFileName = "xAODBTaggingEfficiency/cutprofiles_22072015.root";
    +  std::string m_jetAuthor = "AntiKt4EMPFlowJets";
    +  std::string m_taggerName = "DL1r";
    +  std::string m_operatingPt = "FixedCutBEff_70";
    +  // for BTaggingSelectionTool -- doubles are needed or will crash
    +  // for the b-tagging tool - these are the b-tagging groups minimums
    +  // users making tighter cuts can use the selector's parameters to keep
    +  // things consistent
    +  double m_b_eta_max = 2.5;
    +  double m_b_pt_min = 20e3;
    +
    +  // HLT Btag quality
    +  bool m_doHLTBTagCut = false;
    +  std::string m_HLTBTagTaggerName = "DL1r";
    +  float m_HLTBTagCutValue = -0.4434;
    +  bool  m_requireHLTVtx = false;
    +  bool  m_requireNoHLTVtx = false;
    +
    +  std::string              m_passAuxDecorKeys = "";
    +  std::string              m_failAuxDecorKeys = "";
    +
    +  /* trigger matching */
    +  std::string    m_singleJetTrigChains = "";
    +  std::string    m_diJetTrigChains = "";
    +
    +  bool m_removeDuplicates = false;
    +  int m_count_events_with_duplicates = 0;
    +  bool m_sort = false;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +  int m_pvLocation;
    +
    +  bool m_isEMjet;
    +  bool m_isLCjet;
    +
    +  // cutflow
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  std::vector<std::string> m_passKeys;
    +  std::vector<std::string> m_failKeys;
    +
    +  /* object-level cutflow */
    +
    +  TH1D* m_jet_cutflowHist_1 = nullptr;
    +
    +  int   m_jet_cutflow_all;
    +  int   m_jet_cutflow_cleaning_cut;
    +  int   m_jet_cutflow_ptmax_cut;
    +  int   m_jet_cutflow_ptmin_cut;
    +  int   m_jet_cutflow_etmax_cut;
    +  int   m_jet_cutflow_etmin_cut;
    +  int   m_jet_cutflow_eta_cut;
    +  int   m_jet_cutflow_jvt_cut;
    +  int   m_jet_cutflow_timing_cut;
    +  int   m_jet_cutflow_btag_cut;
    +
    +  std::vector<CP::SystematicSet> m_systListJVT;
    +  std::vector<CP::SystematicSet> m_systListfJVT;
    +
    +  std::vector<std::string>            m_singleJetTrigChainsList;
    +  std::vector<std::string>            m_diJetTrigChainsList;
    +
    +  asg::AnaToolHandle<JetPileupLabelingTool>  m_jetPileupLabelingTool;
    +  asg::AnaToolHandle<JetPileupTag::JetVertexNNTagger>  m_jetNNJvtMomentTool;
    +  asg::AnaToolHandle<IAsgSelectionTool> m_jetNNJvtSelectionTool;
    +  asg::AnaToolHandle<CP::IJvtEfficiencyTool> m_jetNNJvtEfficiencyTool;
    +  asg::AnaToolHandle<IAsgSelectionTool> m_jetfJvtSelectionTool;
    +  asg::AnaToolHandle<CP::IJvtEfficiencyTool> m_jetfJvtEfficiencyTool;
    +
    +  asg::AnaToolHandle<IBTaggingSelectionTool> m_BJetSelectTool_handle{"BTaggingSelectionTool"};
    +
    +  asg::AnaToolHandle<Trig::IMatchingTool>    m_trigJetMatchTool_handle;
    +  asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"};
    +  asg::AnaToolHandle<Trig::IMatchScoringTool>  m_scoreTool{"Trig::DRScoringTool/DRScoringTool"};
    +
    +  bool m_doTrigMatch = true;
    +
    +  std::string m_outputJVTPassed = "JetJVT_Passed";
    +  std::string m_outputfJVTPassed = "JetfJVT_Passed";
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +
    +
    +  // this is a standard constructor
    +  JetSelector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual bool executeSelection( const xAOD::JetContainer* inJets, float mcEvtWeight, bool count, std::string outContainerName, bool isNominal );
    +
    +  // added functions not from Algorithm
    +  // why does this need to be virtual?
    +  virtual int PassCuts( const xAOD::Jet* jet );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(JetSelector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.html b/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.html new file mode 100644 index 0000000000..10c42a5217 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.html @@ -0,0 +1,287 @@ + + + + + + + + + + + Program Listing for File L1JetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File L1JetContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/L1JetContainer.h)

    +
    #ifndef xAODAnaHelpers_L1JetContainer_H
    +#define xAODAnaHelpers_L1JetContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODTrigger/JetRoIContainer.h>
    +#include <xAODTrigger/jFexSRJetRoIContainer.h>
    +#include <xAODTrigger/jFexLRJetRoIContainer.h>
    +#include <xAODTrigger/gFexJetRoIContainer.h>
    +
    +#include <xAODAnaHelpers/Jet.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +    class L1JetContainer : public ParticleContainer<Jet,HelperClasses::JetInfoSwitch>
    +    {
    +    public:
    +      L1JetContainer(const std::string& name = "L1Jet", float units = 1e3, bool mc = false);
    +      virtual ~L1JetContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, bool sort);
    +      virtual void updateParticle(uint idx, Jet& jet);
    +
    +      // access to et, eta and phi is the same for all the Phase1 L1 jet collections
    +      template <typename T>
    +      void FillPhase1L1Jets(T*& jets, bool sort){
    +        if(!sort) {
    +          for( auto jet_itr : *jets ) {
    +            m_l1Jet_et->push_back ( static_cast<float>(jet_itr->et()) / m_units );
    +            m_l1Jet_eta->push_back( jet_itr->eta() );
    +            m_l1Jet_phi->push_back( jet_itr->phi() );
    +          }
    +        } else {
    +          std::vector< std::vector<float> > vec;
    +          for( auto jet_itr : *jets ) {
    +            std::vector<float> row;
    +            row.clear();
    +            row.push_back ( static_cast<float>(jet_itr->et()) / m_units );
    +            row.push_back(jet_itr->eta());
    +            row.push_back(jet_itr->phi());
    +            vec.push_back(row);
    +          }
    +
    +          std::sort(vec.begin(), vec.end(), [&](const std::vector<float> a, const std::vector<float> b) { return a.at(0) < b.at(0);});
    +          for (int i = int(vec.size())-1; i >= 0; i--) {
    +            m_l1Jet_et->push_back((vec.at(i)).at(0) / m_units);
    +            m_l1Jet_eta->push_back((vec.at(i)).at(1));
    +            m_l1Jet_phi->push_back((vec.at(i)).at(2));
    +          }
    +          vec.clear();
    +        }
    +      }
    +
    +
    +
    +    private:
    +      // Vector branches
    +      std::vector<float>* m_l1Jet_et;
    +      std::vector<float>* m_l1Jet_eta;
    +      std::vector<float>* m_l1Jet_phi;
    +    };
    +
    +}
    +
    +#endif // xAODAnaHelpers_L1JetContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_METConstructor.h.html b/api/program_listing_file_xAODAnaHelpers_METConstructor.h.html new file mode 100644 index 0000000000..c59d7e2b6b --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_METConstructor.h.html @@ -0,0 +1,331 @@ + + + + + + + + + + + Program Listing for File METConstructor.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File METConstructor.h

    +

    Return to documentation for file (xAODAnaHelpers/METConstructor.h)

    +
    #ifndef xAODAnaHelpers_METConstructor_H
    +#define xAODAnaHelpers_METConstructor_H
    +
    +#include <xAODAnaHelpers/Algorithm.h>
    +
    +// Infrastructure include(s):
    +#include "xAODRootAccess/Init.h"
    +#include "xAODRootAccess/TEvent.h"
    +#include "xAODRootAccess/TStore.h"
    +#include "AsgTools/AnaToolHandle.h"
    +
    +#include "METInterface/IMETMaker.h"
    +#include "METInterface/IMETSystematicsTool.h"
    +#include "METInterface/IMETSignificance.h"
    +
    +#include "TauAnalysisTools/ITauSelectionTool.h"
    +
    +#include "PATInterfaces/SystematicRegistry.h"
    +//look at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/SoftwareTutorialxAODAnalysisInROOT
    +
    +
    +using std::string;
    +
    +class METConstructor : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // configuration variables
    +  std::string m_mapName = "METAssoc_AntiKt4LCTopo";
    +  std::string m_coreName = "MET_Core_AntiKt4LCTopo";
    +  std::string m_outputContainer = "NewRefFinal";
    +  std::string m_systConfigPrefix = "METUtilities/R22_PreRecs";
    +  std::string m_systConfigSoftTrkFile = "TrackSoftTerms-pflow.config";
    +  std::string m_inputJets = "";
    +  std::string m_inputElectrons = "";
    +  std::string m_inputPhotons = "";
    +  std::string m_inputTaus = "";
    +  std::string m_inputMuons = "";
    +
    +  bool    m_doElectronCuts = false;
    +  bool    m_doPhotonCuts = false;
    +  bool    m_doTauCuts = false;
    +  bool    m_doMuonCuts = false;
    +
    +  bool    m_doMuonEloss = false;
    +  bool    m_doIsolMuonEloss = false;
    +  bool    m_doJVTCut = false;
    +  bool    m_dofJVTCut = false;
    +
    +  std::string m_fJVTdecorName = "passFJVT";
    +
    +  bool    m_doPFlow = true;
    +
    +  std::string m_METWorkingPoint = "";
    +
    +  bool    m_rebuildUsingTracksInJets = false;
    +  bool    m_addSoftClusterTerms = false;
    +
    +  // MET significance
    +  bool m_calculateSignificance = false;
    +  bool m_significanceTreatPUJets = true;
    +  double m_significanceSoftTermReso = 10.0;
    +
    +  // used for systematics
    +  bool m_runNominal = true;
    +  std::string m_systName = "All";
    +  float m_systVal = 1.0;
    +
    +  bool        m_writeSystToMetadata = false;
    +
    +  std::string m_jetSystematics = "";
    +  std::string m_eleSystematics = "";
    +  std::string m_muonSystematics = "";
    +  std::string m_tauSystematics = "";
    +  std::string m_phoSystematics = "";
    +
    +  std::string m_outputAlgoSystNames = "";
    +
    +
    +private:
    +  // tools
    +  asg::AnaToolHandle<IMETMaker> m_metmaker_handle{"met::METMaker/METMaker", this};
    +  asg::AnaToolHandle<IMETSystematicsTool> m_metSyst_handle{"met::METSystematicsTool/METSystematicsTool", this};
    +  asg::AnaToolHandle<IMETSignificance> m_metSignificance_handle{"met::METSignificance/METSignificance", this};
    +
    +  asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool", this};
    +
    +  std::vector<CP::SystematicSet> m_sysList;
    +
    +  int m_numEvent;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  METConstructor ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute();
    +  virtual EL::StatusCode finalize();
    +  virtual EL::StatusCode histFinalize();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(METConstructor, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.html new file mode 100644 index 0000000000..0975e350de --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.html @@ -0,0 +1,254 @@ + + + + + + + + + + + Program Listing for File MessagePrinterAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MessagePrinterAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/MessagePrinterAlgo.h)

    +
    #ifndef xAODAnaHelpers_MessagePrinterAlgo_H
    +#define xAODAnaHelpers_MessagePrinterAlgo_H
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include <AsgMessaging/MessagePrinter.h>
    +#include <AsgMessaging/MessagePrinterOverlay.h>
    +
    +// std include
    +#include <memory>
    +
    +class MessagePrinterAlgo : public xAH::Algorithm
    +{
    +  public:
    +    unsigned int m_sourceWidth = 25;
    +
    +  private:
    +
    +    std::unique_ptr<asg::MessagePrinter>        m_messagePrinter{nullptr};
    +    std::unique_ptr<asg::MessagePrinterOverlay> m_messagePrinterOverlay{nullptr};
    +
    +  public:
    +    // this is a standard constructor
    +    MessagePrinterAlgo ();
    +
    +    // these are the functions inherited from Algorithm
    +    virtual EL::StatusCode setupJob (EL::Job& job);
    +    virtual EL::StatusCode fileExecute ();
    +    virtual EL::StatusCode histInitialize ();
    +    virtual EL::StatusCode changeInput (bool firstFile);
    +    virtual EL::StatusCode initialize ();
    +    virtual EL::StatusCode execute ();
    +    virtual EL::StatusCode postExecute ();
    +    virtual EL::StatusCode finalize ();
    +    virtual EL::StatusCode histFinalize ();
    +
    +    // this is needed to distribute the algorithm to the workers
    +    ClassDef(MessagePrinterAlgo, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MetContainer.h.html b/api/program_listing_file_xAODAnaHelpers_MetContainer.h.html new file mode 100644 index 0000000000..2864efe0ec --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MetContainer.h.html @@ -0,0 +1,309 @@ + + + + + + + + + + + Program Listing for File MetContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/MetContainer.h)

    +
    #ifndef xAODAnaHelpers_MetContainer_H
    +#define xAODAnaHelpers_MetContainer_H
    +
    +#include <TTree.h>
    +
    +#include <string>
    +
    +#include "xAODMissingET/MissingETContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +namespace xAH {
    +
    +  class MetContainer
    +  {
    +  public:
    +    MetContainer(const std::string& name = "met", const std::string& detailStr="", float units = 1e3);
    +    ~MetContainer();
    +
    +    void setTree    (TTree *tree);
    +    void setBranches(TTree *tree);
    +    void clear();
    +    void FillMET( const xAOD::MissingETContainer* met);
    +    template <typename T_BR>
    +      void connectBranch(TTree *tree, std::string name, T_BR *variable);
    +    template <typename T_BR>
    +      void setBranch(TTree *tree, std::string name, T_BR *variable, std::string type);
    +
    +  public:
    +
    +    std::string m_name;
    +    HelperClasses::METInfoSwitch  m_infoSwitch;
    +    bool m_debug;
    +    float m_units;
    +
    +  public:
    +
    +    // met
    +    float m_metFinalClus;
    +    float m_metFinalClusPx;
    +    float m_metFinalClusPy;
    +    float m_metFinalClusPhi;
    +    float m_metFinalClusSumEt;
    +
    +    float m_metFinalClusOverSqrtSumEt;
    +    float m_metFinalClusOverSqrtHt;
    +    float m_metFinalClusSignificance;
    +    float m_metFinalClusSigDirectional;
    +    float m_metFinalClusRho;
    +    float m_metFinalClusVarL;
    +    float m_metFinalClusVarT;
    +
    +    float m_metFinalTrk;
    +    float m_metFinalTrkPx;
    +    float m_metFinalTrkPy;
    +    float m_metFinalTrkPhi;
    +    float m_metFinalTrkSumEt;
    +
    +    float m_metFinalTrkOverSqrtSumEt;
    +    float m_metFinalTrkOverSqrtHt;
    +    float m_metFinalTrkSignificance;
    +    float m_metFinalTrkSigDirectional;
    +    float m_metFinalTrkRho;
    +    float m_metFinalTrkVarL;
    +    float m_metFinalTrkVarT;
    +
    +    float m_metEle;       float m_metEleSumEt;      float m_metElePhi;
    +    float m_metGamma;     float m_metGammaSumEt;    float m_metGammaPhi;
    +    float m_metTau;       float m_metTauSumEt;      float m_metTauPhi;
    +    float m_metMuons;     float m_metMuonsSumEt;    float m_metMuonsPhi;
    +    float m_metJet;       float m_metJetSumEt;      float m_metJetPhi;
    +    float m_metJetTrk;    float m_metJetTrkSumEt;   float m_metJetTrkPhi;
    +    float m_metSoftClus;  float m_metSoftClusSumEt; float m_metSoftClusPhi;
    +    float m_metSoftTrk;   float m_metSoftTrkSumEt;  float m_metSoftTrkPhi;
    +
    +
    +
    +  };
    +
    +  template <typename T_BR> void MetContainer::connectBranch(TTree *tree, std::string name, T_BR *variable)
    +    {
    +      tree->SetBranchStatus  ((m_name + name).c_str()  , 1);
    +      tree->SetBranchAddress ((m_name + name).c_str()  , variable);
    +    }
    +  template <typename T_BR> void MetContainer::setBranch(TTree *tree, std::string name, T_BR *variable, std::string type)
    +    {
    +      if (!type.empty()) {
    +        tree->Branch((m_name + name).c_str(), variable, (m_name + name + "/" + type).c_str());
    +      } else {
    +        tree->Branch((m_name + name).c_str(), variable);
    +      }
    +    }
    +
    +}
    +
    +
    +
    +#endif // xAODAnaHelpers_MetContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MetHists.h.html b/api/program_listing_file_xAODAnaHelpers_MetHists.h.html new file mode 100644 index 0000000000..70872abc5e --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MetHists.h.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Program Listing for File MetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetHists.h

    +

    Return to documentation for file (xAODAnaHelpers/MetHists.h)

    +
    #ifndef xAODAnaHelpers_MetHists_H
    +#define xAODAnaHelpers_MetHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODMissingET/MissingETContainer.h"
    +
    +class MetHists : public HistogramManager
    +{
    +  public:
    +
    +
    +    MetHists(std::string name, std::string detailStr);
    +    virtual ~MetHists() ;
    +
    +    bool m_debug;
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::MissingETContainer* met, float eventWeight );
    +
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +
    +  protected:
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::METInfoSwitch* m_infoSwitch;
    +
    +  private:
    +
    +    TH1F*   m_metFinalClus      ;
    +    TH1F*   m_metFinalClusPx    ;
    +    TH1F*   m_metFinalClusPy    ;
    +    TH1F*   m_metFinalClusSumEt ;
    +    TH1F*   m_metFinalClusPhi   ;
    +
    +    TH1F*   m_metFinalTrk       ;
    +    TH1F*   m_metFinalTrkPx     ;
    +    TH1F*   m_metFinalTrkPy     ;
    +    TH1F*   m_metFinalTrkSumEt  ;
    +    TH1F*   m_metFinalTrkPhi    ;
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.html new file mode 100644 index 0000000000..09718c3329 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + Program Listing for File MetHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MetHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/MetHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_MetHistsAlgo_H
    +#define xAODAnaHelpers_MetHistsAlgo_H
    +
    +#include <xAODAnaHelpers/MetHists.h>
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class MetHistsAlgo : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  std::string m_inContainerName = "";
    +
    +  // configuration variables
    +  std::string m_detailStr = "";
    +
    +private:
    +  MetHists* m_plots = nullptr;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  MetHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MetHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.html b/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.html new file mode 100644 index 0000000000..a14c3204ce --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MinixAOD.h.html @@ -0,0 +1,286 @@ + + + + + + + + + + + Program Listing for File MinixAOD.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MinixAOD.h

    +

    Return to documentation for file (xAODAnaHelpers/MinixAOD.h)

    +
    #ifndef xAODAnaHelpers_MinixAOD_H
    +#define xAODAnaHelpers_MinixAOD_H
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +//MetaData
    +#include <xAODMetaDataCnv/FileMetaDataTool.h>
    +// #include <xAODTriggerCnv/TriggerMenuMetaDataTool.h>
    +
    +#include <xAODCutFlow/CutBookkeeper.h>
    +#include <xAODCutFlow/CutBookkeeperContainer.h>
    +#include <xAODCutFlow/CutBookkeeperAuxContainer.h>
    +
    +class MinixAOD : public xAH::Algorithm
    +{
    +public:
    +  std::string m_outputFileName = "out_miniXAOD";
    +
    +  bool m_createOutputFile = true;
    +
    +  bool m_copyFileMetaData = false;
    +
    +  bool m_copyTriggerInfo = false;
    +
    +  bool m_copyCutBookkeeper = false;
    +
    +  std::string m_simpleCopyKeys = "";
    +
    +  std::string m_storeCopyKeys = "";
    +
    +  std::string m_shallowCopyKeys = "";
    +
    +  std::string m_deepCopyKeys = "";
    +
    +  std::string m_vectorCopyKeys = "";
    +
    +private:
    +  std::vector<std::string> m_simpleCopyKeys_vec;
    +  std::vector<std::pair<std::string, std::string>> m_shallowCopyKeys_vec;
    +  std::vector<std::pair<std::string, std::string>> m_deepCopyKeys_vec;
    +  std::vector<std::pair<std::string, std::string>> m_vectorCopyKeys_vec;
    +
    +  std::vector<std::string> m_copyFromStoreToEventKeys_vec;
    +
    +  xAODMaker::FileMetaDataTool          *m_fileMetaDataTool = nullptr;
    +  // xAODMaker::TriggerMenuMetaDataTool   *m_trigMetaDataTool = nullptr; //!
    +
    +  xAOD::CutBookkeeperContainer    *m_outputCBKContainer = nullptr;
    +  xAOD::CutBookkeeperAuxContainer *m_outputCBKContainer_aux = nullptr;
    +  xAOD::CutBookkeeperContainer    *m_outputInCBKContainer = nullptr;
    +  xAOD::CutBookkeeperAuxContainer *m_outputInCBKContainer_aux = nullptr;
    +  xAOD::CutBookkeeper             *m_outputCBK = nullptr;
    +
    +public:
    +  // this is a standard constructor
    +  MinixAOD ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MinixAOD, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Muon.h.html b/api/program_listing_file_xAODAnaHelpers_Muon.h.html new file mode 100644 index 0000000000..115f51efd0 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Muon.h.html @@ -0,0 +1,338 @@ + + + + + + + + + + + Program Listing for File Muon.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Muon.h

    +

    Return to documentation for file (xAODAnaHelpers/Muon.h)

    +
    #ifndef xAODAnaHelpers_Muon_H
    +#define xAODAnaHelpers_Muon_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +
    +namespace xAH {
    +
    +  class Muon : public Particle
    +  {
    +  public:
    +
    +    //Muon() {};
    +    //virtual ~Muon() { };
    +
    +    // kinematics
    +    float charge;
    +
    +    // trigger
    +    int               isTrigMatched;
    +    std::vector<int>  isTrigMatchedToChain;
    +    std::vector<std::string> listTrigChains;
    +
    +      // isolation
    +    std::map< std::string, int > isIsolated;
    +    float ptcone20;
    +    float ptcone30;
    +    float ptcone40;
    +    float ptvarcone20;
    +    float ptvarcone30;
    +    float ptvarcone40;
    +    float topoetcone20;
    +    float topoetcone30;
    +    float topoetcone40;
    +    float neflowisol20;
    +    float ptcone20_Nonprompt_All_MaxWeightTTVA_pt500;
    +    float ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000;
    +    float topoetcone20_CloseByCorr                                  ;
    +    float neflowisol20_CloseByCorr                                  ;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ;
    +    float ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr;
    +
    +    // quality
    +    std::map< std::string, int > quality;
    +
    +    // scale factors w/ sys
    +    // per object
    +    std::map< std::string, std::vector< float > > RecoEff_SF;
    +    std::map< std::string, std::vector< float > > IsoEff_SF;
    +    std::map< std::string, std::vector< float > > TrigEff_SF;
    +    std::map< std::string, std::vector< float > > TrigMCEff;
    +
    +    std::vector< float >  TTVAEff_SF;
    +
    +    // track parameters
    +    float trkd0;
    +    float trkd0sig;
    +    float trkz0;
    +    float trkz0sintheta;
    +    float trkphi0;
    +    float trktheta;
    +    float trkcharge;
    +    float trkqOverP;
    +
    +      // track hit content
    +    int   trknSiHits;
    +    int   trknPixHits;
    +    int   trknPixHoles;
    +    int   trknSCTHits;
    +    int   trknSCTHoles;
    +    int   trknTRTHits;
    +    int   trknTRTHoles;
    +    int   trknBLayerHits;
    +    int   trknInnermostPixLayHits; // not available in DC14
    +    float trkPixdEdX;            // not available in DC14
    +
    +    float         EnergyLoss;
    +    float         EnergyLossSigma;
    +    unsigned char energyLossType;
    +    float         MeasEnergyLoss;
    +    float         MeasEnergyLossSigma;
    +    float         ParamEnergyLoss;
    +    float         ParamEnergyLossSigmaMinus;
    +    float         ParamEnergyLossSigmaPlus;
    +
    +
    +    TLorentzVector vec_eLoss() const{
    +
    +      float theta_muon = p4.Theta();
    +      float phi_muon   = p4.Phi();
    +      float elossX     = EnergyLoss/1000 * sin(theta_muon) * cos(phi_muon);
    +      float elossY     = EnergyLoss/1000 * sin(theta_muon) * sin(phi_muon);
    +      float elossZ     = EnergyLoss/1000 * cos(theta_muon);
    +
    +      TLorentzVector muonELoss(elossX,elossY,elossZ,EnergyLoss/1000);
    +
    +      return muonELoss;
    +    }
    +
    +    // prompt lepton
    +    float PromptLeptonInput_DL1mu;
    +    float PromptLeptonInput_DRlj;
    +    float PromptLeptonInput_LepJetPtFrac;
    +    float PromptLeptonInput_PtFrac;
    +    float PromptLeptonInput_PtRel;
    +    int   PromptLeptonInput_TrackJetNTrack;
    +    float PromptLeptonInput_ip2;
    +    float PromptLeptonInput_ip3;
    +    float PromptLeptonInput_rnnip;
    +    int   PromptLeptonInput_sv1_jf_ntrkv;
    +    float PromptLeptonIso;
    +    float PromptLeptonVeto;
    +
    +    char isLRT;
    +    char passIDcuts;
    +
    +    // passSel
    +    char passSel;
    +    // passOR
    +    char passOR;
    +
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.html b/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.html new file mode 100644 index 0000000000..eeb6cd17de --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.html @@ -0,0 +1,292 @@ + + + + + + + + + + + Program Listing for File MuonCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonCalibrator.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonCalibrator.h)

    +
    #ifndef xAODAnaHelpers_MuonCalibrator_H
    +#define xAODAnaHelpers_MuonCalibrator_H
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include <AsgTools/AnaToolHandle.h>
    +#include <AsgAnalysisInterfaces/IPileupReweightingTool.h>
    +#include "MuonMomentumCorrections/MuonCalibTool.h"
    +
    +class MuonCalibrator : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +  std::string m_calibrationMode = "noOption";
    +
    +  bool           m_isRun3Geo = false;
    +
    +  bool m_do2StationsHighPt = false;
    +
    +  // sort after calibration
    +  bool m_sort = true;
    +
    +  // systematics
    +  std::string m_inputAlgoSystNames = "";
    +  // this is the name of the vector of names of the systematically varied containers produced by THIS algo (these will be the m_inputAlgoSystNames of the algo downstream)
    +  std::string m_outputAlgoSystNames = "MuonCalibrator_Syst";
    +  bool        m_writeSystToMetadata = false;
    +
    +  float       m_systVal = 0.0;
    +  std::string m_systName = "";
    +
    +  bool    m_forceDataCalib = false;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  std::string m_outAuxContainerName;
    +  std::string m_outSCContainerName;
    +  std::string m_outSCAuxContainerName;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // tools
    +  asg::AnaToolHandle<CP::MuonCalibTool> m_muonCalibrationTool_handle{"CP::MuonCalibTool/MuonCalibrationTool", this};
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  MuonCalibrator ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MuonCalibrator, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.html b/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.html new file mode 100644 index 0000000000..15c38e54ff --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonContainer.h.html @@ -0,0 +1,345 @@ + + + + + + + + + + + Program Listing for File MuonContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonContainer.h)

    +
    #ifndef xAODAnaHelpers_MuonContainer_H
    +#define xAODAnaHelpers_MuonContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODMuon/MuonContainer.h>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +#include <xAODAnaHelpers/Muon.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +  class MuonContainer : public ParticleContainer<Muon,HelperClasses::MuonInfoSwitch>
    +    {
    +    public:
    +      MuonContainer(const std::string& name = "muon", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true);
    +      virtual ~MuonContainer();
    +
    +      virtual void setTree(TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillMuon( const xAOD::Muon* muon, const xAOD::Vertex* primaryVertex );
    +      virtual void FillMuon( const xAOD::IParticle* particle, const xAOD::Vertex* primaryVertex );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +      virtual void updateParticle(uint idx, Muon& muon);
    +
    +    private:
    +
    +      // kinematic
    +      std::vector<float> *m_charge;
    +
    +      // trigger
    +      std::vector<int>               *m_isTrigMatched;
    +      std::vector<std::vector<int> > *m_isTrigMatchedToChain;
    +      std::vector<std::vector<std::string> > *m_listTrigChains;
    +
    +      // isolation
    +      std::map< std::string, std::vector< int >* >* m_isIsolated;
    +      std::vector<float> *m_ptcone20;
    +      std::vector<float> *m_ptcone30;
    +      std::vector<float> *m_ptcone40;
    +      std::vector<float> *m_ptvarcone20;
    +      std::vector<float> *m_ptvarcone30;
    +      std::vector<float> *m_ptvarcone40;
    +      std::vector<float> *m_topoetcone20;
    +      std::vector<float> *m_topoetcone30;
    +      std::vector<float> *m_topoetcone40;
    +      std::vector<float> *m_neflowisol20;
    +      std::vector<float> *m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt500;
    +      std::vector<float> *m_ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000;
    +      std::vector<float> *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500;
    +      std::vector<float> *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000;
    +      std::vector<float> *m_topoetcone20_CloseByCorr                                  ;
    +      std::vector<float> *m_neflowisol20_CloseByCorr                                  ;
    +      std::vector<float> *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr ;
    +      std::vector<float> *m_ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr;
    +
    +
    +      // quality
    +      std::map< std::string, std::vector< int >* >* m_quality;
    +
    +      // scale factors w/ sys
    +      // per object
    +      std::vector< std::vector< float > > *m_TTVAEff_SF;
    +
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_RecoEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_IsoEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_TrigEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > >* >* m_TrigMCEff;
    +
    +      // track parameters
    +      std::vector<float> *m_trkd0;
    +      std::vector<float> *m_trkd0sig;
    +      std::vector<float> *m_trkz0;
    +      std::vector<float> *m_trkz0sintheta;
    +      std::vector<float> *m_trkphi0;
    +      std::vector<float> *m_trktheta;
    +      std::vector<float> *m_trkcharge;
    +      std::vector<float> *m_trkqOverP;
    +
    +      // track hit content
    +      std::vector<int>   *m_trknSiHits;
    +      std::vector<int>   *m_trknPixHits;
    +      std::vector<int>   *m_trknPixHoles;
    +      std::vector<int>   *m_trknSCTHits;
    +      std::vector<int>   *m_trknSCTHoles;
    +      std::vector<int>   *m_trknTRTHits;
    +      std::vector<int>   *m_trknTRTHoles;
    +      std::vector<int>   *m_trknBLayerHits;
    +      std::vector<int>   *m_trknInnermostPixLayHits; // not available in DC14
    +      std::vector<float> *m_trkPixdEdX;            // not available in DC14
    +
    +      std::vector<float>         *m_EnergyLoss;
    +      std::vector<float>         *m_EnergyLossSigma;
    +      std::vector<unsigned char> *m_energyLossType;
    +      std::vector<float>         *m_MeasEnergyLoss;
    +      std::vector<float>         *m_MeasEnergyLossSigma;
    +      std::vector<float>         *m_ParamEnergyLoss;
    +      std::vector<float>         *m_ParamEnergyLossSigmaMinus;
    +      std::vector<float>         *m_ParamEnergyLossSigmaPlus;
    +
    +      // prompt lepton
    +      std::vector<float>* m_PromptLeptonInput_DL1mu;
    +      std::vector<float>* m_PromptLeptonInput_DRlj;
    +      std::vector<float>* m_PromptLeptonInput_LepJetPtFrac;
    +      std::vector<float>* m_PromptLeptonInput_PtFrac;
    +      std::vector<float>* m_PromptLeptonInput_PtRel;
    +      std::vector<int>*   m_PromptLeptonInput_TrackJetNTrack;
    +      std::vector<float>* m_PromptLeptonInput_ip2;
    +      std::vector<float>* m_PromptLeptonInput_ip3;
    +      std::vector<float>* m_PromptLeptonInput_rnnip;
    +      std::vector<int>*   m_PromptLeptonInput_sv1_jf_ntrkv;
    +      std::vector<float>* m_PromptLeptonIso;
    +      std::vector<float>* m_PromptLeptonVeto;
    +
    +      std::vector<char>* m_isLRT;
    +      std::vector<char>* m_passIDcuts;
    +
    +      // passSel
    +      std::vector<char>* m_passSel;
    +      // passOR
    +      std::vector<char>* m_passOR;
    +
    +    };
    +}
    +#endif // xAODAnaHelpers_MuonContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html b/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html new file mode 100644 index 0000000000..4c7443355a --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.html @@ -0,0 +1,337 @@ + + + + + + + + + + + Program Listing for File MuonEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File MuonEfficiencyCorrector.h
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonEfficiencyCorrector.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonEfficiencyCorrector.h)

    +
    #ifndef xAODAnaHelpers_MuonEfficiencyCorrector_H
    +#define xAODAnaHelpers_MuonEfficiencyCorrector_H
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/ISystematicsTool.h"
    +#include "MuonAnalysisInterfaces/IMuonEfficiencyScaleFactors.h"
    +#include "MuonAnalysisInterfaces/IMuonTriggerScaleFactors.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "PileupReweighting/PileupReweightingTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +namespace CP {
    +  class MuonEfficiencyScaleFactors;
    +  class MuonTriggerScaleFactors;
    +}
    +
    +class MuonEfficiencyCorrector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +
    +public:
    +
    +  // configuration variables
    +  std::string   m_inContainerName = "";
    +
    +  std::string   m_overrideCalibRelease = "";
    +
    +  // Reco efficiency SF
    +  std::string   m_WorkingPointReco = "Loose";
    +
    +  // Iso efficiency SF
    +  std::string   m_WorkingPointIso = "LooseTrackOnly";
    +
    +  bool          m_AllowZeroSF = false;
    +
    +  std::string   m_MuTrigLegs = "HLT_mu26_imedium";
    +  bool          m_usePerMuonTriggerSFs = true;
    +
    +  // TTVA efficiency SF
    +  std::string   m_WorkingPointTTVA = "TTVA";
    +
    +  // systematics
    +  std::string   m_inputSystNamesMuons = "";
    +
    +  bool          m_writeSystToMetadata = false;
    +
    +  float         m_systValReco = 0.0;
    +  float         m_systValIso = 0.0;
    +  float         m_systValTrig = 0.0;
    +  float         m_systValTTVA = 0.0;
    +  std::string   m_systNameReco = "";
    +  std::string   m_systNameIso = "";
    +  std::string   m_systNameTrig = "";
    +  std::string   m_systNameTTVA = "";
    +  std::string   m_outputSystNamesReco = "MuonEfficiencyCorrector_RecoSyst";
    +  std::string   m_outputSystNamesIso = "MuonEfficiencyCorrector_IsoSyst";
    +  std::string   m_outputSystNamesTrig = "MuonEfficiencyCorrector_TrigSyst";
    +  std::string   m_outputSystNamesTTVA = "MuonEfficiencyCorrector_TTVASyst";
    +
    +  bool          m_doLRT = false;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  // To include the nominal in the Recp/Iso/Trig/TTVA efficiency SFs output, use "All", or include "Nominal" in the list
    +  std::vector<CP::SystematicSet> m_systListReco;
    +  std::vector<CP::SystematicSet> m_systListIso;
    +  std::vector<CP::SystematicSet> m_systListTrig;
    +  std::vector<CP::SystematicSet> m_systListTTVA;
    +
    +  std::string m_outputSystNamesTrigBase;
    +
    +  // tools
    +  asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle{"CP::PileupReweightingTool/Pileup"};
    +  asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muRecoSF_tool;
    +  std::string m_recoEffSF_tool_name;
    +  asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muIsoSF_tool;
    +  std::string m_isoEffSF_tool_name;
    +  asg::AnaToolHandle<CP::IMuonTriggerScaleFactors> m_muTrigSF_tool;
    +  std::string m_trigEffSF_tool_name;
    +  asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> m_muTTVASF_tool;
    +  std::string m_TTVAEffSF_tool_name;
    +  std::map<std::string, std::string> m_SingleMuTriggerMap;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +
    +  // Tree *myTree; //!
    +  // TH1 *myHist;  //!
    +
    +  // this is a standard constructor
    +  MuonEfficiencyCorrector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::MuonContainer* inputMuons, bool nominal, bool writeSystNames );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MuonEfficiencyCorrector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonHists.h.html b/api/program_listing_file_xAODAnaHelpers_MuonHists.h.html new file mode 100644 index 0000000000..d146eefb28 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonHists.h.html @@ -0,0 +1,275 @@ + + + + + + + + + + + Program Listing for File MuonHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonHists.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonHists.h)

    +
    #ifndef xAODAnaHelpers_MuonHists_H
    +#define xAODAnaHelpers_MuonHists_H
    +
    +#include "xAODAnaHelpers/IParticleHists.h"
    +#include <xAODMuon/MuonContainer.h>
    +#include "xAODAnaHelpers/Muon.h"
    +#include "xAODAnaHelpers/EventInfo.h"
    +
    +ANA_MSG_HEADER(msgMuonHists)
    +
    +class MuonHists : public IParticleHists
    +{
    +  public:
    +
    +
    +    MuonHists(std::string name, std::string detailStr, const std::string& prefix="muon", const std::string& titleprefix="muon");
    +    virtual ~MuonHists() ;
    +
    +    virtual StatusCode initialize();
    +    virtual StatusCode execute( const xAOD::Muon* muon, float eventWeight, const xAOD::EventInfo* eventInfo = 0);
    +    virtual StatusCode execute( const xAH::Muon*  muon, float eventWeight, const xAH::EventInfo*  eventInfo = 0);
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using IParticleHists::execute; // overload
    +
    +  protected:
    +
    +    virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +    virtual StatusCode execute( const xAH::Particle* particle,   float eventWeight, const xAH::EventInfo*  eventInfo = 0 );
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::MuonInfoSwitch* m_infoSwitch;
    +
    +  private:
    +
    +    // Isolation
    +    std::map<std::string, TH1F *> m_isIsolated;
    +
    +    TH1F* m_ptcone20                   ;
    +    TH1F* m_ptcone30                   ;
    +    TH1F* m_ptcone40                   ;
    +    TH1F* m_ptvarcone20                ;
    +    TH1F* m_ptvarcone30                ;
    +    TH1F* m_ptvarcone40                ;
    +    TH1F* m_topoetcone20               ;
    +    TH1F* m_topoetcone30               ;
    +    TH1F* m_topoetcone40               ;
    +
    +    TH1F* m_ptcone20_rel                   ;
    +    TH1F* m_ptcone30_rel                   ;
    +    TH1F* m_ptcone40_rel                   ;
    +    TH1F* m_ptvarcone20_rel                ;
    +    TH1F* m_ptvarcone30_rel                ;
    +    TH1F* m_ptvarcone40_rel                ;
    +    TH1F* m_topoetcone20_rel               ;
    +    TH1F* m_topoetcone30_rel               ;
    +    TH1F* m_topoetcone40_rel               ;
    +
    +
    +    // quality
    +    std::map<std::string, TH1F *> m_quality;
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.html new file mode 100644 index 0000000000..7482b44649 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Program Listing for File MuonHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_MuonHistsAlgo_H
    +#define xAODAnaHelpers_MuonHistsAlgo_H
    +
    +#include "xAODAnaHelpers/IParticleHistsAlgo.h"
    +
    +class MuonHistsAlgo : public IParticleHistsAlgo
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  MuonHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode execute ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode AddHists( std::string name );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MuonHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.html b/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.html new file mode 100644 index 0000000000..df64265558 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.html @@ -0,0 +1,262 @@ + + + + + + + + + + + Program Listing for File MuonInFatJetCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File MuonInFatJetCorrector.h
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonInFatJetCorrector.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonInFatJetCorrector.h)

    +
    #ifndef xAODAnaHelpers_MuonInFatJetCorrector_H
    +#define xAODAnaHelpers_MuonInFatJetCorrector_H
    +
    +#include <xAODAnaHelpers/Algorithm.h>
    +
    +class MuonInFatJetCorrector : public xAH::Algorithm
    +{
    +public:
    +  enum Scheme {Calorimeter, TrackAssisted, Combined, SimpleMuon};
    +
    +  MuonInFatJetCorrector();
    +
    +  std::string m_fatJetContainerName = "";
    +  std::string m_trackJetContainerName = "AntiKtVR30Rmax4Rmin02TrackJets";
    +  std::string m_muonContainerName = "";
    +  std::string m_trackJetLinkName = "GhostVR30Rmax4Rmin02TrackJet";
    +  std::string m_calibratedMassDecoratorData = "JetInsituScaleMomentum";
    +  std::string m_calibratedMassDecoratorFullSim = "JetJMSScaleMomentum";
    +  std::string m_inputAlgo;
    +
    +  float m_trackJetPtMin = 10000.0;
    +  float m_trackJetEtaMax = 2.5;
    +  float m_trackJetNConst = 2.0;
    +
    +  float m_muonPtMin = 10000.0;
    +  float m_muonEtaMax = 2.7;
    +
    +  float m_muonDrMax = 0.4;
    +
    +  virtual EL::StatusCode setupJob(EL::Job& job);
    +  virtual EL::StatusCode histInitialize();
    +  virtual EL::StatusCode fileExecute();
    +  virtual EL::StatusCode changeInput(bool firstFile);
    +  virtual EL::StatusCode initialize();
    +  virtual EL::StatusCode execute();
    +  virtual EL::StatusCode postExecute();
    +  virtual EL::StatusCode finalize();
    +  virtual EL::StatusCode histFinalize();
    +
    +  EL::StatusCode matchTrackJetsToMuons() const;
    +  TLorentzVector getHbbCorrectedVector(const xAOD::Jet &jet);
    +  const xAOD::JetFourMom_t getMuonCorrectedJetFourMom(const xAOD::Jet &jet, std::vector<const xAOD::Muon*> muons,
    +                              Scheme scheme, bool useJMSScale = false) const;
    +
    +private:
    +  std::string m_calibratedMassDecorator;
    +
    +  ClassDef(MuonInFatJetCorrector, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.html b/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.html new file mode 100644 index 0000000000..af7ba1c29d --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_MuonSelector.h.html @@ -0,0 +1,378 @@ + + + + + + + + + + + Program Listing for File MuonSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File MuonSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/MuonSelector.h)

    +
    #ifndef xAODAnaHelpers_MuonSelector_H
    +#define xAODAnaHelpers_MuonSelector_H
    +
    +// EDM include(s):
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODTracking/Vertex.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "IsolationSelection/IIsolationSelectionTool.h"
    +#include "MuonAnalysisInterfaces/IMuonSelectionTool.h"
    +#include "TriggerMatchingTool/IMatchingTool.h"
    +#include "TriggerMatchingTool/IMatchScoringTool.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// forward-declare for now until IsolationSelectionTool interface is updated
    +namespace CP {
    +  class IsolationSelectionTool;
    +}
    +
    +class MuonSelector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +
    +public:
    +
    +  // cutflow
    +  bool m_useCutFlow = true;
    +
    +  // configuration variables
    +  std::string    m_inContainerName = "";
    +  std::string    m_outContainerName = "";
    +  std::string    m_outAuxContainerName;
    +  std::string    m_inputAlgoSystNames = "";
    +  std::string    m_outputAlgoSystNames = "MuonSelector_Syst";
    +  bool           m_decorateSelectedObjects = true;
    +  bool           m_createSelectedContainer = false;
    +  int            m_nToProcess = -1;
    +  int            m_pass_min = -1;
    +  int            m_pass_max = -1;
    +  float          m_pT_max = 1e8;
    +  float          m_pT_min = 1e8;
    +  bool          m_pT_NaNcheck = false;
    +  std::string    m_muonQualityStr = "Medium";
    +  bool           m_isRun3Geo = false;
    +  //std::string    m_muonType;
    +  float          m_eta_max = 1e8;
    +  float          m_d0_max = 1e8;
    +  float          m_d0sig_max = 1e8;
    +  float          m_z0sintheta_max = 1e8;
    +
    +  bool           m_removeCosmicMuon = false;
    +  bool           m_removeEventBadMuon = true;
    +
    +  // isolation
    +  bool           m_doIsolation = true;
    +  std::string    m_MinIsoWPCut = "";
    +  std::string    m_IsoWPList = "FCTightTrackOnly_FixedRad,FCLoose_FixedRad,FCTight_FixedRad,FixedCutPflowTight,FixedCutPflowLoose";
    +  std::string    m_CaloIsoEff = "0.1*x+90";
    +  std::string    m_TrackIsoEff = "98";
    +  std::string    m_CaloBasedIsoType = "topoetcone20";
    +  std::string    m_TrackBasedIsoType = "ptvarcone30";
    +
    +  /* trigger matching */
    +  std::string    m_singleMuTrigChains = "";
    +  std::string    m_diMuTrigChains = "";
    +  double         m_minDeltaR = 0.1;
    +  bool           m_merged_muons = false;
    +  std::string    m_trigInputPrefix = "";
    +
    +  bool           m_doLRT = false;
    +
    +  std::string m_isoDecSuffix = "";
    +
    +private:
    +
    +  int            m_muonQuality;
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +  // cutflow
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  bool  m_isUsedBefore = false;
    +
    +  // object cutflow
    +  TH1D* m_mu_cutflowHist_1 = nullptr;
    +  TH1D* m_mu_cutflowHist_2 = nullptr;
    +
    +  int   m_mu_cutflow_all;
    +  int   m_mu_cutflow_eta_and_quaility_cut;
    +  int   m_mu_cutflow_ptmax_cut;
    +  int   m_mu_cutflow_ptmin_cut;
    +  int   m_mu_cutflow_ptnan_check;
    +  int   m_mu_cutflow_type_cut;
    +  int   m_mu_cutflow_z0sintheta_cut;
    +  int   m_mu_cutflow_d0_cut;
    +  int   m_mu_cutflow_d0sig_cut;
    +  int   m_mu_cutflow_iso_cut;
    +  int   m_mu_cutflow_cosmic_cut;
    +
    +  std::vector<std::string> m_IsoKeys;
    +
    +  /* other private members */
    +
    +  std::vector<std::string>            m_singleMuTrigChainsList;
    +  std::vector<std::string>            m_diMuTrigChainsList;
    +
    +  // tools
    +  asg::AnaToolHandle<CP::IIsolationSelectionTool>  m_isolationSelectionTool_handle{"CP::IsolationSelectionTool/IsolationSelectionTool", this};
    +  // this only exists because the interface needs to be updated, complain on pathelp, remove forward declaration for this when fixed
    +  CP::IsolationSelectionTool*                      m_isolationSelectionTool{nullptr};
    +  asg::AnaToolHandle<CP::IMuonSelectionTool>       m_muonSelectionTool_handle     {"CP::MuonSelectionTool/MuonSelectionTool"          , this};
    +  asg::AnaToolHandle<Trig::IMatchingTool>          m_trigMuonMatchTool_handle;
    +  asg::AnaToolHandle<Trig::TrigDecisionTool>       m_trigDecTool_handle           {"Trig::TrigDecisionTool/TrigDecisionTool"                       };
    +  asg::AnaToolHandle<Trig::IMatchScoringTool>      m_scoreTool                    {"Trig::DRScoringTool/DRScoringTool"                             };
    +
    +  bool m_doTrigMatch = true;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  MuonSelector ();
    +
    +  ~MuonSelector();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // added functions not from Algorithm
    +  bool executeSelection( const xAOD::MuonContainer* inMuons, float mcEvtWeight, bool countPass,
    +                         ConstDataVector<xAOD::MuonContainer>* selectedMuons );
    +  virtual int passCuts( const xAOD::Muon* muon, const xAOD::Vertex *primaryVertex );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(MuonSelector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.html b/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.html new file mode 100644 index 0000000000..487e0a38db --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.html @@ -0,0 +1,283 @@ + + + + + + + + + + + Program Listing for File OnlineBeamSpotTool.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File OnlineBeamSpotTool.h

    +

    Return to documentation for file (xAODAnaHelpers/OnlineBeamSpotTool.h)

    +
    #ifndef xAODAnaHelpers_OnlineBeamSpotTool_H
    +#define xAODAnaHelpers_OnlineBeamSpotTool_H
    +
    +#include "xAODEventInfo/EventInfo.h"
    +#include "xAODAnaHelpers/EventInfo.h"
    +
    +#include <vector>
    +#include <map>
    +
    +namespace xAH {
    +
    +  class OnlineBeamSpotTool
    +  {
    +
    +  public:
    +    enum BSData{
    +      BSx,
    +      BSy,
    +      BSz
    +    };
    +
    +  private:
    +    struct LBData {
    +      int m_LBStart;
    +      int m_LBEnd;
    +      float m_BSx;
    +      float m_BSy;
    +      float m_BSz;
    +
    +      LBData(int LBStart, int LBEnd, float BSx, float BSy, float BSz){
    +    m_LBStart = LBStart;
    +    m_LBEnd   = LBEnd;
    +    m_BSx     = BSx;
    +    m_BSy     = BSy;
    +    m_BSz     = BSz;
    +      }
    +    };
    +
    +    typedef std::vector<LBData>    RunInfo;
    +    typedef std::map<int, RunInfo> RunToLBDataMap;
    +    typedef std::map<int, RunInfo>::iterator RunToLBDataMapItr;
    +
    +  public:
    +
    +    OnlineBeamSpotTool();
    +    ~OnlineBeamSpotTool();
    +
    +    float getOnlineBSInfo(const xAOD::EventInfo* eventInfo, BSData datakey);
    +    float getOnlineBSInfo(const xAH::EventInfo* eventInfo, BSData datakey);
    +    float getOnlineBSInfo(int runNumber, int lumiBlock, bool isMC, BSData datakey);
    +
    +  private:
    +
    +    const LBData*  getLBData(int runNumber, int lumiBlock, bool isMC);
    +    const LBData*  getLBData(int lumiBlock);
    +
    +    void setRunInfo(int runNumber);
    +    void readFile(std::string rootFileName);
    +
    +    RunToLBDataMap m_runList;
    +
    +    int m_cachedRunNum;
    +    int m_cachedLB;
    +    RunInfo* m_cachedRunInfo;
    +    LBData*  m_cachedLBData;
    +    LBData*  m_mcLBData;
    +
    +
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_OnlineBeamSpotTool_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.html b/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.html new file mode 100644 index 0000000000..8231be9d55 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.html @@ -0,0 +1,366 @@ + + + + + + + + + + + Program Listing for File OverlapRemover.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File OverlapRemover.h

    +

    Return to documentation for file (xAODAnaHelpers/OverlapRemover.h)

    +
    #ifndef XAODANAHELPERS_OVERLAPREMOVER_H
    +#define XAODANAHELPERS_OVERLAPREMOVER_H
    +
    +// EDM include(s):
    +#include "xAODBase/IParticleHelpers.h"
    +#include "xAODBase/IParticleContainer.h"
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODMuon/MuonContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODEgamma/PhotonContainer.h"
    +#include "xAODTau/TauJetContainer.h"
    +
    +// external tools include(s):
    +#include "AssociationUtils/OverlapRemovalInit.h"
    +#include "AssociationUtils/OverlapRemovalTool.h"
    +#include "AssociationUtils/ToolBox.h"
    +
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +class OverlapRemover : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    + public:
    +
    +  // configuration variables
    +
    +  bool m_useCutFlow = true;
    +
    +  bool     m_decorateSelectedObjects;
    +  std::string m_decor = "passOR";
    +  bool     m_createSelectedContainers;
    +  bool     m_useSelected = false;
    +  std::string m_bTagWP = "";
    +  bool m_linkOverlapObjects = true;
    +  bool m_useBoostedLeptons = false;
    +  bool m_doEleEleOR = false;
    +  bool m_applyRelPt = false;
    +  bool m_lepFavWP = false;
    +
    +  std::string  m_outputAlgoSystNames = "ORAlgo_Syst";
    +
    +  std::string  m_inContainerName_Electrons = "";
    +  std::string  m_outContainerName_Electrons = "";
    +  std::string  m_inputAlgoElectrons = "";
    +
    +  // Muons
    +  std::string  m_inContainerName_Muons = "";
    +  std::string  m_outContainerName_Muons = "";
    +  std::string  m_inputAlgoMuons = "";
    +  // Jets
    +  std::string  m_inContainerName_Jets = "";
    +  std::string  m_outContainerName_Jets = "";
    +  std::string  m_inputAlgoJets = "";
    +  // Photons
    +  std::string  m_inContainerName_Photons = "";
    +  std::string  m_outContainerName_Photons = "";
    +  std::string  m_inputAlgoPhotons = "";
    +  // Taus
    +  std::string  m_inContainerName_Taus = "";
    +  std::string  m_outContainerName_Taus = "";
    +  std::string  m_inputAlgoTaus = "";
    +
    + protected:
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +  bool m_useElectrons = false;
    +  bool m_useMuons = false;
    +  bool m_usePhotons = false;
    +  bool m_useTaus = false;
    +
    +  std::string  m_outAuxContainerName_Electrons;
    +  std::string  m_outAuxContainerName_Muons;
    +  std::string  m_outAuxContainerName_Jets;
    +  std::string  m_outAuxContainerName_Photons;
    +  std::string  m_outAuxContainerName_Taus;
    +
    +  ORUtils::ToolBox m_ORToolbox;
    +
    +  enum SystType {
    +    NOMINAL = 0,
    +    ELSYST  = 1,
    +    MUSYST  = 2,
    +    JETSYST = 3,
    +    PHSYST  = 4,
    +    TAUSYST = 5,
    +  };
    +
    +  // object-level cutflow
    +
    +  TH1D* m_el_cutflowHist_1 = nullptr;
    +  TH1D* m_mu_cutflowHist_1 = nullptr;
    +  TH1D* m_jet_cutflowHist_1 = nullptr;
    +  TH1D* m_ph_cutflowHist_1 = nullptr;
    +  TH1D* m_tau_cutflowHist_1 = nullptr;
    +
    +  int m_el_cutflow_OR_cut;
    +  int m_mu_cutflow_OR_cut;
    +  int m_jet_cutflow_OR_cut;
    +  int m_ph_cutflow_OR_cut;
    +  int m_tau_cutflow_OR_cut;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +
    +  // this is a standard constructor
    +  OverlapRemover ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode fillObjectCutflow (const xAOD::IParticleContainer* objCont,
    +                        const std::string& overlapFlag = "passOR",
    +                        const std::string& selectFlag = "passSel");
    +
    +  virtual EL::StatusCode executeOR( const xAOD::ElectronContainer* inElectrons,
    +                    const xAOD::MuonContainer* inMuons,
    +                    const xAOD::JetContainer* inJets,
    +                    const xAOD::PhotonContainer* inPhotons,
    +                    const xAOD::TauJetContainer* inTaus,
    +                    SystType syst_type = NOMINAL,
    +                    std::vector<std::string>* sysVec = nullptr,
    +            std::vector<std::string>* sysVecOut = nullptr);
    +
    +  EL::StatusCode setCutFlowHist();
    +  EL::StatusCode setCounters();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(OverlapRemover, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Particle.h.html b/api/program_listing_file_xAODAnaHelpers_Particle.h.html new file mode 100644 index 0000000000..31ef113388 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Particle.h.html @@ -0,0 +1,231 @@ + + + + + + + + + + + Program Listing for File Particle.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Particle.h

    +

    Return to documentation for file (xAODAnaHelpers/Particle.h)

    +
    #ifndef xAODAnaHelpers_Particle_H
    +#define xAODAnaHelpers_Particle_H
    +
    +#include <TLorentzVector.h>
    +
    +namespace xAH {
    +
    +  class Particle
    +  {
    +
    +  public:
    +
    +    //Particle() {};
    +    virtual ~Particle() {}
    +
    +    TLorentzVector p4;
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.html b/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.html new file mode 100644 index 0000000000..4e9679d751 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.html @@ -0,0 +1,470 @@ + + + + + + + + + + + Program Listing for File ParticleContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ParticleContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/ParticleContainer.h)

    +
    #ifndef xAODAnaHelpers_ParticleContainer_H
    +#define xAODAnaHelpers_ParticleContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/Particle.h>
    +#include <xAODBase/IParticle.h>
    +
    +namespace xAH
    +{
    +
    +  template <class T_PARTICLE, class T_INFOSWITCH>
    +  class ParticleContainer
    +  {
    +  public:
    +    ParticleContainer(const std::string& name,
    +              const std::string& detailStr="",
    +              float units = 1e3,
    +              bool mc = false,
    +              bool useMass=false,
    +              bool storeSystSFs = true,
    +              const std::string& suffix="")
    +      : m_name(name),
    +    m_infoSwitch(detailStr),
    +    m_mc(mc),
    +    m_debug(false),
    +    m_units(units),
    +    m_storeSystSFs(storeSystSFs),
    +    m_useMass(useMass),
    +    m_suffix(suffix)
    +      {
    +    m_n = 0;
    +
    +        // kinematic
    +        m_pt  =new std::vector<float>();
    +        m_eta =new std::vector<float>();
    +        m_phi =new std::vector<float>();
    +        m_E   =new std::vector<float>();
    +        m_M   =new std::vector<float>();
    +      }
    +
    +      virtual ~ParticleContainer()
    +      {
    +        // kinematic
    +        if(m_infoSwitch.m_kinematic){
    +      delete m_pt;
    +      delete m_eta;
    +      delete m_phi;
    +      delete m_E;
    +      delete m_M;
    +    }
    +      }
    +
    +      virtual void setTree(TTree *tree)
    +      {
    +
    +    std::string                   counterName = "n"+m_name;
    +    if (!m_suffix.empty())        counterName += "_" + m_suffix;
    +    if (m_infoSwitch.m_useTheS) { counterName += "s";
    +      std::cerr << "WARNING! The useTheS option is depricated in ParticleContainer." << std::endl;
    +    }
    +
    +    tree->SetBranchStatus  (counterName.c_str() , 1);
    +    if(!m_infoSwitch.m_noMultiplicity) tree->SetBranchAddress (counterName.c_str() , &m_n);
    +
    +        if(m_infoSwitch.m_kinematic)
    +          {
    +        // Determine whether mass or energy is saved
    +        std::string mname = branchName("m");
    +        m_useMass=tree->GetBranch(mname.c_str())!=0;
    +
    +        connectBranch<float>(tree,"pt" ,&m_pt);
    +        connectBranch<float>(tree,"eta",&m_eta);
    +        connectBranch<float>(tree,"phi",&m_phi);
    +        if(m_useMass) connectBranch<float>(tree,"m"  ,&m_M);
    +        else          connectBranch<float>(tree,"E"  ,&m_E);
    +          }
    +      }
    +
    +      virtual void setBranches(TTree *tree)
    +      {
    +
    +    std::string              counterName = "n"+m_name;
    +    if (!m_suffix.empty()) { counterName += "_" + m_suffix; }
    +
    +    if(!m_infoSwitch.m_noMultiplicity) tree->Branch(counterName.c_str(),    &m_n, (counterName+"/I").c_str());
    +
    +        if(m_infoSwitch.m_kinematic) {
    +      if(m_useMass)  setBranch<float>(tree,"m",                        m_M                );
    +      else           setBranch<float>(tree,"E",                        m_E                );
    +      setBranch<float>(tree,"pt",                       m_pt               );
    +      setBranch<float>(tree,"phi",                      m_phi              );
    +      setBranch<float>(tree,"eta",                      m_eta              );
    +    }
    +      }
    +
    +      virtual void clear()
    +      {
    +    m_n = 0;
    +
    +        if(m_infoSwitch.m_kinematic) {
    +      if(m_useMass)  m_M->clear();
    +      else           m_E->clear();
    +      m_pt  ->clear();
    +      m_phi ->clear();
    +      m_eta ->clear();
    +    }
    +      }
    +
    +      virtual void FillParticle(const xAOD::IParticle* particle)
    +      {
    +    m_n++;
    +
    +    if( m_infoSwitch.m_kinematic ){
    +      m_pt  -> push_back( particle->pt() / m_units );
    +      m_eta -> push_back( particle->eta() );
    +      m_phi -> push_back( particle->phi() );
    +      if(m_useMass) m_M->push_back  ( particle->m() / m_units );
    +      else          m_E->push_back  ( particle->e() / m_units );
    +    }
    +      }
    +
    +      void updateEntry()
    +      {
    +        m_particles.resize(m_n);
    +
    +        for(int i=0;i<m_n;i++)
    +      updateParticle(i,m_particles[i]);
    +      }
    +
    +      std::vector<T_PARTICLE>& particles()
    +      { return m_particles; }
    +
    +      T_PARTICLE& at_nonConst(uint idx)
    +      { return m_particles[idx]; }
    +
    +      const T_PARTICLE& at(uint idx) const
    +      { return m_particles[idx]; }
    +
    +      const T_PARTICLE& operator[](uint idx) const
    +      { return m_particles[idx]; }
    +
    +      uint size() const
    +      { return m_particles.size(); }
    +
    +
    +    protected:
    +      std::string branchName(const std::string& varName)
    +      {
    +    std::string name = m_name + "_" + varName;
    +    if (! m_suffix.empty()) { name += "_" + m_suffix; }
    +    return name;
    +      }
    +
    +      template <typename T_BR> void connectBranch(TTree *tree, const std::string& branch, std::vector<T_BR> **variable)
    +      {
    +    std::string name = branchName(branch);
    +    if(*variable) { delete (*variable); (*variable)=0; }
    +    if(tree->GetBranch(name.c_str()))
    +      {
    +        (*variable)=new std::vector<T_BR>();
    +        tree->SetBranchStatus  (name.c_str()  , 1);
    +        tree->SetBranchAddress (name.c_str()  , variable);
    +      }
    +      }
    +
    +      template<typename T> void setBranch(TTree* tree, std::string varName, std::vector<T>* localVectorPtr){
    +    std::string name = branchName(varName);
    +    tree->Branch(name.c_str(),        localVectorPtr);
    +      }
    +
    +      template<typename T, typename U, typename V> void safeFill(const V* xAODObj, SG::AuxElement::ConstAccessor<T>& accessor, std::vector<U>* destination, U defaultValue, int units = 1){
    +    if ( accessor.isAvailable( *xAODObj ) ) {
    +      destination->push_back( accessor( *xAODObj ) / units );
    +    } else {
    +      destination->push_back( defaultValue );
    +    }
    +      }
    +
    +
    +      template<typename T, typename U, typename V> void safeVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor<std::vector<T> >& accessor, std::vector<std::vector<U> >* destination, int units = 1){
    +    destination->push_back( std::vector<U>() );
    +
    +    if ( accessor.isAvailable( *xAODObj ) ) {
    +      for(U itemInVec : accessor(*xAODObj))        destination->back().push_back(itemInVec / units);
    +    }
    +    return;
    +      }
    +
    +      template<typename T, typename V> void safeSFVecFill(const V* xAODObj, SG::AuxElement::ConstAccessor<std::vector<T> >& accessor, std::vector<std::vector<T> >* destination, const std::vector<T> &defaultValue) {
    +        if ( accessor.isAvailable( *xAODObj ) ) {
    +          if ( m_storeSystSFs ) {
    +            destination->push_back( accessor(*xAODObj) );
    +          } else {
    +            destination->push_back( std::vector< float > ({accessor(*xAODObj)[0]}) );
    +            //std::cout << "NUMBER: " << std::vector< float > ({accessor(*xAODObj)[0]}) << std::endl;
    +          }
    +        } else {
    +          destination->push_back( defaultValue );
    +        }
    +      }
    +
    +      virtual void updateParticle(uint idx, T_PARTICLE& particle)
    +      {
    +        if(m_infoSwitch.m_kinematic)
    +          {
    +        if(m_useMass){
    +          particle.p4.SetPtEtaPhiM(m_pt ->at(idx),
    +                       m_eta->at(idx),
    +                       m_phi->at(idx),
    +                       m_M  ->at(idx));
    +
    +        } else{
    +          particle.p4.SetPtEtaPhiE(m_pt ->at(idx),
    +                       m_eta->at(idx),
    +                       m_phi->at(idx),
    +                       m_E  ->at(idx));
    +        }
    +      }
    +      }
    +
    +      std::string m_name;
    +
    +      std::vector<T_PARTICLE> m_particles;
    +
    +    public:
    +      T_INFOSWITCH m_infoSwitch;
    +      bool m_mc;
    +      bool m_debug;
    +      float m_units;
    +      bool m_storeSystSFs;
    +
    +      int m_n;
    +
    +
    +    private:
    +      bool        m_useMass;
    +      std::string m_suffix;
    +
    +      //
    +      // Vector branches
    +
    +      // kinematic
    +      std::vector<float> *m_pt;
    +      std::vector<float> *m_eta;
    +      std::vector<float> *m_phi;
    +      std::vector<float> *m_E;
    +      std::vector<float> *m_M;
    +    };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_ParticleContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.html b/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.html new file mode 100644 index 0000000000..e5ddf0b3d5 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.html @@ -0,0 +1,323 @@ + + + + + + + + + + + Program Listing for File ParticlePIDManager.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ParticlePIDManager.h

    +

    Return to documentation for file (xAODAnaHelpers/ParticlePIDManager.h)

    +
    #ifndef xAODAnaHelpers_ParticlePIDManager_H
    +#define xAODAnaHelpers_ParticlePIDManager_H
    +
    +// package include(s):
    +#include "xAODAnaHelpers/HelperClasses.h"
    +#include "xAODAnaHelpers/HelperFunctions.h"
    +
    +#include <AsgMessaging/MessageCheck.h>
    +#include "AsgMessaging/StatusCode.h"
    +
    +#include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h"
    +#include "ElectronPhotonSelectorTools/AsgElectronIsEMSelector.h"
    +#include "ElectronPhotonSelectorTools/egammaPIDdefs.h"
    +#include "ElectronPhotonSelectorTools/LikelihoodEnums.h"
    +
    +// EDM include(s):
    +#include "xAODEgamma/ElectronContainer.h"
    +#include "xAODEgamma/Electron.h"
    +
    +// ROOT include(s):
    +#include "TObject.h"
    +
    +// C++ include(s)
    +#include <string>
    +
    +ANA_MSG_HEADER(msgPIDManager)
    +
    +class ElectronLHPIDManager
    +{
    +  public:
    +    ElectronLHPIDManager ();
    +    ElectronLHPIDManager ( std::string WP, bool debug = false );
    +    ~ElectronLHPIDManager();
    +
    +    StatusCode setupWPs( bool configTools, std::string selector_name = "" );
    +
    +    /* set default values for decorations (do it for all WPs) */
    +    StatusCode setDecorations( const xAOD::Electron* electron );
    +
    +    const std::string getSelectedWP ();
    +
    +    /* returns a map containing all the tools */
    +    std::multimap< std::string, AsgElectronLikelihoodTool* > getAllWPTools()   { return m_allWPTools; };
    +    /* returns a map containing only the tools w/ (WP >= selected WP) */
    +    std::multimap< std::string, AsgElectronLikelihoodTool* > getValidWPTools() { return m_validWPTools; };
    +    /* returns a string containing all the WPs */
    +    const std::set<std::string>  getAllWPs()   { return m_allWPAuxDecors; };
    +    /* returns a string containing only the WPs >= selected WP */
    +    const std::set<std::string>  getValidWPs() { return m_validWPs; };
    +
    +  private:
    +
    +    std::string m_selectedWP;
    +    bool        m_debug;
    +    std::multimap<std::string, AsgElectronLikelihoodTool*> m_allWPTools;
    +    std::multimap<std::string, AsgElectronLikelihoodTool*> m_validWPTools;
    +    std::set<std::string> m_allWPAuxDecors;
    +    std::set<std::string> m_validWPs;
    +
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_VeryLoose;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_Loose;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_LooseBL;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_Medium;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_Tight;
    +
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_VeryLooseLLP;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_LooseLLP;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_MediumLLP;
    +    AsgElectronLikelihoodTool*  m_asgElectronLikelihoodTool_TightLLP;
    +
    +};
    +
    +class ElectronCutBasedPIDManager
    +{
    +  public:
    +    ElectronCutBasedPIDManager ();
    +    ElectronCutBasedPIDManager ( std::string WP, bool debug = false );
    +    ~ElectronCutBasedPIDManager();
    +
    +    StatusCode setupWPs( bool configTools, std::string selector_name = "" );
    +
    +    /* set default values for decorations (do it for all WPs) */
    +    StatusCode setDecorations( const xAOD::Electron* electron );
    +
    +    const std::string getSelectedWP ( ) { return m_selectedWP; }
    +
    +    /* returns a map containing all the tools */
    +    std::multimap< std::string, AsgElectronIsEMSelector* > getAllWPTools() { return m_allWPTools; };
    +    /* returns a map containing only the tools w/ (WP >= selected WP) */
    +    std::multimap< std::string, AsgElectronIsEMSelector* > getValidWPTools() { return m_validWPTools; };
    +    /* returns a string containing all the WPs */
    +    const std::set<std::string>  getAllWPs()   { return m_allWPAuxDecors; };
    +    /* returns a string containing only the WPs >= selected WP */
    +    const std::set<std::string>  getValidWPs() { return m_validWPs; };
    +
    +  private:
    +
    +    std::string m_selectedWP;
    +    bool        m_debug;
    +
    +    std::multimap<std::string, AsgElectronIsEMSelector*> m_allWPTools;
    +    std::multimap<std::string, AsgElectronIsEMSelector*> m_validWPTools;
    +    std::set<std::string> m_allWPAuxDecors;
    +    std::set<std::string> m_validWPs;
    +
    +    AsgElectronIsEMSelector*  m_asgElectronIsEMSelector_Loose;
    +    AsgElectronIsEMSelector*  m_asgElectronIsEMSelector_Medium;
    +    AsgElectronIsEMSelector*  m_asgElectronIsEMSelector_Tight;
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Photon.h.html b/api/program_listing_file_xAODAnaHelpers_Photon.h.html new file mode 100644 index 0000000000..f7fa0c6a51 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Photon.h.html @@ -0,0 +1,269 @@ + + + + + + + + + + + Program Listing for File Photon.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Photon.h

    +

    Return to documentation for file (xAODAnaHelpers/Photon.h)

    +
    #ifndef xAODAnaHelpers_Photon_H
    +#define xAODAnaHelpers_Photon_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +
    +namespace xAH {
    +
    +  class Photon : public Particle
    +  {
    +  public:
    +
    +      // isolation
    +      int    isIsolated_Cone40CaloOnly;
    +      int    isIsolated_Cone40;
    +      int    isIsolated_Cone20;
    +      float  ptcone20;
    +      float  ptcone30;
    +      float  ptcone40;
    +      float  ptvarcone20;
    +      float  ptvarcone30;
    +      float  ptvarcone40;
    +      float  topoetcone20;
    +      float  topoetcone30;
    +      float  topoetcone40;
    +
    +      // PID
    +      int   IsLoose;
    +      int   IsMedium;
    +      int   IsTight;
    +
    +      //Purity
    +      float  radhad1;
    +      float  radhad;
    +      float  e277;
    +      float  reta;
    +      float  rphi;
    +      float  weta2;
    +      float  f1;
    +      float  wtot;
    +      float  deltae;
    +      float  eratio;
    +
    +      // effSF
    +      float LooseEffSF;
    +      float MediumEffSF;
    +      float TightEffSF;
    +
    +      float LooseEffSF_Error;
    +      float MediumEffSF_Error;
    +      float TightEffSF_Error;
    +
    +      // trigger
    +      std::vector<std::string> trigMatched;
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.html b/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.html new file mode 100644 index 0000000000..992027d84e --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.html @@ -0,0 +1,323 @@ + + + + + + + + + + + Program Listing for File PhotonCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonCalibrator.h

    +

    Return to documentation for file (xAODAnaHelpers/PhotonCalibrator.h)

    +
    #ifndef xAODAnaHelpers_PhotonCalibrator_H
    +#define xAODAnaHelpers_PhotonCalibrator_H
    +
    +// CP interface includes
    +#include <PATInterfaces/SystematicRegistry.h>
    +#include <PATInterfaces/SystematicSet.h>
    +#include <PATInterfaces/SystematicsUtil.h>
    +#include <PATInterfaces/SystematicVariation.h>
    +#include <xAODEventInfo/EventInfo.h>
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "EgammaAnalysisInterfaces/IAsgPhotonEfficiencyCorrectionTool.h"
    +#include "IsolationCorrections/IIsolationCorrectionTool.h"
    +
    +class AsgPhotonIsEMSelector;
    +class ElectronPhotonVariableCorrectionTool;
    +
    +namespace CP {
    +  class EgammaCalibrationAndSmearingTool;
    +}
    +
    +
    +// algorithm wrapper
    +#include <xAODAnaHelpers/Algorithm.h>
    +
    +class PhotonCalibrator : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +  // Calibration information
    +  // Tool recommends using map, rather than setting individual calib paths.
    +  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/PhotonEfficiencyRun2#Recommendations_for_full_2015_an
    +  // recommendation is set by tool
    +  std::string m_overridePhotonCalibMap = "";
    +
    +  // ID information
    +  // recommended files here: ElectronLikelihoodLooseOfflineConfig2016_Smooth.conf
    +  std::string m_tightIDConfigPath = "ElectronPhotonSelectorTools/offline/20180825/PhotonIsEMTightSelectorCutDefs.conf";
    +  std::string m_mediumIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMMediumSelectorCutDefs.conf";
    +  std::string m_looseIDConfigPath = "ElectronPhotonSelectorTools/offline/mc15_20150712/PhotonIsEMLooseSelectorCutDefs.conf";
    +
    +  // sort after calibration
    +  bool    m_sort = true;
    +
    +  // systematics
    +  std::string m_inputAlgoSystNames = "";
    +  std::string m_outputAlgoSystNames = "PhotonCalibrator_Syst";
    +
    +  bool        m_useAFII = false; //For backwards compatibility
    +  bool        m_useAF3 = false; //For backwards compatibility
    +  float       m_systVal = 0.0;
    +  std::string m_systName = "";
    +
    +  std::string m_esModel = "es2017_R21_v1";
    +  std::string m_decorrelationModel = "";
    +  int m_randomRunNumber = -1;
    +
    +  bool           m_readIDFlagsFromDerivation = false;
    +
    +private:
    +  std::string m_outAuxContainerName;
    +  std::string m_outSCContainerName;
    +  std::string m_outSCAuxContainerName;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  EL::StatusCode decorate(xAOD::Photon * photon);
    +
    +  // tools
    +  CP::EgammaCalibrationAndSmearingTool* m_EgammaCalibrationAndSmearingTool = nullptr;
    +  asg::AnaToolHandle<CP::IIsolationCorrectionTool> m_isolationCorrectionTool_handle  {"CP::IsolationCorrectionTool/IsolationCorrectionTool", this};
    +
    +  ElectronPhotonVariableCorrectionTool* m_photonVarCorrectionTool = nullptr;
    +  AsgPhotonIsEMSelector*                m_photonTightIsEMSelector = nullptr;
    +  AsgPhotonIsEMSelector*                m_photonMediumIsEMSelector = nullptr;
    +  AsgPhotonIsEMSelector*                m_photonLooseIsEMSelector = nullptr;
    +
    +  asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonTightEffTool_handle {"AsgPhotonEfficiencyCorrectionTool/tight"            , this};
    +  asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonMediumEffTool_handle{"AsgPhotonEfficiencyCorrectionTool/medium"           , this};
    +  asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> m_photonLooseEffTool_handle {"AsgPhotonEfficiencyCorrectionTool/loose"            , this};
    +
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +
    +  // this is a standard constructor
    +  PhotonCalibrator ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(PhotonCalibrator, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.html b/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.html new file mode 100644 index 0000000000..8080349483 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.html @@ -0,0 +1,299 @@ + + + + + + + + + + + Program Listing for File PhotonContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/PhotonContainer.h)

    +
    #ifndef xAODAnaHelpers_PhotonContainer_H
    +#define xAODAnaHelpers_PhotonContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODEgamma/PhotonContainer.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +#include <xAODAnaHelpers/Photon.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +typedef SG::AuxElement::Accessor< std::vector< float > > floatAccessor ;
    +
    +namespace xAH {
    +
    +  class PhotonContainer : public ParticleContainer<Photon,HelperClasses::PhotonInfoSwitch>
    +    {
    +    public:
    +      PhotonContainer(const std::string& name = "ph", const std::string& detailStr="", float units = 1e3, bool mc = false);
    +      virtual ~PhotonContainer();
    +
    +      virtual void setTree(TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillPhoton( const xAOD::Photon* photon );
    +      virtual void FillPhoton( const xAOD::IParticle* particle );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +      virtual void updateParticle(uint idx, Photon& photon);
    +
    +    private:
    +
    +      // isolation
    +      std::vector<int>*   m_isIsolated_Cone40CaloOnly;
    +      std::vector<int>*   m_isIsolated_Cone40;
    +      std::vector<int>*   m_isIsolated_Cone20;
    +      //std::vector<float>* m_etcone20;
    +      std::vector<float>* m_ptcone20;
    +      std::vector<float>* m_ptcone30;
    +      std::vector<float>* m_ptcone40;
    +      std::vector<float>* m_ptvarcone20;
    +      std::vector<float>* m_ptvarcone30;
    +      std::vector<float>* m_ptvarcone40;
    +      std::vector<float>* m_topoetcone20;
    +      std::vector<float>* m_topoetcone30;
    +      std::vector<float>* m_topoetcone40;
    +
    +      // PID
    +      int m_n_IsLoose;
    +      std::vector<int>*   m_IsLoose;
    +      int m_n_IsMedium;
    +      std::vector<int>*   m_IsMedium;
    +      int m_n_IsTight;
    +      std::vector<int>*   m_IsTight;
    +
    +      //Purity
    +      std::vector<float>* m_radhad1;
    +      std::vector<float>* m_radhad;
    +      std::vector<float>* m_e277;
    +      std::vector<float>* m_reta;
    +      std::vector<float>* m_rphi;
    +      std::vector<float>* m_weta2;
    +      std::vector<float>* m_f1;
    +      std::vector<float>* m_wtot;
    +      //std::vector<float>* m_w1;
    +      std::vector<float>* m_deltae;
    +      std::vector<float>* m_eratio;
    +
    +      // effSF
    +      std::vector<float> *m_LooseEffSF;
    +      std::vector<float> *m_MediumEffSF;
    +      std::vector<float> *m_TightEffSF;
    +
    +      std::vector<float> *m_LooseEffSF_Error;
    +      std::vector<float> *m_MediumEffSF_Error;
    +      std::vector<float> *m_TightEffSF_Error;
    +
    +      // trigger
    +      std::vector<std::vector<std::string> > *m_trigMatched;
    +    };
    +}
    +#endif // xAODAnaHelpers_PhotonContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.html b/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.html new file mode 100644 index 0000000000..bfa5470f2f --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_PhotonHists.h.html @@ -0,0 +1,257 @@ + + + + + + + + + + + Program Listing for File PhotonHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonHists.h

    +

    Return to documentation for file (xAODAnaHelpers/PhotonHists.h)

    +
    #ifndef xAODAnaHelpers_PhotonHists_H
    +#define xAODAnaHelpers_PhotonHists_H
    +
    +#include "xAODAnaHelpers/IParticleHists.h"
    +#include <xAODEgamma/PhotonContainer.h>
    +
    +#include <AthContainers/DataVector.h>
    +
    +ANA_MSG_HEADER(msgPhotonHists)
    +
    +class PhotonHists : public IParticleHists
    +{
    +  public:
    +
    +
    +    PhotonHists(std::string name, std::string detailStr);
    +    virtual ~PhotonHists() ;
    +
    +    virtual StatusCode initialize();
    +    virtual StatusCode execute( const xAOD::Photon* photon, float eventWeight, const xAOD::EventInfo* eventInfo = 0);
    +    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    +    using IParticleHists::execute; // overload
    +
    +  protected:
    +
    +    virtual StatusCode execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo = 0 );
    +
    +    // holds bools that control which histograms are filled
    +    HelperClasses::PhotonInfoSwitch* m_infoSwitch;
    +
    +  private:
    +
    +    // clean
    +    TH1F* m_ptcone20;
    +    TH1F* m_ptcone30;
    +    TH1F* m_ptcone40;
    +    TH1F* m_ptvarcone20;
    +    TH1F* m_ptvarcone30;
    +    TH1F* m_ptvarcone40;
    +    TH1F* m_topoetcone20;
    +    TH1F* m_topoetcone30;
    +    TH1F* m_topoetcone40;
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.html new file mode 100644 index 0000000000..6086e42c88 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Program Listing for File PhotonHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/PhotonHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_PhotonHistsAlgo_H
    +#define xAODAnaHelpers_PhotonHistsAlgo_H
    +
    +#include "xAODAnaHelpers/IParticleHistsAlgo.h"
    +
    +class PhotonHistsAlgo : public IParticleHistsAlgo
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  PhotonHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode execute ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode AddHists( std::string name );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(PhotonHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.html b/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.html new file mode 100644 index 0000000000..cbf2cbd0a5 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.html @@ -0,0 +1,322 @@ + + + + + + + + + + + Program Listing for File PhotonSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File PhotonSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/PhotonSelector.h)

    +
    #ifndef xAODAnaHelpers_PhotonSelector_H
    +#define xAODAnaHelpers_PhotonSelector_H
    +
    +// algorithm wrapper
    +#include <xAODAnaHelpers/Algorithm.h>
    +#include <xAODTracking/VertexContainer.h>
    +#include <xAODEgamma/PhotonContainer.h>
    +
    +namespace CP {
    +  class IsolationSelectionTool;
    +}
    +
    +#include <TH1D.h>
    +
    +class PhotonSelector : public xAH::Algorithm
    +{
    +public:
    +
    +  bool m_useCutFlow = true;
    +
    +  std::string    m_inContainerName = "";
    +  std::string    m_outContainerName = "";
    +  std::string    m_inputAlgoSystNames = "";
    +  std::string    m_outputAlgoSystNames = "PhotonSelector_Syst";
    +  bool           m_decorateSelectedObjects = true;
    +  bool           m_createSelectedContainer = true;
    +  int            m_nToProcess = -1;
    +  int            m_pass_min = -1;
    +  int            m_pass_max = -1;
    +  float          m_pT_max = 1e8;
    +  float          m_pT_min = 1e8;
    +  float          m_eta_max = 1e8;
    +  bool           m_vetoCrack = true;
    +  bool           m_doAuthorCut = true;
    +  bool           m_doOQCut = true;
    +  bool           m_readOQFromDerivation = false;
    +
    +  /* photon PID */
    +  std::string    m_photonIdCut = "None";
    +
    +  /* isolation */
    +  std::string    m_MinIsoWPCut = "";
    +  std::string    m_IsoWPList = "FixedCutTightCaloOnly,FixedCutTight,FixedCutLoose";
    +
    +private:
    +  std::string    m_outAuxContainerName;
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +  /* event-level cutflow */
    +
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  /* object-level cutflow */
    +
    +  TH1D* m_ph_cutflowHist_1 = nullptr;
    +
    +  int   m_ph_cutflow_all;
    +  int   m_ph_cutflow_author_cut;
    +  int   m_ph_cutflow_OQ_cut;
    +  int   m_ph_cutflow_PID_cut;
    +  int   m_ph_cutflow_ptmax_cut;
    +  int   m_ph_cutflow_ptmin_cut;
    +  int   m_ph_cutflow_eta_cut;
    +  int   m_ph_cutflow_iso_cut;
    +
    +
    +  std::vector<std::string> m_IsoKeys;
    +
    +  /* tools */
    +  CP::IsolationSelectionTool* m_IsolationSelectionTool = nullptr;
    +
    +public:
    +
    +  /* this is a standard constructor */
    +
    +  PhotonSelector ();
    +
    +  ~PhotonSelector();
    +
    +  /* these are the functions inherited from Algorithm */
    +
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  /* these are the functions not inherited from Algorithm */
    +
    +  bool executeSelection( const xAOD::PhotonContainer* inPhotons, float mcEvtWeight, bool countPass,
    +              ConstDataVector<xAOD::PhotonContainer>* selectedPhotons );
    +  virtual bool passCuts( const xAOD::Photon* photon );
    +
    +
    +  ClassDef(PhotonSelector, 1);
    +
    +};
    +
    +
    +#endif //#ifndef xAODAnaHelpers_PhotonSelector_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Tau.h.html b/api/program_listing_file_xAODAnaHelpers_Tau.h.html new file mode 100644 index 0000000000..4711eb98a2 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Tau.h.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Program Listing for File Tau.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Tau.h

    +

    Return to documentation for file (xAODAnaHelpers/Tau.h)

    +
    #ifndef xAODAnaHelpers_Tau_H
    +#define xAODAnaHelpers_Tau_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +
    +namespace xAH {
    +
    +  class Tau : public Particle
    +  {
    +  public:
    +
    +    // trigger
    +    int                 isTrigMatched;
    +    std::vector<int>    isTrigMatchedToChain;
    +    std::string         listTrigChains;
    +
    +    int                 ntrk;
    +    float               charge;
    +
    +    std::map< std::string, std::vector< float > > TauEff_SF;
    +    std::map< std::string, std::vector< float > > TauTrigEff_SF;
    +
    +    // might need to delete these
    +    int                 isJetRNNSigVeryLoose;
    +    int                 isJetRNNSigLoose;
    +    int                 isJetRNNSigMedium;
    +    int                 isJetRNNSigTight;
    +
    +    float               JetRNNScore;
    +    float               JetRNNScoreSigTrans;
    +
    +    int                 isEleRNNLoose;
    +    int                 isEleRNNMedium;
    +    int                 isEleRNNTight;
    +
    +    float               EleRNNScore;
    +
    +    int                 passEleOLR;
    +
    +    float               matchedJetWidth;
    +    float               matchedJetJvt;
    +
    +    std::vector<float>  tracks_pt;
    +    std::vector<float>  tracks_eta;
    +    std::vector<float>  tracks_phi;
    +
    +    std::vector< int >  tracks_isCore;
    +    std::vector< int >  tracks_isWide;
    +    std::vector< int >  tracks_failTrackFilter;
    +    std::vector< int >  tracks_passTrkSel;
    +    std::vector< int >  tracks_isClCharged;
    +    std::vector< int >  tracks_isClIso;
    +    std::vector< int >  tracks_isClConv;
    +    std::vector< int >  tracks_isClFake;
    +
    +  };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.html b/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.html new file mode 100644 index 0000000000..61f3ebbbb7 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.html @@ -0,0 +1,293 @@ + + + + + + + + + + + Program Listing for File TauCalibrator.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauCalibrator.h

    +

    Return to documentation for file (xAODAnaHelpers/TauCalibrator.h)

    +
    #ifndef xAODAnaHelpers_TauCalibrator_H
    +#define xAODAnaHelpers_TauCalibrator_H
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "TauAnalysisTools/ITauSmearingTool.h"
    +
    +class TauCalibrator : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +
    +  std::string m_RecommendationTag = "";
    +
    +  //  apply a compatibility check between calo TES and MVA TES. For taus that do not pass the test calo based TES is used. Not recommended for 2022-prerec tag.
    +  bool m_applyMVATESQualityCheck = false;
    +  // For 2022-prerec, toggle between smearing/uncertainties calculated from PowhegPythia or Sherpa
    +  std::string m_generator = "";
    +  std::string m_campaign = "";
    +  bool m_setAFII = false;
    +  bool m_setAF3 = false;
    +
    +  bool m_skipTruthMatchCheck = false;
    +
    +  // sort after calibration
    +  bool    m_sort = true;
    +
    +  // systematics
    +  std::string m_inputAlgoSystNames = "";
    +  // this is the name of the vector of names of the systematically varied containers produced by THIS algo (these will be the m_inputAlgoSystNames of the algo downstream)
    +  std::string m_outputAlgoSystNames = "TauCalibrator_Syst";
    +  bool        m_writeSystToMetadata = false;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  std::string m_outAuxContainerName;
    +  std::string m_outSCContainerName;
    +  std::string m_outSCAuxContainerName;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // tools
    +  asg::AnaToolHandle<TauAnalysisTools::ITauSmearingTool> m_tauSmearingTool_handle{"TauAnalysisTools::TauSmearingTool/TauSmearingTool",     this};
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  TauCalibrator ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TauCalibrator, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TauContainer.h.html b/api/program_listing_file_xAODAnaHelpers_TauContainer.h.html new file mode 100644 index 0000000000..b7d51c84a8 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TauContainer.h.html @@ -0,0 +1,296 @@ + + + + + + + + + + + Program Listing for File TauContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/TauContainer.h)

    +
    #ifndef xAODAnaHelpers_TauContainer_H
    +#define xAODAnaHelpers_TauContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODTau/TauJetContainer.h>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +
    +#include <xAODAnaHelpers/Tau.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +  class TauContainer : public ParticleContainer<Tau,HelperClasses::TauInfoSwitch>
    +    {
    +    public:
    +      TauContainer(const std::string& name = "tau", const std::string& detailStr="", float units = 1e3, bool mc = false, bool storeSystSFs = true);
    +      virtual ~TauContainer();
    +
    +      virtual void setTree(TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillTau( const xAOD::TauJet* tau          );
    +      virtual void FillTau( const xAOD::IParticle* particle  );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +      virtual void updateParticle(uint idx, Tau& tau);
    +
    +    private:
    +
    +      // trigger
    +      std::vector<int>               *m_isTrigMatched;
    +      std::vector<std::vector<int> > *m_isTrigMatchedToChain;
    +      std::vector<std::string>       *m_listTrigChains;
    +
    +      std::vector<int>   *m_ntrk;
    +      std::vector<float> *m_charge;
    +
    +      // scale factors w/ sys
    +      // per object
    +      std::map< std::string, std::vector< std::vector< float > > >* m_TauEff_SF;
    +      std::map< std::string, std::vector< std::vector< float > > >* m_TauTrigEff_SF;
    +
    +      // might need to delete these
    +      std::vector<int>   *m_isJetRNNSigVeryLoose;
    +      std::vector<int>   *m_isJetRNNSigLoose;
    +      std::vector<int>   *m_isJetRNNSigMedium;
    +      std::vector<int>   *m_isJetRNNSigTight;
    +
    +      std::vector<float>   *m_JetRNNScore;
    +      std::vector<float>   *m_JetRNNScoreSigTrans;
    +
    +      std::vector<int>   *m_isEleRNNLoose;
    +      std::vector<int>   *m_isEleRNNMedium;
    +      std::vector<int>   *m_isEleRNNTight;
    +
    +      std::vector<float>   *m_EleRNNScore;
    +
    +      std::vector<int>   *m_passEleOLR;
    +
    +      std::vector< float > *m_tau_matchedJetWidth;
    +      std::vector< float > *m_tau_matchedJetJvt;
    +
    +      std::vector< std::vector< float > > *m_tau_tracks_pt;
    +      std::vector< std::vector< float > > *m_tau_tracks_eta;
    +      std::vector< std::vector< float > > *m_tau_tracks_phi;
    +
    +      std::vector< std::vector< int > > *m_tau_tracks_isCore;
    +      std::vector< std::vector< int > > *m_tau_tracks_isWide;
    +      std::vector< std::vector< int > > *m_tau_tracks_failTrackFilter;
    +      std::vector< std::vector< int > > *m_tau_tracks_passTrkSel;
    +      std::vector< std::vector< int > > *m_tau_tracks_isClCharged;
    +      std::vector< std::vector< int > > *m_tau_tracks_isClIso;
    +      std::vector< std::vector< int > > *m_tau_tracks_isClConv;
    +      std::vector< std::vector< int > > *m_tau_tracks_isClFake;
    +
    +    };
    +}
    +#endif // xAODAnaHelpers_TauContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.html b/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.html new file mode 100644 index 0000000000..7c8789520b --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.html @@ -0,0 +1,314 @@ + + + + + + + + + + + Program Listing for File TauEfficiencyCorrector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Program Listing for File TauEfficiencyCorrector.h
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauEfficiencyCorrector.h

    +

    Return to documentation for file (xAODAnaHelpers/TauEfficiencyCorrector.h)

    +
    #ifndef xAODAnaHelpers_TauEfficiencyCorrector_H
    +#define xAODAnaHelpers_TauEfficiencyCorrector_H
    +
    +// CP interface includes
    +#include "PATInterfaces/SystematicRegistry.h"
    +#include "PATInterfaces/SystematicSet.h"
    +#include "PATInterfaces/SystematicsUtil.h"
    +#include "PATInterfaces/SystematicVariation.h"
    +#include "PATInterfaces/ISystematicsTool.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include "AsgTools/AnaToolHandle.h"
    +#include "PileupReweighting/PileupReweightingTool.h"
    +#include "TauAnalysisTools/TauEfficiencyCorrectionsTool.h"
    +#include "TauAnalysisTools/ITauEfficiencyCorrectionsTool.h"
    +#include "TauAnalysisTools/ITauSelectionTool.h"
    +
    +class TauEfficiencyCorrector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +
    +public:
    +
    +  std::string m_RecommendationTag = "";
    +
    +  // configuration variables
    +  std::string   m_inContainerName = "";
    +
    +  // Reco efficiency SF
    +  std::string   m_WorkingPointReco = "";
    +
    +  // EleOLR efficiency SF if the the reco tau is a true tau
    +  std::string   m_WorkingPointEleOLRHadTau = "";
    +
    +  // EleIDLevel efficiency SF if the the reco tau is a true electron
    +  std::string   m_WorkingPointTauEleID = "";
    +
    +  // JetIDLevel efficiency SF
    +  std::string   m_WorkingPointTauJetID = "";
    +
    +  // working point for tauID used in
    +  // combination with the trigger
    +  std::string   m_TriggerName = "";
    +
    +  // systematics
    +  std::string   m_inputSystNamesTaus = "";
    +
    +  bool          m_writeSystToMetadata = false;
    +
    +  float         m_systVal = 0.0;
    +
    +  std::string   m_systName = "";
    +
    +  std::string   m_outputSystNames = "TauEfficiencyCorrector_Syst";
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  std::vector<CP::SystematicSet> m_systList;
    +
    +  // tools
    +  asg::AnaToolHandle<CP::IPileupReweightingTool> m_pileup_tool_handle{"CP::PileupReweightingTool/Pileup"};
    +  asg::AnaToolHandle<TauAnalysisTools::ITauEfficiencyCorrectionsTool> m_tauEffCorrTool_handle{"TauAnalysisTools::TauEfficiencyCorrectionsTool/TauEfficiencyCorrectionsTool",           this};
    +  // the selection tool is needed for baseline configuration
    +  asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool"};
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +
    +  // Tree *myTree; //!
    +  // TH1 *myHist;  //!
    +
    +  // this is a standard constructor
    +  TauEfficiencyCorrector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual EL::StatusCode executeSF ( const xAOD::EventInfo* eventInfo, const xAOD::TauJetContainer* inputTaus, bool nominal, bool writeSystNames );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TauEfficiencyCorrector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.html b/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.html new file mode 100644 index 0000000000..f3a6917ba7 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.html @@ -0,0 +1,285 @@ + + + + + + + + + + + Program Listing for File TauJetMatching.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauJetMatching.h

    +

    Return to documentation for file (xAODAnaHelpers/TauJetMatching.h)

    +
    #ifndef xAODAnaHelpers_TauJetMatching_H
    +#define xAODAnaHelpers_TauJetMatching_H
    +
    +// EDM include(s):
    +#include "xAODTau/TauJet.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODJet/JetContainer.h"
    +#include "xAODJet/Jet.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class TauJetMatching : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +
    +public:
    +
    +  // configuration variables
    +  /* input container name */
    +  std::string    m_inContainerName = "";
    +  /* output container name */
    +  std::string    m_outContainerName;
    +  /* output auxiliary container name */
    +  std::string    m_outAuxContainerName;
    +  std::string    m_inputAlgoSystNames = "";
    +  std::string    m_outputAlgoSystNames = "TauJetMatching_Syst";
    +
    +  std::string    m_inJetContainerName = "";
    +  float          m_DeltaR = 0.2;
    +
    +private:
    +
    +  int m_numEvent;
    +  int m_numObject;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  TauJetMatching ();
    +
    +  ~TauJetMatching();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // added functions not from Algorithm
    +  bool executeDecoration( std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > >, const xAOD::TauJetContainer* tauCont);
    +  float getDR(float eta1, float eta2, float phi1, float phi2);
    +  std::unordered_map<int, std::pair<const xAOD::TauJet*, const xAOD::Jet* > > findBestMatchDR(const xAOD::JetContainer* jetCont,
    +                                                                                              const xAOD::TauJetContainer* tauCont,
    +                                                                                              float best_DR);
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TauJetMatching, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TauSelector.h.html b/api/program_listing_file_xAODAnaHelpers_TauSelector.h.html new file mode 100644 index 0000000000..2c228b6326 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TauSelector.h.html @@ -0,0 +1,365 @@ + + + + + + + + + + + Program Listing for File TauSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TauSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/TauSelector.h)

    +
    #ifndef xAODAnaHelpers_TauSelector_H
    +#define xAODAnaHelpers_TauSelector_H
    +
    +// EDM include(s):
    +#include "xAODTau/TauJet.h"
    +#include "xAODTau/TauJetContainer.h"
    +#include "xAODTau/TauTrack.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// external tools include(s):
    +//#include "TauAnalysisTools/TauSelectionTool.h"
    +#include "AsgTools/AnaToolHandle.h"
    +#include "TrigDecisionTool/TrigDecisionTool.h"
    +#include "TriggerMatchingTool/IMatchingTool.h"
    +#include "TriggerMatchingTool/IMatchScoringTool.h"
    +#include "TauAnalysisTools/ITauSelectionTool.h"
    +
    +//#include "TauAnalysisTools/TauOverlappingElectronLLHDecorator.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class TauSelector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +
    +public:
    +
    +  // cutflow
    +  bool m_useCutFlow = true;
    +
    +  // configuration variables
    +  /* input container name */
    +  std::string    m_inContainerName = "";
    +  /* output container name */
    +  std::string    m_outContainerName;
    +  /* output auxiliary container name */
    +  std::string    m_outAuxContainerName;
    +  std::string    m_inputAlgoSystNames = "";
    +  std::string    m_outputAlgoSystNames = "TauSelector_Syst";
    +  /* decorate selected taus with tracks */
    +  bool           m_decorateWithTracks = false;
    +  /* decorate selected objects - default "passSel" */
    +  bool           m_decorateSelectedObjects = true;
    +  /* Name for selected object decoration*/
    +  std::string  m_decorationName = "passSel";
    +  /* fill using SG::VIEW_ELEMENTS to be light weight */
    +  bool           m_createSelectedContainer = false;
    +  /* look at n objects */
    +  int            m_nToProcess = -1;
    +  /* minimum number of objects passing cuts */
    +  int            m_pass_min = -1;
    +  /* maximum number of objects passing cuts */
    +  int            m_pass_max = -1;
    +  /* path to config file for the TauSelectionTool */
    +
    +  // IMPORTANT: if no working point is specified the one in this configuration will be used
    +  std::string    m_ConfigPath = "xAODAnaHelpers/TauConf/00-01-19/Selection/recommended_selection_mc15.conf";
    +  /* a minimal pT threshold b/c some derivations may apply a thinning on tau tracks' features needed by the TauSelectionTool, which would cause a crash at runtime */
    +  float          m_minPtDAOD = 15e3;
    +  std::string    m_JetIDWP = "";
    +  std::string    m_EleRNNWP = "";
    +  bool           m_EleID = true;
    +
    +  /* trigger matching */
    +
    +  /*
    +   * A comma-separated string w/ all the HLT
    +   * single muon trigger chains for which you want
    +   * to perform the matching. If left empty (as it is by default),
    +   * no trigger matching will be attempted at all
    +   */
    +
    +  std::string    m_singleTauTrigChains = "";
    +
    +  /*
    +   * A comma-separated string w/ all the HLT
    +   * dimuon trigger chains for which you want
    +   * to perform the matching.  If left empty (as it is by default),
    +   * no trigger matching will be attempted at all
    +   */
    +
    +  std::string    m_diTauTrigChains = "";
    +
    +private:
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +  // cutflow
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  bool  m_isUsedBefore = false;
    +
    +  // object cutflow
    +  TH1D* m_tau_cutflowHist_1 = nullptr;
    +  TH1D* m_tau_cutflowHist_2 = nullptr;
    +
    +  int   m_tau_cutflow_all;
    +  int   m_tau_cutflow_selected;
    +
    +  // tools
    +  std::vector<std::string>            m_singleTauTrigChainsList;
    +  std::vector<std::string>            m_diTauTrigChainsList;
    +  asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> m_tauSelTool_handle{"TauAnalysisTools::TauSelectionTool/TauSelectionTool",     this};
    +  asg::AnaToolHandle<Trig::TrigDecisionTool>              m_trigDecTool_handle{"Trig::TrigDecisionTool/TrigDecisionTool"    };
    +  asg::AnaToolHandle<Trig::IMatchingTool>                 m_trigTauMatchTool_handle;
    +  asg::AnaToolHandle<Trig::IMatchScoringTool>             m_scoreTool{"Trig::DRScoringTool/DRScoringTool"};
    +
    +  bool m_doTrigMatch = true;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  TauSelector ();
    +
    +  ~TauSelector();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // added functions not from Algorithm
    +  bool executeSelection( const xAOD::TauJetContainer* inTaus, float mcEvtWeight, bool countPass,
    +                         ConstDataVector<xAOD::TauJetContainer>* selectedTaus );
    +  virtual int passCuts( const xAOD::TauJet* tau );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TauSelector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.html b/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.html new file mode 100644 index 0000000000..37facc5399 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrackContainer.h.html @@ -0,0 +1,286 @@ + + + + + + + + + + + Program Listing for File TrackContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/TrackContainer.h)

    +
    #ifndef xAODAnaHelpers_TrackContainer_H
    +#define xAODAnaHelpers_TrackContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODTracking/TrackParticle.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/TrackPart.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +  class TrackContainer : public ParticleContainer<TrackPart, HelperClasses::TrackInfoSwitch>
    +    {
    +    public:
    +      TrackContainer(const std::string& name = "track", const std::string& detailStr="", float units = 1e3);
    +      virtual ~TrackContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillTrack( const xAOD::TrackParticle* track );
    +      virtual void FillTrack( const xAOD::IParticle* particle );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +
    +      virtual void updateParticle(uint idx, TrackPart& track);
    +
    +    private:
    +      //
    +      // Vector branches
    +      //
    +
    +      std::vector<float>* m_chiSquared;
    +      std::vector<float>* m_d0;
    +      std::vector<std::vector<float> >* m_definingParametersCovMatrix;
    +      std::vector<char>* m_expectInnermostPixelLayerHit;
    +      std::vector<char>* m_expectNextToInnermostPixelLayerHit;
    +      std::vector<float>* m_numberDoF;
    +      std::vector<char>* m_numberOfInnermostPixelLayerHits;
    +      std::vector<char>* m_numberOfNextToInnermostPixelLayerHits;
    +      std::vector<char>* m_numberOfPhiHoleLayers;
    +      std::vector<char>* m_numberOfPhiLayers;
    +      std::vector<char>* m_numberOfPixelDeadSensors;
    +      std::vector<char>* m_numberOfPixelHits;
    +      std::vector<char>* m_numberOfPixelHoles;
    +      std::vector<char>* m_numberOfPixelSharedHits;
    +      std::vector<char>* m_numberOfPrecisionHoleLayers;
    +      std::vector<char>* m_numberOfPrecisionLayers;
    +      std::vector<char>* m_numberOfSCTDeadSensors;
    +      std::vector<char>* m_numberOfSCTHits;
    +      std::vector<char>* m_numberOfSCTHoles;
    +      std::vector<char>* m_numberOfSCTSharedHits;
    +      std::vector<char>* m_numberOfTRTHits;
    +      std::vector<char>* m_numberOfTRTOutliers;
    +      std::vector<float>* m_phi;
    +      std::vector<float>* m_qOverP;
    +      std::vector<float>* m_theta;
    +      std::vector<Int_t>* m_vertexLink;
    +      std::vector<UInt_t>* m_vertexLink_persIndex;
    +      std::vector<UInt_t>* m_vertexLink_persKey;
    +      std::vector<float>* m_vz;
    +      std::vector<float>* m_z0;
    +    };
    +}
    +
    +#endif // xAODAnaHelpers_TrackContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrackHists.h.html b/api/program_listing_file_xAODAnaHelpers_TrackHists.h.html new file mode 100644 index 0000000000..63a53ffe23 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrackHists.h.html @@ -0,0 +1,331 @@ + + + + + + + + + + + Program Listing for File TrackHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackHists.h

    +

    Return to documentation for file (xAODAnaHelpers/TrackHists.h)

    +
    #ifndef xAODAnaHelpers_TrackHists_H
    +#define xAODAnaHelpers_TrackHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include <xAODTracking/TrackParticleContainer.h>
    +#include <xAODTracking/Vertex.h>
    +#include <xAODEventInfo/EventInfo.h>
    +
    +ANA_MSG_HEADER(msgTrackHists)
    +
    +class TrackHists : public HistogramManager
    +{
    +  public:
    +    TrackHists(std::string name, std::string detailStr );
    +    ~TrackHists();
    +
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::TrackParticleContainer* tracks,  const xAOD::Vertex *pvx, float eventWeight,  const xAOD::EventInfo* eventInfo = 0 );
    +    StatusCode execute( const xAOD::TrackParticle* track,            const xAOD::Vertex *pvx, float eventWeight,  const xAOD::EventInfo* eventInfo = 0);
    +    using HistogramManager::book; // make other overloaded versions of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +
    +  protected:
    +    // bools to control which histograms are filled
    +    bool m_fill2D;
    +    bool m_fillIPDetails;
    +    bool m_fillHitCounts;
    +    bool m_fillChi2Details;
    +    bool m_fillTPErrors;
    +    bool m_fillDebugging;
    +    bool m_fillVsLumi;
    +
    +  private:
    +    // Histograms
    +    TH1F* m_trk_n;
    +    TH1F* m_trk_n_l;
    +    TH1F* m_trk_Pt;
    +    TH1F* m_trk_Pt_l;
    +    TH1F* m_trk_P;
    +    TH1F* m_trk_P_l;
    +    TH1F* m_trk_Eta;
    +    TH1F* m_trk_Phi;
    +    TH1F* m_trk_d0;
    +    TH1F* m_trk_d0_s;
    +    TH1F* m_trk_d0_ss;
    +    TH1F* m_trk_z0;
    +    TH1F* m_trk_z0_s;
    +    TH1F* m_trk_chi2Prob;
    +    TH1F* m_trk_charge;
    +    TH1F* m_trk_d0_l;
    +    TH1F* m_trk_d0Err;
    +    TH1F* m_trk_d0Sig;
    +    TH1F* m_trk_z0Err;
    +    TH1F* m_trk_z0_l;
    +    TH1F* m_trk_z0Sig;
    +    TH1F* m_trk_z0sinT;
    +    TH1F* m_trk_z0sinT_l;
    +    TH1F* m_trk_z0SigsinT;
    +    TH1F* m_trk_chi2Prob_l;
    +    TH1F* m_trk_chi2Prob_s;
    +    TH1F* m_trk_chi2Prob_ss;
    +    TH1F* m_trk_chi2ndof;
    +    TH1F* m_trk_chi2ndof_l;
    +    TH1F* m_trk_nSi;
    +    TH1F* m_trk_nSiAndDead;
    +    TH1F* m_trk_nSiDead;
    +    TH1F* m_trk_nSCT;
    +    TH1F* m_trk_nPix;
    +    TH1F* m_trk_nPixHoles;
    +    TH1F* m_trk_nPixDead;
    +    TH1F* m_trk_nTRT;
    +    // TH1F* m_trk_nTRTHoles; //!
    +    // TH1F* m_trk_nTRTDead; //!
    +    TH1F* m_trk_nBL;
    +    TH1F* m_trk_phiErr;
    +    TH1F* m_trk_thetaErr;
    +    TH1F* m_trk_qOpErr;
    +    TH1F* m_trk_mc_prob;
    +    TH1F* m_trk_mc_barcode;
    +    TH1F* m_trk_mc_barcode_s;
    +    TH1F* m_trk_eta_vl;
    +    TH1F* m_trk_z0_vl;
    +    TH1F* m_trk_z0_m;
    +    TH1F* m_trk_z0_raw_m;
    +    TH1F* m_trk_vz;
    +    TH1F* m_trk_z0_atlas_m;
    +    TH1F* m_trk_d0_vl;
    +    TH1F* m_trk_pt_ss;
    +    TH1F* m_trk_phiManyBins;
    +
    +    TH1F*     m_lBlock;
    +    TProfile* m_trk_z0_vs_lBlock;
    +    TProfile* m_trk_z0_raw_vs_lBlock;
    +    TProfile* m_trk_z0_atlas_vs_lBlock;
    +    TProfile* m_trk_vz_vs_lBlock;
    +    TProfile* m_pvz_vs_lBlock;
    +    TProfile* m_pv_valid_vs_lBlock;
    +
    +    TProfile* m_bsX_vs_lBlock;
    +    TProfile* m_bsY_vs_lBlock;
    +    TProfile* m_bsZ_vs_lBlock;
    +    TH1F*    m_bsX;
    +    TH1F*    m_bsY;
    +    TH1F*    m_bsZ;
    +
    +    TH2F* m_trk_Eta_vs_trk_P;
    +    TH2F* m_trk_Eta_vs_trk_P_l;
    +    TH2F* m_trk_Phi_vs_trk_P;
    +    TH2F* m_trk_Phi_vs_trk_P_l;
    +    TH2F* m_trk_Eta_vs_trk_Phi;
    +    TH2F* m_trk_d0_vs_trk_P;
    +    TH2F* m_trk_d0_vs_trk_P_l;
    +    TH2F* m_trk_z0_vs_trk_P;
    +    TH2F* m_trk_z0_vs_trk_P_l;
    +    TH2F* m_trk_z0sinT_vs_trk_P;
    +    TH2F* m_trk_z0sinT_vs_trk_P_l;
    +};
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.html new file mode 100644 index 0000000000..901f2cb943 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.html @@ -0,0 +1,259 @@ + + + + + + + + + + + Program Listing for File TrackHistsAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackHistsAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/TrackHistsAlgo.h)

    +
    #ifndef xAODAnaHelpers_TrackHistsAlgo_H
    +#define xAODAnaHelpers_TrackHistsAlgo_H
    +
    +#include <xAODAnaHelpers/TrackHists.h>
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class TrackHistsAlgo : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  std::string m_inContainerName = "";
    +
    +  // configuration variables
    +  std::string m_detailStr = "";
    +
    +private:
    +  TrackHists* m_plots = nullptr;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  TrackHistsAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TrackHistsAlgo, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrackPart.h.html b/api/program_listing_file_xAODAnaHelpers_TrackPart.h.html new file mode 100644 index 0000000000..7b3bce8ae7 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrackPart.h.html @@ -0,0 +1,264 @@ + + + + + + + + + + + Program Listing for File TrackPart.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackPart.h

    +

    Return to documentation for file (xAODAnaHelpers/TrackPart.h)

    +
    #ifndef xAODAnaHelpers_TrackPart_H
    +#define xAODAnaHelpers_TrackPart_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +namespace xAH {
    +  class TrackPart : public Particle
    +  {
    +  public:
    +    // TrackPart() { };
    +    // virtual ~TrackPart();
    +
    +    float chiSquared;
    +    float d0;
    +
    +    std::vector<float> definingParametersCovMatrix;
    +    char expectInnermostPixelLayerHit;
    +    char expectNextToInnermostPixelLayerHit;
    +
    +    float numberDoF;
    +
    +    char numberOfInnermostPixelLayerHits;
    +    char numberOfNextToInnermostPixelLayerHits;
    +    char numberOfPhiHoleLayers;
    +    char numberOfPhiLayers;
    +    char numberOfPixelDeadSensors;
    +    char numberOfPixelHits;
    +    char numberOfPixelHoles;
    +    char numberOfPixelSharedHits;
    +    char numberOfPrecisionHoleLayers;
    +    char numberOfPrecisionLayers;
    +    char numberOfSCTDeadSensors;
    +    char numberOfSCTHits;
    +    char numberOfSCTHoles;
    +    char numberOfSCTSharedHits;
    +    char numberOfTRTHits;
    +    char numberOfTRTOutliers;
    +
    +    float phi;
    +    float qOverP;
    +    float theta;
    +
    +    Int_t vertexLink;
    +    UInt_t vertexLink_persIndex;
    +    UInt_t vertexLink_persKey;
    +
    +    float vz;
    +    float z0;
    +
    +  };
    +} //xAH
    +
    +#endif // xAODAnaHelpers_TrackPart_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.html b/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.html new file mode 100644 index 0000000000..a5d26d0202 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrackSelector.h.html @@ -0,0 +1,338 @@ + + + + + + + + + + + Program Listing for File TrackSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrackSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/TrackSelector.h)

    +
    #ifndef xAODAnaHelpers_TrackSelector_H
    +#define xAODAnaHelpers_TrackSelector_H
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// EDM include(s):
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODTracking/TrackParticleContainer.h"
    +
    +// external tools include(s):
    +#include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
    +#include "AsgTools/AnaToolHandle.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +
    +class TrackSelector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +
    +  bool m_useCutFlow = true;
    +
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +  std::string m_inJetContainerName = "";
    +  bool  m_decorateSelectedObjects = true;
    +  bool  m_createSelectedContainer = false;
    +  int   m_nToProcess = -1;
    +  int   m_pass_min = -1;
    +  int   m_pass_max = -1;
    +  std::string m_cutLevelString = "";
    +  float m_pT_max = 1e8;
    +  float m_pT_min = 1e8;
    +  float m_p_min = 1e8;
    +  float m_eta_max = 1e8;
    +  float m_eta_min = 1e8;
    +  float m_etaSigned_min = 1e8;
    +  float m_etaSigned_max = 1e8;
    +  float m_d0_max = 1e8;
    +  float m_z0_max = 1e8;
    +  float m_sigmad0_max = 1e8;
    +  float m_d0oversigmad0_max = 1e8;
    +  float m_z0sinT_max = 1e8;
    +  float m_sigmaz0_max = 1e8;
    +  float m_sigmaz0sintheta_max = 1e8;
    +  float m_z0oversigmaz0_max = 1e8;
    +  float m_z0sinthetaoversigmaz0sintheta_max=1e8;
    +  int   m_nPixelHits_min =1e8;
    +  int   m_nPixelHitsPhysical_min =1e8;
    +  int   m_nSctHits_min =1e8;
    +  int   m_nSctHitsPhysical_min =1e8;
    +  int   m_nSi_min = 1e8;
    +  int   m_nSiPhysical_min = 1e8;
    +  int   m_nPixHoles_max = 1e8;
    +  int   m_nSctHoles_max = 1e8;
    +  int   m_nSiHoles_max =1e8;
    +  int   m_nInnermostPixel_min =1e8;
    +  int   m_nNextToInnermostPixel_min =1e8;
    +  int   m_nBothInnermostLayersHits_min =1e8;
    +  int   m_nPixelSharedHits_max =1e8;
    +  int   m_nSctSharedHits_max =1e8;
    +  int   m_nSiSharedHits_max =1e8;
    +  int   m_nSiSharedModules_max =1e8;
    +  float m_chi2NdofCut_max = 1e8;
    +  float m_chi2Prob_max = 1e8;
    +  float m_chi2Prob_min = 1e8;
    +  int m_nBL_min = 1e8;
    +
    +
    +  std::string              m_passAuxDecorKeys = "";
    +  std::string              m_failAuxDecorKeys = "";
    +
    +  bool m_doTracksInJets = false;
    +
    +private:
    +
    +  std::vector<std::string> m_passKeys;
    +  std::vector<std::string> m_failKeys;
    +
    +  asg::AnaToolHandle <InDet::IInDetTrackSelectionTool> m_trkSelTool_handle{"InDet::InDetTrackSelectionTool/TrackSelectionTool", this};
    +
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_numObjectPass;
    +
    +  // cutflow
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +
    +
    +  // this is a standard constructor
    +  TrackSelector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  EL::StatusCode executeTrackCollection (float mcEvtWeight);
    +  EL::StatusCode executeTracksInJets ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // added functions not from Algorithm
    +  // why does this need to be virtual?
    +  virtual int PassCuts( const xAOD::TrackParticle* jet, const xAOD::Vertex *pvx );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TrackSelector, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.html b/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.html new file mode 100644 index 0000000000..2ce48d47bd --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + Program Listing for File TracksInJetHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TracksInJetHists.h

    +

    Return to documentation for file (xAODAnaHelpers/TracksInJetHists.h)

    +
    #ifndef xAODAnaHelpers_TracksInJetHists_H
    +#define xAODAnaHelpers_TracksInJetHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include <xAODJet/Jet.h>
    +#include <xAODAnaHelpers/TrackHists.h>
    +
    +ANA_MSG_HEADER(msgTracksInJetHists)
    +
    +class TracksInJetHists : public HistogramManager
    +{
    +  public:
    +    TracksInJetHists(std::string name, std::string detailStr );
    +    ~TracksInJetHists();
    +
    +    float getD0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet);
    +    float getZ0Sign(const xAOD::TrackParticle* trk, const xAOD::Jet* jet, const xAOD::Vertex *pvx);
    +
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::TrackParticle* trk, const xAOD::Jet* jet,  const xAOD::Vertex *pvx, float eventWeight, const xAOD::EventInfo* eventInfo );
    +    using HistogramManager::book; // make other overloaded versions of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +    virtual void record(EL::IWorker* wk);
    +
    +  protected:
    +
    +  private:
    +
    +    TrackHists*       m_trkPlots;
    +
    +    // Histograms
    +    TH1F* m_trk_d0                ;
    +    TH1F* m_trk_d0Sig           ;
    +    TH1F* m_trk_d0SigPDF        ;
    +    TH2F* m_trk_z0sinTd0        ;
    +    TH1F* m_trk_z0_signed         ;
    +    TH1F* m_trk_z0sinT_signed     ;
    +    TH1F* m_trk_z0Sig_signed      ;
    +    TH1F* m_trk_z0Sig_signed_pdf  ;
    +    TH1F* m_trk_z0SigsinT_signed  ;
    +    TH1F* m_trk_jetdPhi         ;
    +    TH1F* m_trk_jetdEta         ;
    +    TH1F* m_trk_jetdR           ;
    +    TH1F* m_trk_jetdR_l              ;
    +
    +
    +};
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.html b/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.html new file mode 100644 index 0000000000..b0b70f2702 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.html @@ -0,0 +1,343 @@ + + + + + + + + + + + Program Listing for File TreeAlgo.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TreeAlgo.h

    +

    Return to documentation for file (xAODAnaHelpers/TreeAlgo.h)

    +
    #ifndef xAODAnaHelpers_TreeAlgo_H
    +#define xAODAnaHelpers_TreeAlgo_H
    +
    +#include "TTree.h"
    +
    +#include <xAODAnaHelpers/HelpTreeBase.h>
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class TreeAlgo : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  // choose whether the tree gets saved in the same directory as output histograms
    +  bool m_outHistDir = false;
    +  std::string m_treeStreamName = "tree";
    +
    +  // holds bools that control which branches are filled
    +  std::string m_evtDetailStr = "";
    +  std::string m_trigDetailStr = "";
    +  std::string m_muDetailStr = "";
    +  std::string m_elDetailStr = "";
    +  std::string m_jetDetailStr = "";
    +  std::string m_trigJetDetailStr = "";
    +  std::string m_truthJetDetailStr = "";
    +  std::string m_fatJetDetailStr = "";
    +  std::string m_truthFatJetDetailStr = "";
    +  std::string m_tauDetailStr = "";
    +  std::string m_METDetailStr = "";
    +  std::string m_METReferenceDetailStr = "";
    +  std::string m_photonDetailStr = "";
    +  std::string m_clusterDetailStr = "";
    +  std::string m_truthParticlesDetailStr = "";
    +  std::string m_trackParticlesDetailStr = "";
    +  std::string m_vertexDetailStr = "";
    +
    +  std::string m_evtContainerName = "";
    +  std::string m_muContainerName = "";
    +  std::string m_elContainerName = "";
    +  std::string m_jetContainerName = "";
    +  std::string m_jetBranchName = "jet";
    +  std::string m_truthJetContainerName = "";
    +  std::string m_truthJetBranchName = "truthJet";
    +  std::string m_trigJetContainerName = "";
    +  std::string m_trigJetBranchName = "trigJet";
    +  std::string m_fatJetContainerName = "";
    +  std::string m_fatJetBranchName = ""; // default is to use container name
    +  std::string m_truthFatJetContainerName = "";
    +  std::string m_truthFatJetBranchName = "truth_fatjet";
    +  std::string m_tauContainerName = "";
    +  std::string m_METContainerName = "";
    +  std::string m_METReferenceContainerName = "";
    +  std::string m_photonContainerName = "";
    +  std::string m_clusterContainerName = "";
    +  std::string m_clusterBranchName = "CaloCalTopoClusters";
    +  std::string m_truthParticlesContainerName = "";
    +  std::string m_truthParticlesBranchName = "xAH_truth";
    +  std::string m_trackParticlesContainerName = "";
    +  std::string m_l1JetContainerName = "";
    +  std::string m_l1JetBranchName    = "L1Jet";
    +  std::string m_vertexBranchName   = "vertex";
    +  bool m_sortL1Jets = false;
    +  bool m_retrievePV = true;
    +
    +  // if these are set, assume systematics are being processed over
    +  std::string m_muSystsVec = "";
    +  std::string m_elSystsVec = "";
    +  std::string m_tauSystsVec = "";
    +  std::string m_jetSystsVec = "";
    +  std::string m_photonSystsVec = "";
    +  std::string m_fatJetSystsVec = "";
    +  std::string m_metSystsVec = "";
    +
    +  float m_units = 1e3;
    +
    +  int m_autoFlush = 0;
    +
    +protected:
    +  std::vector<std::string> m_jetDetails;
    +  std::vector<std::string> m_trigJetDetails;
    +  std::vector<std::string> m_fatJetDetails;
    +
    +  std::vector<std::string> m_jetContainers;
    +  std::vector<std::string> m_truthJetContainers;
    +  std::vector<std::string> m_trigJetContainers;
    +  std::vector<std::string> m_fatJetContainers;
    +  std::vector<std::string> m_l1JetContainers;
    +  std::vector<std::string> m_vertexContainers;
    +  std::vector<std::string> m_truthParticlesContainers;
    +
    +  std::vector<std::string> m_jetBranches;
    +  std::vector<std::string> m_truthJetBranches;
    +  std::vector<std::string> m_trigJetBranches;
    +  std::vector<std::string> m_fatJetBranches;
    +  std::vector<std::string> m_l1JetBranches;
    +  std::vector<std::string> m_vertexBranches;
    +  std::vector<std::string> m_truthParticlesBranches;
    +
    +  std::vector<std::string> m_clusterDetails;
    +  std::vector<std::string> m_clusterContainers;
    +  std::vector<std::string> m_clusterBranches;
    +
    +  std::vector<std::string> m_vertexDetails;
    +
    +  std::map<std::string, HelpTreeBase*> m_trees;
    +
    +public:
    +
    +  // this is a standard constructor
    +  TreeAlgo ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // Help tree creator function
    +  virtual HelpTreeBase* createTree(xAOD::TEvent *event, TTree* tree, TFile* file, const float units, bool debug, xAOD::TStore* store);
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TreeAlgo, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.html b/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.html new file mode 100644 index 0000000000..1301684b3f --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.html @@ -0,0 +1,266 @@ + + + + + + + + + + + Program Listing for File TrigMatcher.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TrigMatcher.h

    +

    Return to documentation for file (xAODAnaHelpers/TrigMatcher.h)

    +
    #ifndef xAODAnaHelpers_TrigMatcher_H
    +#define xAODAnaHelpers_TrigMatcher_H
    +
    +// algorithm wrapper
    +#include <xAODAnaHelpers/Algorithm.h>
    +
    +#include <AsgTools/AnaToolHandle.h>
    +#include <TrigDecisionTool/TrigDecisionTool.h>
    +#include <TriggerMatchingTool/IMatchingTool.h>
    +#include "TriggerMatchingTool/IMatchScoringTool.h"
    +
    +#include <TH1D.h>
    +
    +class TrigMatcher : public xAH::Algorithm
    +{
    +public:
    +  /* configuration variables */
    +
    +  std::string    m_inContainerName = "";
    +  std::string    m_systNames = "";
    +
    +  std::string    m_trigChains = "";
    +
    +private:
    +
    +  /* tools */
    +  asg::AnaToolHandle<Trig::TrigDecisionTool> m_trigDecTool_handle  {"Trig::TrigDecisionTool/TrigDecisionTool"             };
    +  asg::AnaToolHandle<Trig::IMatchingTool>    m_trigMatchTool_handle;
    +  asg::AnaToolHandle<Trig::IMatchScoringTool>  m_scoreTool {"Trig::DRScoringTool/DRScoringTool"};
    +
    +  std::vector<std::string> m_trigChainsList;
    +
    +public:
    +
    +  /* this is a standard constructor */
    +
    +  TrigMatcher ();
    +
    +  ~TrigMatcher();
    +
    +  /* these are the functions inherited from Algorithm */
    +
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +
    +  /* these are the functions not inherited from Algorithm */
    +  EL::StatusCode executeMatching( const xAOD::IParticleContainer* inParticles );
    +
    +  ClassDef(TrigMatcher, 1);
    +
    +};
    +
    +
    +#endif //#ifndef xAODAnaHelpers_TrigMatcher_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.html b/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.html new file mode 100644 index 0000000000..bb7eeaf83c --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TruthContainer.h.html @@ -0,0 +1,298 @@ + + + + + + + + + + + Program Listing for File TruthContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TruthContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/TruthContainer.h)

    +
    #ifndef xAODAnaHelpers_TruthContainer_H
    +#define xAODAnaHelpers_TruthContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include "xAODTruth/TruthParticle.h"
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include <xAODAnaHelpers/TruthPart.h>
    +#include <xAODAnaHelpers/ParticleContainer.h>
    +
    +namespace xAH {
    +
    +    class TruthContainer : public ParticleContainer<TruthPart,HelperClasses::TruthInfoSwitch>
    +    {
    +    public:
    +      TruthContainer(const std::string& name = "truth", const std::string& detailStr="", float units = 1e3);
    +      virtual ~TruthContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillTruth( const xAOD::TruthParticle* truth );
    +      virtual void FillTruth( const xAOD::IParticle* particle );
    +      using ParticleContainer::setTree; // make other overloaded version of execute() to show up in subclass
    +
    +    protected:
    +
    +      virtual void updateParticle(uint idx, TruthPart& truth);
    +
    +    private:
    +
    +
    +      //
    +      // Vector branches
    +      //
    +
    +      // All
    +      std::vector<int>* m_pdgId;
    +      std::vector<int>* m_status;
    +      std::vector<int>* m_barcode;
    +
    +      // type
    +      std::vector<int>* m_is_higgs;
    +      std::vector<int>* m_is_bhad;
    +
    +      // bVtx
    +      std::vector<float>* m_Bdecay_x;
    +      std::vector<float>* m_Bdecay_y;
    +      std::vector<float>* m_Bdecay_z;
    +
    +      // parents
    +      std::vector<int>* m_nParents;
    +      std::vector< std::vector<int> >* m_parent_pdgId;
    +      std::vector< std::vector<int> >* m_parent_barcode;
    +      std::vector< std::vector<int> >* m_parent_status;
    +
    +      // children
    +      std::vector<int>* m_nChildren;
    +      std::vector< std::vector<int> >* m_child_pdgId;
    +      std::vector< std::vector<int> >* m_child_barcode;
    +      std::vector< std::vector<int> >* m_child_status;
    +
    +      // dressed
    +      std::vector<float>* m_pt_dressed;
    +      std::vector<float>* m_eta_dressed;
    +      std::vector<float>* m_phi_dressed;
    +      std::vector<float>* m_e_dressed;
    +
    +      // origin
    +      std::vector<unsigned int>* m_origin;
    +
    +      // particle type
    +      std::vector<unsigned int>* m_particleType;
    +
    +    };
    +}
    +
    +
    +
    +#endif // xAODAnaHelpers_TruthContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TruthPart.h.html b/api/program_listing_file_xAODAnaHelpers_TruthPart.h.html new file mode 100644 index 0000000000..322bf49d81 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TruthPart.h.html @@ -0,0 +1,265 @@ + + + + + + + + + + + Program Listing for File TruthPart.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TruthPart.h

    +

    Return to documentation for file (xAODAnaHelpers/TruthPart.h)

    +
    #ifndef xAODAnaHelpers_TruthPart_H
    +#define xAODAnaHelpers_TruthPart_H
    +
    +#include "xAODAnaHelpers/Particle.h"
    +
    +namespace xAH {
    +
    +  class TruthPart : public Particle
    +    {
    +    public:
    +
    +      //TruthPart() { };
    +      //virtual ~TruthPart();
    +      int pdgId;
    +      int status;
    +      int barcode;
    +
    +      // type
    +      bool is_higgs;
    +      bool is_bhad;
    +
    +      // BVtx
    +      float Bdecay_x;
    +      float Bdecay_y;
    +      float Bdecay_z;
    +
    +      // Parents
    +      int nParents;
    +      std::vector<int> parent_pdgId;
    +      std::vector<int> parent_barcode;
    +      std::vector<int> parent_status;
    +
    +      // Children
    +      int nChildren;
    +      std::vector<int> child_pdgId;
    +      std::vector<int> child_barcode;
    +      std::vector<int> child_status;
    +
    +      // Dressed
    +      float pt_dressed;
    +      float eta_dressed;
    +      float phi_dressed;
    +      float e_dressed;
    +
    +      // Origin
    +      unsigned int origin;
    +
    +      // Type
    +      unsigned int type;
    +
    +    };
    +
    +}//xAH
    +#endif // xAODAnaHelpers_Particle_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.html b/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.html new file mode 100644 index 0000000000..aaad451d97 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_TruthSelector.h.html @@ -0,0 +1,314 @@ + + + + + + + + + + + Program Listing for File TruthSelector.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File TruthSelector.h

    +

    Return to documentation for file (xAODAnaHelpers/TruthSelector.h)

    +
    #ifndef xAODAnaHelpers_TruthSelector_H
    +#define xAODAnaHelpers_TruthSelector_H
    +
    +// EDM include(s):
    +#include "xAODTruth/TruthParticle.h"
    +#include "xAODTruth/TruthParticleContainer.h"
    +
    +// ROOT include(s):
    +#include "TH1D.h"
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +// external tools include(s):
    +#include "xAODBTaggingEfficiency/BTaggingSelectionTool.h"
    +
    +class TruthSelector : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  bool m_useCutFlow = true;
    +
    +  // configuration variables
    +  std::string m_inContainerName = "";
    +  std::string m_outContainerName = "";
    +  std::string m_decor = "passSel";
    +  bool m_decorateSelectedObjects = true;
    +  bool m_createSelectedContainer = false;
    +  int m_nToProcess = -1;
    +  int m_pass_min = -1;
    +  int m_pass_max = -1;
    +  float m_pT_max = 1e8;
    +  float m_pT_min = 1e8;
    +  float m_eta_max = 1e8;
    +  float m_eta_min = 1e8;
    +  float m_mass_max = 1e8;
    +  float m_mass_min = 1e8;
    +  float m_rapidity_max = 1e8;
    +  float m_rapidity_min = 1e8;
    +  unsigned int m_type = 1000; // this will apply no selection
    +  std::string m_typeOptions; // this will apply no selection
    +  unsigned int m_origin = 1000; // this will apply no selection
    +  std::string m_originOptions; // this will apply no selection
    +  float m_pT_dressed_min = 1e8;
    +  float m_eta_dressed_min = 1e8;
    +  float m_eta_dressed_max = 1e8;
    +
    +private:
    +  int m_numEvent;
    +  int m_numObject;
    +  int m_numEventPass;
    +  int m_weightNumEventPass;
    +  int m_numObjectPass;
    +
    +  // cutflow
    +  TH1D* m_cutflowHist = nullptr;
    +  TH1D* m_cutflowHistW = nullptr;
    +  int   m_cutflow_bin;
    +
    +  /* object-level cutflow */
    +
    +  TH1D* m_truth_cutflowHist_1 = nullptr;
    +
    +  int   m_truth_cutflow_all;
    +  int   m_truth_cutflow_ptmax_cut;
    +  int   m_truth_cutflow_ptmin_cut;
    +  int   m_truth_cutflow_eta_cut;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  TruthSelector ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // these are the functions not inherited from Algorithm
    +  virtual bool executeSelection( const xAOD::TruthParticleContainer* inTruthParts, float mcEvtWeight, bool count, std::string outContainerName );
    +
    +  // added functions not from Algorithm
    +  // why does this need to be virtual?
    +  virtual int PassCuts( const xAOD::TruthParticle* truthPart );
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(TruthSelector, 1);
    +
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.html b/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.html new file mode 100644 index 0000000000..56bd38b222 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_VertexContainer.h.html @@ -0,0 +1,276 @@ + + + + + + + + + + + Program Listing for File VertexContainer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File VertexContainer.h

    +

    Return to documentation for file (xAODAnaHelpers/VertexContainer.h)

    +
    #ifndef xAODAnaHelpers_VertexContainer_H
    +#define xAODAnaHelpers_VertexContainer_H
    +
    +#include <TTree.h>
    +#include <TLorentzVector.h>
    +
    +#include <vector>
    +#include <string>
    +
    +#include <xAODAnaHelpers/HelperClasses.h>
    +#include <xAODAnaHelpers/HelperFunctions.h>
    +
    +#include "xAODTracking/VertexContainer.h"
    +#include "xAODTruth/TruthVertexContainer.h"
    +
    +namespace xAH {
    +
    +    class VertexContainer
    +    {
    +    public:
    +      VertexContainer(const std::string& detailStr, const std::string& name = "vertex");
    +      virtual ~VertexContainer();
    +
    +      virtual void setTree    (TTree *tree);
    +      virtual void setBranches(TTree *tree);
    +      virtual void clear();
    +      virtual void FillVertices( const xAOD::VertexContainer* vertices);
    +      virtual void FillTruthVertices( const xAOD::TruthVertexContainer* truthVertices);
    +
    +      std::string m_name;
    +
    +      std::string branchName(const std::string& varName)
    +      {
    +        std::string name = m_name + "_" + varName;
    +        return name;
    +      }
    +
    +      template <typename T_BR> void connectBranch(TTree *tree, const std::string& branch, std::vector<T_BR> **variable)
    +      {
    +        std::string name = branchName(branch);
    +        if(*variable) { delete (*variable); (*variable)=0; }
    +        if(tree->GetBranch(name.c_str()))
    +          {
    +            (*variable)=new std::vector<T_BR>();
    +            tree->SetBranchStatus  (name.c_str()  , 1);
    +            tree->SetBranchAddress (name.c_str()  , variable);
    +          }
    +      }
    +
    +      template<typename T> void setBranch(TTree* tree, std::string varName, std::vector<T>* localVectorPtr){
    +        std::string name = branchName(varName);
    +        tree->Branch(name.c_str(),        localVectorPtr);
    +      }
    +
    +    private:
    +      // Vector branches
    +      std::vector<float>* m_vertex_x;
    +      std::vector<float>* m_vertex_y;
    +      std::vector<float>* m_vertex_z;
    +      std::string         m_detailStr;
    +    };
    +
    +}
    +
    +#endif // xAODAnaHelpers_VertexContainer_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_VtxHists.h.html b/api/program_listing_file_xAODAnaHelpers_VtxHists.h.html new file mode 100644 index 0000000000..83707df594 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_VtxHists.h.html @@ -0,0 +1,310 @@ + + + + + + + + + + + Program Listing for File VtxHists.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File VtxHists.h

    +

    Return to documentation for file (xAODAnaHelpers/VtxHists.h)

    +
    #ifndef xAODAnaHelpers_VtxHists_H
    +#define xAODAnaHelpers_VtxHists_H
    +
    +#include "xAODAnaHelpers/HistogramManager.h"
    +#include <xAODTracking/TrackParticleContainer.h>
    +#include <xAODTracking/VertexContainer.h>
    +#include <xAODTracking/Vertex.h>
    +#include <xAODTracking/TrackParticle.h>
    +
    +ANA_MSG_HEADER(msgVtxHists)
    +
    +class VtxHists : public HistogramManager
    +{
    +  public:
    +    VtxHists(std::string name, std::string detailStr );
    +    ~VtxHists();
    +
    +    StatusCode initialize();
    +    StatusCode execute( const xAOD::VertexContainer* vtxs,  float eventWeight );
    +    StatusCode execute( const xAOD::Vertex *vtx, float eventWeight );
    +
    +    // Use tracks passed in to calculate isolated track quantities
    +    StatusCode execute( const xAOD::VertexContainer* vtxs,  const xAOD::TrackParticleContainer* trks, float eventWeight );
    +    StatusCode execute( const xAOD::Vertex *vtx,            const xAOD::TrackParticleContainer* trks, float eventWeight );
    +
    +
    +    using HistogramManager::book; // make other overloaded versions of book() to show up in subclass
    +    using HistogramManager::execute; // overload
    +
    +  protected:
    +    // bools to control which histograms are filled
    +    bool m_fillTrkDetails;
    +    bool m_fillIsoTrkDetails;
    +    bool m_fillDebugging;
    +    bool m_fillTrkPtDetails;
    +
    +  private:
    +
    +    float getIso( const xAOD::TrackParticle *inTrack,            const xAOD::TrackParticleContainer* trks, float z0_cut = 2, float cone_size = 0.2);
    +
    +    // Histograms
    +    TH1F* h_type              ;
    +    TH1F* h_nTrks              ;
    +    TH1F* h_nTrks_l              ;
    +    TH1F* h_trk_Pt              ;
    +    TH1F* h_trk_Pt_l              ;
    +    TH1F* h_nTrks1GeV      ;
    +    TH1F* h_nTrks2GeV      ;
    +    TH1F* h_nTrks5GeV      ;
    +    TH1F* h_nTrks10GeV     ;
    +    TH1F* h_nTrks15GeV     ;
    +    TH1F* h_nTrks20GeV     ;
    +    TH1F* h_nTrks25GeV     ;
    +    TH1F* h_nTrks30GeV     ;
    +    TH1F* h_pt_miss_x    ;
    +    TH1F* h_pt_miss_x_l  ;
    +    TH1F* h_pt_miss_y    ;
    +    TH1F* h_pt_miss_y_l  ;
    +    TH1F* h_pt_miss    ;
    +    TH1F* h_pt_miss_l  ;
    +
    +    // Pt of the nth track
    +    unsigned int m_nLeadTrackPts ;
    +    std::vector<TH1F*> h_trk_max_Pt              ;
    +    std::vector<TH1F*> h_trk_max_Pt_l              ;
    +
    +
    +    TH1F* h_trkIsoAll              ;
    +    TH1F* h_trkIso             ;
    +    TH1F* h_nIsoTrks              ;
    +    TH1F* h_nIsoTrks_l              ;
    +    TH1F* h_IsoTrk_Pt              ;
    +    TH1F* h_IsoTrk_Pt_l              ;
    +    TH1F* h_nIsoTrks1GeV      ;
    +    TH1F* h_nIsoTrks2GeV      ;
    +    TH1F* h_nIsoTrks5GeV      ;
    +    TH1F* h_nIsoTrks10GeV     ;
    +    TH1F* h_nIsoTrks15GeV     ;
    +    TH1F* h_nIsoTrks20GeV     ;
    +    TH1F* h_nIsoTrks25GeV     ;
    +    TH1F* h_nIsoTrks30GeV     ;
    +    TH1F* h_dZ0Before         ;
    +    TH1F* h_pt_miss_iso_x    ;
    +    TH1F* h_pt_miss_iso_x_l  ;
    +    TH1F* h_pt_miss_iso_y    ;
    +    TH1F* h_pt_miss_iso_y_l  ;
    +    TH1F* h_pt_miss_iso    ;
    +    TH1F* h_pt_miss_iso_l  ;
    +
    +    // Pt of the nth track
    +    unsigned int m_nLeadIsoTrackPts ;
    +    std::vector<TH1F*> h_IsoTrk_max_Pt              ;
    +    std::vector<TH1F*> h_IsoTrk_max_Pt_l              ;
    +
    +
    +};
    +
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_Writer.h.html b/api/program_listing_file_xAODAnaHelpers_Writer.h.html new file mode 100644 index 0000000000..842f843f63 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_Writer.h.html @@ -0,0 +1,261 @@ + + + + + + + + + + + Program Listing for File Writer.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File Writer.h

    +

    Return to documentation for file (xAODAnaHelpers/Writer.h)

    +
    #ifndef xAODAnaHelpers_Writer_H
    +#define xAODAnaHelpers_Writer_H
    +
    +// algorithm wrapper
    +#include "xAODAnaHelpers/Algorithm.h"
    +
    +class Writer : public xAH::Algorithm
    +{
    +  // put your configuration variables here as public variables.
    +  // that way they can be set directly from CINT and python.
    +public:
    +  TString m_outputLabel = "";
    +
    +  TString m_jetContainerNamesStr = "";
    +  TString m_electronContainerNamesStr = "";
    +  TString m_muonContainerNamesStr = "";
    +
    +private:
    +  int m_numEvent;
    +
    +  std::vector<TString> m_jetContainerNames;
    +  std::vector<TString> m_electronContainerNames;
    +  std::vector<TString> m_muonContainerNames;
    +
    +  // variables that don't get filled at submission time should be
    +  // protected from being send from the submission node to the worker
    +  // node (done by the //!)
    +public:
    +  // Tree *myTree; //!
    +  // TH1 *myHist; //!
    +
    +  // this is a standard constructor
    +  Writer ();
    +
    +  // these are the functions inherited from Algorithm
    +  virtual EL::StatusCode setupJob (EL::Job& job);
    +  virtual EL::StatusCode fileExecute ();
    +  virtual EL::StatusCode histInitialize ();
    +  virtual EL::StatusCode changeInput (bool firstFile);
    +  virtual EL::StatusCode initialize ();
    +  virtual EL::StatusCode execute ();
    +  virtual EL::StatusCode postExecute ();
    +  virtual EL::StatusCode finalize ();
    +  virtual EL::StatusCode histFinalize ();
    +
    +  // this is needed to distribute the algorithm to the workers
    +  ClassDef(Writer, 1);
    +};
    +
    +#endif
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.html b/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.html new file mode 100644 index 0000000000..01196e8db3 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.html @@ -0,0 +1,222 @@ + + + + + + + + + + + Program Listing for File ReturnCheck.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ReturnCheck.h

    +

    Return to documentation for file (xAODAnaHelpers/tools/ReturnCheck.h)

    +
    #warning Please use instead ANA_CHECK in AsgMessaging/MessageCheck.h
    +
    +#include "AsgMessaging/MessageCheck.h"
    +
    +#ifndef xAODAnaHelpers_TOOLS_RETURNCHECK_H
    +#define xAODAnaHelpers_TOOLS_RETURNCHECK_H
    +
    +#define RETURN_CHECK( CONTEXT, EXP, INFO )  ANA_CHECK(EXP)
    +#define EL_RETURN_CHECK( CONTEXT, EXP )     ANA_CHECK(EXP)
    +
    +#endif // xAODAnaHelpers_TOOLS_RETURNCHECK_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html b/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html new file mode 100644 index 0000000000..be6b2fd521 --- /dev/null +++ b/api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.html @@ -0,0 +1,234 @@ + + + + + + + + + + + Program Listing for File ReturnCheckConfig.h — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Program Listing for File ReturnCheckConfig.h

    +

    Return to documentation for file (xAODAnaHelpers/tools/ReturnCheckConfig.h)

    +
    #warning Please use instead ANA_CHECK in AsgMessaging/MessageCheck.h
    +
    +#ifndef xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H
    +#define xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H
    +
    +#include "AsgMessaging/MessageCheck.h
    +
    +#define RETURN_CHECK_CONFIG( CONTEXT, CONFIG )                             \
    +     do {                                                                    \
    +             /* check if file exists                                              \
    +                       https://root.cern.ch/root/roottalk/roottalk02/5332.html */          \
    +             FileStat_t fStats;                                                   \
    +             int fSuccess = gSystem->GetPathInfo(CONFIG.c_str(), fStats);         \
    +             if(fSuccess != 0){                                                   \
    +                       ANA_MSG_ERROR( "Could not find the "                       \
    +                                           "configuration file:" << CONFIG.c_str());      \
    +                       return EL::StatusCode::FAILURE;                                    \
    +                     } else {                                                             \
    +                               ANA_MSG_INFO( "Found configuration file: " << CONFIG.c_str());  \
    +                             }                                                                    \
    +          } while( false )
    +
    +#endif // xAODAnaHelpers_TOOLS_RETURNCHECKCONFIG_H
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/structHelperFunctions_1_1pt__sort.html b/api/structHelperFunctions_1_1pt__sort.html new file mode 100644 index 0000000000..807646015d --- /dev/null +++ b/api/structHelperFunctions_1_1pt__sort.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Struct pt_sort — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Struct pt_sort

    + +
    +

    Struct Documentation

    +
    +
    +struct pt_sort
    +
    +

    Public Functions

    +
    +
    +inline bool operator()(const TLorentzVector &lhs, const TLorentzVector &rhs)
    +
    + +
    +
    +inline bool operator()(const TLorentzVector *lhs, const TLorentzVector *rhs)
    +
    + +
    +
    +inline bool operator()(const xAOD::IParticle &lhs, const xAOD::IParticle &rhs)
    +
    + +
    +
    +inline bool operator()(const xAOD::IParticle *lhs, const xAOD::IParticle *rhs)
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/structxAH_1_1JetContainer_1_1btagOpPoint.html b/api/structxAH_1_1JetContainer_1_1btagOpPoint.html new file mode 100644 index 0000000000..fa1aa512a6 --- /dev/null +++ b/api/structxAH_1_1JetContainer_1_1btagOpPoint.html @@ -0,0 +1,307 @@ + + + + + + + + + + + Struct JetContainer::btagOpPoint — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Struct JetContainer::btagOpPoint

    + +
    +

    Nested Relationships

    +

    This struct is a nested type of Class JetContainer.

    +
    +
    +

    Struct Documentation

    +
    +
    +struct btagOpPoint
    +
    +

    Public Functions

    +
    +
    +inline btagOpPoint(bool mc, const std::string &tagger, const std::string &wp)
    +
    + +
    +
    +inline ~btagOpPoint()
    +
    + +
    +
    +inline void setTree(TTree *tree, const std::string &jetName)
    +
    + +
    +
    +inline void setBranch(TTree *tree, const std::string &jetName)
    +
    + +
    +
    +inline void clear()
    +
    + +
    +
    +inline void Fill(const xAOD::Jet *jet)
    +
    + +
    +
    +

    Public Members

    +
    +
    +bool m_mc
    +
    + +
    +
    +std::string m_accessorName
    +
    + +
    +
    +Jet::BTaggerOP m_op = Jet::BTaggerOP::None
    +
    + +
    +
    +bool m_isContinuous
    +
    + +
    +
    +std::vector<int> *m_isTag
    +
    + +
    +
    +std::vector<std::vector<float>> *m_sf
    +
    + +
    +
    +std::vector<std::vector<float>> *m_ineffSf
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.html b/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.html new file mode 100644 index 0000000000..fd61316189 --- /dev/null +++ b/api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.html @@ -0,0 +1,272 @@ + + + + + + + + + + + Struct OnlineBeamSpotTool::LBData — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Struct OnlineBeamSpotTool::LBData

    + +
    +

    Nested Relationships

    +

    This struct is a nested type of Class OnlineBeamSpotTool.

    +
    +
    +

    Struct Documentation

    +
    +
    +struct LBData
    +
    +

    Public Functions

    +
    +
    +inline LBData(int LBStart, int LBEnd, float BSx, float BSy, float BSz)
    +
    + +
    +
    +

    Public Members

    +
    +
    +int m_LBStart
    +
    + +
    +
    +int m_LBEnd
    +
    + +
    +
    +float m_BSx
    +
    + +
    +
    +float m_BSy
    +
    + +
    +
    +float m_BSz
    +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html b/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html new file mode 100644 index 0000000000..776d283867 --- /dev/null +++ b/api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Typedef floatAccessor — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Typedef floatAccessor

    + +
    +

    Typedef Documentation

    +
    +
    +typedef SG::AuxElement::Accessor<std::vector<float>> floatAccessor
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.html b/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.html new file mode 100644 index 0000000000..26c8b37ea5 --- /dev/null +++ b/api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Typedef floatAccessor — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Typedef floatAccessor

    + +
    +

    Typedef Documentation

    +
    +
    +typedef SG::AuxElement::Accessor<std::vector<float>> floatAccessor
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html b/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html new file mode 100644 index 0000000000..7ef9ae5032 --- /dev/null +++ b/api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.html @@ -0,0 +1,229 @@ + + + + + + + + + + + Typedef floatAccessor — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Typedef floatAccessor

    + +
    +

    Typedef Documentation

    +
    +
    +typedef SG::AuxElement::Accessor<std::vector<float>> floatAccessor
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/unabridged_api.html b/api/unabridged_api.html new file mode 100644 index 0000000000..0fb0596e1f --- /dev/null +++ b/api/unabridged_api.html @@ -0,0 +1,2055 @@ + + + + + + + + + + + Full API — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Full API

    + +
    +

    Classes and Structs

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +

    Functions

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/unabridged_orphan.html b/api/unabridged_orphan.html new file mode 100644 index 0000000000..0c44eeabe5 --- /dev/null +++ b/api/unabridged_orphan.html @@ -0,0 +1,2308 @@ + + + + + + + + + + + Full API — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Full API

    +
    +

    Directories

    +
    + +
    + +
    + +
    +
    +
    +

    Files

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Pages

    +
    + +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.html b/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.html new file mode 100644 index 0000000000..ceca3f5bf1 --- /dev/null +++ b/api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Variable HelperFunctions::event — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Variable HelperFunctions::event

    + +
    +

    Variable Documentation

    +
    +
    +StatusCode std::string xAOD::TEvent * HelperFunctions::event
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.html b/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.html new file mode 100644 index 0000000000..f4b9fb9a2f --- /dev/null +++ b/api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Variable HelperFunctions::store — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Variable HelperFunctions::store

    + +
    +

    Variable Documentation

    +
    +
    +StatusCode std::string xAOD::TEvent xAOD::TStore * HelperFunctions::store
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.html b/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.html new file mode 100644 index 0000000000..3b460bbcfc --- /dev/null +++ b/api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Variable HelperFunctions::name — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Variable HelperFunctions::name

    + +
    +

    Variable Documentation

    +
    +
    +StatusCode std::string HelperFunctions::name
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.html b/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.html new file mode 100644 index 0000000000..adbc920c5f --- /dev/null +++ b/api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Variable HelperFunctions::debug — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Variable HelperFunctions::debug

    + +
    +

    Variable Documentation

    +
    +
    +StatusCode std::string xAOD::TEvent xAOD::TStore bool HelperFunctions::debug   = { return retrieve<T>(cont, name, event, store, msg())
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.html b/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.html new file mode 100644 index 0000000000..1902b2fe58 --- /dev/null +++ b/api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.html @@ -0,0 +1,232 @@ + + + + + + + + + + + Variable else — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Variable else

    + +
    +

    Variable Documentation

    +
    +
    +else  {ANA_MSG_INFO( "Found configuration file: " << CONFIG.c_str())
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000000..e1a7cc271d --- /dev/null +++ b/genindex.html @@ -0,0 +1,6224 @@ + + + + + + + + + + + Index — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Index
    • + + +
    • + + + +
    • + +
    + + +
    +
    +
    +
    + + +

    Index

    + +
    + B + | C + | D + | E + | F + | H + | I + | J + | M + | O + | P + | R + | T + | W + | X + +
    +

    B

    + + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + + +
    + +

    F

    + + +
    + +

    H

    + + + +
    + +

    I

    + + + +
    + +

    J

    + + + +
    + +

    M

    + + + +
    + +

    O

    + + + +
    + +

    P

    + + + +
    + +

    R

    + + +
    + +

    T

    + + + +
    + +

    W

    + + + +
    + +

    X

    + + + +
    + + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..de5091488b --- /dev/null +++ b/index.html @@ -0,0 +1,317 @@ + + + + + + + + + + + xAODAnaHelpers — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    xAODAnaHelpers

    +https://zenodo.org/badge/35496971.svg +https://travis-ci.org/UCATLAS/xAODAnaHelpers.svg?branch=main +

    AnalysisBase-25.2.31

    +

    The xAOD analysis framework, born out of ProofAna…or not.

    +

    Welcome to the xAODAnaHelpers wiki! This is an xAOD Analysis Framework built for Run II of ATLAS.

    +
    +

    Supported releases

    +

    xAODAnaHelpers supports 21 and 22 releases. This documentation is for R22, please follow this link to see the documentation for R21.

    +
    +
    +

    Latest Version

    +
    +

    Note

    +

    If you need to add a new release to be supported, please make sure you update the GitHub Actions ci.yml workflow file first.

    +
    +

    We support the following releases: AnalysisBase,25.2.31,

    +
    +
    +

    Python Code Quality

    +Code Health +
    + +
    +
    +

    Indices and tables

    + +
    + + +
    + +
    +
    + + + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000..e5d977c66a Binary files /dev/null and b/objects.inv differ diff --git a/search.html b/search.html new file mode 100644 index 0000000000..8a71f00f38 --- /dev/null +++ b/search.html @@ -0,0 +1,223 @@ + + + + + + + + + + + Search — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Search
    • + + +
    • + + + +
    • + +
    + + +
    +
    +
    +
    + + + + +
    + +
    + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2015-2017, ATLAS Collaboration + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000000..3334a556f4 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["API","Algorithms","BJetEfficiencyCorrector","BasicEventSelection","Calibrators","ClusterHists","ClusterHistsAlgo","Community","Correctors","DebugTool","Development","ElectronCalibrator","ElectronEfficiencyCorrector","ElectronSelector","FAQs","Getters","HLTJetGetter","HelpTreeBase","HelperClasses","HelperFunctions","Histograms","HowToDocumentation","Installing","Intro","Issues","JetCalibrator","JetHists","JetHistsAlgo","JetSelector","METConstructor","MessagePrinterAlgo","MetHists","MetHistsAlgo","MinixAOD","MuonCalibrator","MuonEfficiencyCorrector","MuonHists","MuonHistsAlgo","MuonInFatJetCorrector","MuonSelector","Outputs","OverlapRemover","ParticlePIDManager","PhotonCalibrator","PhotonSelector","Selectors","TauCalibrator","TauEfficiencyCorrector","TauJetMatching","TauSelector","ToolsUsed","TrackHists","TrackHistsAlgo","TrackSelector","TreeAlgo","TruthSelector","Tutorial_BrianTuan","UsingUs","Utilities","VtxHists","api/classBJetEfficiencyCorrector","api/classBasicEventSelection","api/classClusterHistsAlgo","api/classDebugTool","api/classElectronCalibrator","api/classElectronCutBasedPIDManager","api/classElectronEfficiencyCorrector","api/classElectronHistsAlgo","api/classElectronSelector","api/classHLTJetGetter","api/classHelpTreeBase","api/classHelperClasses_1_1ClusterInfoSwitch","api/classHelperClasses_1_1ElectronInfoSwitch","api/classHelperClasses_1_1EnumParser","api/classHelperClasses_1_1EventInfoSwitch","api/classHelperClasses_1_1IParticleInfoSwitch","api/classHelperClasses_1_1InfoSwitch","api/classHelperClasses_1_1JetInfoSwitch","api/classHelperClasses_1_1METInfoSwitch","api/classHelperClasses_1_1MuonInfoSwitch","api/classHelperClasses_1_1PhotonInfoSwitch","api/classHelperClasses_1_1TauInfoSwitch","api/classHelperClasses_1_1TrackInfoSwitch","api/classHelperClasses_1_1TriggerInfoSwitch","api/classHelperClasses_1_1TruthInfoSwitch","api/classHistogramManager","api/classIParticleHistsAlgo","api/classIsoCloseByCorr","api/classJetCalibrator","api/classJetHistsAlgo","api/classJetSelector","api/classMETConstructor","api/classMessagePrinterAlgo","api/classMetHists","api/classMetHistsAlgo","api/classMinixAOD","api/classMuonCalibrator","api/classMuonEfficiencyCorrector","api/classMuonHistsAlgo","api/classMuonInFatJetCorrector","api/classMuonSelector","api/classOverlapRemover","api/classPhotonCalibrator","api/classPhotonHistsAlgo","api/classPhotonSelector","api/classTauCalibrator","api/classTauEfficiencyCorrector","api/classTauJetMatching","api/classTauSelector","api/classTrackHistsAlgo","api/classTrackSelector","api/classTreeAlgo","api/classTrigMatcher","api/classTruthSelector","api/classWriter","api/class_view_hierarchy","api/classxAH_1_1Algorithm","api/classxAH_1_1Cluster","api/classxAH_1_1ClusterContainer","api/classxAH_1_1Electron","api/classxAH_1_1ElectronContainer","api/classxAH_1_1EventInfo","api/classxAH_1_1FatJet","api/classxAH_1_1FatJetContainer","api/classxAH_1_1Jet","api/classxAH_1_1JetContainer","api/classxAH_1_1L1JetContainer","api/classxAH_1_1MetContainer","api/classxAH_1_1Muon","api/classxAH_1_1MuonContainer","api/classxAH_1_1OnlineBeamSpotTool","api/classxAH_1_1Particle","api/classxAH_1_1ParticleContainer","api/classxAH_1_1Photon","api/classxAH_1_1PhotonContainer","api/classxAH_1_1Tau","api/classxAH_1_1TauContainer","api/classxAH_1_1TrackContainer","api/classxAH_1_1TrackPart","api/classxAH_1_1TruthContainer","api/classxAH_1_1TruthPart","api/classxAH_1_1VertexContainer","api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5","api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a","api/dir_Root","api/dir_xAODAnaHelpers","api/dir_xAODAnaHelpers_tools","api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf","api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf","api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e","api/file_Root_Algorithm.cxx","api/file_Root_BJetEfficiencyCorrector.cxx","api/file_Root_BasicEventSelection.cxx","api/file_Root_ClusterContainer.cxx","api/file_Root_ClusterHists.cxx","api/file_Root_ClusterHistsAlgo.cxx","api/file_Root_DebugTool.cxx","api/file_Root_ElectronCalibrator.cxx","api/file_Root_ElectronContainer.cxx","api/file_Root_ElectronEfficiencyCorrector.cxx","api/file_Root_ElectronHists.cxx","api/file_Root_ElectronHistsAlgo.cxx","api/file_Root_ElectronSelector.cxx","api/file_Root_EventInfo.cxx","api/file_Root_FatJetContainer.cxx","api/file_Root_HLTJetGetter.cxx","api/file_Root_HLTJetRoIBuilder.cxx","api/file_Root_HelpTreeBase.cxx","api/file_Root_HelperClasses.cxx","api/file_Root_HelperFunctions.cxx","api/file_Root_HistogramManager.cxx","api/file_Root_IParticleHists.cxx","api/file_Root_IParticleHistsAlgo.cxx","api/file_Root_IsoCloseByCorr.cxx","api/file_Root_Jet.cxx","api/file_Root_JetCalibrator.cxx","api/file_Root_JetContainer.cxx","api/file_Root_JetHists.cxx","api/file_Root_JetHistsAlgo.cxx","api/file_Root_JetSelector.cxx","api/file_Root_L1JetContainer.cxx","api/file_Root_LinkDef.h","api/file_Root_METConstructor.cxx","api/file_Root_MessagePrinterAlgo.cxx","api/file_Root_MetContainer.cxx","api/file_Root_MetHists.cxx","api/file_Root_MetHistsAlgo.cxx","api/file_Root_MinixAOD.cxx","api/file_Root_MuonCalibrator.cxx","api/file_Root_MuonContainer.cxx","api/file_Root_MuonEfficiencyCorrector.cxx","api/file_Root_MuonHists.cxx","api/file_Root_MuonHistsAlgo.cxx","api/file_Root_MuonInFatJetCorrector.cxx","api/file_Root_MuonSelector.cxx","api/file_Root_OnlineBeamSpotTool.cxx","api/file_Root_OverlapRemover.cxx","api/file_Root_ParticlePIDManager.cxx","api/file_Root_PhotonCalibrator.cxx","api/file_Root_PhotonContainer.cxx","api/file_Root_PhotonHists.cxx","api/file_Root_PhotonHistsAlgo.cxx","api/file_Root_PhotonSelector.cxx","api/file_Root_TauCalibrator.cxx","api/file_Root_TauContainer.cxx","api/file_Root_TauEfficiencyCorrector.cxx","api/file_Root_TauJetMatching.cxx","api/file_Root_TauSelector.cxx","api/file_Root_TrackContainer.cxx","api/file_Root_TrackHists.cxx","api/file_Root_TrackHistsAlgo.cxx","api/file_Root_TrackSelector.cxx","api/file_Root_TracksInJetHists.cxx","api/file_Root_TreeAlgo.cxx","api/file_Root_TrigMatcher.cxx","api/file_Root_TruthContainer.cxx","api/file_Root_TruthSelector.cxx","api/file_Root_VertexContainer.cxx","api/file_Root_VtxHists.cxx","api/file_Root_Writer.cxx","api/file_view_hierarchy","api/file_xAODAnaHelpers_Algorithm.h","api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h","api/file_xAODAnaHelpers_BasicEventSelection.h","api/file_xAODAnaHelpers_Cluster.h","api/file_xAODAnaHelpers_ClusterContainer.h","api/file_xAODAnaHelpers_ClusterHists.h","api/file_xAODAnaHelpers_ClusterHistsAlgo.h","api/file_xAODAnaHelpers_DebugTool.h","api/file_xAODAnaHelpers_Electron.h","api/file_xAODAnaHelpers_ElectronCalibrator.h","api/file_xAODAnaHelpers_ElectronContainer.h","api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h","api/file_xAODAnaHelpers_ElectronHists.h","api/file_xAODAnaHelpers_ElectronHistsAlgo.h","api/file_xAODAnaHelpers_ElectronSelector.h","api/file_xAODAnaHelpers_EventInfo.h","api/file_xAODAnaHelpers_FatJet.h","api/file_xAODAnaHelpers_FatJetContainer.h","api/file_xAODAnaHelpers_HLTJetGetter.h","api/file_xAODAnaHelpers_HLTJetRoIBuilder.h","api/file_xAODAnaHelpers_HelpTreeBase.h","api/file_xAODAnaHelpers_HelperClasses.h","api/file_xAODAnaHelpers_HelperFunctions.h","api/file_xAODAnaHelpers_HistogramManager.h","api/file_xAODAnaHelpers_IParticleHists.h","api/file_xAODAnaHelpers_IParticleHistsAlgo.h","api/file_xAODAnaHelpers_IsoCloseByCorr.h","api/file_xAODAnaHelpers_Jet.h","api/file_xAODAnaHelpers_JetCalibrator.h","api/file_xAODAnaHelpers_JetContainer.h","api/file_xAODAnaHelpers_JetHists.h","api/file_xAODAnaHelpers_JetHistsAlgo.h","api/file_xAODAnaHelpers_JetSelector.h","api/file_xAODAnaHelpers_L1JetContainer.h","api/file_xAODAnaHelpers_METConstructor.h","api/file_xAODAnaHelpers_MessagePrinterAlgo.h","api/file_xAODAnaHelpers_MetContainer.h","api/file_xAODAnaHelpers_MetHists.h","api/file_xAODAnaHelpers_MetHistsAlgo.h","api/file_xAODAnaHelpers_MinixAOD.h","api/file_xAODAnaHelpers_Muon.h","api/file_xAODAnaHelpers_MuonCalibrator.h","api/file_xAODAnaHelpers_MuonContainer.h","api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h","api/file_xAODAnaHelpers_MuonHists.h","api/file_xAODAnaHelpers_MuonHistsAlgo.h","api/file_xAODAnaHelpers_MuonInFatJetCorrector.h","api/file_xAODAnaHelpers_MuonSelector.h","api/file_xAODAnaHelpers_OnlineBeamSpotTool.h","api/file_xAODAnaHelpers_OverlapRemover.h","api/file_xAODAnaHelpers_Particle.h","api/file_xAODAnaHelpers_ParticleContainer.h","api/file_xAODAnaHelpers_ParticlePIDManager.h","api/file_xAODAnaHelpers_Photon.h","api/file_xAODAnaHelpers_PhotonCalibrator.h","api/file_xAODAnaHelpers_PhotonContainer.h","api/file_xAODAnaHelpers_PhotonHists.h","api/file_xAODAnaHelpers_PhotonHistsAlgo.h","api/file_xAODAnaHelpers_PhotonSelector.h","api/file_xAODAnaHelpers_Tau.h","api/file_xAODAnaHelpers_TauCalibrator.h","api/file_xAODAnaHelpers_TauContainer.h","api/file_xAODAnaHelpers_TauEfficiencyCorrector.h","api/file_xAODAnaHelpers_TauJetMatching.h","api/file_xAODAnaHelpers_TauSelector.h","api/file_xAODAnaHelpers_TrackContainer.h","api/file_xAODAnaHelpers_TrackHists.h","api/file_xAODAnaHelpers_TrackHistsAlgo.h","api/file_xAODAnaHelpers_TrackPart.h","api/file_xAODAnaHelpers_TrackSelector.h","api/file_xAODAnaHelpers_TracksInJetHists.h","api/file_xAODAnaHelpers_TreeAlgo.h","api/file_xAODAnaHelpers_TrigMatcher.h","api/file_xAODAnaHelpers_TruthContainer.h","api/file_xAODAnaHelpers_TruthPart.h","api/file_xAODAnaHelpers_TruthSelector.h","api/file_xAODAnaHelpers_VertexContainer.h","api/file_xAODAnaHelpers_VtxHists.h","api/file_xAODAnaHelpers_Writer.h","api/file_xAODAnaHelpers_tools_ReturnCheck.h","api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h","api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4","api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b","api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795","api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff","api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e","api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf","api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac","api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85","api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4","api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d","api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a","api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b","api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832","api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51","api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2","api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61","api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2","api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f","api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60","api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444","api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a","api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d","api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8","api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b","api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3","api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971","api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2","api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0","api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742","api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906","api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710","api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260","api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4","api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b","api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db","api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191","api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1","api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691","api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b","api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03","api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f","api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be","api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab","api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401","api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76","api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2","api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d","api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23","api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452","api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c","api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168","api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49","api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105","api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065","api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7","api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d","api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a","api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a","api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b","api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a","api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463","api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f","api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031","api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686","api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b","api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86","api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0","api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7","api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164","api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52","api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6","api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0","api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e","api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e","api/function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c","api/function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c","api/function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37","api/function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7","api/function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9","api/function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f","api/function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6","api/function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c","api/function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb","api/function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988","api/function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0","api/function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427","api/function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc","api/library_root","api/namespace_CP","api/namespace_EL","api/namespace_HelperClasses","api/namespace_HelperFunctions","api/namespace_Trig","api/namespace_TrigConf","api/namespace_xAH","api/page_bug","api/page_view_hierarchy","api/program_listing_file_Root_Algorithm.cxx","api/program_listing_file_Root_BJetEfficiencyCorrector.cxx","api/program_listing_file_Root_BasicEventSelection.cxx","api/program_listing_file_Root_ClusterContainer.cxx","api/program_listing_file_Root_ClusterHists.cxx","api/program_listing_file_Root_ClusterHistsAlgo.cxx","api/program_listing_file_Root_DebugTool.cxx","api/program_listing_file_Root_ElectronCalibrator.cxx","api/program_listing_file_Root_ElectronContainer.cxx","api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx","api/program_listing_file_Root_ElectronHists.cxx","api/program_listing_file_Root_ElectronHistsAlgo.cxx","api/program_listing_file_Root_ElectronSelector.cxx","api/program_listing_file_Root_EventInfo.cxx","api/program_listing_file_Root_FatJetContainer.cxx","api/program_listing_file_Root_HLTJetGetter.cxx","api/program_listing_file_Root_HLTJetRoIBuilder.cxx","api/program_listing_file_Root_HelpTreeBase.cxx","api/program_listing_file_Root_HelperClasses.cxx","api/program_listing_file_Root_HelperFunctions.cxx","api/program_listing_file_Root_HistogramManager.cxx","api/program_listing_file_Root_IParticleHists.cxx","api/program_listing_file_Root_IParticleHistsAlgo.cxx","api/program_listing_file_Root_IsoCloseByCorr.cxx","api/program_listing_file_Root_Jet.cxx","api/program_listing_file_Root_JetCalibrator.cxx","api/program_listing_file_Root_JetContainer.cxx","api/program_listing_file_Root_JetHists.cxx","api/program_listing_file_Root_JetHistsAlgo.cxx","api/program_listing_file_Root_JetSelector.cxx","api/program_listing_file_Root_L1JetContainer.cxx","api/program_listing_file_Root_LinkDef.h","api/program_listing_file_Root_METConstructor.cxx","api/program_listing_file_Root_MessagePrinterAlgo.cxx","api/program_listing_file_Root_MetContainer.cxx","api/program_listing_file_Root_MetHists.cxx","api/program_listing_file_Root_MetHistsAlgo.cxx","api/program_listing_file_Root_MinixAOD.cxx","api/program_listing_file_Root_MuonCalibrator.cxx","api/program_listing_file_Root_MuonContainer.cxx","api/program_listing_file_Root_MuonEfficiencyCorrector.cxx","api/program_listing_file_Root_MuonHists.cxx","api/program_listing_file_Root_MuonHistsAlgo.cxx","api/program_listing_file_Root_MuonInFatJetCorrector.cxx","api/program_listing_file_Root_MuonSelector.cxx","api/program_listing_file_Root_OnlineBeamSpotTool.cxx","api/program_listing_file_Root_OverlapRemover.cxx","api/program_listing_file_Root_ParticlePIDManager.cxx","api/program_listing_file_Root_PhotonCalibrator.cxx","api/program_listing_file_Root_PhotonContainer.cxx","api/program_listing_file_Root_PhotonHists.cxx","api/program_listing_file_Root_PhotonHistsAlgo.cxx","api/program_listing_file_Root_PhotonSelector.cxx","api/program_listing_file_Root_TauCalibrator.cxx","api/program_listing_file_Root_TauContainer.cxx","api/program_listing_file_Root_TauEfficiencyCorrector.cxx","api/program_listing_file_Root_TauJetMatching.cxx","api/program_listing_file_Root_TauSelector.cxx","api/program_listing_file_Root_TrackContainer.cxx","api/program_listing_file_Root_TrackHists.cxx","api/program_listing_file_Root_TrackHistsAlgo.cxx","api/program_listing_file_Root_TrackSelector.cxx","api/program_listing_file_Root_TracksInJetHists.cxx","api/program_listing_file_Root_TreeAlgo.cxx","api/program_listing_file_Root_TrigMatcher.cxx","api/program_listing_file_Root_TruthContainer.cxx","api/program_listing_file_Root_TruthSelector.cxx","api/program_listing_file_Root_VertexContainer.cxx","api/program_listing_file_Root_VtxHists.cxx","api/program_listing_file_Root_Writer.cxx","api/program_listing_file_xAODAnaHelpers_Algorithm.h","api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h","api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h","api/program_listing_file_xAODAnaHelpers_Cluster.h","api/program_listing_file_xAODAnaHelpers_ClusterContainer.h","api/program_listing_file_xAODAnaHelpers_ClusterHists.h","api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_DebugTool.h","api/program_listing_file_xAODAnaHelpers_Electron.h","api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h","api/program_listing_file_xAODAnaHelpers_ElectronContainer.h","api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h","api/program_listing_file_xAODAnaHelpers_ElectronHists.h","api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_ElectronSelector.h","api/program_listing_file_xAODAnaHelpers_EventInfo.h","api/program_listing_file_xAODAnaHelpers_FatJet.h","api/program_listing_file_xAODAnaHelpers_FatJetContainer.h","api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h","api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h","api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h","api/program_listing_file_xAODAnaHelpers_HelperClasses.h","api/program_listing_file_xAODAnaHelpers_HelperFunctions.h","api/program_listing_file_xAODAnaHelpers_HistogramManager.h","api/program_listing_file_xAODAnaHelpers_IParticleHists.h","api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h","api/program_listing_file_xAODAnaHelpers_Jet.h","api/program_listing_file_xAODAnaHelpers_JetCalibrator.h","api/program_listing_file_xAODAnaHelpers_JetContainer.h","api/program_listing_file_xAODAnaHelpers_JetHists.h","api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_JetSelector.h","api/program_listing_file_xAODAnaHelpers_L1JetContainer.h","api/program_listing_file_xAODAnaHelpers_METConstructor.h","api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h","api/program_listing_file_xAODAnaHelpers_MetContainer.h","api/program_listing_file_xAODAnaHelpers_MetHists.h","api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_MinixAOD.h","api/program_listing_file_xAODAnaHelpers_Muon.h","api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h","api/program_listing_file_xAODAnaHelpers_MuonContainer.h","api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h","api/program_listing_file_xAODAnaHelpers_MuonHists.h","api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h","api/program_listing_file_xAODAnaHelpers_MuonSelector.h","api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h","api/program_listing_file_xAODAnaHelpers_OverlapRemover.h","api/program_listing_file_xAODAnaHelpers_Particle.h","api/program_listing_file_xAODAnaHelpers_ParticleContainer.h","api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h","api/program_listing_file_xAODAnaHelpers_Photon.h","api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h","api/program_listing_file_xAODAnaHelpers_PhotonContainer.h","api/program_listing_file_xAODAnaHelpers_PhotonHists.h","api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_PhotonSelector.h","api/program_listing_file_xAODAnaHelpers_Tau.h","api/program_listing_file_xAODAnaHelpers_TauCalibrator.h","api/program_listing_file_xAODAnaHelpers_TauContainer.h","api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h","api/program_listing_file_xAODAnaHelpers_TauJetMatching.h","api/program_listing_file_xAODAnaHelpers_TauSelector.h","api/program_listing_file_xAODAnaHelpers_TrackContainer.h","api/program_listing_file_xAODAnaHelpers_TrackHists.h","api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h","api/program_listing_file_xAODAnaHelpers_TrackPart.h","api/program_listing_file_xAODAnaHelpers_TrackSelector.h","api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h","api/program_listing_file_xAODAnaHelpers_TreeAlgo.h","api/program_listing_file_xAODAnaHelpers_TrigMatcher.h","api/program_listing_file_xAODAnaHelpers_TruthContainer.h","api/program_listing_file_xAODAnaHelpers_TruthPart.h","api/program_listing_file_xAODAnaHelpers_TruthSelector.h","api/program_listing_file_xAODAnaHelpers_VertexContainer.h","api/program_listing_file_xAODAnaHelpers_VtxHists.h","api/program_listing_file_xAODAnaHelpers_Writer.h","api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h","api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h","api/structHelperFunctions_1_1pt__sort","api/structxAH_1_1JetContainer_1_1btagOpPoint","api/structxAH_1_1OnlineBeamSpotTool_1_1LBData","api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb","api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb","api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb","api/unabridged_api","api/unabridged_orphan","api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f","api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d","api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397","api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac","api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba","index","xAHAlgorithm"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["API.rst","Algorithms.rst","BJetEfficiencyCorrector.rst","BasicEventSelection.rst","Calibrators.rst","ClusterHists.rst","ClusterHistsAlgo.rst","Community.rst","Correctors.rst","DebugTool.rst","Development.rst","ElectronCalibrator.rst","ElectronEfficiencyCorrector.rst","ElectronSelector.rst","FAQs.rst","Getters.rst","HLTJetGetter.rst","HelpTreeBase.rst","HelperClasses.rst","HelperFunctions.rst","Histograms.rst","HowToDocumentation.rst","Installing.rst","Intro.rst","Issues.rst","JetCalibrator.rst","JetHists.rst","JetHistsAlgo.rst","JetSelector.rst","METConstructor.rst","MessagePrinterAlgo.rst","MetHists.rst","MetHistsAlgo.rst","MinixAOD.rst","MuonCalibrator.rst","MuonEfficiencyCorrector.rst","MuonHists.rst","MuonHistsAlgo.rst","MuonInFatJetCorrector.rst","MuonSelector.rst","Outputs.rst","OverlapRemover.rst","ParticlePIDManager.rst","PhotonCalibrator.rst","PhotonSelector.rst","Selectors.rst","TauCalibrator.rst","TauEfficiencyCorrector.rst","TauJetMatching.rst","TauSelector.rst","ToolsUsed.rst","TrackHists.rst","TrackHistsAlgo.rst","TrackSelector.rst","TreeAlgo.rst","TruthSelector.rst","Tutorial_BrianTuan.rst","UsingUs.rst","Utilities.rst","VtxHists.rst","api/classBJetEfficiencyCorrector.rst","api/classBasicEventSelection.rst","api/classClusterHistsAlgo.rst","api/classDebugTool.rst","api/classElectronCalibrator.rst","api/classElectronCutBasedPIDManager.rst","api/classElectronEfficiencyCorrector.rst","api/classElectronHistsAlgo.rst","api/classElectronSelector.rst","api/classHLTJetGetter.rst","api/classHelpTreeBase.rst","api/classHelperClasses_1_1ClusterInfoSwitch.rst","api/classHelperClasses_1_1ElectronInfoSwitch.rst","api/classHelperClasses_1_1EnumParser.rst","api/classHelperClasses_1_1EventInfoSwitch.rst","api/classHelperClasses_1_1IParticleInfoSwitch.rst","api/classHelperClasses_1_1InfoSwitch.rst","api/classHelperClasses_1_1JetInfoSwitch.rst","api/classHelperClasses_1_1METInfoSwitch.rst","api/classHelperClasses_1_1MuonInfoSwitch.rst","api/classHelperClasses_1_1PhotonInfoSwitch.rst","api/classHelperClasses_1_1TauInfoSwitch.rst","api/classHelperClasses_1_1TrackInfoSwitch.rst","api/classHelperClasses_1_1TriggerInfoSwitch.rst","api/classHelperClasses_1_1TruthInfoSwitch.rst","api/classHistogramManager.rst","api/classIParticleHistsAlgo.rst","api/classIsoCloseByCorr.rst","api/classJetCalibrator.rst","api/classJetHistsAlgo.rst","api/classJetSelector.rst","api/classMETConstructor.rst","api/classMessagePrinterAlgo.rst","api/classMetHists.rst","api/classMetHistsAlgo.rst","api/classMinixAOD.rst","api/classMuonCalibrator.rst","api/classMuonEfficiencyCorrector.rst","api/classMuonHistsAlgo.rst","api/classMuonInFatJetCorrector.rst","api/classMuonSelector.rst","api/classOverlapRemover.rst","api/classPhotonCalibrator.rst","api/classPhotonHistsAlgo.rst","api/classPhotonSelector.rst","api/classTauCalibrator.rst","api/classTauEfficiencyCorrector.rst","api/classTauJetMatching.rst","api/classTauSelector.rst","api/classTrackHistsAlgo.rst","api/classTrackSelector.rst","api/classTreeAlgo.rst","api/classTrigMatcher.rst","api/classTruthSelector.rst","api/classWriter.rst","api/class_view_hierarchy.rst","api/classxAH_1_1Algorithm.rst","api/classxAH_1_1Cluster.rst","api/classxAH_1_1ClusterContainer.rst","api/classxAH_1_1Electron.rst","api/classxAH_1_1ElectronContainer.rst","api/classxAH_1_1EventInfo.rst","api/classxAH_1_1FatJet.rst","api/classxAH_1_1FatJetContainer.rst","api/classxAH_1_1Jet.rst","api/classxAH_1_1JetContainer.rst","api/classxAH_1_1L1JetContainer.rst","api/classxAH_1_1MetContainer.rst","api/classxAH_1_1Muon.rst","api/classxAH_1_1MuonContainer.rst","api/classxAH_1_1OnlineBeamSpotTool.rst","api/classxAH_1_1Particle.rst","api/classxAH_1_1ParticleContainer.rst","api/classxAH_1_1Photon.rst","api/classxAH_1_1PhotonContainer.rst","api/classxAH_1_1Tau.rst","api/classxAH_1_1TauContainer.rst","api/classxAH_1_1TrackContainer.rst","api/classxAH_1_1TrackPart.rst","api/classxAH_1_1TruthContainer.rst","api/classxAH_1_1TruthPart.rst","api/classxAH_1_1VertexContainer.rst","api/define_ReturnCheck_8h_1a71c545d2b377ca63d4e73d3444fa66c5.rst","api/define_ReturnCheck_8h_1ad78cf30c6482b06a7212f0aee4b95e1a.rst","api/dir_Root.rst","api/dir_xAODAnaHelpers.rst","api/dir_xAODAnaHelpers_tools.rst","api/enum_HelperClasses_8h_1a85a25b6b5010e93ba473724e97c97baf.rst","api/enum_HelperClasses_8h_1ae759666962f41b8b383e887f415d41bf.rst","api/enum_HelperFunctions_8h_1af041c34a7c85f38ebabb876342bb216e.rst","api/file_Root_Algorithm.cxx.rst","api/file_Root_BJetEfficiencyCorrector.cxx.rst","api/file_Root_BasicEventSelection.cxx.rst","api/file_Root_ClusterContainer.cxx.rst","api/file_Root_ClusterHists.cxx.rst","api/file_Root_ClusterHistsAlgo.cxx.rst","api/file_Root_DebugTool.cxx.rst","api/file_Root_ElectronCalibrator.cxx.rst","api/file_Root_ElectronContainer.cxx.rst","api/file_Root_ElectronEfficiencyCorrector.cxx.rst","api/file_Root_ElectronHists.cxx.rst","api/file_Root_ElectronHistsAlgo.cxx.rst","api/file_Root_ElectronSelector.cxx.rst","api/file_Root_EventInfo.cxx.rst","api/file_Root_FatJetContainer.cxx.rst","api/file_Root_HLTJetGetter.cxx.rst","api/file_Root_HLTJetRoIBuilder.cxx.rst","api/file_Root_HelpTreeBase.cxx.rst","api/file_Root_HelperClasses.cxx.rst","api/file_Root_HelperFunctions.cxx.rst","api/file_Root_HistogramManager.cxx.rst","api/file_Root_IParticleHists.cxx.rst","api/file_Root_IParticleHistsAlgo.cxx.rst","api/file_Root_IsoCloseByCorr.cxx.rst","api/file_Root_Jet.cxx.rst","api/file_Root_JetCalibrator.cxx.rst","api/file_Root_JetContainer.cxx.rst","api/file_Root_JetHists.cxx.rst","api/file_Root_JetHistsAlgo.cxx.rst","api/file_Root_JetSelector.cxx.rst","api/file_Root_L1JetContainer.cxx.rst","api/file_Root_LinkDef.h.rst","api/file_Root_METConstructor.cxx.rst","api/file_Root_MessagePrinterAlgo.cxx.rst","api/file_Root_MetContainer.cxx.rst","api/file_Root_MetHists.cxx.rst","api/file_Root_MetHistsAlgo.cxx.rst","api/file_Root_MinixAOD.cxx.rst","api/file_Root_MuonCalibrator.cxx.rst","api/file_Root_MuonContainer.cxx.rst","api/file_Root_MuonEfficiencyCorrector.cxx.rst","api/file_Root_MuonHists.cxx.rst","api/file_Root_MuonHistsAlgo.cxx.rst","api/file_Root_MuonInFatJetCorrector.cxx.rst","api/file_Root_MuonSelector.cxx.rst","api/file_Root_OnlineBeamSpotTool.cxx.rst","api/file_Root_OverlapRemover.cxx.rst","api/file_Root_ParticlePIDManager.cxx.rst","api/file_Root_PhotonCalibrator.cxx.rst","api/file_Root_PhotonContainer.cxx.rst","api/file_Root_PhotonHists.cxx.rst","api/file_Root_PhotonHistsAlgo.cxx.rst","api/file_Root_PhotonSelector.cxx.rst","api/file_Root_TauCalibrator.cxx.rst","api/file_Root_TauContainer.cxx.rst","api/file_Root_TauEfficiencyCorrector.cxx.rst","api/file_Root_TauJetMatching.cxx.rst","api/file_Root_TauSelector.cxx.rst","api/file_Root_TrackContainer.cxx.rst","api/file_Root_TrackHists.cxx.rst","api/file_Root_TrackHistsAlgo.cxx.rst","api/file_Root_TrackSelector.cxx.rst","api/file_Root_TracksInJetHists.cxx.rst","api/file_Root_TreeAlgo.cxx.rst","api/file_Root_TrigMatcher.cxx.rst","api/file_Root_TruthContainer.cxx.rst","api/file_Root_TruthSelector.cxx.rst","api/file_Root_VertexContainer.cxx.rst","api/file_Root_VtxHists.cxx.rst","api/file_Root_Writer.cxx.rst","api/file_view_hierarchy.rst","api/file_xAODAnaHelpers_Algorithm.h.rst","api/file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst","api/file_xAODAnaHelpers_BasicEventSelection.h.rst","api/file_xAODAnaHelpers_Cluster.h.rst","api/file_xAODAnaHelpers_ClusterContainer.h.rst","api/file_xAODAnaHelpers_ClusterHists.h.rst","api/file_xAODAnaHelpers_ClusterHistsAlgo.h.rst","api/file_xAODAnaHelpers_DebugTool.h.rst","api/file_xAODAnaHelpers_Electron.h.rst","api/file_xAODAnaHelpers_ElectronCalibrator.h.rst","api/file_xAODAnaHelpers_ElectronContainer.h.rst","api/file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst","api/file_xAODAnaHelpers_ElectronHists.h.rst","api/file_xAODAnaHelpers_ElectronHistsAlgo.h.rst","api/file_xAODAnaHelpers_ElectronSelector.h.rst","api/file_xAODAnaHelpers_EventInfo.h.rst","api/file_xAODAnaHelpers_FatJet.h.rst","api/file_xAODAnaHelpers_FatJetContainer.h.rst","api/file_xAODAnaHelpers_HLTJetGetter.h.rst","api/file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst","api/file_xAODAnaHelpers_HelpTreeBase.h.rst","api/file_xAODAnaHelpers_HelperClasses.h.rst","api/file_xAODAnaHelpers_HelperFunctions.h.rst","api/file_xAODAnaHelpers_HistogramManager.h.rst","api/file_xAODAnaHelpers_IParticleHists.h.rst","api/file_xAODAnaHelpers_IParticleHistsAlgo.h.rst","api/file_xAODAnaHelpers_IsoCloseByCorr.h.rst","api/file_xAODAnaHelpers_Jet.h.rst","api/file_xAODAnaHelpers_JetCalibrator.h.rst","api/file_xAODAnaHelpers_JetContainer.h.rst","api/file_xAODAnaHelpers_JetHists.h.rst","api/file_xAODAnaHelpers_JetHistsAlgo.h.rst","api/file_xAODAnaHelpers_JetSelector.h.rst","api/file_xAODAnaHelpers_L1JetContainer.h.rst","api/file_xAODAnaHelpers_METConstructor.h.rst","api/file_xAODAnaHelpers_MessagePrinterAlgo.h.rst","api/file_xAODAnaHelpers_MetContainer.h.rst","api/file_xAODAnaHelpers_MetHists.h.rst","api/file_xAODAnaHelpers_MetHistsAlgo.h.rst","api/file_xAODAnaHelpers_MinixAOD.h.rst","api/file_xAODAnaHelpers_Muon.h.rst","api/file_xAODAnaHelpers_MuonCalibrator.h.rst","api/file_xAODAnaHelpers_MuonContainer.h.rst","api/file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst","api/file_xAODAnaHelpers_MuonHists.h.rst","api/file_xAODAnaHelpers_MuonHistsAlgo.h.rst","api/file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst","api/file_xAODAnaHelpers_MuonSelector.h.rst","api/file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst","api/file_xAODAnaHelpers_OverlapRemover.h.rst","api/file_xAODAnaHelpers_Particle.h.rst","api/file_xAODAnaHelpers_ParticleContainer.h.rst","api/file_xAODAnaHelpers_ParticlePIDManager.h.rst","api/file_xAODAnaHelpers_Photon.h.rst","api/file_xAODAnaHelpers_PhotonCalibrator.h.rst","api/file_xAODAnaHelpers_PhotonContainer.h.rst","api/file_xAODAnaHelpers_PhotonHists.h.rst","api/file_xAODAnaHelpers_PhotonHistsAlgo.h.rst","api/file_xAODAnaHelpers_PhotonSelector.h.rst","api/file_xAODAnaHelpers_Tau.h.rst","api/file_xAODAnaHelpers_TauCalibrator.h.rst","api/file_xAODAnaHelpers_TauContainer.h.rst","api/file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst","api/file_xAODAnaHelpers_TauJetMatching.h.rst","api/file_xAODAnaHelpers_TauSelector.h.rst","api/file_xAODAnaHelpers_TrackContainer.h.rst","api/file_xAODAnaHelpers_TrackHists.h.rst","api/file_xAODAnaHelpers_TrackHistsAlgo.h.rst","api/file_xAODAnaHelpers_TrackPart.h.rst","api/file_xAODAnaHelpers_TrackSelector.h.rst","api/file_xAODAnaHelpers_TracksInJetHists.h.rst","api/file_xAODAnaHelpers_TreeAlgo.h.rst","api/file_xAODAnaHelpers_TrigMatcher.h.rst","api/file_xAODAnaHelpers_TruthContainer.h.rst","api/file_xAODAnaHelpers_TruthPart.h.rst","api/file_xAODAnaHelpers_TruthSelector.h.rst","api/file_xAODAnaHelpers_VertexContainer.h.rst","api/file_xAODAnaHelpers_VtxHists.h.rst","api/file_xAODAnaHelpers_Writer.h.rst","api/file_xAODAnaHelpers_tools_ReturnCheck.h.rst","api/file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst","api/function_Algorithm_8cxx_1a7a6596e680792d05df015b697f1e79f4.rst","api/function_BJetEfficiencyCorrector_8cxx_1a17b45618826ac7ee94402f7618e23e5b.rst","api/function_BasicEventSelection_8cxx_1a945cdd373f1dce14d6c1d29bf8310795.rst","api/function_ClusterHistsAlgo_8cxx_1aca6d85c84a455be4b2272667667130ff.rst","api/function_ClusterHists_8cxx_1a800b4beab66c094b6a64c80f0fdf633e.rst","api/function_DebugTool_8cxx_1a1ee1ee611daeb42353bc8c3f60c5f6bf.rst","api/function_ElectronCalibrator_8cxx_1ae4b49bd754d234cffb18fb5011f2fdac.rst","api/function_ElectronEfficiencyCorrector_8cxx_1a716232747b12c4b304bb61213513eb85.rst","api/function_ElectronHistsAlgo_8cxx_1aa33d1a917e641b09b54971c342270aa4.rst","api/function_ElectronHists_8cxx_1aa0bcf9f2066ef32705bf4aa8729a4f3d.rst","api/function_ElectronSelector_8cxx_1ac1fbf0101b6d2a778ef8a5eda944368a.rst","api/function_HLTJetGetter_8cxx_1a3389b1db3ea56cbd114cc0341217f07b.rst","api/function_HelperFunctions_8h_1a161ca4f506284ce22a257bf6b702e832.rst","api/function_HelperFunctions_8h_1a19a48086de5cb95e8fd8b59437bb3e51.rst","api/function_HelperFunctions_8h_1a19e8f32d8b8ff888d3abd1b1467b37b2.rst","api/function_HelperFunctions_8h_1a20baf2e79be9f0bf700869d9a96d3a61.rst","api/function_HelperFunctions_8h_1a29eb23766a065088be97d39e08313ed2.rst","api/function_HelperFunctions_8h_1a2e3b3541d075e2955f2a1c48d992305f.rst","api/function_HelperFunctions_8h_1a319afb86dee2164b9b32c88eafa3cc60.rst","api/function_HelperFunctions_8h_1a325eebda668a8961986946daa7608444.rst","api/function_HelperFunctions_8h_1a38808edafa2a87dd71a95ce044b26c8a.rst","api/function_HelperFunctions_8h_1a420ad300c0fd46eeb86b9ff2ebbf316d.rst","api/function_HelperFunctions_8h_1a4b78db55935cb09090b65c1fa49960a8.rst","api/function_HelperFunctions_8h_1a52b31b859c3b03af3013fe097942032b.rst","api/function_HelperFunctions_8h_1a5437b30c676b54e252ae390cbbec3bb3.rst","api/function_HelperFunctions_8h_1a5df23cc3d031c8bd0fb11c52222c2971.rst","api/function_HelperFunctions_8h_1a6020536eb90eeeedd98ce363c9c06be2.rst","api/function_HelperFunctions_8h_1a6225f38edb7c6e24883f02a9af321fc0.rst","api/function_HelperFunctions_8h_1a69a6c97e0580d6424ff8a831d5108742.rst","api/function_HelperFunctions_8h_1a72cf60ff96a7bb04b0d461f148d98906.rst","api/function_HelperFunctions_8h_1a783583d94ca3d2158e871a29fc18b710.rst","api/function_HelperFunctions_8h_1a788799896902f44f9a0af9f7484c3260.rst","api/function_HelperFunctions_8h_1a8fd4a07174e89be5ab74ba978d025dd4.rst","api/function_HelperFunctions_8h_1a94ac546915235e4db2abbf535a422e0b.rst","api/function_HelperFunctions_8h_1a992cda5144a7e52104bb5318516b34db.rst","api/function_HelperFunctions_8h_1a9d2d6ca9634e3b6929f2beeb50cfb191.rst","api/function_HelperFunctions_8h_1aa2c5129947b60e1c7914499e85a054d1.rst","api/function_HelperFunctions_8h_1aa430a3cb38614638c5e005824d71f691.rst","api/function_HelperFunctions_8h_1ab00349947498d616e0b3d04e6e65a48b.rst","api/function_HelperFunctions_8h_1ab32fb263453e63a5184a50eaf04e4e03.rst","api/function_HelperFunctions_8h_1aba416f74ba2087ef467491061a3c306f.rst","api/function_HelperFunctions_8h_1ac23ed9b29fdee0b17cc0eb310d2267be.rst","api/function_HelperFunctions_8h_1acd29a66702c5e2aeb4ed9db6a3011aab.rst","api/function_HelperFunctions_8h_1ae904f33e494d27475518d8b493882401.rst","api/function_HelperFunctions_8h_1aeab0c88a505cba6ae562e17e0cc61e76.rst","api/function_HelperFunctions_8h_1aeb895bb0c3b770f1a02795070f6da9b2.rst","api/function_HelperFunctions_8h_1aed76887c1f4b8f894729c8e6ba0c0f8d.rst","api/function_HelperFunctions_8h_1aeecd02ebac678e1a0ef05bf039ef8d23.rst","api/function_HelperFunctions_8h_1af0a25209eb124af0d0473582cf684452.rst","api/function_HelperFunctions_8h_1af11e7a82f6bef2be5d7403daca2df17c.rst","api/function_HelperFunctions_8h_1af3dea72893935c231be452587f10a168.rst","api/function_HelperFunctions_8h_1afa033a806a096a28e641ab6e87cfaa49.rst","api/function_IParticleHistsAlgo_8cxx_1a56cb000ac86c4554bda92080110c4105.rst","api/function_IsoCloseByCorr_8cxx_1ae6d723364bfb69bd354543840c27f065.rst","api/function_JetCalibrator_8cxx_1a2724af182e18e099448fffe36fd030f7.rst","api/function_JetHistsAlgo_8cxx_1ac8ca316717a72e683288eae702e8de3d.rst","api/function_JetSelector_8cxx_1a9f7bfedd198aa52f698d7f54df48826a.rst","api/function_METConstructor_8cxx_1a6175effc155f8c4908f01a583bb51f4a.rst","api/function_MessagePrinterAlgo_8cxx_1a1665a5dbd356db96f3d62259d30df73b.rst","api/function_MetHistsAlgo_8cxx_1a30b1849a937534f79d846d2e2fea5f4a.rst","api/function_MinixAOD_8cxx_1abe75f73c5e4c8bb16a8f01378cdc2463.rst","api/function_MuonCalibrator_8cxx_1a13dece200c8655a874d7a183b495ff6f.rst","api/function_MuonEfficiencyCorrector_8cxx_1a33b2b43455f4e40e257561aa42f37031.rst","api/function_MuonHistsAlgo_8cxx_1a15edba4751e97eba23c64a5e88c1d686.rst","api/function_MuonInFatJetCorrector_8cxx_1af5dd74bb24cc9eae708a8eb26983409b.rst","api/function_MuonSelector_8cxx_1a0b6cec0c5fbc8d042acbda0a6d2ffe86.rst","api/function_OverlapRemover_8cxx_1a8a356a428d3361e989da5060d2983de0.rst","api/function_ParticlePIDManager_8cxx_1a6ac19811e9f535a6fa4979911da167f7.rst","api/function_ParticlePIDManager_8h_1a3d1abef16b552c1fb0bca4670d533164.rst","api/function_PhotonCalibrator_8cxx_1ade738d7e400a0ba378f2a2a1e67fcd52.rst","api/function_PhotonHistsAlgo_8cxx_1a3dfc7312f05ee9dbafad235a4296f1a6.rst","api/function_PhotonHists_8cxx_1afcc600091b36c56507c0b7a5a61b95b0.rst","api/function_PhotonSelector_8cxx_1a653c4d4eb2af01ded4b186f849fa405e.rst","api/function_ReturnCheckConfig_8h_1a484a44f2b1ae321e010118663c32b00e.rst","api/function_TauCalibrator_8cxx_1adb8d48bcef2d1a69b7b3e9bda4684d1c.rst","api/function_TauEfficiencyCorrector_8cxx_1a73ebda4dd26c55b37ba7eafb174ae90c.rst","api/function_TauJetMatching_8cxx_1a0c929e1430c01827687f115d6e22ef37.rst","api/function_TauSelector_8cxx_1a5636c6c1eaee78119e9c087bbee1d8b7.rst","api/function_TrackHistsAlgo_8cxx_1a29f02c4a6e8acb161bb935030bead2d9.rst","api/function_TrackHists_8cxx_1ad8412078c86debd151687af12b4f8c3f.rst","api/function_TrackSelector_8cxx_1abe2683179787594d5325181301e539b6.rst","api/function_TracksInJetHists_8cxx_1a077a4a2cc0a8a1400ddc7e9d98893e0c.rst","api/function_TreeAlgo_8cxx_1a1610d78677ef16eda4e58262f44c33bb.rst","api/function_TrigMatcher_8cxx_1a8a7b608011603a70af897e5855c88988.rst","api/function_TruthSelector_8cxx_1aa8894ec4ae59f40b5d46e0b26a0af3d0.rst","api/function_VtxHists_8cxx_1ad3f59d8e74980a7f894a85d18a0a7427.rst","api/function_Writer_8cxx_1a45a9ad85b14f0a12e4ea6c78c32fcabc.rst","api/library_root.rst","api/namespace_CP.rst","api/namespace_EL.rst","api/namespace_HelperClasses.rst","api/namespace_HelperFunctions.rst","api/namespace_Trig.rst","api/namespace_TrigConf.rst","api/namespace_xAH.rst","api/page_bug.rst","api/page_view_hierarchy.rst","api/program_listing_file_Root_Algorithm.cxx.rst","api/program_listing_file_Root_BJetEfficiencyCorrector.cxx.rst","api/program_listing_file_Root_BasicEventSelection.cxx.rst","api/program_listing_file_Root_ClusterContainer.cxx.rst","api/program_listing_file_Root_ClusterHists.cxx.rst","api/program_listing_file_Root_ClusterHistsAlgo.cxx.rst","api/program_listing_file_Root_DebugTool.cxx.rst","api/program_listing_file_Root_ElectronCalibrator.cxx.rst","api/program_listing_file_Root_ElectronContainer.cxx.rst","api/program_listing_file_Root_ElectronEfficiencyCorrector.cxx.rst","api/program_listing_file_Root_ElectronHists.cxx.rst","api/program_listing_file_Root_ElectronHistsAlgo.cxx.rst","api/program_listing_file_Root_ElectronSelector.cxx.rst","api/program_listing_file_Root_EventInfo.cxx.rst","api/program_listing_file_Root_FatJetContainer.cxx.rst","api/program_listing_file_Root_HLTJetGetter.cxx.rst","api/program_listing_file_Root_HLTJetRoIBuilder.cxx.rst","api/program_listing_file_Root_HelpTreeBase.cxx.rst","api/program_listing_file_Root_HelperClasses.cxx.rst","api/program_listing_file_Root_HelperFunctions.cxx.rst","api/program_listing_file_Root_HistogramManager.cxx.rst","api/program_listing_file_Root_IParticleHists.cxx.rst","api/program_listing_file_Root_IParticleHistsAlgo.cxx.rst","api/program_listing_file_Root_IsoCloseByCorr.cxx.rst","api/program_listing_file_Root_Jet.cxx.rst","api/program_listing_file_Root_JetCalibrator.cxx.rst","api/program_listing_file_Root_JetContainer.cxx.rst","api/program_listing_file_Root_JetHists.cxx.rst","api/program_listing_file_Root_JetHistsAlgo.cxx.rst","api/program_listing_file_Root_JetSelector.cxx.rst","api/program_listing_file_Root_L1JetContainer.cxx.rst","api/program_listing_file_Root_LinkDef.h.rst","api/program_listing_file_Root_METConstructor.cxx.rst","api/program_listing_file_Root_MessagePrinterAlgo.cxx.rst","api/program_listing_file_Root_MetContainer.cxx.rst","api/program_listing_file_Root_MetHists.cxx.rst","api/program_listing_file_Root_MetHistsAlgo.cxx.rst","api/program_listing_file_Root_MinixAOD.cxx.rst","api/program_listing_file_Root_MuonCalibrator.cxx.rst","api/program_listing_file_Root_MuonContainer.cxx.rst","api/program_listing_file_Root_MuonEfficiencyCorrector.cxx.rst","api/program_listing_file_Root_MuonHists.cxx.rst","api/program_listing_file_Root_MuonHistsAlgo.cxx.rst","api/program_listing_file_Root_MuonInFatJetCorrector.cxx.rst","api/program_listing_file_Root_MuonSelector.cxx.rst","api/program_listing_file_Root_OnlineBeamSpotTool.cxx.rst","api/program_listing_file_Root_OverlapRemover.cxx.rst","api/program_listing_file_Root_ParticlePIDManager.cxx.rst","api/program_listing_file_Root_PhotonCalibrator.cxx.rst","api/program_listing_file_Root_PhotonContainer.cxx.rst","api/program_listing_file_Root_PhotonHists.cxx.rst","api/program_listing_file_Root_PhotonHistsAlgo.cxx.rst","api/program_listing_file_Root_PhotonSelector.cxx.rst","api/program_listing_file_Root_TauCalibrator.cxx.rst","api/program_listing_file_Root_TauContainer.cxx.rst","api/program_listing_file_Root_TauEfficiencyCorrector.cxx.rst","api/program_listing_file_Root_TauJetMatching.cxx.rst","api/program_listing_file_Root_TauSelector.cxx.rst","api/program_listing_file_Root_TrackContainer.cxx.rst","api/program_listing_file_Root_TrackHists.cxx.rst","api/program_listing_file_Root_TrackHistsAlgo.cxx.rst","api/program_listing_file_Root_TrackSelector.cxx.rst","api/program_listing_file_Root_TracksInJetHists.cxx.rst","api/program_listing_file_Root_TreeAlgo.cxx.rst","api/program_listing_file_Root_TrigMatcher.cxx.rst","api/program_listing_file_Root_TruthContainer.cxx.rst","api/program_listing_file_Root_TruthSelector.cxx.rst","api/program_listing_file_Root_VertexContainer.cxx.rst","api/program_listing_file_Root_VtxHists.cxx.rst","api/program_listing_file_Root_Writer.cxx.rst","api/program_listing_file_xAODAnaHelpers_Algorithm.h.rst","api/program_listing_file_xAODAnaHelpers_BJetEfficiencyCorrector.h.rst","api/program_listing_file_xAODAnaHelpers_BasicEventSelection.h.rst","api/program_listing_file_xAODAnaHelpers_Cluster.h.rst","api/program_listing_file_xAODAnaHelpers_ClusterContainer.h.rst","api/program_listing_file_xAODAnaHelpers_ClusterHists.h.rst","api/program_listing_file_xAODAnaHelpers_ClusterHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_DebugTool.h.rst","api/program_listing_file_xAODAnaHelpers_Electron.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronCalibrator.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronContainer.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronEfficiencyCorrector.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronHists.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_ElectronSelector.h.rst","api/program_listing_file_xAODAnaHelpers_EventInfo.h.rst","api/program_listing_file_xAODAnaHelpers_FatJet.h.rst","api/program_listing_file_xAODAnaHelpers_FatJetContainer.h.rst","api/program_listing_file_xAODAnaHelpers_HLTJetGetter.h.rst","api/program_listing_file_xAODAnaHelpers_HLTJetRoIBuilder.h.rst","api/program_listing_file_xAODAnaHelpers_HelpTreeBase.h.rst","api/program_listing_file_xAODAnaHelpers_HelperClasses.h.rst","api/program_listing_file_xAODAnaHelpers_HelperFunctions.h.rst","api/program_listing_file_xAODAnaHelpers_HistogramManager.h.rst","api/program_listing_file_xAODAnaHelpers_IParticleHists.h.rst","api/program_listing_file_xAODAnaHelpers_IParticleHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_IsoCloseByCorr.h.rst","api/program_listing_file_xAODAnaHelpers_Jet.h.rst","api/program_listing_file_xAODAnaHelpers_JetCalibrator.h.rst","api/program_listing_file_xAODAnaHelpers_JetContainer.h.rst","api/program_listing_file_xAODAnaHelpers_JetHists.h.rst","api/program_listing_file_xAODAnaHelpers_JetHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_JetSelector.h.rst","api/program_listing_file_xAODAnaHelpers_L1JetContainer.h.rst","api/program_listing_file_xAODAnaHelpers_METConstructor.h.rst","api/program_listing_file_xAODAnaHelpers_MessagePrinterAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_MetContainer.h.rst","api/program_listing_file_xAODAnaHelpers_MetHists.h.rst","api/program_listing_file_xAODAnaHelpers_MetHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_MinixAOD.h.rst","api/program_listing_file_xAODAnaHelpers_Muon.h.rst","api/program_listing_file_xAODAnaHelpers_MuonCalibrator.h.rst","api/program_listing_file_xAODAnaHelpers_MuonContainer.h.rst","api/program_listing_file_xAODAnaHelpers_MuonEfficiencyCorrector.h.rst","api/program_listing_file_xAODAnaHelpers_MuonHists.h.rst","api/program_listing_file_xAODAnaHelpers_MuonHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_MuonInFatJetCorrector.h.rst","api/program_listing_file_xAODAnaHelpers_MuonSelector.h.rst","api/program_listing_file_xAODAnaHelpers_OnlineBeamSpotTool.h.rst","api/program_listing_file_xAODAnaHelpers_OverlapRemover.h.rst","api/program_listing_file_xAODAnaHelpers_Particle.h.rst","api/program_listing_file_xAODAnaHelpers_ParticleContainer.h.rst","api/program_listing_file_xAODAnaHelpers_ParticlePIDManager.h.rst","api/program_listing_file_xAODAnaHelpers_Photon.h.rst","api/program_listing_file_xAODAnaHelpers_PhotonCalibrator.h.rst","api/program_listing_file_xAODAnaHelpers_PhotonContainer.h.rst","api/program_listing_file_xAODAnaHelpers_PhotonHists.h.rst","api/program_listing_file_xAODAnaHelpers_PhotonHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_PhotonSelector.h.rst","api/program_listing_file_xAODAnaHelpers_Tau.h.rst","api/program_listing_file_xAODAnaHelpers_TauCalibrator.h.rst","api/program_listing_file_xAODAnaHelpers_TauContainer.h.rst","api/program_listing_file_xAODAnaHelpers_TauEfficiencyCorrector.h.rst","api/program_listing_file_xAODAnaHelpers_TauJetMatching.h.rst","api/program_listing_file_xAODAnaHelpers_TauSelector.h.rst","api/program_listing_file_xAODAnaHelpers_TrackContainer.h.rst","api/program_listing_file_xAODAnaHelpers_TrackHists.h.rst","api/program_listing_file_xAODAnaHelpers_TrackHistsAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_TrackPart.h.rst","api/program_listing_file_xAODAnaHelpers_TrackSelector.h.rst","api/program_listing_file_xAODAnaHelpers_TracksInJetHists.h.rst","api/program_listing_file_xAODAnaHelpers_TreeAlgo.h.rst","api/program_listing_file_xAODAnaHelpers_TrigMatcher.h.rst","api/program_listing_file_xAODAnaHelpers_TruthContainer.h.rst","api/program_listing_file_xAODAnaHelpers_TruthPart.h.rst","api/program_listing_file_xAODAnaHelpers_TruthSelector.h.rst","api/program_listing_file_xAODAnaHelpers_VertexContainer.h.rst","api/program_listing_file_xAODAnaHelpers_VtxHists.h.rst","api/program_listing_file_xAODAnaHelpers_Writer.h.rst","api/program_listing_file_xAODAnaHelpers_tools_ReturnCheck.h.rst","api/program_listing_file_xAODAnaHelpers_tools_ReturnCheckConfig.h.rst","api/structHelperFunctions_1_1pt__sort.rst","api/structxAH_1_1JetContainer_1_1btagOpPoint.rst","api/structxAH_1_1OnlineBeamSpotTool_1_1LBData.rst","api/typedef_ClusterContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst","api/typedef_HelpTreeBase_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst","api/typedef_PhotonContainer_8h_1a6ca87343c5de420749a8af060b5b0bbb.rst","api/unabridged_api.rst","api/unabridged_orphan.rst","api/variable_HelperFunctions_8h_1a75f893874a63f2a37a14690bf2150c7f.rst","api/variable_HelperFunctions_8h_1a90e6aca89891c117c31683c211617e1d.rst","api/variable_HelperFunctions_8h_1ac0e18a5859fc56bb2e7ca76a337f3397.rst","api/variable_HelperFunctions_8h_1adb6e2b141fa0263967cf4b3a874bbeac.rst","api/variable_ReturnCheckConfig_8h_1a0544c3fe466e421738dae463968b70ba.rst","index.rst","xAHAlgorithm.rst"],objects:{"":[[142,0,1,"c.EL_RETURN_CHECK","EL_RETURN_CHECK"],[143,0,1,"c.RETURN_CHECK","RETURN_CHECK"],[2,1,1,"_CPPv423BJetEfficiencyCorrector","BJetEfficiencyCorrector"],[60,1,1,"_CPPv423BJetEfficiencyCorrector","BJetEfficiencyCorrector"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector23BJetEfficiencyCorrectorEv","BJetEfficiencyCorrector::BJetEfficiencyCorrector"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector23BJetEfficiencyCorrectorEv","BJetEfficiencyCorrector::BJetEfficiencyCorrector"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector11changeInputEb","BJetEfficiencyCorrector::changeInput"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector11changeInputEb","BJetEfficiencyCorrector::changeInput"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector11changeInputEb","BJetEfficiencyCorrector::changeInput::firstFile"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector11changeInputEb","BJetEfficiencyCorrector::changeInput::firstFile"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector7executeEv","BJetEfficiencyCorrector::execute"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector7executeEv","BJetEfficiencyCorrector::execute"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::doNominal"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::doNominal"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::eventInfo"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::eventInfo"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::inJets"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector27executeEfficiencyCorrectionEPKN4xAOD12JetContainerEPKN4xAOD9EventInfoEb","BJetEfficiencyCorrector::executeEfficiencyCorrection::inJets"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector11fileExecuteEv","BJetEfficiencyCorrector::fileExecute"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector11fileExecuteEv","BJetEfficiencyCorrector::fileExecute"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector8finalizeEv","BJetEfficiencyCorrector::finalize"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector8finalizeEv","BJetEfficiencyCorrector::finalize"],[2,2,1,"_CPPv4NK23BJetEfficiencyCorrector14getFlavorLabelERKN4xAOD3JetE","BJetEfficiencyCorrector::getFlavorLabel"],[60,2,1,"_CPPv4NK23BJetEfficiencyCorrector14getFlavorLabelERKN4xAOD3JetE","BJetEfficiencyCorrector::getFlavorLabel"],[2,3,1,"_CPPv4NK23BJetEfficiencyCorrector14getFlavorLabelERKN4xAOD3JetE","BJetEfficiencyCorrector::getFlavorLabel::jet"],[60,3,1,"_CPPv4NK23BJetEfficiencyCorrector14getFlavorLabelERKN4xAOD3JetE","BJetEfficiencyCorrector::getFlavorLabel::jet"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector10getMCIndexEi","BJetEfficiencyCorrector::getMCIndex"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector10getMCIndexEi","BJetEfficiencyCorrector::getMCIndex"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector10getMCIndexEi","BJetEfficiencyCorrector::getMCIndex::dsid"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector10getMCIndexEi","BJetEfficiencyCorrector::getMCIndex::dsid"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector12histFinalizeEv","BJetEfficiencyCorrector::histFinalize"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector12histFinalizeEv","BJetEfficiencyCorrector::histFinalize"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector14histInitializeEv","BJetEfficiencyCorrector::histInitialize"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector14histInitializeEv","BJetEfficiencyCorrector::histInitialize"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector10initializeEv","BJetEfficiencyCorrector::initialize"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector10initializeEv","BJetEfficiencyCorrector::initialize"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector22m_BJetEffSFTool_handleE","BJetEfficiencyCorrector::m_BJetEffSFTool_handle"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_BJetSelectTool_handleE","BJetEfficiencyCorrector::m_BJetSelectTool_handle"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_DSIDtoGeneratorE","BJetEfficiencyCorrector::m_DSIDtoGenerator"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector26m_DSIDtoGenerator_filenameE","BJetEfficiencyCorrector::m_DSIDtoGenerator_filename"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector26m_DSIDtoGenerator_filenameE","BJetEfficiencyCorrector::m_DSIDtoGenerator_filename"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EfficiencyCalibrationE","BJetEfficiencyCorrector::m_EfficiencyCalibration"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EfficiencyCalibrationE","BJetEfficiencyCorrector::m_EfficiencyCalibration"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EigenvectorReductionBE","BJetEfficiencyCorrector::m_EigenvectorReductionB"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EigenvectorReductionBE","BJetEfficiencyCorrector::m_EigenvectorReductionB"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EigenvectorReductionCE","BJetEfficiencyCorrector::m_EigenvectorReductionC"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector23m_EigenvectorReductionCE","BJetEfficiencyCorrector::m_EigenvectorReductionC"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector27m_EigenvectorReductionLightE","BJetEfficiencyCorrector::m_EigenvectorReductionLight"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector27m_EigenvectorReductionLightE","BJetEfficiencyCorrector::m_EigenvectorReductionLight"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector11m_MCIndexesE","BJetEfficiencyCorrector::m_MCIndexes"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector26m_allowCalibrationFallbackE","BJetEfficiencyCorrector::m_allowCalibrationFallback"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector26m_allowCalibrationFallbackE","BJetEfficiencyCorrector::m_allowCalibrationFallback"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_alwaysGetTagWeightE","BJetEfficiencyCorrector::m_alwaysGetTagWeight"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_alwaysGetTagWeightE","BJetEfficiencyCorrector::m_alwaysGetTagWeight"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector18m_coneFlavourLabelE","BJetEfficiencyCorrector::m_coneFlavourLabel"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector18m_coneFlavourLabelE","BJetEfficiencyCorrector::m_coneFlavourLabel"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector14m_corrFileNameE","BJetEfficiencyCorrector::m_corrFileName"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector14m_corrFileNameE","BJetEfficiencyCorrector::m_corrFileName"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector7m_decorE","BJetEfficiencyCorrector::m_decor"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector7m_decorE","BJetEfficiencyCorrector::m_decor"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector15m_decorQuantileE","BJetEfficiencyCorrector::m_decorQuantile"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector9m_decorSFE","BJetEfficiencyCorrector::m_decorSF"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector13m_decorWeightE","BJetEfficiencyCorrector::m_decorWeight"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector25m_errorOnTagWeightFailureE","BJetEfficiencyCorrector::m_errorOnTagWeightFailure"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector25m_errorOnTagWeightFailureE","BJetEfficiencyCorrector::m_errorOnTagWeightFailure"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_getScaleFactorsE","BJetEfficiencyCorrector::m_getScaleFactors"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_getScaleFactorsE","BJetEfficiencyCorrector::m_getScaleFactors"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_inContainerNameE","BJetEfficiencyCorrector::m_inContainerName"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_inContainerNameE","BJetEfficiencyCorrector::m_inContainerName"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector11m_inputAlgoE","BJetEfficiencyCorrector::m_inputAlgo"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector11m_inputAlgoE","BJetEfficiencyCorrector::m_inputAlgo"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector15m_inputAlgoListE","BJetEfficiencyCorrector::m_inputAlgoList"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector8m_isRun3E","BJetEfficiencyCorrector::m_isRun3"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector8m_isRun3E","BJetEfficiencyCorrector::m_isRun3"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector11m_jetAuthorE","BJetEfficiencyCorrector::m_jetAuthor"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector11m_jetAuthorE","BJetEfficiencyCorrector::m_jetAuthor"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector7m_minPtE","BJetEfficiencyCorrector::m_minPt"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector7m_minPtE","BJetEfficiencyCorrector::m_minPt"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector13m_operatingPtE","BJetEfficiencyCorrector::m_operatingPt"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector13m_operatingPtE","BJetEfficiencyCorrector::m_operatingPt"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector16m_operatingPtCDIE","BJetEfficiencyCorrector::m_operatingPtCDI"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector16m_operatingPtCDIE","BJetEfficiencyCorrector::m_operatingPtCDI"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_orBJetPtUpperThresE","BJetEfficiencyCorrector::m_orBJetPtUpperThres"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_orBJetPtUpperThresE","BJetEfficiencyCorrector::m_orBJetPtUpperThres"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector16m_outputSystNameE","BJetEfficiencyCorrector::m_outputSystName"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector16m_outputSystNameE","BJetEfficiencyCorrector::m_outputSystName"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector12m_runAllSystE","BJetEfficiencyCorrector::m_runAllSyst"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector13m_setMapIndexE","BJetEfficiencyCorrector::m_setMapIndex"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector13m_setMapIndexE","BJetEfficiencyCorrector::m_setMapIndex"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector10m_systListE","BJetEfficiencyCorrector::m_systList"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector10m_systNameE","BJetEfficiencyCorrector::m_systName"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector10m_systNameE","BJetEfficiencyCorrector::m_systName"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector21m_systematicsStrategyE","BJetEfficiencyCorrector::m_systematicsStrategy"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector21m_systematicsStrategyE","BJetEfficiencyCorrector::m_systematicsStrategy"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_tagDecisionOnlyE","BJetEfficiencyCorrector::m_tagDecisionOnly"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector17m_tagDecisionOnlyE","BJetEfficiencyCorrector::m_tagDecisionOnly"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector12m_taggerNameE","BJetEfficiencyCorrector::m_taggerName"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector12m_taggerNameE","BJetEfficiencyCorrector::m_taggerName"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector15m_useContinuousE","BJetEfficiencyCorrector::m_useContinuous"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector15m_useContinuousE","BJetEfficiencyCorrector::m_useContinuous"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_useDevelopmentFileE","BJetEfficiencyCorrector::m_useDevelopmentFile"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector20m_useDevelopmentFileE","BJetEfficiencyCorrector::m_useDevelopmentFile"],[2,4,1,"_CPPv4N23BJetEfficiencyCorrector21m_writeSystToMetadataE","BJetEfficiencyCorrector::m_writeSystToMetadata"],[60,4,1,"_CPPv4N23BJetEfficiencyCorrector21m_writeSystToMetadataE","BJetEfficiencyCorrector::m_writeSystToMetadata"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector14makeMCIndexMapENSt6stringE","BJetEfficiencyCorrector::makeMCIndexMap"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector14makeMCIndexMapENSt6stringE","BJetEfficiencyCorrector::makeMCIndexMap"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector14makeMCIndexMapENSt6stringE","BJetEfficiencyCorrector::makeMCIndexMap::effCalib"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector14makeMCIndexMapENSt6stringE","BJetEfficiencyCorrector::makeMCIndexMap::effCalib"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector11postExecuteEv","BJetEfficiencyCorrector::postExecute"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector11postExecuteEv","BJetEfficiencyCorrector::postExecute"],[2,2,1,"_CPPv4N23BJetEfficiencyCorrector8setupJobERN2EL3JobE","BJetEfficiencyCorrector::setupJob"],[60,2,1,"_CPPv4N23BJetEfficiencyCorrector8setupJobERN2EL3JobE","BJetEfficiencyCorrector::setupJob"],[2,3,1,"_CPPv4N23BJetEfficiencyCorrector8setupJobERN2EL3JobE","BJetEfficiencyCorrector::setupJob::job"],[60,3,1,"_CPPv4N23BJetEfficiencyCorrector8setupJobERN2EL3JobE","BJetEfficiencyCorrector::setupJob::job"],[3,1,1,"_CPPv419BasicEventSelection","BasicEventSelection"],[61,1,1,"_CPPv419BasicEventSelection","BasicEventSelection"],[3,2,1,"_CPPv4N19BasicEventSelection19BasicEventSelectionEv","BasicEventSelection::BasicEventSelection"],[61,2,1,"_CPPv4N19BasicEventSelection19BasicEventSelectionEv","BasicEventSelection::BasicEventSelection"],[3,2,1,"_CPPv4N19BasicEventSelection25autoconfigurePileupRWToolEv","BasicEventSelection::autoconfigurePileupRWTool"],[3,2,1,"_CPPv4N19BasicEventSelection11changeInputEb","BasicEventSelection::changeInput"],[61,2,1,"_CPPv4N19BasicEventSelection11changeInputEb","BasicEventSelection::changeInput"],[3,3,1,"_CPPv4N19BasicEventSelection11changeInputEb","BasicEventSelection::changeInput::firstFile"],[61,3,1,"_CPPv4N19BasicEventSelection11changeInputEb","BasicEventSelection::changeInput::firstFile"],[3,2,1,"_CPPv4N19BasicEventSelection7executeEv","BasicEventSelection::execute"],[61,2,1,"_CPPv4N19BasicEventSelection7executeEv","BasicEventSelection::execute"],[3,2,1,"_CPPv4N19BasicEventSelection11fileExecuteEv","BasicEventSelection::fileExecute"],[61,2,1,"_CPPv4N19BasicEventSelection11fileExecuteEv","BasicEventSelection::fileExecute"],[3,2,1,"_CPPv4N19BasicEventSelection8finalizeEv","BasicEventSelection::finalize"],[61,2,1,"_CPPv4N19BasicEventSelection8finalizeEv","BasicEventSelection::finalize"],[3,2,1,"_CPPv4N19BasicEventSelection12histFinalizeEv","BasicEventSelection::histFinalize"],[61,2,1,"_CPPv4N19BasicEventSelection12histFinalizeEv","BasicEventSelection::histFinalize"],[3,2,1,"_CPPv4N19BasicEventSelection14histInitializeEv","BasicEventSelection::histInitialize"],[61,2,1,"_CPPv4N19BasicEventSelection14histInitializeEv","BasicEventSelection::histInitialize"],[3,2,1,"_CPPv4N19BasicEventSelection10initializeEv","BasicEventSelection::initialize"],[61,2,1,"_CPPv4N19BasicEventSelection10initializeEv","BasicEventSelection::initialize"],[3,4,1,"_CPPv4N19BasicEventSelection16m_GRLExcludeListE","BasicEventSelection::m_GRLExcludeList"],[61,4,1,"_CPPv4N19BasicEventSelection16m_GRLExcludeListE","BasicEventSelection::m_GRLExcludeList"],[3,4,1,"_CPPv4N19BasicEventSelection8m_GRLxmlE","BasicEventSelection::m_GRLxml"],[61,4,1,"_CPPv4N19BasicEventSelection8m_GRLxmlE","BasicEventSelection::m_GRLxml"],[3,4,1,"_CPPv4N19BasicEventSelection17m_MD_finalNeventsE","BasicEventSelection::m_MD_finalNevents"],[3,4,1,"_CPPv4N19BasicEventSelection14m_MD_finalSumWE","BasicEventSelection::m_MD_finalSumW"],[3,4,1,"_CPPv4N19BasicEventSelection21m_MD_finalSumWSquaredE","BasicEventSelection::m_MD_finalSumWSquared"],[3,4,1,"_CPPv4N19BasicEventSelection19m_MD_initialNeventsE","BasicEventSelection::m_MD_initialNevents"],[3,4,1,"_CPPv4N19BasicEventSelection16m_MD_initialSumWE","BasicEventSelection::m_MD_initialSumW"],[3,4,1,"_CPPv4N19BasicEventSelection23m_MD_initialSumWSquaredE","BasicEventSelection::m_MD_initialSumWSquared"],[3,4,1,"_CPPv4N19BasicEventSelection14m_PRWFileNamesE","BasicEventSelection::m_PRWFileNames"],[61,4,1,"_CPPv4N19BasicEventSelection14m_PRWFileNamesE","BasicEventSelection::m_PRWFileNames"],[3,4,1,"_CPPv4N19BasicEventSelection10m_PVNTrackE","BasicEventSelection::m_PVNTrack"],[61,4,1,"_CPPv4N19BasicEventSelection10m_PVNTrackE","BasicEventSelection::m_PVNTrack"],[3,4,1,"_CPPv4N19BasicEventSelection16m_RunNr_VS_EvtNrE","BasicEventSelection::m_RunNr_VS_EvtNr"],[3,4,1,"_CPPv4N19BasicEventSelection13m_actualMuMaxE","BasicEventSelection::m_actualMuMax"],[61,4,1,"_CPPv4N19BasicEventSelection13m_actualMuMaxE","BasicEventSelection::m_actualMuMax"],[3,4,1,"_CPPv4N19BasicEventSelection13m_actualMuMinE","BasicEventSelection::m_actualMuMin"],[61,4,1,"_CPPv4N19BasicEventSelection13m_actualMuMinE","BasicEventSelection::m_actualMuMin"],[3,4,1,"_CPPv4N19BasicEventSelection19m_applyCoreFlagsCutE","BasicEventSelection::m_applyCoreFlagsCut"],[61,4,1,"_CPPv4N19BasicEventSelection19m_applyCoreFlagsCutE","BasicEventSelection::m_applyCoreFlagsCut"],[3,4,1,"_CPPv4N19BasicEventSelection23m_applyEventCleaningCutE","BasicEventSelection::m_applyEventCleaningCut"],[61,4,1,"_CPPv4N19BasicEventSelection23m_applyEventCleaningCutE","BasicEventSelection::m_applyEventCleaningCut"],[3,4,1,"_CPPv4N19BasicEventSelection13m_applyGRLCutE","BasicEventSelection::m_applyGRLCut"],[61,4,1,"_CPPv4N19BasicEventSelection13m_applyGRLCutE","BasicEventSelection::m_applyGRLCut"],[3,4,1,"_CPPv4N19BasicEventSelection22m_applyIsBadBatmanFlagE","BasicEventSelection::m_applyIsBadBatmanFlag"],[61,4,1,"_CPPv4N19BasicEventSelection22m_applyIsBadBatmanFlagE","BasicEventSelection::m_applyIsBadBatmanFlag"],[3,4,1,"_CPPv4N19BasicEventSelection27m_applyJetCleaningEventFlagE","BasicEventSelection::m_applyJetCleaningEventFlag"],[61,4,1,"_CPPv4N19BasicEventSelection27m_applyJetCleaningEventFlagE","BasicEventSelection::m_applyJetCleaningEventFlag"],[3,4,1,"_CPPv4N19BasicEventSelection23m_applyPrimaryVertexCutE","BasicEventSelection::m_applyPrimaryVertexCut"],[61,4,1,"_CPPv4N19BasicEventSelection23m_applyPrimaryVertexCutE","BasicEventSelection::m_applyPrimaryVertexCut"],[3,4,1,"_CPPv4N19BasicEventSelection17m_applyTriggerCutE","BasicEventSelection::m_applyTriggerCut"],[61,4,1,"_CPPv4N19BasicEventSelection17m_applyTriggerCutE","BasicEventSelection::m_applyTriggerCut"],[3,4,1,"_CPPv4N19BasicEventSelection15m_autoconfigPRWE","BasicEventSelection::m_autoconfigPRW"],[61,4,1,"_CPPv4N19BasicEventSelection15m_autoconfigPRWE","BasicEventSelection::m_autoconfigPRW"],[3,4,1,"_CPPv4N19BasicEventSelection14m_calcBCIDInfoE","BasicEventSelection::m_calcBCIDInfo"],[61,4,1,"_CPPv4N19BasicEventSelection14m_calcBCIDInfoE","BasicEventSelection::m_calcBCIDInfo"],[3,4,1,"_CPPv4N19BasicEventSelection21m_checkDuplicatesDataE","BasicEventSelection::m_checkDuplicatesData"],[61,4,1,"_CPPv4N19BasicEventSelection21m_checkDuplicatesDataE","BasicEventSelection::m_checkDuplicatesData"],[3,4,1,"_CPPv4N19BasicEventSelection19m_checkDuplicatesMCE","BasicEventSelection::m_checkDuplicatesMC"],[61,4,1,"_CPPv4N19BasicEventSelection19m_checkDuplicatesMCE","BasicEventSelection::m_checkDuplicatesMC"],[3,4,1,"_CPPv4N19BasicEventSelection14m_checkStreamsE","BasicEventSelection::m_checkStreams"],[61,4,1,"_CPPv4N19BasicEventSelection14m_checkStreamsE","BasicEventSelection::m_checkStreams"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cleanPowhegE","BasicEventSelection::m_cleanPowheg"],[61,4,1,"_CPPv4N19BasicEventSelection13m_cleanPowhegE","BasicEventSelection::m_cleanPowheg"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20aE","BasicEventSelection::m_commonPRWFileMC20a"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20aE","BasicEventSelection::m_commonPRWFileMC20a"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20dE","BasicEventSelection::m_commonPRWFileMC20d"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20dE","BasicEventSelection::m_commonPRWFileMC20d"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20eE","BasicEventSelection::m_commonPRWFileMC20e"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC20eE","BasicEventSelection::m_commonPRWFileMC20e"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23aE","BasicEventSelection::m_commonPRWFileMC23a"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23aE","BasicEventSelection::m_commonPRWFileMC23a"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23cE","BasicEventSelection::m_commonPRWFileMC23c"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23cE","BasicEventSelection::m_commonPRWFileMC23c"],[3,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23dE","BasicEventSelection::m_commonPRWFileMC23d"],[61,4,1,"_CPPv4N19BasicEventSelection20m_commonPRWFileMC23dE","BasicEventSelection::m_commonPRWFileMC23d"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflowHistE","BasicEventSelection::m_cutflowHist"],[3,4,1,"_CPPv4N19BasicEventSelection14m_cutflowHistWE","BasicEventSelection::m_cutflowHistW"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflow_SCTE","BasicEventSelection::m_cutflow_SCT"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflow_allE","BasicEventSelection::m_cutflow_all"],[3,4,1,"_CPPv4N19BasicEventSelection14m_cutflow_coreE","BasicEventSelection::m_cutflow_core"],[3,4,1,"_CPPv4N19BasicEventSelection20m_cutflow_duplicatesE","BasicEventSelection::m_cutflow_duplicates"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflow_grlE","BasicEventSelection::m_cutflow_grl"],[3,4,1,"_CPPv4N19BasicEventSelection14m_cutflow_initE","BasicEventSelection::m_cutflow_init"],[3,4,1,"_CPPv4N19BasicEventSelection21m_cutflow_isbadbatmanE","BasicEventSelection::m_cutflow_isbadbatman"],[3,4,1,"_CPPv4N19BasicEventSelection21m_cutflow_jetcleaningE","BasicEventSelection::m_cutflow_jetcleaning"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflow_larE","BasicEventSelection::m_cutflow_lar"],[3,4,1,"_CPPv4N19BasicEventSelection13m_cutflow_npvE","BasicEventSelection::m_cutflow_npv"],[3,4,1,"_CPPv4N19BasicEventSelection14m_cutflow_tileE","BasicEventSelection::m_cutflow_tile"],[3,4,1,"_CPPv4N19BasicEventSelection17m_cutflow_triggerE","BasicEventSelection::m_cutflow_trigger"],[3,4,1,"_CPPv4N19BasicEventSelection16m_derivationNameE","BasicEventSelection::m_derivationName"],[61,4,1,"_CPPv4N19BasicEventSelection16m_derivationNameE","BasicEventSelection::m_derivationName"],[3,4,1,"_CPPv4N19BasicEventSelection17m_doPUreweightingE","BasicEventSelection::m_doPUreweighting"],[61,4,1,"_CPPv4N19BasicEventSelection17m_doPUreweightingE","BasicEventSelection::m_doPUreweighting"],[3,4,1,"_CPPv4N19BasicEventSelection20m_doPUreweightingSysE","BasicEventSelection::m_doPUreweightingSys"],[61,4,1,"_CPPv4N19BasicEventSelection20m_doPUreweightingSysE","BasicEventSelection::m_doPUreweightingSys"],[3,4,1,"_CPPv4N19BasicEventSelection20m_doRunByRunCutflowsE","BasicEventSelection::m_doRunByRunCutflows"],[61,4,1,"_CPPv4N19BasicEventSelection20m_doRunByRunCutflowsE","BasicEventSelection::m_doRunByRunCutflows"],[3,4,1,"_CPPv4N19BasicEventSelection17m_duplEventNumberE","BasicEventSelection::m_duplEventNumber"],[3,4,1,"_CPPv4N19BasicEventSelection15m_duplRunNumberE","BasicEventSelection::m_duplRunNumber"],[3,4,1,"_CPPv4N19BasicEventSelection22m_duplicatesStreamNameE","BasicEventSelection::m_duplicatesStreamName"],[61,4,1,"_CPPv4N19BasicEventSelection22m_duplicatesStreamNameE","BasicEventSelection::m_duplicatesStreamName"],[3,4,1,"_CPPv4N19BasicEventSelection16m_duplicatesTreeE","BasicEventSelection::m_duplicatesTree"],[3,4,1,"_CPPv4N19BasicEventSelection18m_el_cutflowHist_1E","BasicEventSelection::m_el_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection18m_el_cutflowHist_2E","BasicEventSelection::m_el_cutflowHist_2"],[3,4,1,"_CPPv4N19BasicEventSelection14m_eventCounterE","BasicEventSelection::m_eventCounter"],[3,4,1,"_CPPv4N19BasicEventSelection23m_extraTriggerSelectionE","BasicEventSelection::m_extraTriggerSelection"],[61,4,1,"_CPPv4N19BasicEventSelection23m_extraTriggerSelectionE","BasicEventSelection::m_extraTriggerSelection"],[3,4,1,"_CPPv4N19BasicEventSelection27m_extraTriggerSelectionListE","BasicEventSelection::m_extraTriggerSelectionList"],[3,4,1,"_CPPv4N19BasicEventSelection12m_grl_handleE","BasicEventSelection::m_grl_handle"],[3,4,1,"_CPPv4N19BasicEventSelection16m_histEventCountE","BasicEventSelection::m_histEventCount"],[3,4,1,"_CPPv4N19BasicEventSelection10m_histSumWE","BasicEventSelection::m_histSumW"],[3,4,1,"_CPPv4N19BasicEventSelection11m_isTLADataE","BasicEventSelection::m_isTLAData"],[61,4,1,"_CPPv4N19BasicEventSelection11m_isTLADataE","BasicEventSelection::m_isTLAData"],[3,4,1,"_CPPv4N19BasicEventSelection19m_jet_cutflowHist_1E","BasicEventSelection::m_jet_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection19m_lumiCalcFileNamesE","BasicEventSelection::m_lumiCalcFileNames"],[61,4,1,"_CPPv4N19BasicEventSelection19m_lumiCalcFileNamesE","BasicEventSelection::m_lumiCalcFileNames"],[3,4,1,"_CPPv4N19BasicEventSelection12m_mcCampaignE","BasicEventSelection::m_mcCampaign"],[61,4,1,"_CPPv4N19BasicEventSelection12m_mcCampaignE","BasicEventSelection::m_mcCampaign"],[3,4,1,"_CPPv4N19BasicEventSelection14m_mcCampaignMDE","BasicEventSelection::m_mcCampaignMD"],[3,4,1,"_CPPv4N19BasicEventSelection20m_metaDataStreamNameE","BasicEventSelection::m_metaDataStreamName"],[61,4,1,"_CPPv4N19BasicEventSelection20m_metaDataStreamNameE","BasicEventSelection::m_metaDataStreamName"],[3,4,1,"_CPPv4N19BasicEventSelection18m_mu_cutflowHist_1E","BasicEventSelection::m_mu_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection18m_mu_cutflowHist_2E","BasicEventSelection::m_mu_cutflowHist_2"],[3,4,1,"_CPPv4N19BasicEventSelection14m_periodConfigE","BasicEventSelection::m_periodConfig"],[61,4,1,"_CPPv4N19BasicEventSelection14m_periodConfigE","BasicEventSelection::m_periodConfig"],[3,4,1,"_CPPv4N19BasicEventSelection18m_ph_cutflowHist_1E","BasicEventSelection::m_ph_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection20m_pileup_tool_handleE","BasicEventSelection::m_pileup_tool_handle"],[3,4,1,"_CPPv4N19BasicEventSelection17m_printBranchListE","BasicEventSelection::m_printBranchList"],[61,4,1,"_CPPv4N19BasicEventSelection17m_printBranchListE","BasicEventSelection::m_printBranchList"],[3,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2016FileE","BasicEventSelection::m_prwActualMu2016File"],[61,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2016FileE","BasicEventSelection::m_prwActualMu2016File"],[3,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2017FileE","BasicEventSelection::m_prwActualMu2017File"],[61,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2017FileE","BasicEventSelection::m_prwActualMu2017File"],[3,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2018FileE","BasicEventSelection::m_prwActualMu2018File"],[61,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2018FileE","BasicEventSelection::m_prwActualMu2018File"],[3,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2022FileE","BasicEventSelection::m_prwActualMu2022File"],[61,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2022FileE","BasicEventSelection::m_prwActualMu2022File"],[3,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2023FileE","BasicEventSelection::m_prwActualMu2023File"],[61,4,1,"_CPPv4N19BasicEventSelection21m_prwActualMu2023FileE","BasicEventSelection::m_prwActualMu2023File"],[3,4,1,"_CPPv4N19BasicEventSelection18m_reweightSherpa22E","BasicEventSelection::m_reweightSherpa22"],[61,4,1,"_CPPv4N19BasicEventSelection18m_reweightSherpa22E","BasicEventSelection::m_reweightSherpa22"],[3,4,1,"_CPPv4N19BasicEventSelection20m_runByrun_afterCutsE","BasicEventSelection::m_runByrun_afterCuts"],[3,4,1,"_CPPv4N19BasicEventSelection21m_runByrun_beforeCutsE","BasicEventSelection::m_runByrun_beforeCuts"],[3,4,1,"_CPPv4N19BasicEventSelection8m_setAF3E","BasicEventSelection::m_setAF3"],[61,4,1,"_CPPv4N19BasicEventSelection8m_setAF3E","BasicEventSelection::m_setAF3"],[3,4,1,"_CPPv4N19BasicEventSelection9m_setAFIIE","BasicEventSelection::m_setAFII"],[61,4,1,"_CPPv4N19BasicEventSelection9m_setAFIIE","BasicEventSelection::m_setAFII"],[3,4,1,"_CPPv4N19BasicEventSelection7m_setFSE","BasicEventSelection::m_setFS"],[61,4,1,"_CPPv4N19BasicEventSelection7m_setFSE","BasicEventSelection::m_setFS"],[3,4,1,"_CPPv4N19BasicEventSelection14m_storePassHLTE","BasicEventSelection::m_storePassHLT"],[61,4,1,"_CPPv4N19BasicEventSelection14m_storePassHLTE","BasicEventSelection::m_storePassHLT"],[3,4,1,"_CPPv4N19BasicEventSelection13m_storePassL1E","BasicEventSelection::m_storePassL1"],[61,4,1,"_CPPv4N19BasicEventSelection13m_storePassL1E","BasicEventSelection::m_storePassL1"],[3,4,1,"_CPPv4N19BasicEventSelection21m_storePrescaleWeightE","BasicEventSelection::m_storePrescaleWeight"],[61,4,1,"_CPPv4N19BasicEventSelection21m_storePrescaleWeightE","BasicEventSelection::m_storePrescaleWeight"],[3,4,1,"_CPPv4N19BasicEventSelection20m_storeTrigDecisionsE","BasicEventSelection::m_storeTrigDecisions"],[61,4,1,"_CPPv4N19BasicEventSelection20m_storeTrigDecisionsE","BasicEventSelection::m_storeTrigDecisions"],[3,4,1,"_CPPv4N19BasicEventSelection15m_storeTrigKeysE","BasicEventSelection::m_storeTrigKeys"],[61,4,1,"_CPPv4N19BasicEventSelection15m_storeTrigKeysE","BasicEventSelection::m_storeTrigKeys"],[3,4,1,"_CPPv4N19BasicEventSelection19m_tau_cutflowHist_1E","BasicEventSelection::m_tau_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection19m_tau_cutflowHist_2E","BasicEventSelection::m_tau_cutflowHist_2"],[3,4,1,"_CPPv4N19BasicEventSelection21m_trigConfTool_handleE","BasicEventSelection::m_trigConfTool_handle"],[3,4,1,"_CPPv4N19BasicEventSelection20m_trigDecTool_handleE","BasicEventSelection::m_trigDecTool_handle"],[3,4,1,"_CPPv4N19BasicEventSelection18m_triggerSelectionE","BasicEventSelection::m_triggerSelection"],[61,4,1,"_CPPv4N19BasicEventSelection18m_triggerSelectionE","BasicEventSelection::m_triggerSelection"],[3,4,1,"_CPPv4N19BasicEventSelection23m_triggerUnprescaleListE","BasicEventSelection::m_triggerUnprescaleList"],[3,4,1,"_CPPv4N19BasicEventSelection19m_trk_cutflowHist_1E","BasicEventSelection::m_trk_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection16m_truthLevelOnlyE","BasicEventSelection::m_truthLevelOnly"],[61,4,1,"_CPPv4N19BasicEventSelection16m_truthLevelOnlyE","BasicEventSelection::m_truthLevelOnly"],[3,4,1,"_CPPv4N19BasicEventSelection21m_truth_cutflowHist_1E","BasicEventSelection::m_truth_cutflowHist_1"],[3,4,1,"_CPPv4N19BasicEventSelection19m_useCommonPRWFilesE","BasicEventSelection::m_useCommonPRWFiles"],[61,4,1,"_CPPv4N19BasicEventSelection19m_useCommonPRWFilesE","BasicEventSelection::m_useCommonPRWFiles"],[3,4,1,"_CPPv4N19BasicEventSelection13m_useMetaDataE","BasicEventSelection::m_useMetaData"],[61,4,1,"_CPPv4N19BasicEventSelection13m_useMetaDataE","BasicEventSelection::m_useMetaData"],[3,2,1,"_CPPv4N19BasicEventSelection11postExecuteEv","BasicEventSelection::postExecute"],[61,2,1,"_CPPv4N19BasicEventSelection11postExecuteEv","BasicEventSelection::postExecute"],[3,2,1,"_CPPv4N19BasicEventSelection8setupJobERN2EL3JobE","BasicEventSelection::setupJob"],[61,2,1,"_CPPv4N19BasicEventSelection8setupJobERN2EL3JobE","BasicEventSelection::setupJob"],[3,3,1,"_CPPv4N19BasicEventSelection8setupJobERN2EL3JobE","BasicEventSelection::setupJob::job"],[61,3,1,"_CPPv4N19BasicEventSelection8setupJobERN2EL3JobE","BasicEventSelection::setupJob::job"],[6,1,1,"_CPPv416ClusterHistsAlgo","ClusterHistsAlgo"],[62,1,1,"_CPPv416ClusterHistsAlgo","ClusterHistsAlgo"],[6,2,1,"_CPPv4N16ClusterHistsAlgo16ClusterHistsAlgoEv","ClusterHistsAlgo::ClusterHistsAlgo"],[62,2,1,"_CPPv4N16ClusterHistsAlgo16ClusterHistsAlgoEv","ClusterHistsAlgo::ClusterHistsAlgo"],[6,2,1,"_CPPv4N16ClusterHistsAlgo11changeInputEb","ClusterHistsAlgo::changeInput"],[62,2,1,"_CPPv4N16ClusterHistsAlgo11changeInputEb","ClusterHistsAlgo::changeInput"],[6,3,1,"_CPPv4N16ClusterHistsAlgo11changeInputEb","ClusterHistsAlgo::changeInput::firstFile"],[62,3,1,"_CPPv4N16ClusterHistsAlgo11changeInputEb","ClusterHistsAlgo::changeInput::firstFile"],[6,2,1,"_CPPv4N16ClusterHistsAlgo7executeEv","ClusterHistsAlgo::execute"],[62,2,1,"_CPPv4N16ClusterHistsAlgo7executeEv","ClusterHistsAlgo::execute"],[6,2,1,"_CPPv4N16ClusterHistsAlgo11fileExecuteEv","ClusterHistsAlgo::fileExecute"],[62,2,1,"_CPPv4N16ClusterHistsAlgo11fileExecuteEv","ClusterHistsAlgo::fileExecute"],[6,2,1,"_CPPv4N16ClusterHistsAlgo8finalizeEv","ClusterHistsAlgo::finalize"],[62,2,1,"_CPPv4N16ClusterHistsAlgo8finalizeEv","ClusterHistsAlgo::finalize"],[6,2,1,"_CPPv4N16ClusterHistsAlgo12histFinalizeEv","ClusterHistsAlgo::histFinalize"],[62,2,1,"_CPPv4N16ClusterHistsAlgo12histFinalizeEv","ClusterHistsAlgo::histFinalize"],[6,2,1,"_CPPv4N16ClusterHistsAlgo14histInitializeEv","ClusterHistsAlgo::histInitialize"],[62,2,1,"_CPPv4N16ClusterHistsAlgo14histInitializeEv","ClusterHistsAlgo::histInitialize"],[6,2,1,"_CPPv4N16ClusterHistsAlgo10initializeEv","ClusterHistsAlgo::initialize"],[62,2,1,"_CPPv4N16ClusterHistsAlgo10initializeEv","ClusterHistsAlgo::initialize"],[6,4,1,"_CPPv4N16ClusterHistsAlgo11m_detailStrE","ClusterHistsAlgo::m_detailStr"],[62,4,1,"_CPPv4N16ClusterHistsAlgo11m_detailStrE","ClusterHistsAlgo::m_detailStr"],[6,4,1,"_CPPv4N16ClusterHistsAlgo17m_inContainerNameE","ClusterHistsAlgo::m_inContainerName"],[62,4,1,"_CPPv4N16ClusterHistsAlgo17m_inContainerNameE","ClusterHistsAlgo::m_inContainerName"],[6,4,1,"_CPPv4N16ClusterHistsAlgo7m_plotsE","ClusterHistsAlgo::m_plots"],[6,2,1,"_CPPv4N16ClusterHistsAlgo11postExecuteEv","ClusterHistsAlgo::postExecute"],[62,2,1,"_CPPv4N16ClusterHistsAlgo11postExecuteEv","ClusterHistsAlgo::postExecute"],[6,2,1,"_CPPv4N16ClusterHistsAlgo8setupJobERN2EL3JobE","ClusterHistsAlgo::setupJob"],[62,2,1,"_CPPv4N16ClusterHistsAlgo8setupJobERN2EL3JobE","ClusterHistsAlgo::setupJob"],[6,3,1,"_CPPv4N16ClusterHistsAlgo8setupJobERN2EL3JobE","ClusterHistsAlgo::setupJob::job"],[62,3,1,"_CPPv4N16ClusterHistsAlgo8setupJobERN2EL3JobE","ClusterHistsAlgo::setupJob::job"],[9,1,1,"_CPPv49DebugTool","DebugTool"],[63,1,1,"_CPPv49DebugTool","DebugTool"],[9,2,1,"_CPPv4N9DebugTool9DebugToolEv","DebugTool::DebugTool"],[63,2,1,"_CPPv4N9DebugTool9DebugToolEv","DebugTool::DebugTool"],[9,2,1,"_CPPv4N9DebugTool11changeInputEb","DebugTool::changeInput"],[63,2,1,"_CPPv4N9DebugTool11changeInputEb","DebugTool::changeInput"],[9,3,1,"_CPPv4N9DebugTool11changeInputEb","DebugTool::changeInput::firstFile"],[63,3,1,"_CPPv4N9DebugTool11changeInputEb","DebugTool::changeInput::firstFile"],[9,2,1,"_CPPv4N9DebugTool7executeEv","DebugTool::execute"],[63,2,1,"_CPPv4N9DebugTool7executeEv","DebugTool::execute"],[9,2,1,"_CPPv4N9DebugTool11fileExecuteEv","DebugTool::fileExecute"],[63,2,1,"_CPPv4N9DebugTool11fileExecuteEv","DebugTool::fileExecute"],[9,2,1,"_CPPv4N9DebugTool8finalizeEv","DebugTool::finalize"],[63,2,1,"_CPPv4N9DebugTool8finalizeEv","DebugTool::finalize"],[9,2,1,"_CPPv4N9DebugTool12histFinalizeEv","DebugTool::histFinalize"],[63,2,1,"_CPPv4N9DebugTool12histFinalizeEv","DebugTool::histFinalize"],[9,2,1,"_CPPv4N9DebugTool14histInitializeEv","DebugTool::histInitialize"],[63,2,1,"_CPPv4N9DebugTool14histInitializeEv","DebugTool::histInitialize"],[9,2,1,"_CPPv4N9DebugTool10initializeEv","DebugTool::initialize"],[63,2,1,"_CPPv4N9DebugTool10initializeEv","DebugTool::initialize"],[9,4,1,"_CPPv4N9DebugTool12m_printStoreE","DebugTool::m_printStore"],[63,4,1,"_CPPv4N9DebugTool12m_printStoreE","DebugTool::m_printStore"],[9,2,1,"_CPPv4N9DebugTool11postExecuteEv","DebugTool::postExecute"],[63,2,1,"_CPPv4N9DebugTool11postExecuteEv","DebugTool::postExecute"],[9,2,1,"_CPPv4N9DebugTool8setupJobERN2EL3JobE","DebugTool::setupJob"],[63,2,1,"_CPPv4N9DebugTool8setupJobERN2EL3JobE","DebugTool::setupJob"],[9,3,1,"_CPPv4N9DebugTool8setupJobERN2EL3JobE","DebugTool::setupJob::job"],[63,3,1,"_CPPv4N9DebugTool8setupJobERN2EL3JobE","DebugTool::setupJob::job"],[11,1,1,"_CPPv418ElectronCalibrator","ElectronCalibrator"],[64,1,1,"_CPPv418ElectronCalibrator","ElectronCalibrator"],[11,2,1,"_CPPv4N18ElectronCalibrator18ElectronCalibratorEv","ElectronCalibrator::ElectronCalibrator"],[64,2,1,"_CPPv4N18ElectronCalibrator18ElectronCalibratorEv","ElectronCalibrator::ElectronCalibrator"],[11,2,1,"_CPPv4N18ElectronCalibrator11changeInputEb","ElectronCalibrator::changeInput"],[64,2,1,"_CPPv4N18ElectronCalibrator11changeInputEb","ElectronCalibrator::changeInput"],[11,3,1,"_CPPv4N18ElectronCalibrator11changeInputEb","ElectronCalibrator::changeInput::firstFile"],[64,3,1,"_CPPv4N18ElectronCalibrator11changeInputEb","ElectronCalibrator::changeInput::firstFile"],[11,2,1,"_CPPv4N18ElectronCalibrator7executeEv","ElectronCalibrator::execute"],[64,2,1,"_CPPv4N18ElectronCalibrator7executeEv","ElectronCalibrator::execute"],[11,2,1,"_CPPv4N18ElectronCalibrator11fileExecuteEv","ElectronCalibrator::fileExecute"],[64,2,1,"_CPPv4N18ElectronCalibrator11fileExecuteEv","ElectronCalibrator::fileExecute"],[11,2,1,"_CPPv4N18ElectronCalibrator8finalizeEv","ElectronCalibrator::finalize"],[64,2,1,"_CPPv4N18ElectronCalibrator8finalizeEv","ElectronCalibrator::finalize"],[11,2,1,"_CPPv4N18ElectronCalibrator12histFinalizeEv","ElectronCalibrator::histFinalize"],[64,2,1,"_CPPv4N18ElectronCalibrator12histFinalizeEv","ElectronCalibrator::histFinalize"],[11,2,1,"_CPPv4N18ElectronCalibrator14histInitializeEv","ElectronCalibrator::histInitialize"],[64,2,1,"_CPPv4N18ElectronCalibrator14histInitializeEv","ElectronCalibrator::histInitialize"],[11,2,1,"_CPPv4N18ElectronCalibrator10initializeEv","ElectronCalibrator::initialize"],[64,2,1,"_CPPv4N18ElectronCalibrator10initializeEv","ElectronCalibrator::initialize"],[11,4,1,"_CPPv4N18ElectronCalibrator34m_EgammaCalibrationAndSmearingToolE","ElectronCalibrator::m_EgammaCalibrationAndSmearingTool"],[11,4,1,"_CPPv4N18ElectronCalibrator25m_IsolationCorrectionToolE","ElectronCalibrator::m_IsolationCorrectionTool"],[11,4,1,"_CPPv4N18ElectronCalibrator26m_applyIsolationCorrectionE","ElectronCalibrator::m_applyIsolationCorrection"],[64,4,1,"_CPPv4N18ElectronCalibrator26m_applyIsolationCorrectionE","ElectronCalibrator::m_applyIsolationCorrection"],[11,4,1,"_CPPv4N18ElectronCalibrator20m_decorrelationModelE","ElectronCalibrator::m_decorrelationModel"],[64,4,1,"_CPPv4N18ElectronCalibrator20m_decorrelationModelE","ElectronCalibrator::m_decorrelationModel"],[11,4,1,"_CPPv4N18ElectronCalibrator9m_esModelE","ElectronCalibrator::m_esModel"],[64,4,1,"_CPPv4N18ElectronCalibrator9m_esModelE","ElectronCalibrator::m_esModel"],[11,4,1,"_CPPv4N18ElectronCalibrator17m_inContainerNameE","ElectronCalibrator::m_inContainerName"],[64,4,1,"_CPPv4N18ElectronCalibrator17m_inContainerNameE","ElectronCalibrator::m_inContainerName"],[11,4,1,"_CPPv4N18ElectronCalibrator20m_inputAlgoSystNamesE","ElectronCalibrator::m_inputAlgoSystNames"],[64,4,1,"_CPPv4N18ElectronCalibrator20m_inputAlgoSystNamesE","ElectronCalibrator::m_inputAlgoSystNames"],[11,4,1,"_CPPv4N18ElectronCalibrator10m_numEventE","ElectronCalibrator::m_numEvent"],[11,4,1,"_CPPv4N18ElectronCalibrator11m_numObjectE","ElectronCalibrator::m_numObject"],[11,4,1,"_CPPv4N18ElectronCalibrator21m_outAuxContainerNameE","ElectronCalibrator::m_outAuxContainerName"],[11,4,1,"_CPPv4N18ElectronCalibrator18m_outContainerNameE","ElectronCalibrator::m_outContainerName"],[64,4,1,"_CPPv4N18ElectronCalibrator18m_outContainerNameE","ElectronCalibrator::m_outContainerName"],[11,4,1,"_CPPv4N18ElectronCalibrator23m_outSCAuxContainerNameE","ElectronCalibrator::m_outSCAuxContainerName"],[11,4,1,"_CPPv4N18ElectronCalibrator20m_outSCContainerNameE","ElectronCalibrator::m_outSCContainerName"],[11,4,1,"_CPPv4N18ElectronCalibrator21m_outputAlgoSystNamesE","ElectronCalibrator::m_outputAlgoSystNames"],[64,4,1,"_CPPv4N18ElectronCalibrator21m_outputAlgoSystNamesE","ElectronCalibrator::m_outputAlgoSystNames"],[11,4,1,"_CPPv4N18ElectronCalibrator6m_sortE","ElectronCalibrator::m_sort"],[64,4,1,"_CPPv4N18ElectronCalibrator6m_sortE","ElectronCalibrator::m_sort"],[11,4,1,"_CPPv4N18ElectronCalibrator10m_systListE","ElectronCalibrator::m_systList"],[11,4,1,"_CPPv4N18ElectronCalibrator21m_writeSystToMetadataE","ElectronCalibrator::m_writeSystToMetadata"],[64,4,1,"_CPPv4N18ElectronCalibrator21m_writeSystToMetadataE","ElectronCalibrator::m_writeSystToMetadata"],[11,2,1,"_CPPv4N18ElectronCalibrator11postExecuteEv","ElectronCalibrator::postExecute"],[64,2,1,"_CPPv4N18ElectronCalibrator11postExecuteEv","ElectronCalibrator::postExecute"],[11,2,1,"_CPPv4N18ElectronCalibrator8setupJobERN2EL3JobE","ElectronCalibrator::setupJob"],[64,2,1,"_CPPv4N18ElectronCalibrator8setupJobERN2EL3JobE","ElectronCalibrator::setupJob"],[11,3,1,"_CPPv4N18ElectronCalibrator8setupJobERN2EL3JobE","ElectronCalibrator::setupJob::job"],[64,3,1,"_CPPv4N18ElectronCalibrator8setupJobERN2EL3JobE","ElectronCalibrator::setupJob::job"],[42,1,1,"_CPPv426ElectronCutBasedPIDManager","ElectronCutBasedPIDManager"],[65,1,1,"_CPPv426ElectronCutBasedPIDManager","ElectronCutBasedPIDManager"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerEv","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerEv","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager"],[42,3,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager::WP"],[65,3,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager::WP"],[42,3,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager::debug"],[65,3,1,"_CPPv4N26ElectronCutBasedPIDManager26ElectronCutBasedPIDManagerENSt6stringEb","ElectronCutBasedPIDManager::ElectronCutBasedPIDManager::debug"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager13getAllWPToolsEv","ElectronCutBasedPIDManager::getAllWPTools"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager13getAllWPToolsEv","ElectronCutBasedPIDManager::getAllWPTools"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager9getAllWPsEv","ElectronCutBasedPIDManager::getAllWPs"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager9getAllWPsEv","ElectronCutBasedPIDManager::getAllWPs"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager13getSelectedWPEv","ElectronCutBasedPIDManager::getSelectedWP"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager13getSelectedWPEv","ElectronCutBasedPIDManager::getSelectedWP"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager15getValidWPToolsEv","ElectronCutBasedPIDManager::getValidWPTools"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager15getValidWPToolsEv","ElectronCutBasedPIDManager::getValidWPTools"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager11getValidWPsEv","ElectronCutBasedPIDManager::getValidWPs"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager11getValidWPsEv","ElectronCutBasedPIDManager::getValidWPs"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager16m_allWPAuxDecorsE","ElectronCutBasedPIDManager::m_allWPAuxDecors"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager12m_allWPToolsE","ElectronCutBasedPIDManager::m_allWPTools"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager31m_asgElectronIsEMSelector_LooseE","ElectronCutBasedPIDManager::m_asgElectronIsEMSelector_Loose"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager32m_asgElectronIsEMSelector_MediumE","ElectronCutBasedPIDManager::m_asgElectronIsEMSelector_Medium"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager31m_asgElectronIsEMSelector_TightE","ElectronCutBasedPIDManager::m_asgElectronIsEMSelector_Tight"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager7m_debugE","ElectronCutBasedPIDManager::m_debug"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager12m_selectedWPE","ElectronCutBasedPIDManager::m_selectedWP"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager14m_validWPToolsE","ElectronCutBasedPIDManager::m_validWPTools"],[42,4,1,"_CPPv4N26ElectronCutBasedPIDManager10m_validWPsE","ElectronCutBasedPIDManager::m_validWPs"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager14setDecorationsEPKN4xAOD8ElectronE","ElectronCutBasedPIDManager::setDecorations"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager14setDecorationsEPKN4xAOD8ElectronE","ElectronCutBasedPIDManager::setDecorations"],[42,3,1,"_CPPv4N26ElectronCutBasedPIDManager14setDecorationsEPKN4xAOD8ElectronE","ElectronCutBasedPIDManager::setDecorations::electron"],[65,3,1,"_CPPv4N26ElectronCutBasedPIDManager14setDecorationsEPKN4xAOD8ElectronE","ElectronCutBasedPIDManager::setDecorations::electron"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs"],[42,3,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs::configTools"],[65,3,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs::configTools"],[42,3,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs::selector_name"],[65,3,1,"_CPPv4N26ElectronCutBasedPIDManager8setupWPsEbNSt6stringE","ElectronCutBasedPIDManager::setupWPs::selector_name"],[42,2,1,"_CPPv4N26ElectronCutBasedPIDManagerD0Ev","ElectronCutBasedPIDManager::~ElectronCutBasedPIDManager"],[65,2,1,"_CPPv4N26ElectronCutBasedPIDManagerD0Ev","ElectronCutBasedPIDManager::~ElectronCutBasedPIDManager"],[12,1,1,"_CPPv427ElectronEfficiencyCorrector","ElectronEfficiencyCorrector"],[66,1,1,"_CPPv427ElectronEfficiencyCorrector","ElectronEfficiencyCorrector"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector27ElectronEfficiencyCorrectorEv","ElectronEfficiencyCorrector::ElectronEfficiencyCorrector"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector27ElectronEfficiencyCorrectorEv","ElectronEfficiencyCorrector::ElectronEfficiencyCorrector"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector11changeInputEb","ElectronEfficiencyCorrector::changeInput"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector11changeInputEb","ElectronEfficiencyCorrector::changeInput"],[12,3,1,"_CPPv4N27ElectronEfficiencyCorrector11changeInputEb","ElectronEfficiencyCorrector::changeInput::firstFile"],[66,3,1,"_CPPv4N27ElectronEfficiencyCorrector11changeInputEb","ElectronEfficiencyCorrector::changeInput::firstFile"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector7executeEv","ElectronEfficiencyCorrector::execute"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector7executeEv","ElectronEfficiencyCorrector::execute"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF"],[12,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::inputElectrons"],[66,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::inputElectrons"],[12,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::nominal"],[66,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::nominal"],[12,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::writeSystNames"],[66,3,1,"_CPPv4N27ElectronEfficiencyCorrector9executeSFEPKN4xAOD17ElectronContainerEbb","ElectronEfficiencyCorrector::executeSF::writeSystNames"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector11fileExecuteEv","ElectronEfficiencyCorrector::fileExecute"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector11fileExecuteEv","ElectronEfficiencyCorrector::fileExecute"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector8finalizeEv","ElectronEfficiencyCorrector::finalize"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector8finalizeEv","ElectronEfficiencyCorrector::finalize"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector12histFinalizeEv","ElectronEfficiencyCorrector::histFinalize"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector12histFinalizeEv","ElectronEfficiencyCorrector::histFinalize"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector14histInitializeEv","ElectronEfficiencyCorrector::histInitialize"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector14histInitializeEv","ElectronEfficiencyCorrector::histInitialize"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector10initializeEv","ElectronEfficiencyCorrector::initialize"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector10initializeEv","ElectronEfficiencyCorrector::initialize"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_IsoEffSF_tool_nameE","ElectronEfficiencyCorrector::m_IsoEffSF_tool_name"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_RecoEffSF_tool_nameE","ElectronEfficiencyCorrector::m_RecoEffSF_tool_name"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_TrigEffSF_tool_nameE","ElectronEfficiencyCorrector::m_TrigEffSF_tool_name"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_TrigMCEff_tool_nameE","ElectronEfficiencyCorrector::m_TrigMCEff_tool_name"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_WorkingPointIsoE","ElectronEfficiencyCorrector::m_WorkingPointIso"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_WorkingPointIsoE","ElectronEfficiencyCorrector::m_WorkingPointIso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_WorkingPointPIDE","ElectronEfficiencyCorrector::m_WorkingPointPID"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_WorkingPointPIDE","ElectronEfficiencyCorrector::m_WorkingPointPID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_WorkingPointRecoE","ElectronEfficiencyCorrector::m_WorkingPointReco"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_WorkingPointRecoE","ElectronEfficiencyCorrector::m_WorkingPointReco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_WorkingPointTrigE","ElectronEfficiencyCorrector::m_WorkingPointTrig"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_WorkingPointTrigE","ElectronEfficiencyCorrector::m_WorkingPointTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector27m_asgElEffCorrTool_elSF_IsoE","ElectronEfficiencyCorrector::m_asgElEffCorrTool_elSF_Iso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector27m_asgElEffCorrTool_elSF_PIDE","ElectronEfficiencyCorrector::m_asgElEffCorrTool_elSF_PID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector28m_asgElEffCorrTool_elSF_RecoE","ElectronEfficiencyCorrector::m_asgElEffCorrTool_elSF_Reco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector28m_asgElEffCorrTool_elSF_TrigE","ElectronEfficiencyCorrector::m_asgElEffCorrTool_elSF_Trig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector33m_asgElEffCorrTool_elSF_TrigMCEffE","ElectronEfficiencyCorrector::m_asgElEffCorrTool_elSF_TrigMCEff"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_correlationModelE","ElectronEfficiencyCorrector::m_correlationModel"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector18m_correlationModelE","ElectronEfficiencyCorrector::m_correlationModel"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_inContainerNameE","ElectronEfficiencyCorrector::m_inContainerName"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector17m_inContainerNameE","ElectronEfficiencyCorrector::m_inContainerName"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector25m_inputSystNamesElectronsE","ElectronEfficiencyCorrector::m_inputSystNamesElectrons"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector25m_inputSystNamesElectronsE","ElectronEfficiencyCorrector::m_inputSystNamesElectrons"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector10m_numEventE","ElectronEfficiencyCorrector::m_numEvent"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector11m_numObjectE","ElectronEfficiencyCorrector::m_numObject"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_outputSystNamesIsoE","ElectronEfficiencyCorrector::m_outputSystNamesIso"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_outputSystNamesIsoE","ElectronEfficiencyCorrector::m_outputSystNamesIso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_outputSystNamesPIDE","ElectronEfficiencyCorrector::m_outputSystNamesPID"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_outputSystNamesPIDE","ElectronEfficiencyCorrector::m_outputSystNamesPID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_outputSystNamesRecoE","ElectronEfficiencyCorrector::m_outputSystNamesReco"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_outputSystNamesRecoE","ElectronEfficiencyCorrector::m_outputSystNamesReco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_outputSystNamesTrigE","ElectronEfficiencyCorrector::m_outputSystNamesTrig"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_outputSystNamesTrigE","ElectronEfficiencyCorrector::m_outputSystNamesTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_overrideMapFilePathE","ElectronEfficiencyCorrector::m_overrideMapFilePath"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_overrideMapFilePathE","ElectronEfficiencyCorrector::m_overrideMapFilePath"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector25m_overrideMapFilePathTrigE","ElectronEfficiencyCorrector::m_overrideMapFilePathTrig"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector25m_overrideMapFilePathTrigE","ElectronEfficiencyCorrector::m_overrideMapFilePathTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector20m_pidEffSF_tool_nameE","ElectronEfficiencyCorrector::m_pidEffSF_tool_name"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systListIsoE","ElectronEfficiencyCorrector::m_systListIso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systListPIDE","ElectronEfficiencyCorrector::m_systListPID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systListRecoE","ElectronEfficiencyCorrector::m_systListReco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systListTrigE","ElectronEfficiencyCorrector::m_systListTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systNameIsoE","ElectronEfficiencyCorrector::m_systNameIso"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systNameIsoE","ElectronEfficiencyCorrector::m_systNameIso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systNamePIDE","ElectronEfficiencyCorrector::m_systNamePID"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systNamePIDE","ElectronEfficiencyCorrector::m_systNamePID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systNameRecoE","ElectronEfficiencyCorrector::m_systNameReco"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systNameRecoE","ElectronEfficiencyCorrector::m_systNameReco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systNameTrigE","ElectronEfficiencyCorrector::m_systNameTrig"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector14m_systNameTrigE","ElectronEfficiencyCorrector::m_systNameTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector12m_systValIsoE","ElectronEfficiencyCorrector::m_systValIso"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector12m_systValIsoE","ElectronEfficiencyCorrector::m_systValIso"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector12m_systValPIDE","ElectronEfficiencyCorrector::m_systValPID"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector12m_systValPIDE","ElectronEfficiencyCorrector::m_systValPID"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systValRecoE","ElectronEfficiencyCorrector::m_systValReco"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systValRecoE","ElectronEfficiencyCorrector::m_systValReco"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systValTrigE","ElectronEfficiencyCorrector::m_systValTrig"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector13m_systValTrigE","ElectronEfficiencyCorrector::m_systValTrig"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector26m_usePerElectronTriggerSFsE","ElectronEfficiencyCorrector::m_usePerElectronTriggerSFs"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector26m_usePerElectronTriggerSFsE","ElectronEfficiencyCorrector::m_usePerElectronTriggerSFs"],[12,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_writeSystToMetadataE","ElectronEfficiencyCorrector::m_writeSystToMetadata"],[66,4,1,"_CPPv4N27ElectronEfficiencyCorrector21m_writeSystToMetadataE","ElectronEfficiencyCorrector::m_writeSystToMetadata"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector11postExecuteEv","ElectronEfficiencyCorrector::postExecute"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector11postExecuteEv","ElectronEfficiencyCorrector::postExecute"],[12,2,1,"_CPPv4N27ElectronEfficiencyCorrector8setupJobERN2EL3JobE","ElectronEfficiencyCorrector::setupJob"],[66,2,1,"_CPPv4N27ElectronEfficiencyCorrector8setupJobERN2EL3JobE","ElectronEfficiencyCorrector::setupJob"],[12,3,1,"_CPPv4N27ElectronEfficiencyCorrector8setupJobERN2EL3JobE","ElectronEfficiencyCorrector::setupJob::job"],[66,3,1,"_CPPv4N27ElectronEfficiencyCorrector8setupJobERN2EL3JobE","ElectronEfficiencyCorrector::setupJob::job"],[67,1,1,"_CPPv417ElectronHistsAlgo","ElectronHistsAlgo"],[67,2,1,"_CPPv4N17ElectronHistsAlgo8AddHistsENSt6stringE","ElectronHistsAlgo::AddHists"],[67,3,1,"_CPPv4N17ElectronHistsAlgo8AddHistsENSt6stringE","ElectronHistsAlgo::AddHists::name"],[67,2,1,"_CPPv4N17ElectronHistsAlgo17ElectronHistsAlgoEv","ElectronHistsAlgo::ElectronHistsAlgo"],[67,2,1,"_CPPv4N17ElectronHistsAlgo7executeEv","ElectronHistsAlgo::execute"],[67,2,1,"_CPPv4N17ElectronHistsAlgo8setupJobERN2EL3JobE","ElectronHistsAlgo::setupJob"],[67,3,1,"_CPPv4N17ElectronHistsAlgo8setupJobERN2EL3JobE","ElectronHistsAlgo::setupJob::job"],[13,1,1,"_CPPv416ElectronSelector","ElectronSelector"],[68,1,1,"_CPPv416ElectronSelector","ElectronSelector"],[13,2,1,"_CPPv4N16ElectronSelector16ElectronSelectorEv","ElectronSelector::ElectronSelector"],[68,2,1,"_CPPv4N16ElectronSelector16ElectronSelectorEv","ElectronSelector::ElectronSelector"],[13,2,1,"_CPPv4N16ElectronSelector11changeInputEb","ElectronSelector::changeInput"],[68,2,1,"_CPPv4N16ElectronSelector11changeInputEb","ElectronSelector::changeInput"],[13,3,1,"_CPPv4N16ElectronSelector11changeInputEb","ElectronSelector::changeInput::firstFile"],[68,3,1,"_CPPv4N16ElectronSelector11changeInputEb","ElectronSelector::changeInput::firstFile"],[13,2,1,"_CPPv4N16ElectronSelector7executeEv","ElectronSelector::execute"],[68,2,1,"_CPPv4N16ElectronSelector7executeEv","ElectronSelector::execute"],[13,2,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection"],[68,2,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection"],[13,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::countPass"],[68,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::countPass"],[13,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::inElectrons"],[68,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::inElectrons"],[13,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::mcEvtWeight"],[68,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::mcEvtWeight"],[13,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::selectedElectrons"],[68,3,1,"_CPPv4N16ElectronSelector16executeSelectionEPKN4xAOD17ElectronContainerEfbP15ConstDataVectorIN4xAOD17ElectronContainerEE","ElectronSelector::executeSelection::selectedElectrons"],[13,2,1,"_CPPv4N16ElectronSelector11fileExecuteEv","ElectronSelector::fileExecute"],[68,2,1,"_CPPv4N16ElectronSelector11fileExecuteEv","ElectronSelector::fileExecute"],[13,2,1,"_CPPv4N16ElectronSelector8finalizeEv","ElectronSelector::finalize"],[68,2,1,"_CPPv4N16ElectronSelector8finalizeEv","ElectronSelector::finalize"],[13,2,1,"_CPPv4N16ElectronSelector12histFinalizeEv","ElectronSelector::histFinalize"],[68,2,1,"_CPPv4N16ElectronSelector12histFinalizeEv","ElectronSelector::histFinalize"],[13,2,1,"_CPPv4N16ElectronSelector14histInitializeEv","ElectronSelector::histInitialize"],[68,2,1,"_CPPv4N16ElectronSelector14histInitializeEv","ElectronSelector::histInitialize"],[13,2,1,"_CPPv4N16ElectronSelector10initializeEv","ElectronSelector::initialize"],[68,2,1,"_CPPv4N16ElectronSelector10initializeEv","ElectronSelector::initialize"],[13,4,1,"_CPPv4N16ElectronSelector18m_CaloBasedIsoTypeE","ElectronSelector::m_CaloBasedIsoType"],[68,4,1,"_CPPv4N16ElectronSelector18m_CaloBasedIsoTypeE","ElectronSelector::m_CaloBasedIsoType"],[13,4,1,"_CPPv4N16ElectronSelector12m_CaloIsoEffE","ElectronSelector::m_CaloIsoEff"],[68,4,1,"_CPPv4N16ElectronSelector12m_CaloIsoEffE","ElectronSelector::m_CaloIsoEff"],[13,4,1,"_CPPv4N16ElectronSelector24m_CutBasedOperatingPointE","ElectronSelector::m_CutBasedOperatingPoint"],[68,4,1,"_CPPv4N16ElectronSelector24m_CutBasedOperatingPointE","ElectronSelector::m_CutBasedOperatingPoint"],[13,4,1,"_CPPv4N16ElectronSelector9m_IsoKeysE","ElectronSelector::m_IsoKeys"],[13,4,1,"_CPPv4N16ElectronSelector11m_IsoWPListE","ElectronSelector::m_IsoWPList"],[68,4,1,"_CPPv4N16ElectronSelector11m_IsoWPListE","ElectronSelector::m_IsoWPList"],[13,4,1,"_CPPv4N16ElectronSelector18m_LHOperatingPointE","ElectronSelector::m_LHOperatingPoint"],[68,4,1,"_CPPv4N16ElectronSelector18m_LHOperatingPointE","ElectronSelector::m_LHOperatingPoint"],[13,4,1,"_CPPv4N16ElectronSelector13m_MinIsoWPCutE","ElectronSelector::m_MinIsoWPCut"],[68,4,1,"_CPPv4N16ElectronSelector13m_MinIsoWPCutE","ElectronSelector::m_MinIsoWPCut"],[13,4,1,"_CPPv4N16ElectronSelector19m_TrackBasedIsoTypeE","ElectronSelector::m_TrackBasedIsoType"],[68,4,1,"_CPPv4N16ElectronSelector19m_TrackBasedIsoTypeE","ElectronSelector::m_TrackBasedIsoType"],[13,4,1,"_CPPv4N16ElectronSelector13m_TrackIsoEffE","ElectronSelector::m_TrackIsoEff"],[68,4,1,"_CPPv4N16ElectronSelector13m_TrackIsoEffE","ElectronSelector::m_TrackIsoEff"],[13,4,1,"_CPPv4N16ElectronSelector24m_applyCrackVetoCleaningE","ElectronSelector::m_applyCrackVetoCleaning"],[68,4,1,"_CPPv4N16ElectronSelector24m_applyCrackVetoCleaningE","ElectronSelector::m_applyCrackVetoCleaning"],[13,4,1,"_CPPv4N16ElectronSelector21m_applyDeadHVCellVetoE","ElectronSelector::m_applyDeadHVCellVeto"],[68,4,1,"_CPPv4N16ElectronSelector21m_applyDeadHVCellVetoE","ElectronSelector::m_applyDeadHVCellVeto"],[13,4,1,"_CPPv4N16ElectronSelector25m_createSelectedContainerE","ElectronSelector::m_createSelectedContainer"],[68,4,1,"_CPPv4N16ElectronSelector25m_createSelectedContainerE","ElectronSelector::m_createSelectedContainer"],[13,4,1,"_CPPv4N16ElectronSelector13m_cutflowHistE","ElectronSelector::m_cutflowHist"],[13,4,1,"_CPPv4N16ElectronSelector14m_cutflowHistWE","ElectronSelector::m_cutflowHistW"],[13,4,1,"_CPPv4N16ElectronSelector13m_cutflow_binE","ElectronSelector::m_cutflow_bin"],[13,4,1,"_CPPv4N16ElectronSelector8m_d0_maxE","ElectronSelector::m_d0_max"],[68,4,1,"_CPPv4N16ElectronSelector8m_d0_maxE","ElectronSelector::m_d0_max"],[13,4,1,"_CPPv4N16ElectronSelector11m_d0sig_maxE","ElectronSelector::m_d0sig_max"],[68,4,1,"_CPPv4N16ElectronSelector11m_d0sig_maxE","ElectronSelector::m_d0sig_max"],[13,4,1,"_CPPv4N16ElectronSelector12m_deadHVToolE","ElectronSelector::m_deadHVTool"],[13,4,1,"_CPPv4N16ElectronSelector25m_decorateSelectedObjectsE","ElectronSelector::m_decorateSelectedObjects"],[68,4,1,"_CPPv4N16ElectronSelector25m_decorateSelectedObjectsE","ElectronSelector::m_decorateSelectedObjects"],[13,4,1,"_CPPv4N16ElectronSelector16m_diElTrigChainsE","ElectronSelector::m_diElTrigChains"],[68,4,1,"_CPPv4N16ElectronSelector16m_diElTrigChainsE","ElectronSelector::m_diElTrigChains"],[13,4,1,"_CPPv4N16ElectronSelector20m_diElTrigChainsListE","ElectronSelector::m_diElTrigChainsList"],[13,4,1,"_CPPv4N16ElectronSelector13m_doAuthorCutE","ElectronSelector::m_doAuthorCut"],[68,4,1,"_CPPv4N16ElectronSelector13m_doAuthorCutE","ElectronSelector::m_doAuthorCut"],[13,4,1,"_CPPv4N16ElectronSelector21m_doBLTrackQualityCutE","ElectronSelector::m_doBLTrackQualityCut"],[13,4,1,"_CPPv4N16ElectronSelector15m_doCutBasedPIDE","ElectronSelector::m_doCutBasedPID"],[68,4,1,"_CPPv4N16ElectronSelector15m_doCutBasedPIDE","ElectronSelector::m_doCutBasedPID"],[13,4,1,"_CPPv4N16ElectronSelector18m_doCutBasedPIDcutE","ElectronSelector::m_doCutBasedPIDcut"],[68,4,1,"_CPPv4N16ElectronSelector18m_doCutBasedPIDcutE","ElectronSelector::m_doCutBasedPIDcut"],[13,4,1,"_CPPv4N16ElectronSelector9m_doLHPIDE","ElectronSelector::m_doLHPID"],[68,4,1,"_CPPv4N16ElectronSelector9m_doLHPIDE","ElectronSelector::m_doLHPID"],[13,4,1,"_CPPv4N16ElectronSelector12m_doLHPIDcutE","ElectronSelector::m_doLHPIDcut"],[68,4,1,"_CPPv4N16ElectronSelector12m_doLHPIDcutE","ElectronSelector::m_doLHPIDcut"],[13,4,1,"_CPPv4N16ElectronSelector17m_doModifiedEleIdE","ElectronSelector::m_doModifiedEleId"],[68,4,1,"_CPPv4N16ElectronSelector17m_doModifiedEleIdE","ElectronSelector::m_doModifiedEleId"],[13,4,1,"_CPPv4N16ElectronSelector9m_doOQCutE","ElectronSelector::m_doOQCut"],[68,4,1,"_CPPv4N16ElectronSelector9m_doOQCutE","ElectronSelector::m_doOQCut"],[13,4,1,"_CPPv4N16ElectronSelector13m_doTrigMatchE","ElectronSelector::m_doTrigMatch"],[13,4,1,"_CPPv4N16ElectronSelector24m_el_CutBased_PIDManagerE","ElectronSelector::m_el_CutBased_PIDManager"],[13,4,1,"_CPPv4N16ElectronSelector18m_el_LH_PIDManagerE","ElectronSelector::m_el_LH_PIDManager"],[13,4,1,"_CPPv4N16ElectronSelector18m_el_cutflowHist_1E","ElectronSelector::m_el_cutflowHist_1"],[13,4,1,"_CPPv4N16ElectronSelector18m_el_cutflowHist_2E","ElectronSelector::m_el_cutflowHist_2"],[13,4,1,"_CPPv4N16ElectronSelector19m_el_cutflow_BL_cutE","ElectronSelector::m_el_cutflow_BL_cut"],[13,4,1,"_CPPv4N16ElectronSelector19m_el_cutflow_OQ_cutE","ElectronSelector::m_el_cutflow_OQ_cut"],[13,4,1,"_CPPv4N16ElectronSelector20m_el_cutflow_PID_cutE","ElectronSelector::m_el_cutflow_PID_cut"],[13,4,1,"_CPPv4N16ElectronSelector16m_el_cutflow_allE","ElectronSelector::m_el_cutflow_all"],[13,4,1,"_CPPv4N16ElectronSelector23m_el_cutflow_author_cutE","ElectronSelector::m_el_cutflow_author_cut"],[13,4,1,"_CPPv4N16ElectronSelector19m_el_cutflow_d0_cutE","ElectronSelector::m_el_cutflow_d0_cut"],[13,4,1,"_CPPv4N16ElectronSelector22m_el_cutflow_d0sig_cutE","ElectronSelector::m_el_cutflow_d0sig_cut"],[13,4,1,"_CPPv4N16ElectronSelector27m_el_cutflow_deadHVCell_cutE","ElectronSelector::m_el_cutflow_deadHVCell_cut"],[13,4,1,"_CPPv4N16ElectronSelector20m_el_cutflow_eta_cutE","ElectronSelector::m_el_cutflow_eta_cut"],[13,4,1,"_CPPv4N16ElectronSelector20m_el_cutflow_iso_cutE","ElectronSelector::m_el_cutflow_iso_cut"],[13,4,1,"_CPPv4N16ElectronSelector22m_el_cutflow_ptmax_cutE","ElectronSelector::m_el_cutflow_ptmax_cut"],[13,4,1,"_CPPv4N16ElectronSelector22m_el_cutflow_ptmin_cutE","ElectronSelector::m_el_cutflow_ptmin_cut"],[13,4,1,"_CPPv4N16ElectronSelector27m_el_cutflow_z0sintheta_cutE","ElectronSelector::m_el_cutflow_z0sintheta_cut"],[13,4,1,"_CPPv4N16ElectronSelector9m_eta_maxE","ElectronSelector::m_eta_max"],[68,4,1,"_CPPv4N16ElectronSelector9m_eta_maxE","ElectronSelector::m_eta_max"],[13,4,1,"_CPPv4N16ElectronSelector17m_inContainerNameE","ElectronSelector::m_inContainerName"],[68,4,1,"_CPPv4N16ElectronSelector17m_inContainerNameE","ElectronSelector::m_inContainerName"],[13,4,1,"_CPPv4N16ElectronSelector20m_inputAlgoSystNamesE","ElectronSelector::m_inputAlgoSystNames"],[68,4,1,"_CPPv4N16ElectronSelector20m_inputAlgoSystNamesE","ElectronSelector::m_inputAlgoSystNames"],[13,4,1,"_CPPv4N16ElectronSelector14m_isUsedBeforeE","ElectronSelector::m_isUsedBefore"],[13,4,1,"_CPPv4N16ElectronSelector14m_isoDecSuffixE","ElectronSelector::m_isoDecSuffix"],[68,4,1,"_CPPv4N16ElectronSelector14m_isoDecSuffixE","ElectronSelector::m_isoDecSuffix"],[13,4,1,"_CPPv4N16ElectronSelector24m_isolationSelectionToolE","ElectronSelector::m_isolationSelectionTool"],[13,4,1,"_CPPv4N16ElectronSelector31m_isolationSelectionTool_handleE","ElectronSelector::m_isolationSelectionTool_handle"],[13,4,1,"_CPPv4N16ElectronSelector18m_merged_electronsE","ElectronSelector::m_merged_electrons"],[68,4,1,"_CPPv4N16ElectronSelector18m_merged_electronsE","ElectronSelector::m_merged_electrons"],[13,4,1,"_CPPv4N16ElectronSelector11m_minDeltaRE","ElectronSelector::m_minDeltaR"],[68,4,1,"_CPPv4N16ElectronSelector11m_minDeltaRE","ElectronSelector::m_minDeltaR"],[13,4,1,"_CPPv4N16ElectronSelector12m_nToProcessE","ElectronSelector::m_nToProcess"],[68,4,1,"_CPPv4N16ElectronSelector12m_nToProcessE","ElectronSelector::m_nToProcess"],[13,4,1,"_CPPv4N16ElectronSelector10m_numEventE","ElectronSelector::m_numEvent"],[13,4,1,"_CPPv4N16ElectronSelector14m_numEventPassE","ElectronSelector::m_numEventPass"],[13,4,1,"_CPPv4N16ElectronSelector11m_numObjectE","ElectronSelector::m_numObject"],[13,4,1,"_CPPv4N16ElectronSelector15m_numObjectPassE","ElectronSelector::m_numObjectPass"],[13,4,1,"_CPPv4N16ElectronSelector21m_outAuxContainerNameE","ElectronSelector::m_outAuxContainerName"],[13,4,1,"_CPPv4N16ElectronSelector18m_outContainerNameE","ElectronSelector::m_outContainerName"],[68,4,1,"_CPPv4N16ElectronSelector18m_outContainerNameE","ElectronSelector::m_outContainerName"],[13,4,1,"_CPPv4N16ElectronSelector21m_outputAlgoSystNamesE","ElectronSelector::m_outputAlgoSystNames"],[68,4,1,"_CPPv4N16ElectronSelector21m_outputAlgoSystNamesE","ElectronSelector::m_outputAlgoSystNames"],[13,4,1,"_CPPv4N16ElectronSelector8m_pT_maxE","ElectronSelector::m_pT_max"],[68,4,1,"_CPPv4N16ElectronSelector8m_pT_maxE","ElectronSelector::m_pT_max"],[13,4,1,"_CPPv4N16ElectronSelector8m_pT_minE","ElectronSelector::m_pT_min"],[68,4,1,"_CPPv4N16ElectronSelector8m_pT_minE","ElectronSelector::m_pT_min"],[13,4,1,"_CPPv4N16ElectronSelector10m_pass_maxE","ElectronSelector::m_pass_max"],[68,4,1,"_CPPv4N16ElectronSelector10m_pass_maxE","ElectronSelector::m_pass_max"],[13,4,1,"_CPPv4N16ElectronSelector10m_pass_minE","ElectronSelector::m_pass_min"],[68,4,1,"_CPPv4N16ElectronSelector10m_pass_minE","ElectronSelector::m_pass_min"],[13,4,1,"_CPPv4N16ElectronSelector27m_readIDFlagsFromDerivationE","ElectronSelector::m_readIDFlagsFromDerivation"],[68,4,1,"_CPPv4N16ElectronSelector27m_readIDFlagsFromDerivationE","ElectronSelector::m_readIDFlagsFromDerivation"],[13,4,1,"_CPPv4N16ElectronSelector11m_scoreToolE","ElectronSelector::m_scoreTool"],[13,4,1,"_CPPv4N16ElectronSelector20m_singleElTrigChainsE","ElectronSelector::m_singleElTrigChains"],[68,4,1,"_CPPv4N16ElectronSelector20m_singleElTrigChainsE","ElectronSelector::m_singleElTrigChains"],[13,4,1,"_CPPv4N16ElectronSelector24m_singleElTrigChainsListE","ElectronSelector::m_singleElTrigChainsList"],[13,4,1,"_CPPv4N16ElectronSelector20m_trigDecTool_handleE","ElectronSelector::m_trigDecTool_handle"],[13,4,1,"_CPPv4N16ElectronSelector30m_trigElectronMatchTool_handleE","ElectronSelector::m_trigElectronMatchTool_handle"],[13,4,1,"_CPPv4N16ElectronSelector17m_trigInputPrefixE","ElectronSelector::m_trigInputPrefix"],[68,4,1,"_CPPv4N16ElectronSelector17m_trigInputPrefixE","ElectronSelector::m_trigInputPrefix"],[13,4,1,"_CPPv4N16ElectronSelector12m_useCutFlowE","ElectronSelector::m_useCutFlow"],[68,4,1,"_CPPv4N16ElectronSelector12m_useCutFlowE","ElectronSelector::m_useCutFlow"],[13,4,1,"_CPPv4N16ElectronSelector11m_vetoCrackE","ElectronSelector::m_vetoCrack"],[68,4,1,"_CPPv4N16ElectronSelector11m_vetoCrackE","ElectronSelector::m_vetoCrack"],[13,4,1,"_CPPv4N16ElectronSelector20m_weightNumEventPassE","ElectronSelector::m_weightNumEventPass"],[13,4,1,"_CPPv4N16ElectronSelector16m_z0sintheta_maxE","ElectronSelector::m_z0sintheta_max"],[68,4,1,"_CPPv4N16ElectronSelector16m_z0sintheta_maxE","ElectronSelector::m_z0sintheta_max"],[13,2,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts"],[68,2,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts"],[13,3,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts::electron"],[68,3,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts::electron"],[13,3,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts::primaryVertex"],[68,3,1,"_CPPv4N16ElectronSelector8passCutsEPKN4xAOD8ElectronEPKN4xAOD6VertexE","ElectronSelector::passCuts::primaryVertex"],[13,2,1,"_CPPv4N16ElectronSelector11postExecuteEv","ElectronSelector::postExecute"],[68,2,1,"_CPPv4N16ElectronSelector11postExecuteEv","ElectronSelector::postExecute"],[13,2,1,"_CPPv4N16ElectronSelector8setupJobERN2EL3JobE","ElectronSelector::setupJob"],[68,2,1,"_CPPv4N16ElectronSelector8setupJobERN2EL3JobE","ElectronSelector::setupJob"],[13,3,1,"_CPPv4N16ElectronSelector8setupJobERN2EL3JobE","ElectronSelector::setupJob::job"],[68,3,1,"_CPPv4N16ElectronSelector8setupJobERN2EL3JobE","ElectronSelector::setupJob::job"],[13,2,1,"_CPPv4N16ElectronSelectorD0Ev","ElectronSelector::~ElectronSelector"],[68,2,1,"_CPPv4N16ElectronSelectorD0Ev","ElectronSelector::~ElectronSelector"],[16,1,1,"_CPPv412HLTJetGetter","HLTJetGetter"],[69,1,1,"_CPPv412HLTJetGetter","HLTJetGetter"],[16,2,1,"_CPPv4N12HLTJetGetter12HLTJetGetterEv","HLTJetGetter::HLTJetGetter"],[69,2,1,"_CPPv4N12HLTJetGetter12HLTJetGetterEv","HLTJetGetter::HLTJetGetter"],[16,2,1,"_CPPv4N12HLTJetGetter11changeInputEb","HLTJetGetter::changeInput"],[69,2,1,"_CPPv4N12HLTJetGetter11changeInputEb","HLTJetGetter::changeInput"],[16,3,1,"_CPPv4N12HLTJetGetter11changeInputEb","HLTJetGetter::changeInput::firstFile"],[69,3,1,"_CPPv4N12HLTJetGetter11changeInputEb","HLTJetGetter::changeInput::firstFile"],[16,2,1,"_CPPv4N12HLTJetGetter7executeEv","HLTJetGetter::execute"],[69,2,1,"_CPPv4N12HLTJetGetter7executeEv","HLTJetGetter::execute"],[16,2,1,"_CPPv4N12HLTJetGetter11fileExecuteEv","HLTJetGetter::fileExecute"],[69,2,1,"_CPPv4N12HLTJetGetter11fileExecuteEv","HLTJetGetter::fileExecute"],[16,2,1,"_CPPv4N12HLTJetGetter8finalizeEv","HLTJetGetter::finalize"],[69,2,1,"_CPPv4N12HLTJetGetter8finalizeEv","HLTJetGetter::finalize"],[16,2,1,"_CPPv4N12HLTJetGetter12histFinalizeEv","HLTJetGetter::histFinalize"],[69,2,1,"_CPPv4N12HLTJetGetter12histFinalizeEv","HLTJetGetter::histFinalize"],[16,2,1,"_CPPv4N12HLTJetGetter14histInitializeEv","HLTJetGetter::histInitialize"],[69,2,1,"_CPPv4N12HLTJetGetter14histInitializeEv","HLTJetGetter::histInitialize"],[16,2,1,"_CPPv4N12HLTJetGetter10initializeEv","HLTJetGetter::initialize"],[69,2,1,"_CPPv4N12HLTJetGetter10initializeEv","HLTJetGetter::initialize"],[16,4,1,"_CPPv4N12HLTJetGetter17m_inContainerNameE","HLTJetGetter::m_inContainerName"],[69,4,1,"_CPPv4N12HLTJetGetter17m_inContainerNameE","HLTJetGetter::m_inContainerName"],[16,4,1,"_CPPv4N12HLTJetGetter18m_outContainerNameE","HLTJetGetter::m_outContainerName"],[69,4,1,"_CPPv4N12HLTJetGetter18m_outContainerNameE","HLTJetGetter::m_outContainerName"],[16,4,1,"_CPPv4N12HLTJetGetter14m_ownTDTAndTCTE","HLTJetGetter::m_ownTDTAndTCT"],[16,4,1,"_CPPv4N12HLTJetGetter14m_trigConfToolE","HLTJetGetter::m_trigConfTool"],[16,4,1,"_CPPv4N12HLTJetGetter20m_trigDecTool_handleE","HLTJetGetter::m_trigDecTool_handle"],[16,4,1,"_CPPv4N12HLTJetGetter13m_triggerListE","HLTJetGetter::m_triggerList"],[69,4,1,"_CPPv4N12HLTJetGetter13m_triggerListE","HLTJetGetter::m_triggerList"],[16,2,1,"_CPPv4N12HLTJetGetter11postExecuteEv","HLTJetGetter::postExecute"],[69,2,1,"_CPPv4N12HLTJetGetter11postExecuteEv","HLTJetGetter::postExecute"],[16,2,1,"_CPPv4N12HLTJetGetter8setupJobERN2EL3JobE","HLTJetGetter::setupJob"],[69,2,1,"_CPPv4N12HLTJetGetter8setupJobERN2EL3JobE","HLTJetGetter::setupJob"],[16,3,1,"_CPPv4N12HLTJetGetter8setupJobERN2EL3JobE","HLTJetGetter::setupJob::job"],[69,3,1,"_CPPv4N12HLTJetGetter8setupJobERN2EL3JobE","HLTJetGetter::setupJob::job"],[17,1,1,"_CPPv412HelpTreeBase","HelpTreeBase"],[70,1,1,"_CPPv412HelpTreeBase","HelpTreeBase"],[17,2,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters"],[70,2,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters"],[17,3,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters::clusterName"],[70,3,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters::clusterName"],[17,3,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase11AddClustersERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClusters::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser"],[70,2,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser"],[17,3,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser::clusterName"],[70,3,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser::clusterName"],[17,3,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase15AddClustersUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddClustersUser::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons"],[70,2,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons"],[17,3,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons::elecName"],[70,3,1,"_CPPv4N12HelpTreeBase12AddElectronsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectrons::elecName"],[17,2,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser"],[70,2,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser"],[17,3,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser::elecName"],[70,3,1,"_CPPv4N12HelpTreeBase16AddElectronsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddElectronsUser::elecName"],[17,2,1,"_CPPv4N12HelpTreeBase8AddEventERKNSt6stringE","HelpTreeBase::AddEvent"],[70,2,1,"_CPPv4N12HelpTreeBase8AddEventERKNSt6stringE","HelpTreeBase::AddEvent"],[17,3,1,"_CPPv4N12HelpTreeBase8AddEventERKNSt6stringE","HelpTreeBase::AddEvent::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase8AddEventERKNSt6stringE","HelpTreeBase::AddEvent::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase12AddEventUserERKNSt6stringE","HelpTreeBase::AddEventUser"],[70,2,1,"_CPPv4N12HelpTreeBase12AddEventUserERKNSt6stringE","HelpTreeBase::AddEventUser"],[17,3,1,"_CPPv4N12HelpTreeBase12AddEventUserERKNSt6stringE","HelpTreeBase::AddEventUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase12AddEventUserERKNSt6stringE","HelpTreeBase::AddEventUser::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::subjetDetailStr"],[70,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::subjetDetailStr"],[17,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase10AddFatJetsERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJets::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser"],[17,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase14AddFatJetsUserERKNSt6stringERKNSt6stringERKNSt6stringE","HelpTreeBase::AddFatJetsUser::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase13AddJetTriggerERKNSt6stringE","HelpTreeBase::AddJetTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase13AddJetTriggerERKNSt6stringE","HelpTreeBase::AddJetTrigger"],[17,3,1,"_CPPv4N12HelpTreeBase13AddJetTriggerERKNSt6stringE","HelpTreeBase::AddJetTrigger::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase13AddJetTriggerERKNSt6stringE","HelpTreeBase::AddJetTrigger::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase17AddJetTriggerUserERKNSt6stringE","HelpTreeBase::AddJetTriggerUser"],[70,2,1,"_CPPv4N12HelpTreeBase17AddJetTriggerUserERKNSt6stringE","HelpTreeBase::AddJetTriggerUser"],[17,3,1,"_CPPv4N12HelpTreeBase17AddJetTriggerUserERKNSt6stringE","HelpTreeBase::AddJetTriggerUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase17AddJetTriggerUserERKNSt6stringE","HelpTreeBase::AddJetTriggerUser::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets"],[70,2,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets"],[17,3,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase7AddJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJets::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser"],[17,3,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase11AddJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddJetsUser::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase9AddL1JetsERKNSt6stringE","HelpTreeBase::AddL1Jets"],[70,2,1,"_CPPv4N12HelpTreeBase9AddL1JetsERKNSt6stringE","HelpTreeBase::AddL1Jets"],[17,3,1,"_CPPv4N12HelpTreeBase9AddL1JetsERKNSt6stringE","HelpTreeBase::AddL1Jets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase9AddL1JetsERKNSt6stringE","HelpTreeBase::AddL1Jets::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET"],[70,2,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET"],[17,3,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET::metName"],[70,3,1,"_CPPv4N12HelpTreeBase6AddMETERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMET::metName"],[17,2,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser"],[70,2,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser"],[17,3,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser::metName"],[70,3,1,"_CPPv4N12HelpTreeBase10AddMETUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMETUser::metName"],[17,2,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons"],[70,2,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons"],[17,3,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons::muonName"],[70,3,1,"_CPPv4N12HelpTreeBase8AddMuonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuons::muonName"],[17,2,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser"],[17,3,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser::muonName"],[70,3,1,"_CPPv4N12HelpTreeBase12AddMuonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddMuonsUser::muonName"],[17,2,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons"],[70,2,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons"],[17,3,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons::photonName"],[70,3,1,"_CPPv4N12HelpTreeBase10AddPhotonsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotons::photonName"],[17,2,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser"],[17,3,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser::photonName"],[70,3,1,"_CPPv4N12HelpTreeBase14AddPhotonsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddPhotonsUser::photonName"],[17,2,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus"],[70,2,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus"],[17,3,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus::tauName"],[70,3,1,"_CPPv4N12HelpTreeBase7AddTausERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTaus::tauName"],[17,2,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser"],[70,2,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser"],[17,3,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser::tauName"],[70,3,1,"_CPPv4N12HelpTreeBase11AddTausUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTausUser::tauName"],[17,2,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts"],[70,2,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts::trackName"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTrackPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTrackParts::trackName"],[17,2,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser"],[70,2,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser::trackName"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTracksUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTracksUser::trackName"],[17,2,1,"_CPPv4N12HelpTreeBase10AddTriggerERKNSt6stringE","HelpTreeBase::AddTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase10AddTriggerERKNSt6stringE","HelpTreeBase::AddTrigger"],[17,3,1,"_CPPv4N12HelpTreeBase10AddTriggerERKNSt6stringE","HelpTreeBase::AddTrigger::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase10AddTriggerERKNSt6stringE","HelpTreeBase::AddTrigger::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase14AddTriggerUserERKNSt6stringE","HelpTreeBase::AddTriggerUser"],[70,2,1,"_CPPv4N12HelpTreeBase14AddTriggerUserERKNSt6stringE","HelpTreeBase::AddTriggerUser"],[17,3,1,"_CPPv4N12HelpTreeBase14AddTriggerUserERKNSt6stringE","HelpTreeBase::AddTriggerUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase14AddTriggerUserERKNSt6stringE","HelpTreeBase::AddTriggerUser::detailStr"],[17,2,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets::truthFatJetName"],[70,3,1,"_CPPv4N12HelpTreeBase15AddTruthFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJets::truthFatJetName"],[17,2,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser"],[17,3,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser::truthFatJetName"],[70,3,1,"_CPPv4N12HelpTreeBase19AddTruthFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthFatJetsUser::truthFatJetName"],[17,2,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts"],[70,2,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts::truthName"],[70,3,1,"_CPPv4N12HelpTreeBase13AddTruthPartsERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthParts::truthName"],[17,2,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser"],[70,2,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser"],[17,3,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser::truthName"],[70,3,1,"_CPPv4N12HelpTreeBase12AddTruthUserERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthUser::truthName"],[17,2,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices"],[70,2,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices"],[17,3,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices::vertexName"],[70,3,1,"_CPPv4N12HelpTreeBase16AddTruthVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddTruthVertices::vertexName"],[17,2,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices"],[70,2,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices"],[17,3,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices::detailStr"],[70,3,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices::detailStr"],[17,3,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices::vertexName"],[70,3,1,"_CPPv4N12HelpTreeBase11AddVerticesERKNSt6stringERKNSt6stringE","HelpTreeBase::AddVertices::vertexName"],[17,2,1,"_CPPv4N12HelpTreeBase13ClearClustersERKNSt6stringE","HelpTreeBase::ClearClusters"],[70,2,1,"_CPPv4N12HelpTreeBase13ClearClustersERKNSt6stringE","HelpTreeBase::ClearClusters"],[17,3,1,"_CPPv4N12HelpTreeBase13ClearClustersERKNSt6stringE","HelpTreeBase::ClearClusters::clusterName"],[70,3,1,"_CPPv4N12HelpTreeBase13ClearClustersERKNSt6stringE","HelpTreeBase::ClearClusters::clusterName"],[17,2,1,"_CPPv4N12HelpTreeBase17ClearClustersUserERKNSt6stringE","HelpTreeBase::ClearClustersUser"],[70,2,1,"_CPPv4N12HelpTreeBase17ClearClustersUserERKNSt6stringE","HelpTreeBase::ClearClustersUser"],[17,2,1,"_CPPv4N12HelpTreeBase14ClearElectronsERKNSt6stringE","HelpTreeBase::ClearElectrons"],[70,2,1,"_CPPv4N12HelpTreeBase14ClearElectronsERKNSt6stringE","HelpTreeBase::ClearElectrons"],[17,3,1,"_CPPv4N12HelpTreeBase14ClearElectronsERKNSt6stringE","HelpTreeBase::ClearElectrons::elecName"],[70,3,1,"_CPPv4N12HelpTreeBase14ClearElectronsERKNSt6stringE","HelpTreeBase::ClearElectrons::elecName"],[17,2,1,"_CPPv4N12HelpTreeBase18ClearElectronsUserERKNSt6stringE","HelpTreeBase::ClearElectronsUser"],[70,2,1,"_CPPv4N12HelpTreeBase18ClearElectronsUserERKNSt6stringE","HelpTreeBase::ClearElectronsUser"],[17,2,1,"_CPPv4N12HelpTreeBase10ClearEventEv","HelpTreeBase::ClearEvent"],[70,2,1,"_CPPv4N12HelpTreeBase10ClearEventEv","HelpTreeBase::ClearEvent"],[17,2,1,"_CPPv4N12HelpTreeBase14ClearEventUserEv","HelpTreeBase::ClearEventUser"],[70,2,1,"_CPPv4N12HelpTreeBase14ClearEventUserEv","HelpTreeBase::ClearEventUser"],[17,2,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase12ClearFatJetsERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJets::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase16ClearFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase16ClearFatJetsUserERKNSt6stringERKNSt6stringE","HelpTreeBase::ClearFatJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase15ClearJetTriggerEv","HelpTreeBase::ClearJetTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase15ClearJetTriggerEv","HelpTreeBase::ClearJetTrigger"],[17,2,1,"_CPPv4N12HelpTreeBase9ClearJetsERKNSt6stringE","HelpTreeBase::ClearJets"],[70,2,1,"_CPPv4N12HelpTreeBase9ClearJetsERKNSt6stringE","HelpTreeBase::ClearJets"],[17,3,1,"_CPPv4N12HelpTreeBase9ClearJetsERKNSt6stringE","HelpTreeBase::ClearJets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase9ClearJetsERKNSt6stringE","HelpTreeBase::ClearJets::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase13ClearJetsUserERKNSt6stringE","HelpTreeBase::ClearJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase13ClearJetsUserERKNSt6stringE","HelpTreeBase::ClearJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase11ClearL1JetsERKNSt6stringE","HelpTreeBase::ClearL1Jets"],[70,2,1,"_CPPv4N12HelpTreeBase11ClearL1JetsERKNSt6stringE","HelpTreeBase::ClearL1Jets"],[17,3,1,"_CPPv4N12HelpTreeBase11ClearL1JetsERKNSt6stringE","HelpTreeBase::ClearL1Jets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase11ClearL1JetsERKNSt6stringE","HelpTreeBase::ClearL1Jets::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase8ClearMETERKNSt6stringE","HelpTreeBase::ClearMET"],[70,2,1,"_CPPv4N12HelpTreeBase8ClearMETERKNSt6stringE","HelpTreeBase::ClearMET"],[17,3,1,"_CPPv4N12HelpTreeBase8ClearMETERKNSt6stringE","HelpTreeBase::ClearMET::metName"],[70,3,1,"_CPPv4N12HelpTreeBase8ClearMETERKNSt6stringE","HelpTreeBase::ClearMET::metName"],[17,2,1,"_CPPv4N12HelpTreeBase12ClearMETUserERKNSt6stringE","HelpTreeBase::ClearMETUser"],[70,2,1,"_CPPv4N12HelpTreeBase12ClearMETUserERKNSt6stringE","HelpTreeBase::ClearMETUser"],[17,2,1,"_CPPv4N12HelpTreeBase10ClearMuonsERKNSt6stringE","HelpTreeBase::ClearMuons"],[70,2,1,"_CPPv4N12HelpTreeBase10ClearMuonsERKNSt6stringE","HelpTreeBase::ClearMuons"],[17,3,1,"_CPPv4N12HelpTreeBase10ClearMuonsERKNSt6stringE","HelpTreeBase::ClearMuons::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase10ClearMuonsERKNSt6stringE","HelpTreeBase::ClearMuons::jetName"],[17,2,1,"_CPPv4N12HelpTreeBase14ClearMuonsUserERKNSt6stringE","HelpTreeBase::ClearMuonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase14ClearMuonsUserERKNSt6stringE","HelpTreeBase::ClearMuonsUser"],[17,2,1,"_CPPv4N12HelpTreeBase12ClearPhotonsERKNSt6stringE","HelpTreeBase::ClearPhotons"],[70,2,1,"_CPPv4N12HelpTreeBase12ClearPhotonsERKNSt6stringE","HelpTreeBase::ClearPhotons"],[17,3,1,"_CPPv4N12HelpTreeBase12ClearPhotonsERKNSt6stringE","HelpTreeBase::ClearPhotons::photonName"],[70,3,1,"_CPPv4N12HelpTreeBase12ClearPhotonsERKNSt6stringE","HelpTreeBase::ClearPhotons::photonName"],[17,2,1,"_CPPv4N12HelpTreeBase16ClearPhotonsUserERKNSt6stringE","HelpTreeBase::ClearPhotonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase16ClearPhotonsUserERKNSt6stringE","HelpTreeBase::ClearPhotonsUser"],[17,2,1,"_CPPv4N12HelpTreeBase9ClearTausERKNSt6stringE","HelpTreeBase::ClearTaus"],[70,2,1,"_CPPv4N12HelpTreeBase9ClearTausERKNSt6stringE","HelpTreeBase::ClearTaus"],[17,3,1,"_CPPv4N12HelpTreeBase9ClearTausERKNSt6stringE","HelpTreeBase::ClearTaus::tauName"],[70,3,1,"_CPPv4N12HelpTreeBase9ClearTausERKNSt6stringE","HelpTreeBase::ClearTaus::tauName"],[17,2,1,"_CPPv4N12HelpTreeBase13ClearTausUserERKNSt6stringE","HelpTreeBase::ClearTausUser"],[70,2,1,"_CPPv4N12HelpTreeBase13ClearTausUserERKNSt6stringE","HelpTreeBase::ClearTausUser"],[17,2,1,"_CPPv4N12HelpTreeBase11ClearTracksERKNSt6stringE","HelpTreeBase::ClearTracks"],[70,2,1,"_CPPv4N12HelpTreeBase11ClearTracksERKNSt6stringE","HelpTreeBase::ClearTracks"],[17,3,1,"_CPPv4N12HelpTreeBase11ClearTracksERKNSt6stringE","HelpTreeBase::ClearTracks::trackName"],[70,3,1,"_CPPv4N12HelpTreeBase11ClearTracksERKNSt6stringE","HelpTreeBase::ClearTracks::trackName"],[17,2,1,"_CPPv4N12HelpTreeBase15ClearTracksUserERKNSt6stringE","HelpTreeBase::ClearTracksUser"],[70,2,1,"_CPPv4N12HelpTreeBase15ClearTracksUserERKNSt6stringE","HelpTreeBase::ClearTracksUser"],[17,2,1,"_CPPv4N12HelpTreeBase12ClearTriggerEv","HelpTreeBase::ClearTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase12ClearTriggerEv","HelpTreeBase::ClearTrigger"],[17,2,1,"_CPPv4N12HelpTreeBase16ClearTriggerUserEv","HelpTreeBase::ClearTriggerUser"],[70,2,1,"_CPPv4N12HelpTreeBase16ClearTriggerUserEv","HelpTreeBase::ClearTriggerUser"],[17,2,1,"_CPPv4N12HelpTreeBase10ClearTruthERKNSt6stringE","HelpTreeBase::ClearTruth"],[70,2,1,"_CPPv4N12HelpTreeBase10ClearTruthERKNSt6stringE","HelpTreeBase::ClearTruth"],[17,3,1,"_CPPv4N12HelpTreeBase10ClearTruthERKNSt6stringE","HelpTreeBase::ClearTruth::truthName"],[70,3,1,"_CPPv4N12HelpTreeBase10ClearTruthERKNSt6stringE","HelpTreeBase::ClearTruth::truthName"],[17,2,1,"_CPPv4N12HelpTreeBase17ClearTruthFatJetsERKNSt6stringE","HelpTreeBase::ClearTruthFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase17ClearTruthFatJetsERKNSt6stringE","HelpTreeBase::ClearTruthFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase17ClearTruthFatJetsERKNSt6stringE","HelpTreeBase::ClearTruthFatJets::truthFatJetName"],[70,3,1,"_CPPv4N12HelpTreeBase17ClearTruthFatJetsERKNSt6stringE","HelpTreeBase::ClearTruthFatJets::truthFatJetName"],[17,2,1,"_CPPv4N12HelpTreeBase21ClearTruthFatJetsUserERKNSt6stringE","HelpTreeBase::ClearTruthFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase21ClearTruthFatJetsUserERKNSt6stringE","HelpTreeBase::ClearTruthFatJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase14ClearTruthUserERKNSt6stringE","HelpTreeBase::ClearTruthUser"],[70,2,1,"_CPPv4N12HelpTreeBase14ClearTruthUserERKNSt6stringE","HelpTreeBase::ClearTruthUser"],[17,2,1,"_CPPv4N12HelpTreeBase18ClearTruthVerticesERKNSt6stringE","HelpTreeBase::ClearTruthVertices"],[70,2,1,"_CPPv4N12HelpTreeBase18ClearTruthVerticesERKNSt6stringE","HelpTreeBase::ClearTruthVertices"],[17,3,1,"_CPPv4N12HelpTreeBase18ClearTruthVerticesERKNSt6stringE","HelpTreeBase::ClearTruthVertices::vertexName"],[70,3,1,"_CPPv4N12HelpTreeBase18ClearTruthVerticesERKNSt6stringE","HelpTreeBase::ClearTruthVertices::vertexName"],[17,2,1,"_CPPv4N12HelpTreeBase13ClearVerticesERKNSt6stringE","HelpTreeBase::ClearVertices"],[70,2,1,"_CPPv4N12HelpTreeBase13ClearVerticesERKNSt6stringE","HelpTreeBase::ClearVertices"],[17,3,1,"_CPPv4N12HelpTreeBase13ClearVerticesERKNSt6stringE","HelpTreeBase::ClearVertices::vertexName"],[70,3,1,"_CPPv4N12HelpTreeBase13ClearVerticesERKNSt6stringE","HelpTreeBase::ClearVertices::vertexName"],[17,2,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName"],[70,2,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName"],[17,3,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase20FatJetCollectionNameERKNSt6stringERKNSt6stringE","HelpTreeBase::FatJetCollectionName::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase4FillEv","HelpTreeBase::Fill"],[70,2,1,"_CPPv4N12HelpTreeBase4FillEv","HelpTreeBase::Fill"],[17,2,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster"],[70,2,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster"],[17,3,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster::cluster"],[70,3,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster::cluster"],[17,3,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster::clusterName"],[70,3,1,"_CPPv4N12HelpTreeBase11FillClusterEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillCluster::clusterName"],[17,2,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters"],[70,2,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters"],[17,3,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters::clusterName"],[70,3,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters::clusterName"],[17,3,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters::clusters"],[70,3,1,"_CPPv4N12HelpTreeBase12FillClustersEPKN4xAOD20CaloClusterContainerERKNSt6stringE","HelpTreeBase::FillClusters::clusters"],[17,2,1,"_CPPv4N12HelpTreeBase16FillClustersUserEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillClustersUser"],[70,2,1,"_CPPv4N12HelpTreeBase16FillClustersUserEPKN4xAOD11CaloClusterERKNSt6stringE","HelpTreeBase::FillClustersUser"],[17,2,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron"],[70,2,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron"],[17,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::elec"],[70,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::elec"],[17,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::elecName"],[70,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::elecName"],[17,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::primaryVertex"],[70,3,1,"_CPPv4N12HelpTreeBase12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectron::primaryVertex"],[17,2,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons"],[70,2,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons"],[17,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::elecName"],[70,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::elecName"],[17,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::electrons"],[70,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::electrons"],[17,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::primaryVertex"],[70,3,1,"_CPPv4N12HelpTreeBase13FillElectronsEPKN4xAOD17ElectronContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillElectrons::primaryVertex"],[17,2,1,"_CPPv4N12HelpTreeBase17FillElectronsUserEPKN4xAOD8ElectronERKNSt6stringEPKN4xAOD6VertexE","HelpTreeBase::FillElectronsUser"],[70,2,1,"_CPPv4N12HelpTreeBase17FillElectronsUserEPKN4xAOD8ElectronERKNSt6stringEPKN4xAOD6VertexE","HelpTreeBase::FillElectronsUser"],[17,2,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent"],[70,2,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent"],[17,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::event"],[70,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::event"],[17,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::eventInfo"],[70,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::eventInfo"],[17,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::vertices"],[70,3,1,"_CPPv4N12HelpTreeBase9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","HelpTreeBase::FillEvent::vertices"],[17,2,1,"_CPPv4N12HelpTreeBase13FillEventUserEPKN4xAOD9EventInfoE","HelpTreeBase::FillEventUser"],[70,2,1,"_CPPv4N12HelpTreeBase13FillEventUserEPKN4xAOD9EventInfoE","HelpTreeBase::FillEventUser"],[17,2,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet"],[70,2,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet"],[17,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::fatjet_itr"],[70,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::fatjet_itr"],[17,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::pvLocation"],[17,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase10FillFatJetEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJet::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::fatJets"],[70,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::fatJets"],[17,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::fatjetName"],[70,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::fatjetName"],[17,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::pvLocation"],[17,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::suffix"],[70,3,1,"_CPPv4N12HelpTreeBase11FillFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJets::suffix"],[17,2,1,"_CPPv4N12HelpTreeBase15FillFatJetsUserEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase15FillFatJetsUserEPKN4xAOD3JetEiRKNSt6stringERKNSt6stringE","HelpTreeBase::FillFatJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet"],[70,2,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet"],[17,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::jetName"],[17,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::jet_itr"],[70,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::jet_itr"],[17,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::pv"],[70,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::pv"],[17,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEiRKNSt6stringE","HelpTreeBase::FillJet::pvLocation"],[17,2,1,"_CPPv4N12HelpTreeBase14FillJetTriggerEv","HelpTreeBase::FillJetTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase14FillJetTriggerEv","HelpTreeBase::FillJetTrigger"],[17,2,1,"_CPPv4N12HelpTreeBase18FillJetTriggerUserEv","HelpTreeBase::FillJetTriggerUser"],[70,2,1,"_CPPv4N12HelpTreeBase18FillJetTriggerUserEv","HelpTreeBase::FillJetTriggerUser"],[17,2,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets"],[70,2,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets"],[17,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::jetName"],[17,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::jets"],[70,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::jets"],[17,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase8FillJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillJets::pvLocation"],[17,2,1,"_CPPv4N12HelpTreeBase12FillJetsUserEPKN4xAOD3JetERKNSt6stringE","HelpTreeBase::FillJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase12FillJetsUserEPKN4xAOD3JetERKNSt6stringE","HelpTreeBase::FillJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets"],[70,2,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets"],[17,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::jetName"],[70,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::jetName"],[17,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::jets"],[70,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::jets"],[17,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::sortL1Jets"],[70,3,1,"_CPPv4N12HelpTreeBase16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerERKNSt6stringEb","HelpTreeBase::FillLegacyL1Jets::sortL1Jets"],[17,2,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET"],[70,2,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET"],[17,3,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET::met"],[70,3,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET::met"],[17,3,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET::metName"],[70,3,1,"_CPPv4N12HelpTreeBase7FillMETEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMET::metName"],[17,2,1,"_CPPv4N12HelpTreeBase11FillMETUserEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMETUser"],[70,2,1,"_CPPv4N12HelpTreeBase11FillMETUserEPKN4xAOD18MissingETContainerERKNSt6stringE","HelpTreeBase::FillMETUser"],[17,2,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon"],[70,2,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon"],[17,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::muon"],[70,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::muon"],[17,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::muonName"],[70,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::muonName"],[17,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::primaryVertex"],[70,3,1,"_CPPv4N12HelpTreeBase8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuon::primaryVertex"],[17,2,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons"],[70,2,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons"],[17,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::muonName"],[70,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::muonName"],[17,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::muons"],[70,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::muons"],[17,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::primaryVertex"],[70,3,1,"_CPPv4N12HelpTreeBase9FillMuonsEPKN4xAOD13MuonContainerEPKN4xAOD6VertexERKNSt6stringE","HelpTreeBase::FillMuons::primaryVertex"],[17,2,1,"_CPPv4N12HelpTreeBase13FillMuonsUserEPKN4xAOD4MuonERKNSt6stringEPKN4xAOD6VertexE","HelpTreeBase::FillMuonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase13FillMuonsUserEPKN4xAOD4MuonERKNSt6stringEPKN4xAOD6VertexE","HelpTreeBase::FillMuonsUser"],[17,2,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets"],[70,2,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets"],[17,5,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::T"],[70,5,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::T"],[17,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::jetName"],[70,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::jetName"],[17,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::jets"],[70,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::jets"],[17,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::sortL1Jets"],[70,3,1,"_CPPv4I0EN12HelpTreeBase16FillPhase1L1JetsEvRP1TRKNSt6stringEb","HelpTreeBase::FillPhase1L1Jets::sortL1Jets"],[17,2,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton"],[70,2,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton"],[17,3,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton::photon"],[70,3,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton::photon"],[17,3,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton::photonName"],[70,3,1,"_CPPv4N12HelpTreeBase10FillPhotonEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhoton::photonName"],[17,2,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons"],[70,2,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons"],[17,3,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons::photonName"],[70,3,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons::photonName"],[17,3,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons::photons"],[70,3,1,"_CPPv4N12HelpTreeBase11FillPhotonsEPKN4xAOD15PhotonContainerERKNSt6stringE","HelpTreeBase::FillPhotons::photons"],[17,2,1,"_CPPv4N12HelpTreeBase15FillPhotonsUserEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhotonsUser"],[70,2,1,"_CPPv4N12HelpTreeBase15FillPhotonsUserEPKN4xAOD6PhotonERKNSt6stringE","HelpTreeBase::FillPhotonsUser"],[17,2,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau"],[70,2,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau"],[17,3,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau::tau"],[70,3,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau::tau"],[17,3,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau::tauName"],[70,3,1,"_CPPv4N12HelpTreeBase7FillTauEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTau::tauName"],[17,2,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus"],[70,2,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus"],[17,3,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus::tauName"],[70,3,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus::tauName"],[17,3,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus::taus"],[70,3,1,"_CPPv4N12HelpTreeBase8FillTausEPKN4xAOD15TauJetContainerERKNSt6stringE","HelpTreeBase::FillTaus::taus"],[17,2,1,"_CPPv4N12HelpTreeBase12FillTausUserEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTausUser"],[70,2,1,"_CPPv4N12HelpTreeBase12FillTausUserEPKN4xAOD6TauJetERKNSt6stringE","HelpTreeBase::FillTausUser"],[17,2,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack"],[70,2,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack::trackName"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack::trackName"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack::trackPart"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTrackEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTrack::trackPart"],[17,2,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks"],[70,2,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks"],[17,3,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks::trackName"],[70,3,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks::trackName"],[17,3,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks::tracks"],[70,3,1,"_CPPv4N12HelpTreeBase10FillTracksEPKN4xAOD22TrackParticleContainerERKNSt6stringE","HelpTreeBase::FillTracks::tracks"],[17,2,1,"_CPPv4N12HelpTreeBase14FillTracksUserEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTracksUser"],[70,2,1,"_CPPv4N12HelpTreeBase14FillTracksUserEPKN4xAOD13TrackParticleERKNSt6stringE","HelpTreeBase::FillTracksUser"],[17,2,1,"_CPPv4N12HelpTreeBase11FillTriggerEPKN4xAOD9EventInfoE","HelpTreeBase::FillTrigger"],[70,2,1,"_CPPv4N12HelpTreeBase11FillTriggerEPKN4xAOD9EventInfoE","HelpTreeBase::FillTrigger"],[17,3,1,"_CPPv4N12HelpTreeBase11FillTriggerEPKN4xAOD9EventInfoE","HelpTreeBase::FillTrigger::eventInfo"],[70,3,1,"_CPPv4N12HelpTreeBase11FillTriggerEPKN4xAOD9EventInfoE","HelpTreeBase::FillTrigger::eventInfo"],[17,2,1,"_CPPv4N12HelpTreeBase15FillTriggerUserEPKN4xAOD9EventInfoE","HelpTreeBase::FillTriggerUser"],[70,2,1,"_CPPv4N12HelpTreeBase15FillTriggerUserEPKN4xAOD9EventInfoE","HelpTreeBase::FillTriggerUser"],[17,2,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth"],[17,2,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth"],[70,2,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth"],[70,2,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth::truth"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth::truth"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth::truthName"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth::truthName"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth::truthName"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD22TruthParticleContainerERKNSt6stringE","HelpTreeBase::FillTruth::truthName"],[17,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth::truthPart"],[70,3,1,"_CPPv4N12HelpTreeBase9FillTruthEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruth::truthPart"],[17,2,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet"],[70,2,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet"],[17,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::pvLocation"],[17,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::truthFatJetName"],[70,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::truthFatJetName"],[17,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::truth_fatjet_itr"],[70,3,1,"_CPPv4N12HelpTreeBase15FillTruthFatJetEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJet::truth_fatjet_itr"],[17,2,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets"],[70,2,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets"],[17,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::pvLocation"],[70,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::pvLocation"],[17,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::truthFatJetName"],[70,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::truthFatJetName"],[17,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::truthFatJets"],[70,3,1,"_CPPv4N12HelpTreeBase16FillTruthFatJetsEPKN4xAOD12JetContainerEiRKNSt6stringE","HelpTreeBase::FillTruthFatJets::truthFatJets"],[17,2,1,"_CPPv4N12HelpTreeBase20FillTruthFatJetsUserEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJetsUser"],[70,2,1,"_CPPv4N12HelpTreeBase20FillTruthFatJetsUserEPKN4xAOD3JetEiRKNSt6stringE","HelpTreeBase::FillTruthFatJetsUser"],[17,2,1,"_CPPv4N12HelpTreeBase13FillTruthUserEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruthUser"],[70,2,1,"_CPPv4N12HelpTreeBase13FillTruthUserEPKN4xAOD13TruthParticleERKNSt6stringE","HelpTreeBase::FillTruthUser"],[17,2,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices"],[70,2,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices"],[17,3,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices::truthVertexName"],[70,3,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices::truthVertexName"],[17,3,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices::truthVertices"],[70,3,1,"_CPPv4N12HelpTreeBase17FillTruthVerticesEPKN4xAOD20TruthVertexContainerERKNSt6stringE","HelpTreeBase::FillTruthVertices::truthVertices"],[17,2,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices"],[70,2,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices"],[17,3,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices::vertexName"],[70,3,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices::vertexName"],[17,3,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices::vertices"],[70,3,1,"_CPPv4N12HelpTreeBase12FillVerticesEPKN4xAOD15VertexContainerERKNSt6stringE","HelpTreeBase::FillVertices::vertices"],[17,2,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase"],[17,2,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase"],[70,2,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase"],[70,2,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::debug"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::debug"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::debug"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::debug"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::event"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::event"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::event"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::event"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::file"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::file"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::file"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::file"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::nominalTreeName"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::nominalTreeName"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::nominalTreeName"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::nominalTreeName"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::store"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::store"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::store"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::store"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::tree"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::tree"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::tree"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::tree"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::units"],[17,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::units"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEP5TTreeP5TFilePN4xAOD6TEventEPN4xAOD6TStoreEKfbNSt6stringE","HelpTreeBase::HelpTreeBase::units"],[70,3,1,"_CPPv4N12HelpTreeBase12HelpTreeBaseEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreENSt6stringE","HelpTreeBase::HelpTreeBase::units"],[17,4,1,"_CPPv4N12HelpTreeBase10m_HLTPSKeyE","HelpTreeBase::m_HLTPSKey"],[70,4,1,"_CPPv4N12HelpTreeBase10m_HLTPSKeyE","HelpTreeBase::m_HLTPSKey"],[17,4,1,"_CPPv4N12HelpTreeBase9m_L1PSKeyE","HelpTreeBase::m_L1PSKey"],[70,4,1,"_CPPv4N12HelpTreeBase9m_L1PSKeyE","HelpTreeBase::m_L1PSKey"],[17,4,1,"_CPPv4N12HelpTreeBase24m_MuonIsoEff_SF_sysNamesE","HelpTreeBase::m_MuonIsoEff_SF_sysNames"],[70,4,1,"_CPPv4N12HelpTreeBase24m_MuonIsoEff_SF_sysNamesE","HelpTreeBase::m_MuonIsoEff_SF_sysNames"],[17,4,1,"_CPPv4N12HelpTreeBase25m_MuonRecoEff_SF_sysNamesE","HelpTreeBase::m_MuonRecoEff_SF_sysNames"],[70,4,1,"_CPPv4N12HelpTreeBase25m_MuonRecoEff_SF_sysNamesE","HelpTreeBase::m_MuonRecoEff_SF_sysNames"],[17,4,1,"_CPPv4N12HelpTreeBase25m_MuonTTVAEff_SF_sysNamesE","HelpTreeBase::m_MuonTTVAEff_SF_sysNames"],[70,4,1,"_CPPv4N12HelpTreeBase25m_MuonTTVAEff_SF_sysNamesE","HelpTreeBase::m_MuonTTVAEff_SF_sysNames"],[17,4,1,"_CPPv4N12HelpTreeBase25m_MuonTrigEff_SF_sysNamesE","HelpTreeBase::m_MuonTrigEff_SF_sysNames"],[70,4,1,"_CPPv4N12HelpTreeBase25m_MuonTrigEff_SF_sysNamesE","HelpTreeBase::m_MuonTrigEff_SF_sysNames"],[17,4,1,"_CPPv4N12HelpTreeBase10m_clustersE","HelpTreeBase::m_clusters"],[70,4,1,"_CPPv4N12HelpTreeBase10m_clustersE","HelpTreeBase::m_clusters"],[17,4,1,"_CPPv4N12HelpTreeBase7m_debugE","HelpTreeBase::m_debug"],[70,4,1,"_CPPv4N12HelpTreeBase7m_debugE","HelpTreeBase::m_debug"],[17,4,1,"_CPPv4N12HelpTreeBase18m_disabledTriggersE","HelpTreeBase::m_disabledTriggers"],[70,4,1,"_CPPv4N12HelpTreeBase18m_disabledTriggersE","HelpTreeBase::m_disabledTriggers"],[17,4,1,"_CPPv4N12HelpTreeBase19m_elTrigForMatchingE","HelpTreeBase::m_elTrigForMatching"],[70,4,1,"_CPPv4N12HelpTreeBase19m_elTrigForMatchingE","HelpTreeBase::m_elTrigForMatching"],[17,4,1,"_CPPv4N12HelpTreeBase7m_elecsE","HelpTreeBase::m_elecs"],[70,4,1,"_CPPv4N12HelpTreeBase7m_elecsE","HelpTreeBase::m_elecs"],[17,4,1,"_CPPv4N12HelpTreeBase7m_eventE","HelpTreeBase::m_event"],[70,4,1,"_CPPv4N12HelpTreeBase7m_eventE","HelpTreeBase::m_event"],[17,4,1,"_CPPv4N12HelpTreeBase11m_eventInfoE","HelpTreeBase::m_eventInfo"],[70,4,1,"_CPPv4N12HelpTreeBase11m_eventInfoE","HelpTreeBase::m_eventInfo"],[17,4,1,"_CPPv4N12HelpTreeBase9m_fatjetsE","HelpTreeBase::m_fatjets"],[70,4,1,"_CPPv4N12HelpTreeBase9m_fatjetsE","HelpTreeBase::m_fatjets"],[17,4,1,"_CPPv4N12HelpTreeBase6m_isMCE","HelpTreeBase::m_isMC"],[70,4,1,"_CPPv4N12HelpTreeBase6m_isMCE","HelpTreeBase::m_isMC"],[17,4,1,"_CPPv4N12HelpTreeBase12m_isPassBitsE","HelpTreeBase::m_isPassBits"],[70,4,1,"_CPPv4N12HelpTreeBase12m_isPassBitsE","HelpTreeBase::m_isPassBits"],[17,4,1,"_CPPv4N12HelpTreeBase17m_isPassBitsNamesE","HelpTreeBase::m_isPassBitsNames"],[70,4,1,"_CPPv4N12HelpTreeBase17m_isPassBitsNamesE","HelpTreeBase::m_isPassBitsNames"],[17,4,1,"_CPPv4N12HelpTreeBase6m_jetsE","HelpTreeBase::m_jets"],[70,4,1,"_CPPv4N12HelpTreeBase6m_jetsE","HelpTreeBase::m_jets"],[17,4,1,"_CPPv4N12HelpTreeBase8m_l1JetsE","HelpTreeBase::m_l1Jets"],[70,4,1,"_CPPv4N12HelpTreeBase8m_l1JetsE","HelpTreeBase::m_l1Jets"],[17,4,1,"_CPPv4N12HelpTreeBase11m_masterKeyE","HelpTreeBase::m_masterKey"],[70,4,1,"_CPPv4N12HelpTreeBase11m_masterKeyE","HelpTreeBase::m_masterKey"],[17,4,1,"_CPPv4N12HelpTreeBase5m_metE","HelpTreeBase::m_met"],[70,4,1,"_CPPv4N12HelpTreeBase5m_metE","HelpTreeBase::m_met"],[17,4,1,"_CPPv4N12HelpTreeBase7m_muonsE","HelpTreeBase::m_muons"],[70,4,1,"_CPPv4N12HelpTreeBase7m_muonsE","HelpTreeBase::m_muons"],[17,4,1,"_CPPv4N12HelpTreeBase13m_nominalTreeE","HelpTreeBase::m_nominalTree"],[70,4,1,"_CPPv4N12HelpTreeBase13m_nominalTreeE","HelpTreeBase::m_nominalTree"],[17,4,1,"_CPPv4N12HelpTreeBase17m_nominalTreeNameE","HelpTreeBase::m_nominalTreeName"],[70,4,1,"_CPPv4N12HelpTreeBase17m_nominalTreeNameE","HelpTreeBase::m_nominalTreeName"],[17,4,1,"_CPPv4N12HelpTreeBase9m_passHLTE","HelpTreeBase::m_passHLT"],[70,4,1,"_CPPv4N12HelpTreeBase9m_passHLTE","HelpTreeBase::m_passHLT"],[17,4,1,"_CPPv4N12HelpTreeBase8m_passL1E","HelpTreeBase::m_passL1"],[70,4,1,"_CPPv4N12HelpTreeBase8m_passL1E","HelpTreeBase::m_passL1"],[17,4,1,"_CPPv4N12HelpTreeBase16m_passedTriggersE","HelpTreeBase::m_passedTriggers"],[70,4,1,"_CPPv4N12HelpTreeBase16m_passedTriggersE","HelpTreeBase::m_passedTriggers"],[17,4,1,"_CPPv4N12HelpTreeBase9m_photonsE","HelpTreeBase::m_photons"],[70,4,1,"_CPPv4N12HelpTreeBase9m_photonsE","HelpTreeBase::m_photons"],[17,4,1,"_CPPv4N12HelpTreeBase7m_storeE","HelpTreeBase::m_store"],[70,4,1,"_CPPv4N12HelpTreeBase7m_storeE","HelpTreeBase::m_store"],[17,4,1,"_CPPv4N12HelpTreeBase6m_tausE","HelpTreeBase::m_taus"],[70,4,1,"_CPPv4N12HelpTreeBase6m_tausE","HelpTreeBase::m_taus"],[17,4,1,"_CPPv4N12HelpTreeBase8m_tracksE","HelpTreeBase::m_tracks"],[70,4,1,"_CPPv4N12HelpTreeBase8m_tracksE","HelpTreeBase::m_tracks"],[17,4,1,"_CPPv4N12HelpTreeBase6m_treeE","HelpTreeBase::m_tree"],[70,4,1,"_CPPv4N12HelpTreeBase6m_treeE","HelpTreeBase::m_tree"],[17,4,1,"_CPPv4N12HelpTreeBase14m_trigConfToolE","HelpTreeBase::m_trigConfTool"],[70,4,1,"_CPPv4N12HelpTreeBase14m_trigConfToolE","HelpTreeBase::m_trigConfTool"],[17,4,1,"_CPPv4N12HelpTreeBase13m_trigDecToolE","HelpTreeBase::m_trigDecTool"],[70,4,1,"_CPPv4N12HelpTreeBase13m_trigDecToolE","HelpTreeBase::m_trigDecTool"],[17,4,1,"_CPPv4N12HelpTreeBase16m_trigInfoSwitchE","HelpTreeBase::m_trigInfoSwitch"],[70,4,1,"_CPPv4N12HelpTreeBase16m_trigInfoSwitchE","HelpTreeBase::m_trigInfoSwitch"],[17,4,1,"_CPPv4N12HelpTreeBase18m_triggerPrescalesE","HelpTreeBase::m_triggerPrescales"],[70,4,1,"_CPPv4N12HelpTreeBase18m_triggerPrescalesE","HelpTreeBase::m_triggerPrescales"],[17,4,1,"_CPPv4N12HelpTreeBase22m_triggerPrescalesLumiE","HelpTreeBase::m_triggerPrescalesLumi"],[70,4,1,"_CPPv4N12HelpTreeBase22m_triggerPrescalesLumiE","HelpTreeBase::m_triggerPrescalesLumi"],[17,4,1,"_CPPv4N12HelpTreeBase18m_triggerSelectionE","HelpTreeBase::m_triggerSelection"],[70,4,1,"_CPPv4N12HelpTreeBase18m_triggerSelectionE","HelpTreeBase::m_triggerSelection"],[17,4,1,"_CPPv4N12HelpTreeBase7m_truthE","HelpTreeBase::m_truth"],[70,4,1,"_CPPv4N12HelpTreeBase7m_truthE","HelpTreeBase::m_truth"],[17,4,1,"_CPPv4N12HelpTreeBase26m_truthVertexContainerNameE","HelpTreeBase::m_truthVertexContainerName"],[70,4,1,"_CPPv4N12HelpTreeBase26m_truthVertexContainerNameE","HelpTreeBase::m_truthVertexContainerName"],[17,4,1,"_CPPv4N12HelpTreeBase15m_truth_fatjetsE","HelpTreeBase::m_truth_fatjets"],[70,4,1,"_CPPv4N12HelpTreeBase15m_truth_fatjetsE","HelpTreeBase::m_truth_fatjets"],[17,4,1,"_CPPv4N12HelpTreeBase16m_truth_verticesE","HelpTreeBase::m_truth_vertices"],[70,4,1,"_CPPv4N12HelpTreeBase16m_truth_verticesE","HelpTreeBase::m_truth_vertices"],[17,4,1,"_CPPv4N12HelpTreeBase7m_unitsE","HelpTreeBase::m_units"],[70,4,1,"_CPPv4N12HelpTreeBase7m_unitsE","HelpTreeBase::m_units"],[17,4,1,"_CPPv4N12HelpTreeBase21m_vertexContainerNameE","HelpTreeBase::m_vertexContainerName"],[70,4,1,"_CPPv4N12HelpTreeBase21m_vertexContainerNameE","HelpTreeBase::m_vertexContainerName"],[17,4,1,"_CPPv4N12HelpTreeBase10m_verticesE","HelpTreeBase::m_vertices"],[70,4,1,"_CPPv4N12HelpTreeBase10m_verticesE","HelpTreeBase::m_vertices"],[17,2,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill"],[70,2,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill"],[17,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::T"],[70,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::T"],[17,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::U"],[70,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::U"],[17,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::V"],[70,5,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::V"],[17,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::accessor"],[70,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::accessor"],[17,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::defaultValue"],[70,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::defaultValue"],[17,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::destination"],[70,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::destination"],[17,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::m_units"],[70,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::m_units"],[17,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::xAODObj"],[70,3,1,"_CPPv4I000EN12HelpTreeBase8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEERNSt6vectorI1UEE1Ui","HelpTreeBase::safeFill::xAODObj"],[17,2,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill"],[70,2,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill"],[17,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::T"],[70,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::T"],[17,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::U"],[70,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::U"],[17,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::V"],[70,5,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::V"],[17,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::accessor"],[70,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::accessor"],[17,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::destination"],[70,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::destination"],[17,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::m_units"],[70,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::m_units"],[17,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::xAODObj"],[70,3,1,"_CPPv4I000EN12HelpTreeBase11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEERNSt6vectorINSt6vectorI1UEEEEi","HelpTreeBase::safeVecFill::xAODObj"],[17,2,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch"],[70,2,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch"],[17,5,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::T"],[70,5,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::T"],[17,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::localVectorPtr"],[70,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::localVectorPtr"],[17,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::prefix"],[70,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::prefix"],[17,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::varName"],[70,3,1,"_CPPv4I0EN12HelpTreeBase9setBranchEvNSt6stringENSt6stringEPNSt6vectorI1TEE","HelpTreeBase::setBranch::varName"],[17,2,1,"_CPPv4N12HelpTreeBase7writeToEP5TFile","HelpTreeBase::writeTo"],[70,2,1,"_CPPv4N12HelpTreeBase7writeToEP5TFile","HelpTreeBase::writeTo"],[17,3,1,"_CPPv4N12HelpTreeBase7writeToEP5TFile","HelpTreeBase::writeTo::file"],[70,3,1,"_CPPv4N12HelpTreeBase7writeToEP5TFile","HelpTreeBase::writeTo::file"],[17,2,1,"_CPPv4N12HelpTreeBaseD0Ev","HelpTreeBase::~HelpTreeBase"],[70,2,1,"_CPPv4N12HelpTreeBaseD0Ev","HelpTreeBase::~HelpTreeBase"],[18,6,1,"_CPPv413HelperClasses","HelperClasses"],[18,1,1,"_CPPv4N13HelperClasses17ClusterInfoSwitchE","HelperClasses::ClusterInfoSwitch"],[71,1,1,"_CPPv4N13HelperClasses17ClusterInfoSwitchE","HelperClasses::ClusterInfoSwitch"],[71,2,1,"_CPPv4N13HelperClasses17ClusterInfoSwitch17ClusterInfoSwitchEKNSt6stringE","HelperClasses::ClusterInfoSwitch::ClusterInfoSwitch"],[71,3,1,"_CPPv4N13HelperClasses17ClusterInfoSwitch17ClusterInfoSwitchEKNSt6stringE","HelperClasses::ClusterInfoSwitch::ClusterInfoSwitch::configStr"],[71,2,1,"_CPPv4N13HelperClasses17ClusterInfoSwitch10initializeEv","HelperClasses::ClusterInfoSwitch::initialize"],[71,2,1,"_CPPv4N13HelperClasses17ClusterInfoSwitchD0Ev","HelperClasses::ClusterInfoSwitch::~ClusterInfoSwitch"],[18,7,1,"_CPPv4N13HelperClasses13ContainerTypeE","HelperClasses::ContainerType"],[148,7,1,"_CPPv4N13HelperClasses13ContainerTypeE","HelperClasses::ContainerType"],[18,8,1,"_CPPv4N13HelperClasses13ContainerType9CONSTCONTE","HelperClasses::ContainerType::CONSTCONT"],[148,8,1,"_CPPv4N13HelperClasses13ContainerType9CONSTCONTE","HelperClasses::ContainerType::CONSTCONT"],[18,8,1,"_CPPv4N13HelperClasses13ContainerType7CONSTDVE","HelperClasses::ContainerType::CONSTDV"],[148,8,1,"_CPPv4N13HelperClasses13ContainerType7CONSTDVE","HelperClasses::ContainerType::CONSTDV"],[18,8,1,"_CPPv4N13HelperClasses13ContainerType7UNKNOWNE","HelperClasses::ContainerType::UNKNOWN"],[148,8,1,"_CPPv4N13HelperClasses13ContainerType7UNKNOWNE","HelperClasses::ContainerType::UNKNOWN"],[18,1,1,"_CPPv4N13HelperClasses18ElectronInfoSwitchE","HelperClasses::ElectronInfoSwitch"],[72,1,1,"_CPPv4N13HelperClasses18ElectronInfoSwitchE","HelperClasses::ElectronInfoSwitch"],[72,2,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch18ElectronInfoSwitchEKNSt6stringE","HelperClasses::ElectronInfoSwitch::ElectronInfoSwitch"],[72,3,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch18ElectronInfoSwitchEKNSt6stringE","HelperClasses::ElectronInfoSwitch::ElectronInfoSwitch::configStr"],[72,2,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch10initializeEv","HelperClasses::ElectronInfoSwitch::initialize"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch5m_PIDE","HelperClasses::ElectronInfoSwitch::m_PID"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch10m_PIDSFWPsE","HelperClasses::ElectronInfoSwitch::m_PIDSFWPs"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch8m_PIDWPsE","HelperClasses::ElectronInfoSwitch::m_PIDWPs"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch13m_closeByCorrE","HelperClasses::ElectronInfoSwitch::m_closeByCorr"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch7m_doLRTE","HelperClasses::ElectronInfoSwitch::m_doLRT"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch7m_effSFE","HelperClasses::ElectronInfoSwitch::m_effSF"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch9m_isolWPsE","HelperClasses::ElectronInfoSwitch::m_isolWPs"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch11m_isolationE","HelperClasses::ElectronInfoSwitch::m_isolation"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch21m_isolationKinematicsE","HelperClasses::ElectronInfoSwitch::m_isolationKinematics"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch8m_passORE","HelperClasses::ElectronInfoSwitch::m_passOR"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch9m_passSelE","HelperClasses::ElectronInfoSwitch::m_passSel"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch14m_promptleptonE","HelperClasses::ElectronInfoSwitch::m_promptlepton"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch9m_qualityE","HelperClasses::ElectronInfoSwitch::m_quality"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch12m_recoparamsE","HelperClasses::ElectronInfoSwitch::m_recoparams"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch14m_trackhitcontE","HelperClasses::ElectronInfoSwitch::m_trackhitcont"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch13m_trackparamsE","HelperClasses::ElectronInfoSwitch::m_trackparams"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch9m_trigWPsE","HelperClasses::ElectronInfoSwitch::m_trigWPs"],[72,4,1,"_CPPv4N13HelperClasses18ElectronInfoSwitch9m_triggerE","HelperClasses::ElectronInfoSwitch::m_trigger"],[72,2,1,"_CPPv4N13HelperClasses18ElectronInfoSwitchD0Ev","HelperClasses::ElectronInfoSwitch::~ElectronInfoSwitch"],[18,1,1,"_CPPv4I0EN13HelperClasses10EnumParserE","HelperClasses::EnumParser"],[73,1,1,"_CPPv4I0EN13HelperClasses10EnumParserE","HelperClasses::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser10EnumParserEv","HelperClasses::EnumParser::EnumParser"],[18,5,1,"_CPPv4I0EN13HelperClasses10EnumParserE","HelperClasses::EnumParser::T"],[73,5,1,"_CPPv4I0EN13HelperClasses10EnumParserE","HelperClasses::EnumParser::T"],[73,2,1,"_CPPv4N13HelperClasses10EnumParser9parseEnumERKNSt6stringE","HelperClasses::EnumParser::parseEnum"],[73,3,1,"_CPPv4N13HelperClasses10EnumParser9parseEnumERKNSt6stringE","HelperClasses::EnumParser::parseEnum::value"],[18,1,1,"_CPPv4N13HelperClasses15EventInfoSwitchE","HelperClasses::EventInfoSwitch"],[74,1,1,"_CPPv4N13HelperClasses15EventInfoSwitchE","HelperClasses::EventInfoSwitch"],[74,2,1,"_CPPv4N13HelperClasses15EventInfoSwitch15EventInfoSwitchEKNSt6stringE","HelperClasses::EventInfoSwitch::EventInfoSwitch"],[74,3,1,"_CPPv4N13HelperClasses15EventInfoSwitch15EventInfoSwitchEKNSt6stringE","HelperClasses::EventInfoSwitch::EventInfoSwitch::configStr"],[74,2,1,"_CPPv4N13HelperClasses15EventInfoSwitch10initializeEv","HelperClasses::EventInfoSwitch::initialize"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch10m_bcidInfoE","HelperClasses::EventInfoSwitch::m_bcidInfo"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch16m_beamspotweightE","HelperClasses::EventInfoSwitch::m_beamspotweight"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch10m_caloClusE","HelperClasses::EventInfoSwitch::m_caloClus"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch15m_eventCleaningE","HelperClasses::EventInfoSwitch::m_eventCleaning"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch12m_noDataInfoE","HelperClasses::EventInfoSwitch::m_noDataInfo"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch8m_pileupE","HelperClasses::EventInfoSwitch::m_pileup"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch11m_pileupsysE","HelperClasses::EventInfoSwitch::m_pileupsys"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch9m_shapeEME","HelperClasses::EventInfoSwitch::m_shapeEM"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch14m_shapeEMPFLOWE","HelperClasses::EventInfoSwitch::m_shapeEMPFLOW"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch9m_shapeLCE","HelperClasses::EventInfoSwitch::m_shapeLC"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch7m_truthE","HelperClasses::EventInfoSwitch::m_truth"],[74,4,1,"_CPPv4N13HelperClasses15EventInfoSwitch12m_weightsSysE","HelperClasses::EventInfoSwitch::m_weightsSys"],[18,1,1,"_CPPv4N13HelperClasses19IParticleInfoSwitchE","HelperClasses::IParticleInfoSwitch"],[75,1,1,"_CPPv4N13HelperClasses19IParticleInfoSwitchE","HelperClasses::IParticleInfoSwitch"],[75,2,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch19IParticleInfoSwitchEKNSt6stringE","HelperClasses::IParticleInfoSwitch::IParticleInfoSwitch"],[75,3,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch19IParticleInfoSwitchEKNSt6stringE","HelperClasses::IParticleInfoSwitch::IParticleInfoSwitch::configStr"],[75,2,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch10initializeEv","HelperClasses::IParticleInfoSwitch::initialize"],[75,4,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch11m_kinematicE","HelperClasses::IParticleInfoSwitch::m_kinematic"],[75,4,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch16m_noMultiplicityE","HelperClasses::IParticleInfoSwitch::m_noMultiplicity"],[75,4,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch12m_numLeadingE","HelperClasses::IParticleInfoSwitch::m_numLeading"],[75,4,1,"_CPPv4N13HelperClasses19IParticleInfoSwitch9m_useTheSE","HelperClasses::IParticleInfoSwitch::m_useTheS"],[75,2,1,"_CPPv4N13HelperClasses19IParticleInfoSwitchD0Ev","HelperClasses::IParticleInfoSwitch::~IParticleInfoSwitch"],[18,1,1,"_CPPv4N13HelperClasses10InfoSwitchE","HelperClasses::InfoSwitch"],[76,1,1,"_CPPv4N13HelperClasses10InfoSwitchE","HelperClasses::InfoSwitch"],[18,2,1,"_CPPv4N13HelperClasses10InfoSwitch10InfoSwitchEKNSt6stringE","HelperClasses::InfoSwitch::InfoSwitch"],[76,2,1,"_CPPv4N13HelperClasses10InfoSwitch10InfoSwitchEKNSt6stringE","HelperClasses::InfoSwitch::InfoSwitch"],[18,3,1,"_CPPv4N13HelperClasses10InfoSwitch10InfoSwitchEKNSt6stringE","HelperClasses::InfoSwitch::InfoSwitch::configStr"],[76,3,1,"_CPPv4N13HelperClasses10InfoSwitch10InfoSwitchEKNSt6stringE","HelperClasses::InfoSwitch::InfoSwitch::configStr"],[18,2,1,"_CPPv4N13HelperClasses10InfoSwitch17get_working_pointEKNSt6stringE","HelperClasses::InfoSwitch::get_working_point"],[76,2,1,"_CPPv4N13HelperClasses10InfoSwitch17get_working_pointEKNSt6stringE","HelperClasses::InfoSwitch::get_working_point"],[18,3,1,"_CPPv4N13HelperClasses10InfoSwitch17get_working_pointEKNSt6stringE","HelperClasses::InfoSwitch::get_working_point::flag"],[76,3,1,"_CPPv4N13HelperClasses10InfoSwitch17get_working_pointEKNSt6stringE","HelperClasses::InfoSwitch::get_working_point::flag"],[18,2,1,"_CPPv4N13HelperClasses10InfoSwitch18get_working_pointsEKNSt6stringE","HelperClasses::InfoSwitch::get_working_points"],[76,2,1,"_CPPv4N13HelperClasses10InfoSwitch18get_working_pointsEKNSt6stringE","HelperClasses::InfoSwitch::get_working_points"],[18,3,1,"_CPPv4N13HelperClasses10InfoSwitch18get_working_pointsEKNSt6stringE","HelperClasses::InfoSwitch::get_working_points::flag"],[76,3,1,"_CPPv4N13HelperClasses10InfoSwitch18get_working_pointsEKNSt6stringE","HelperClasses::InfoSwitch::get_working_points::flag"],[18,2,1,"_CPPv4N13HelperClasses10InfoSwitch9has_exactEKNSt6stringE","HelperClasses::InfoSwitch::has_exact"],[76,2,1,"_CPPv4N13HelperClasses10InfoSwitch9has_exactEKNSt6stringE","HelperClasses::InfoSwitch::has_exact"],[18,3,1,"_CPPv4N13HelperClasses10InfoSwitch9has_exactEKNSt6stringE","HelperClasses::InfoSwitch::has_exact::flag"],[76,3,1,"_CPPv4N13HelperClasses10InfoSwitch9has_exactEKNSt6stringE","HelperClasses::InfoSwitch::has_exact::flag"],[18,2,1,"_CPPv4N13HelperClasses10InfoSwitch9has_matchEKNSt6stringE","HelperClasses::InfoSwitch::has_match"],[76,2,1,"_CPPv4N13HelperClasses10InfoSwitch9has_matchEKNSt6stringE","HelperClasses::InfoSwitch::has_match"],[18,3,1,"_CPPv4N13HelperClasses10InfoSwitch9has_matchEKNSt6stringE","HelperClasses::InfoSwitch::has_match::flag"],[76,3,1,"_CPPv4N13HelperClasses10InfoSwitch9has_matchEKNSt6stringE","HelperClasses::InfoSwitch::has_match::flag"],[18,4,1,"_CPPv4N13HelperClasses10InfoSwitch15m_configDetailsE","HelperClasses::InfoSwitch::m_configDetails"],[76,4,1,"_CPPv4N13HelperClasses10InfoSwitch15m_configDetailsE","HelperClasses::InfoSwitch::m_configDetails"],[18,4,1,"_CPPv4N13HelperClasses10InfoSwitch11m_configStrE","HelperClasses::InfoSwitch::m_configStr"],[76,4,1,"_CPPv4N13HelperClasses10InfoSwitch11m_configStrE","HelperClasses::InfoSwitch::m_configStr"],[18,1,1,"_CPPv4N13HelperClasses13JetInfoSwitchE","HelperClasses::JetInfoSwitch"],[77,1,1,"_CPPv4N13HelperClasses13JetInfoSwitchE","HelperClasses::JetInfoSwitch"],[77,2,1,"_CPPv4N13HelperClasses13JetInfoSwitch13JetInfoSwitchEKNSt6stringE","HelperClasses::JetInfoSwitch::JetInfoSwitch"],[77,3,1,"_CPPv4N13HelperClasses13JetInfoSwitch13JetInfoSwitchEKNSt6stringE","HelperClasses::JetInfoSwitch::JetInfoSwitch::configStr"],[77,2,1,"_CPPv4N13HelperClasses13JetInfoSwitch10initializeEv","HelperClasses::JetInfoSwitch::initialize"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch5m_JVCE","HelperClasses::JetInfoSwitch::m_JVC"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_NNJvtE","HelperClasses::JetInfoSwitch::m_NNJvt"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_VTagsE","HelperClasses::JetInfoSwitch::m_VTags"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch10m_allTrackE","HelperClasses::JetInfoSwitch::m_allTrack"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch16m_allTrackDetailE","HelperClasses::JetInfoSwitch::m_allTrackDetail"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch15m_allTrackPVSelE","HelperClasses::JetInfoSwitch::m_allTrackPVSel"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch6m_areaE","HelperClasses::JetInfoSwitch::m_area"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_bosonCountE","HelperClasses::JetInfoSwitch::m_bosonCount"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_btag_jettrkE","HelperClasses::JetInfoSwitch::m_btag_jettrk"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_byAverageMuE","HelperClasses::JetInfoSwitch::m_byAverageMu"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_byEtaE","HelperClasses::JetInfoSwitch::m_byEta"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch8m_chargeE","HelperClasses::JetInfoSwitch::m_charge"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_chargedPFOPVE","HelperClasses::JetInfoSwitch::m_chargedPFOPV"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_cleanE","HelperClasses::JetInfoSwitch::m_clean"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch10m_cleanLLPE","HelperClasses::JetInfoSwitch::m_cleanLLP"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_cleanLightE","HelperClasses::JetInfoSwitch::m_cleanLight"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_cleanTrigE","HelperClasses::JetInfoSwitch::m_cleanTrig"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_constituentE","HelperClasses::JetInfoSwitch::m_constituent"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch16m_constituentAllE","HelperClasses::JetInfoSwitch::m_constituentAll"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch15m_constscaleEtaE","HelperClasses::JetInfoSwitch::m_constscaleEta"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_detectorEtaE","HelperClasses::JetInfoSwitch::m_detectorEta"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch8m_energyE","HelperClasses::JetInfoSwitch::m_energy"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_energyLightE","HelperClasses::JetInfoSwitch::m_energyLight"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_etaPhiMapE","HelperClasses::JetInfoSwitch::m_etaPhiMap"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch6m_fJvtE","HelperClasses::JetInfoSwitch::m_fJvt"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_flavorTagE","HelperClasses::JetInfoSwitch::m_flavorTag"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_flavorTagHLTE","HelperClasses::JetInfoSwitch::m_flavorTagHLT"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_flavorTagTLAE","HelperClasses::JetInfoSwitch::m_flavorTagTLA"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_hltVtxCompE","HelperClasses::JetInfoSwitch::m_hltVtxComp"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_ipDetailsE","HelperClasses::JetInfoSwitch::m_ipDetails"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch9m_jetBTagE","HelperClasses::JetInfoSwitch::m_jetBTag"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_jetBTagCtsE","HelperClasses::JetInfoSwitch::m_jetBTagCts"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch18m_jetFitterDetailsE","HelperClasses::JetInfoSwitch::m_jetFitterDetails"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch5m_jvtE","HelperClasses::JetInfoSwitch::m_jvt"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_layerE","HelperClasses::JetInfoSwitch::m_layer"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_lumiB_runNE","HelperClasses::JetInfoSwitch::m_lumiB_runN"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch16m_muonCorrectionE","HelperClasses::JetInfoSwitch::m_muonCorrection"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_ntrimsubjetsE","HelperClasses::JetInfoSwitch::m_ntrimsubjets"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch10m_onlineBSE","HelperClasses::JetInfoSwitch::m_onlineBS"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_onlineBSToolE","HelperClasses::JetInfoSwitch::m_onlineBSTool"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch8m_passORE","HelperClasses::JetInfoSwitch::m_passOR"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch9m_passSelE","HelperClasses::JetInfoSwitch::m_passSel"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch10m_rapidityE","HelperClasses::JetInfoSwitch::m_rapidity"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_resolutionE","HelperClasses::JetInfoSwitch::m_resolution"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch8m_scalesE","HelperClasses::JetInfoSwitch::m_scales"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_sfJVTNameE","HelperClasses::JetInfoSwitch::m_sfJVTName"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_sffJVTNameE","HelperClasses::JetInfoSwitch::m_sffJVTName"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_substructureE","HelperClasses::JetInfoSwitch::m_substructure"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_svDetailsE","HelperClasses::JetInfoSwitch::m_svDetails"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch8m_timingE","HelperClasses::JetInfoSwitch::m_timing"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch10m_trackAllE","HelperClasses::JetInfoSwitch::m_trackAll"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch15m_trackJetNamesE","HelperClasses::JetInfoSwitch::m_trackJetNames"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch11m_trackNameE","HelperClasses::JetInfoSwitch::m_trackName"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch9m_trackPVE","HelperClasses::JetInfoSwitch::m_trackPV"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_tracksInJetE","HelperClasses::JetInfoSwitch::m_tracksInJet"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch9m_triggerE","HelperClasses::JetInfoSwitch::m_trigger"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch7m_truthE","HelperClasses::JetInfoSwitch::m_truth"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch14m_truthDetailsE","HelperClasses::JetInfoSwitch::m_truthDetails"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch12m_vsActualMuE","HelperClasses::JetInfoSwitch::m_vsActualMu"],[77,4,1,"_CPPv4N13HelperClasses13JetInfoSwitch13m_vsLumiBlockE","HelperClasses::JetInfoSwitch::m_vsLumiBlock"],[77,2,1,"_CPPv4N13HelperClasses13JetInfoSwitchD0Ev","HelperClasses::JetInfoSwitch::~JetInfoSwitch"],[18,1,1,"_CPPv4N13HelperClasses13METInfoSwitchE","HelperClasses::METInfoSwitch"],[78,1,1,"_CPPv4N13HelperClasses13METInfoSwitchE","HelperClasses::METInfoSwitch"],[78,2,1,"_CPPv4N13HelperClasses13METInfoSwitch13METInfoSwitchEKNSt6stringE","HelperClasses::METInfoSwitch::METInfoSwitch"],[78,3,1,"_CPPv4N13HelperClasses13METInfoSwitch13METInfoSwitchEKNSt6stringE","HelperClasses::METInfoSwitch::METInfoSwitch::configStr"],[78,2,1,"_CPPv4N13HelperClasses13METInfoSwitch10initializeEv","HelperClasses::METInfoSwitch::initialize"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch9m_metClusE","HelperClasses::METInfoSwitch::m_metClus"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch8m_metTrkE","HelperClasses::METInfoSwitch::m_metTrk"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch9m_noExtraE","HelperClasses::METInfoSwitch::m_noExtra"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch8m_refEleE","HelperClasses::METInfoSwitch::m_refEle"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch10m_refGammaE","HelperClasses::METInfoSwitch::m_refGamma"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch8m_refJetE","HelperClasses::METInfoSwitch::m_refJet"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch11m_refJetTrkE","HelperClasses::METInfoSwitch::m_refJetTrk"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch10m_refMuonsE","HelperClasses::METInfoSwitch::m_refMuons"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch8m_refTauE","HelperClasses::METInfoSwitch::m_refTau"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch9m_sigClusE","HelperClasses::METInfoSwitch::m_sigClus"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch19m_sigResolutionClusE","HelperClasses::METInfoSwitch::m_sigResolutionClus"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch18m_sigResolutionTrkE","HelperClasses::METInfoSwitch::m_sigResolutionTrk"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch8m_sigTrkE","HelperClasses::METInfoSwitch::m_sigTrk"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch10m_softClusE","HelperClasses::METInfoSwitch::m_softClus"],[78,4,1,"_CPPv4N13HelperClasses13METInfoSwitch9m_softTrkE","HelperClasses::METInfoSwitch::m_softTrk"],[18,1,1,"_CPPv4N13HelperClasses14MuonInfoSwitchE","HelperClasses::MuonInfoSwitch"],[79,1,1,"_CPPv4N13HelperClasses14MuonInfoSwitchE","HelperClasses::MuonInfoSwitch"],[79,2,1,"_CPPv4N13HelperClasses14MuonInfoSwitch14MuonInfoSwitchEKNSt6stringE","HelperClasses::MuonInfoSwitch::MuonInfoSwitch"],[79,3,1,"_CPPv4N13HelperClasses14MuonInfoSwitch14MuonInfoSwitchEKNSt6stringE","HelperClasses::MuonInfoSwitch::MuonInfoSwitch::configStr"],[79,2,1,"_CPPv4N13HelperClasses14MuonInfoSwitch10initializeEv","HelperClasses::MuonInfoSwitch::initialize"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch13m_closeByCorrE","HelperClasses::MuonInfoSwitch::m_closeByCorr"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch7m_doLRTE","HelperClasses::MuonInfoSwitch::m_doLRT"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch7m_effSFE","HelperClasses::MuonInfoSwitch::m_effSF"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch12m_energyLossE","HelperClasses::MuonInfoSwitch::m_energyLoss"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch17m_isoEff_sysNamesE","HelperClasses::MuonInfoSwitch::m_isoEff_sysNames"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_isolWPsE","HelperClasses::MuonInfoSwitch::m_isolWPs"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch11m_isolationE","HelperClasses::MuonInfoSwitch::m_isolation"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch21m_isolationKinematicsE","HelperClasses::MuonInfoSwitch::m_isolationKinematics"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch8m_passORE","HelperClasses::MuonInfoSwitch::m_passOR"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_passSelE","HelperClasses::MuonInfoSwitch::m_passSel"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch14m_promptleptonE","HelperClasses::MuonInfoSwitch::m_promptlepton"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_qualityE","HelperClasses::MuonInfoSwitch::m_quality"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch18m_recoEff_sysNamesE","HelperClasses::MuonInfoSwitch::m_recoEff_sysNames"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_recoWPsE","HelperClasses::MuonInfoSwitch::m_recoWPs"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch14m_trackhitcontE","HelperClasses::MuonInfoSwitch::m_trackhitcont"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch13m_trackparamsE","HelperClasses::MuonInfoSwitch::m_trackparams"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch18m_trigEff_sysNamesE","HelperClasses::MuonInfoSwitch::m_trigEff_sysNames"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_trigWPsE","HelperClasses::MuonInfoSwitch::m_trigWPs"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch9m_triggerE","HelperClasses::MuonInfoSwitch::m_trigger"],[79,4,1,"_CPPv4N13HelperClasses14MuonInfoSwitch18m_ttvaEff_sysNamesE","HelperClasses::MuonInfoSwitch::m_ttvaEff_sysNames"],[79,2,1,"_CPPv4N13HelperClasses14MuonInfoSwitchD0Ev","HelperClasses::MuonInfoSwitch::~MuonInfoSwitch"],[18,1,1,"_CPPv4N13HelperClasses16PhotonInfoSwitchE","HelperClasses::PhotonInfoSwitch"],[80,1,1,"_CPPv4N13HelperClasses16PhotonInfoSwitchE","HelperClasses::PhotonInfoSwitch"],[80,2,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch16PhotonInfoSwitchEKNSt6stringE","HelperClasses::PhotonInfoSwitch::PhotonInfoSwitch"],[80,3,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch16PhotonInfoSwitchEKNSt6stringE","HelperClasses::PhotonInfoSwitch::PhotonInfoSwitch::configStr"],[80,2,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch10initializeEv","HelperClasses::PhotonInfoSwitch::initialize"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch5m_PIDE","HelperClasses::PhotonInfoSwitch::m_PID"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch7m_effSFE","HelperClasses::PhotonInfoSwitch::m_effSF"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch10m_isoConesE","HelperClasses::PhotonInfoSwitch::m_isoCones"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch11m_isolationE","HelperClasses::PhotonInfoSwitch::m_isolation"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch8m_purityE","HelperClasses::PhotonInfoSwitch::m_purity"],[80,4,1,"_CPPv4N13HelperClasses16PhotonInfoSwitch9m_triggerE","HelperClasses::PhotonInfoSwitch::m_trigger"],[80,2,1,"_CPPv4N13HelperClasses16PhotonInfoSwitchD0Ev","HelperClasses::PhotonInfoSwitch::~PhotonInfoSwitch"],[18,1,1,"_CPPv4N13HelperClasses13TauInfoSwitchE","HelperClasses::TauInfoSwitch"],[81,1,1,"_CPPv4N13HelperClasses13TauInfoSwitchE","HelperClasses::TauInfoSwitch"],[81,2,1,"_CPPv4N13HelperClasses13TauInfoSwitch13TauInfoSwitchEKNSt6stringE","HelperClasses::TauInfoSwitch::TauInfoSwitch"],[81,3,1,"_CPPv4N13HelperClasses13TauInfoSwitch13TauInfoSwitchEKNSt6stringE","HelperClasses::TauInfoSwitch::TauInfoSwitch::configStr"],[81,2,1,"_CPPv4N13HelperClasses13TauInfoSwitch10initializeEv","HelperClasses::TauInfoSwitch::initialize"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch9m_EleVetoE","HelperClasses::TauInfoSwitch::m_EleVeto"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch7m_JetIDE","HelperClasses::TauInfoSwitch::m_JetID"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch7m_effSFE","HelperClasses::TauInfoSwitch::m_effSF"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch11m_tauEffWPsE","HelperClasses::TauInfoSwitch::m_tauEffWPs"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch10m_trackAllE","HelperClasses::TauInfoSwitch::m_trackAll"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch14m_trackhitcontE","HelperClasses::TauInfoSwitch::m_trackhitcont"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch13m_trackparamsE","HelperClasses::TauInfoSwitch::m_trackparams"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch9m_trigWPsE","HelperClasses::TauInfoSwitch::m_trigWPs"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch9m_triggerE","HelperClasses::TauInfoSwitch::m_trigger"],[81,4,1,"_CPPv4N13HelperClasses13TauInfoSwitch19m_xahTauJetMatchingE","HelperClasses::TauInfoSwitch::m_xahTauJetMatching"],[81,2,1,"_CPPv4N13HelperClasses13TauInfoSwitchD0Ev","HelperClasses::TauInfoSwitch::~TauInfoSwitch"],[18,7,1,"_CPPv4N13HelperClasses8ToolNameE","HelperClasses::ToolName"],[147,7,1,"_CPPv4N13HelperClasses8ToolNameE","HelperClasses::ToolName"],[18,8,1,"_CPPv4N13HelperClasses8ToolName12BJETSELECTORE","HelperClasses::ToolName::BJETSELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName12BJETSELECTORE","HelperClasses::ToolName::BJETSELECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName10CALIBRATORE","HelperClasses::ToolName::CALIBRATOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName10CALIBRATORE","HelperClasses::ToolName::CALIBRATOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName9CORRECTORE","HelperClasses::ToolName::CORRECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName9CORRECTORE","HelperClasses::ToolName::CORRECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName7DEFAULTE","HelperClasses::ToolName::DEFAULT"],[147,8,1,"_CPPv4N13HelperClasses8ToolName7DEFAULTE","HelperClasses::ToolName::DEFAULT"],[18,8,1,"_CPPv4N13HelperClasses8ToolName16ELECTRONSELECTORE","HelperClasses::ToolName::ELECTRONSELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName16ELECTRONSELECTORE","HelperClasses::ToolName::ELECTRONSELECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName11JETSELECTORE","HelperClasses::ToolName::JETSELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName11JETSELECTORE","HelperClasses::ToolName::JETSELECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName12MUONSELECTORE","HelperClasses::ToolName::MUONSELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName12MUONSELECTORE","HelperClasses::ToolName::MUONSELECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName14PHOTONSELECTORE","HelperClasses::ToolName::PHOTONSELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName14PHOTONSELECTORE","HelperClasses::ToolName::PHOTONSELECTOR"],[18,8,1,"_CPPv4N13HelperClasses8ToolName8SELECTORE","HelperClasses::ToolName::SELECTOR"],[147,8,1,"_CPPv4N13HelperClasses8ToolName8SELECTORE","HelperClasses::ToolName::SELECTOR"],[18,1,1,"_CPPv4N13HelperClasses15TrackInfoSwitchE","HelperClasses::TrackInfoSwitch"],[82,1,1,"_CPPv4N13HelperClasses15TrackInfoSwitchE","HelperClasses::TrackInfoSwitch"],[82,2,1,"_CPPv4N13HelperClasses15TrackInfoSwitch15TrackInfoSwitchEKNSt6stringE","HelperClasses::TrackInfoSwitch::TrackInfoSwitch"],[82,3,1,"_CPPv4N13HelperClasses15TrackInfoSwitch15TrackInfoSwitchEKNSt6stringE","HelperClasses::TrackInfoSwitch::TrackInfoSwitch::configStr"],[82,2,1,"_CPPv4N13HelperClasses15TrackInfoSwitch10initializeEv","HelperClasses::TrackInfoSwitch::initialize"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch9m_fitparsE","HelperClasses::TrackInfoSwitch::m_fitpars"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch11m_kinematicE","HelperClasses::TrackInfoSwitch::m_kinematic"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch16m_noMultiplicityE","HelperClasses::TrackInfoSwitch::m_noMultiplicity"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch9m_numbersE","HelperClasses::TrackInfoSwitch::m_numbers"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch9m_useTheSE","HelperClasses::TrackInfoSwitch::m_useTheS"],[82,4,1,"_CPPv4N13HelperClasses15TrackInfoSwitch8m_vertexE","HelperClasses::TrackInfoSwitch::m_vertex"],[18,1,1,"_CPPv4N13HelperClasses17TriggerInfoSwitchE","HelperClasses::TriggerInfoSwitch"],[83,1,1,"_CPPv4N13HelperClasses17TriggerInfoSwitchE","HelperClasses::TriggerInfoSwitch"],[83,2,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch17TriggerInfoSwitchEKNSt6stringE","HelperClasses::TriggerInfoSwitch::TriggerInfoSwitch"],[83,3,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch17TriggerInfoSwitchEKNSt6stringE","HelperClasses::TriggerInfoSwitch::TriggerInfoSwitch::configStr"],[83,2,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch10initializeEv","HelperClasses::TriggerInfoSwitch::initialize"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch7m_basicE","HelperClasses::TriggerInfoSwitch::m_basic"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch10m_menuKeysE","HelperClasses::TriggerInfoSwitch::m_menuKeys"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch14m_passTrigBitsE","HelperClasses::TriggerInfoSwitch::m_passTrigBits"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch14m_passTriggersE","HelperClasses::TriggerInfoSwitch::m_passTriggers"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch11m_prescalesE","HelperClasses::TriggerInfoSwitch::m_prescales"],[83,4,1,"_CPPv4N13HelperClasses17TriggerInfoSwitch15m_prescalesLumiE","HelperClasses::TriggerInfoSwitch::m_prescalesLumi"],[18,1,1,"_CPPv4N13HelperClasses15TruthInfoSwitchE","HelperClasses::TruthInfoSwitch"],[84,1,1,"_CPPv4N13HelperClasses15TruthInfoSwitchE","HelperClasses::TruthInfoSwitch"],[84,2,1,"_CPPv4N13HelperClasses15TruthInfoSwitch15TruthInfoSwitchEKNSt6stringE","HelperClasses::TruthInfoSwitch::TruthInfoSwitch"],[84,3,1,"_CPPv4N13HelperClasses15TruthInfoSwitch15TruthInfoSwitchEKNSt6stringE","HelperClasses::TruthInfoSwitch::TruthInfoSwitch::configStr"],[84,2,1,"_CPPv4N13HelperClasses15TruthInfoSwitch10initializeEv","HelperClasses::TruthInfoSwitch::initialize"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch6m_bVtxE","HelperClasses::TruthInfoSwitch::m_bVtx"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch10m_childrenE","HelperClasses::TruthInfoSwitch::m_children"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch9m_dressedE","HelperClasses::TruthInfoSwitch::m_dressed"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch8m_originE","HelperClasses::TruthInfoSwitch::m_origin"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch9m_parentsE","HelperClasses::TruthInfoSwitch::m_parents"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch14m_particleTypeE","HelperClasses::TruthInfoSwitch::m_particleType"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch11m_pdgIdOnlyE","HelperClasses::TruthInfoSwitch::m_pdgIdOnly"],[84,4,1,"_CPPv4N13HelperClasses15TruthInfoSwitch6m_typeE","HelperClasses::TruthInfoSwitch::m_type"],[19,6,1,"_CPPv415HelperFunctions","HelperFunctions"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType5AmcH7E","HelperFunctions::AmcH7"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType6AmcPy8E","HelperFunctions::AmcPy8"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p1E","HelperFunctions::Herwig7p1"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p2E","HelperFunctions::Herwig7p2"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType7Pythia8E","HelperFunctions::Pythia8"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType11Pythia8_517E","HelperFunctions::Pythia8_517"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Sherpa221E","HelperFunctions::Sherpa221"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2210E","HelperFunctions::Sherpa2210"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2212E","HelperFunctions::Sherpa2212"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2214E","HelperFunctions::Sherpa2214"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType14Sherpa_UnknownE","HelperFunctions::Sherpa_Unknown"],[19,7,1,"_CPPv4N15HelperFunctions10ShowerTypeE","HelperFunctions::ShowerType"],[149,7,1,"_CPPv4N15HelperFunctions10ShowerTypeE","HelperFunctions::ShowerType"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType5AmcH7E","HelperFunctions::ShowerType::AmcH7"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType5AmcH7E","HelperFunctions::ShowerType::AmcH7"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType6AmcPy8E","HelperFunctions::ShowerType::AmcPy8"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType6AmcPy8E","HelperFunctions::ShowerType::AmcPy8"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p1E","HelperFunctions::ShowerType::Herwig7p1"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p1E","HelperFunctions::ShowerType::Herwig7p1"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p2E","HelperFunctions::ShowerType::Herwig7p2"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType9Herwig7p2E","HelperFunctions::ShowerType::Herwig7p2"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType7Pythia8E","HelperFunctions::ShowerType::Pythia8"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType7Pythia8E","HelperFunctions::ShowerType::Pythia8"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType11Pythia8_517E","HelperFunctions::ShowerType::Pythia8_517"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType11Pythia8_517E","HelperFunctions::ShowerType::Pythia8_517"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType9Sherpa221E","HelperFunctions::ShowerType::Sherpa221"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType9Sherpa221E","HelperFunctions::ShowerType::Sherpa221"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2210E","HelperFunctions::ShowerType::Sherpa2210"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2210E","HelperFunctions::ShowerType::Sherpa2210"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2212E","HelperFunctions::ShowerType::Sherpa2212"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2212E","HelperFunctions::ShowerType::Sherpa2212"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2214E","HelperFunctions::ShowerType::Sherpa2214"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType10Sherpa2214E","HelperFunctions::ShowerType::Sherpa2214"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType14Sherpa_UnknownE","HelperFunctions::ShowerType::Sherpa_Unknown"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType14Sherpa_UnknownE","HelperFunctions::ShowerType::Sherpa_Unknown"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType7UnknownE","HelperFunctions::ShowerType::Unknown"],[149,8,1,"_CPPv4N15HelperFunctions10ShowerType7UnknownE","HelperFunctions::ShowerType::Unknown"],[19,2,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString"],[345,2,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString"],[19,3,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString::orig"],[345,3,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString::orig"],[19,3,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString::separator"],[345,3,1,"_CPPv4N15HelperFunctions11SplitStringER7TStringKc","HelperFunctions::SplitString::separator"],[19,8,1,"_CPPv4N15HelperFunctions10ShowerType7UnknownE","HelperFunctions::Unknown"],[19,2,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection"],[335,2,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection"],[19,3,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection::jets"],[335,3,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection::jets"],[19,3,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection::vertices"],[335,3,1,"_CPPv4N15HelperFunctions27applyPrimaryVertexSelectionEPKN4xAOD12JetContainerEPKN4xAOD15VertexContainerE","HelperFunctions::applyPrimaryVertexSelection::vertices"],[19,2,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch"],[327,2,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch"],[19,5,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::T_BR"],[327,5,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::T_BR"],[19,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::branch"],[327,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::branch"],[19,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::name"],[327,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::tree"],[327,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::tree"],[19,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::variable"],[327,3,1,"_CPPv4I0EN15HelperFunctions13connectBranchEvNSt6stringEP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","HelperFunctions::connectBranch::variable"],[19,2,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices"],[343,2,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices"],[19,3,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices::Ntracks"],[343,3,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices::Ntracks"],[19,3,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices::vertexContainer"],[343,3,1,"_CPPv4N15HelperFunctions20countPrimaryVerticesEPKN4xAOD15VertexContainerEi","HelperFunctions::countPrimaryVertices::vertexContainer"],[19,2,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi"],[320,2,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi"],[19,3,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi::phi1"],[320,3,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi::phi1"],[19,3,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi::phi2"],[320,3,1,"_CPPv4N15HelperFunctions4dPhiEff","HelperFunctions::dPhi::phi2"],[19,2,1,"_CPPv4N15HelperFunctions19found_non_dummy_sysEPNSt6vectorINSt6stringEEE","HelperFunctions::found_non_dummy_sys"],[330,2,1,"_CPPv4N15HelperFunctions19found_non_dummy_sysEPNSt6vectorINSt6stringEEE","HelperFunctions::found_non_dummy_sys"],[19,3,1,"_CPPv4N15HelperFunctions19found_non_dummy_sysEPNSt6vectorINSt6stringEEE","HelperFunctions::found_non_dummy_sys::sys_list"],[330,3,1,"_CPPv4N15HelperFunctions19found_non_dummy_sysEPNSt6vectorINSt6stringEEE","HelperFunctions::found_non_dummy_sys::sys_list"],[19,2,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink"],[331,2,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink"],[19,5,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::T"],[331,5,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::name"],[331,3,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::particle"],[331,3,1,"_CPPv4I0EN15HelperFunctions7getLinkEPK1TPKN4xAOD9IParticleENSt6stringE","HelperFunctions::getLink::particle"],[19,2,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics"],[333,2,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics"],[19,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::inSysts"],[333,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::inSysts"],[19,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::msg"],[333,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::msg"],[19,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::systNames"],[333,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::systNames"],[19,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::systVal"],[333,3,1,"_CPPv4N15HelperFunctions20getListofSystematicsEKN2CP13SystematicSetENSt6stringEfR9MsgStream","HelperFunctions::getListofSystematics::systVal"],[19,2,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType"],[338,2,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType"],[19,3,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType::m_taggerName"],[338,3,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType::m_taggerName"],[19,3,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType::sample_name"],[338,3,1,"_CPPv4N15HelperFunctions15getMCShowerTypeERKNSt6stringERKNSt6stringE","HelperFunctions::getMCShowerType::sample_name"],[19,2,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertex"],[19,2,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex"],[316,2,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertex"],[349,2,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex"],[19,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex::msg"],[349,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex::msg"],[19,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertex::vertexContainer"],[19,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex::vertexContainer"],[316,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertex::vertexContainer"],[349,3,1,"_CPPv4N15HelperFunctions16getPrimaryVertexEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertex::vertexContainer"],[19,2,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertexLocation"],[19,2,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation"],[318,2,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation"],[353,2,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertexLocation"],[19,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation::msg"],[318,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation::msg"],[19,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertexLocation::vertexContainer"],[19,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation::vertexContainer"],[318,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerER9MsgStream","HelperFunctions::getPrimaryVertexLocation::vertexContainer"],[353,3,1,"_CPPv4N15HelperFunctions24getPrimaryVertexLocationEPKN4xAOD15VertexContainerE","HelperFunctions::getPrimaryVertexLocation::vertexContainer"],[19,2,1,"_CPPv4N15HelperFunctions17getPrimaryVertexZEPKN4xAOD6VertexE","HelperFunctions::getPrimaryVertexZ"],[315,2,1,"_CPPv4N15HelperFunctions17getPrimaryVertexZEPKN4xAOD6VertexE","HelperFunctions::getPrimaryVertexZ"],[19,3,1,"_CPPv4N15HelperFunctions17getPrimaryVertexZEPKN4xAOD6VertexE","HelperFunctions::getPrimaryVertexZ::pvx"],[315,3,1,"_CPPv4N15HelperFunctions17getPrimaryVertexZEPKN4xAOD6VertexE","HelperFunctions::getPrimaryVertexZ::pvx"],[19,2,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact"],[352,2,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact"],[19,3,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact::flag"],[352,3,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact::flag"],[19,3,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact::input"],[352,3,1,"_CPPv4N15HelperFunctions9has_exactEKNSt6stringEKNSt6stringE","HelperFunctions::has_exact::input"],[19,2,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable"],[19,2,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable"],[319,2,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable"],[324,2,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable"],[19,5,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::T"],[19,5,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::T"],[319,5,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::T"],[324,5,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::event"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::event"],[319,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::event"],[324,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::event"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::msg"],[324,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::msg"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::name"],[319,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::name"],[324,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::store"],[19,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::store"],[319,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::isAvailable::store"],[324,3,1,"_CPPv4I0EN15HelperFunctions11isAvailableEbNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::isAvailable::store"],[19,2,1,"_CPPv4N15HelperFunctions19isAvailableMetaDataEP5TTree","HelperFunctions::isAvailableMetaData"],[337,2,1,"_CPPv4N15HelperFunctions19isAvailableMetaDataEP5TTree","HelperFunctions::isAvailableMetaData"],[19,3,1,"_CPPv4N15HelperFunctions19isAvailableMetaDataEP5TTree","HelperFunctions::isAvailableMetaData::metaData"],[337,3,1,"_CPPv4N15HelperFunctions19isAvailableMetaDataEP5TTree","HelperFunctions::isAvailableMetaData::metaData"],[19,2,1,"_CPPv4N15HelperFunctions17isFilePrimaryxAODEP5TFile","HelperFunctions::isFilePrimaryxAOD"],[347,2,1,"_CPPv4N15HelperFunctions17isFilePrimaryxAODEP5TFile","HelperFunctions::isFilePrimaryxAOD"],[19,3,1,"_CPPv4N15HelperFunctions17isFilePrimaryxAODEP5TFile","HelperFunctions::isFilePrimaryxAOD::inputFile"],[347,3,1,"_CPPv4N15HelperFunctions17isFilePrimaryxAODEP5TFile","HelperFunctions::isFilePrimaryxAOD::inputFile"],[19,2,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering"],[326,2,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering"],[19,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::fcut"],[326,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::fcut"],[19,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::jets"],[326,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::jets"],[19,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::radius"],[326,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::radius"],[19,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::rc_alg"],[326,3,1,"_CPPv4N15HelperFunctions15jetReclusteringEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetReclustering::rc_alg"],[19,2,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming"],[19,2,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming"],[334,2,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming"],[350,2,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::fcut"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::fcut"],[334,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::fcut"],[350,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::fcut"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::jet"],[350,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::jet"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::jets"],[334,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::jets"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::radius"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::radius"],[334,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::radius"],[350,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::radius"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::s_alg"],[19,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::s_alg"],[334,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD12JetContainerEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::s_alg"],[350,3,1,"_CPPv4N15HelperFunctions11jetTrimmingEPKN4xAOD3JetEddN7fastjet12JetAlgorithmE","HelperFunctions::jetTrimming::s_alg"],[19,2,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy"],[314,2,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy"],[19,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T1"],[314,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T1"],[19,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T2"],[314,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T2"],[19,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T3"],[314,5,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::T3"],[19,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::cont"],[314,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::cont"],[19,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::containerName"],[314,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::containerName"],[19,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::m_store"],[314,3,1,"_CPPv4I000EN15HelperFunctions12makeDeepCopyE10StatusCodePN4xAOD6TStoreENSt6stringEPK2T1","HelperFunctions::makeDeepCopy::m_store"],[19,2,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont"],[19,2,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont"],[332,2,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont"],[339,2,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont"],[19,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T1"],[19,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T1"],[332,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T1"],[339,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T1"],[19,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T2"],[19,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T2"],[332,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T2"],[339,5,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::T2"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::flagSelect"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::flagSelect"],[332,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::flagSelect"],[339,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::flagSelect"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::intCont"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::intCont"],[332,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::intCont"],[339,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::intCont"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::msg"],[339,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::msg"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::outCont"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::outCont"],[332,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::outCont"],[339,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::outCont"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::tool_name"],[19,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::tool_name"],[332,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2RKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::tool_name"],[339,3,1,"_CPPv4I00EN15HelperFunctions14makeSubsetContE10StatusCodeRP2T1RP2T2R9MsgStreamRKNSt6stringEN13HelperClasses8ToolNameE","HelperFunctions::makeSubsetCont::tool_name"],[19,2,1,"_CPPv4N15HelperFunctions3msgEN3MSG5LevelE","HelperFunctions::msg"],[340,2,1,"_CPPv4N15HelperFunctions3msgEN3MSG5LevelE","HelperFunctions::msg"],[19,3,1,"_CPPv4N15HelperFunctions3msgEN3MSG5LevelE","HelperFunctions::msg::lvl"],[340,3,1,"_CPPv4N15HelperFunctions3msgEN3MSG5LevelE","HelperFunctions::msg::lvl"],[19,2,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection"],[322,2,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection"],[19,3,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection::Ntracks"],[322,3,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection::Ntracks"],[19,3,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection::vertexContainer"],[322,3,1,"_CPPv4N15HelperFunctions26passPrimaryVertexSelectionEPKN4xAOD15VertexContainerEi","HelperFunctions::passPrimaryVertexSelection::vertexContainer"],[19,1,1,"_CPPv4N15HelperFunctions7pt_sortE","HelperFunctions::pt_sort"],[550,1,1,"_CPPv4N15HelperFunctions7pt_sortE","HelperFunctions::pt_sort"],[19,2,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()"],[19,2,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()"],[19,2,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()"],[19,2,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()"],[550,2,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()"],[550,2,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()"],[550,2,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()"],[550,2,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()::lhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::lhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()::lhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::lhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()::lhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::lhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()::lhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::lhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()::rhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::rhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()::rhs"],[19,3,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::rhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPK14TLorentzVectorPK14TLorentzVector","HelperFunctions::pt_sort::operator()::rhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::rhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclERK14TLorentzVectorRK14TLorentzVector","HelperFunctions::pt_sort::operator()::rhs"],[550,3,1,"_CPPv4N15HelperFunctions7pt_sortclERKN4xAOD9IParticleERKN4xAOD9IParticleE","HelperFunctions::pt_sort::operator()::rhs"],[19,2,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput"],[351,2,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput"],[19,5,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::T1"],[351,5,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::T1"],[19,5,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::T2"],[351,5,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::T2"],[19,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::containerName"],[351,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::containerName"],[19,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::m_event"],[351,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::m_event"],[19,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::m_store"],[351,3,1,"_CPPv4I00EN15HelperFunctions12recordOutputE10StatusCodePN4xAOD6TEventEPN4xAOD6TStoreENSt6stringE","HelperFunctions::recordOutput::m_store"],[19,2,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates"],[344,2,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates"],[19,5,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates::T"],[344,5,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates::vec"],[344,3,1,"_CPPv4I0EN15HelperFunctions17remove_duplicatesEvRNSt6vectorI1TEE","HelperFunctions::remove_duplicates::vec"],[19,2,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString"],[336,2,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString"],[19,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::replace"],[336,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::replace"],[19,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::search"],[336,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::search"],[19,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::subjet"],[336,3,1,"_CPPv4N15HelperFunctions13replaceStringENSt6stringERKNSt6stringERKNSt6stringE","HelperFunctions::replaceString::subjet"],[19,2,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve"],[19,2,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve"],[329,2,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve"],[348,2,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve"],[19,5,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::T"],[19,5,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::T"],[329,5,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::T"],[348,5,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::cont"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::cont"],[329,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::cont"],[348,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::cont"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::event"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::event"],[329,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::event"],[348,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::event"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::msg"],[348,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::msg"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::name"],[329,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::name"],[348,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::name"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::store"],[19,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::store"],[329,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreE","HelperFunctions::retrieve::store"],[348,3,1,"_CPPv4I0EN15HelperFunctions8retrieveE10StatusCodeRP1TNSt6stringEPN4xAOD6TEventEPN4xAOD6TStoreER9MsgStream","HelperFunctions::retrieve::store"],[19,2,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt"],[19,2,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt"],[323,2,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt"],[342,2,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt"],[19,5,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt::T"],[19,5,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt::T"],[323,5,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt::T"],[342,5,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt::inCont"],[19,3,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt::inCont"],[323,3,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptEK1TPK1T","HelperFunctions::sort_container_pt::inCont"],[342,3,1,"_CPPv4I0EN15HelperFunctions17sort_container_ptE1TP1T","HelperFunctions::sort_container_pt::inCont"],[19,2,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt"],[325,2,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt"],[19,3,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt::partA"],[325,3,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt::partA"],[19,3,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt::partB"],[325,3,1,"_CPPv4N15HelperFunctions7sort_ptEPKN4xAOD9IParticleEPKN4xAOD9IParticleE","HelperFunctions::sort_pt::partB"],[19,2,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos"],[346,2,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos"],[19,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::N"],[346,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::N"],[19,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::haystack"],[346,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::haystack"],[19,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::needle"],[346,3,1,"_CPPv4N15HelperFunctions10string_posERKNSt6stringERKNSt6stringEj","HelperFunctions::string_pos::needle"],[19,2,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name"],[328,2,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name"],[19,5,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name::T"],[328,5,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name::T"],[19,3,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name::useXAOD"],[328,3,1,"_CPPv4I0EN15HelperFunctions9type_nameENSt6stringEb","HelperFunctions::type_name::useXAOD"],[19,2,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist"],[341,2,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist"],[19,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::file"],[341,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::file"],[19,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::histName"],[341,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::histName"],[19,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::systs"],[341,3,1,"_CPPv4N15HelperFunctions24writeSystematicsListHistERKNSt6vectorIN2CP13SystematicSetEEENSt6stringEP5TFile","HelperFunctions::writeSystematicsListHist::systs"],[20,1,1,"_CPPv416HistogramManager","HistogramManager"],[21,1,1,"_CPPv416HistogramManager","HistogramManager"],[85,1,1,"_CPPv416HistogramManager","HistogramManager"],[20,6,1,"_CPPv4N16HistogramManager9HistMap_tE","HistogramManager::HistMap_t"],[85,6,1,"_CPPv4N16HistogramManager9HistMap_tE","HistogramManager::HistMap_t"],[20,2,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager"],[85,2,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager"],[20,3,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager::detailStr"],[85,3,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager::detailStr"],[20,3,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager::name"],[85,3,1,"_CPPv4N16HistogramManager16HistogramManagerENSt6stringENSt6stringE","HistogramManager::HistogramManager::name"],[20,2,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringE","HistogramManager::SetLabel"],[20,2,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringE","HistogramManager::SetLabel"],[20,2,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringENSt6stringE","HistogramManager::SetLabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringE","HistogramManager::SetLabel::hist"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringE","HistogramManager::SetLabel::hist"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringENSt6stringE","HistogramManager::SetLabel::hist"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringE","HistogramManager::SetLabel::xlabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringE","HistogramManager::SetLabel::xlabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringENSt6stringE","HistogramManager::SetLabel::xlabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringE","HistogramManager::SetLabel::ylabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringENSt6stringE","HistogramManager::SetLabel::ylabel"],[20,3,1,"_CPPv4N16HistogramManager8SetLabelEP3TH1NSt6stringENSt6stringENSt6stringE","HistogramManager::SetLabel::zlabel"],[20,2,1,"_CPPv4N16HistogramManager5Sumw2EP3TH1b","HistogramManager::Sumw2"],[20,3,1,"_CPPv4N16HistogramManager5Sumw2EP3TH1b","HistogramManager::Sumw2::flag"],[20,3,1,"_CPPv4N16HistogramManager5Sumw2EP3TH1b","HistogramManager::Sumw2::hist"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book"],[20,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book"],[85,2,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::name"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::name"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::option"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::option"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::title"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::title"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::xbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::xbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::xbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEidd","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::xlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::xlow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xyabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xyabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xyabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::xyabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::xyabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::xyabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::ybins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ybins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ybinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::yhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::yhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","HistogramManager::book::ylabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ylabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEiPK8Double_tdd","HistogramManager::book::ylow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringEidddd","HistogramManager::book::ylow"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zbins"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zbins"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zbinsArr"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zbinsArr"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zhigh"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zhigh"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","HistogramManager::book::zlabel"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zlabel"],[20,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zlow"],[85,3,1,"_CPPv4N16HistogramManager4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","HistogramManager::book::zlow"],[20,2,1,"_CPPv4N16HistogramManager7executeEv","HistogramManager::execute"],[85,2,1,"_CPPv4N16HistogramManager7executeEv","HistogramManager::execute"],[20,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist"],[20,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist"],[20,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist"],[20,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist"],[85,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist"],[85,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist"],[85,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist"],[85,2,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist::histName"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::histName"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::histName"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::histName"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist::histName"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::histName"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::histName"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::histName"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist::value"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::value"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEd","HistogramManager::fillHist::value"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::value"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::valueX"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueX"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::valueX"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueX"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::valueY"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueY"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::valueY"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueY"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueZ"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::valueZ"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::weight"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::weight"],[20,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::weight"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdd","HistogramManager::fillHist::weight"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEddd","HistogramManager::fillHist::weight"],[85,3,1,"_CPPv4N16HistogramManager8fillHistERKNSt6stringEdddd","HistogramManager::fillHist::weight"],[20,2,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile"],[85,2,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile"],[20,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::histName"],[85,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::histName"],[20,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::valueX"],[85,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::valueX"],[20,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::valueY"],[85,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::valueY"],[20,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::weight"],[85,3,1,"_CPPv4N16HistogramManager11fillProfileERKNSt6stringEddd","HistogramManager::fillProfile::weight"],[20,2,1,"_CPPv4N16HistogramManager8finalizeEv","HistogramManager::finalize"],[85,2,1,"_CPPv4N16HistogramManager8finalizeEv","HistogramManager::finalize"],[20,2,1,"_CPPv4N16HistogramManager8findHistERKNSt6stringE","HistogramManager::findHist"],[85,2,1,"_CPPv4N16HistogramManager8findHistERKNSt6stringE","HistogramManager::findHist"],[20,3,1,"_CPPv4N16HistogramManager8findHistERKNSt6stringE","HistogramManager::findHist::histName"],[85,3,1,"_CPPv4N16HistogramManager8findHistERKNSt6stringE","HistogramManager::findHist::histName"],[20,2,1,"_CPPv4N16HistogramManager10initializeEv","HistogramManager::initialize"],[85,2,1,"_CPPv4N16HistogramManager10initializeEv","HistogramManager::initialize"],[20,4,1,"_CPPv4N16HistogramManager10m_allHistsE","HistogramManager::m_allHists"],[85,4,1,"_CPPv4N16HistogramManager10m_allHistsE","HistogramManager::m_allHists"],[20,4,1,"_CPPv4N16HistogramManager11m_detailStrE","HistogramManager::m_detailStr"],[85,4,1,"_CPPv4N16HistogramManager11m_detailStrE","HistogramManager::m_detailStr"],[20,4,1,"_CPPv4N16HistogramManager9m_histMapE","HistogramManager::m_histMap"],[85,4,1,"_CPPv4N16HistogramManager9m_histMapE","HistogramManager::m_histMap"],[20,4,1,"_CPPv4N16HistogramManager5m_msgE","HistogramManager::m_msg"],[85,4,1,"_CPPv4N16HistogramManager5m_msgE","HistogramManager::m_msg"],[20,4,1,"_CPPv4N16HistogramManager6m_nameE","HistogramManager::m_name"],[21,4,1,"_CPPv4N16HistogramManager6m_nameE","HistogramManager::m_name"],[85,4,1,"_CPPv4N16HistogramManager6m_nameE","HistogramManager::m_name"],[20,2,1,"_CPPv4NK16HistogramManager3msgEi","HistogramManager::msg"],[20,2,1,"_CPPv4NK16HistogramManager3msgEv","HistogramManager::msg"],[85,2,1,"_CPPv4NK16HistogramManager3msgEi","HistogramManager::msg"],[85,2,1,"_CPPv4NK16HistogramManager3msgEv","HistogramManager::msg"],[20,3,1,"_CPPv4NK16HistogramManager3msgEi","HistogramManager::msg::level"],[85,3,1,"_CPPv4NK16HistogramManager3msgEi","HistogramManager::msg::level"],[20,2,1,"_CPPv4N16HistogramManager6recordEP3TH1","HistogramManager::record"],[20,2,1,"_CPPv4N16HistogramManager6recordEPN2EL7IWorkerE","HistogramManager::record"],[85,2,1,"_CPPv4N16HistogramManager6recordEPN2EL7IWorkerE","HistogramManager::record"],[20,3,1,"_CPPv4N16HistogramManager6recordEP3TH1","HistogramManager::record::hist"],[20,3,1,"_CPPv4N16HistogramManager6recordEPN2EL7IWorkerE","HistogramManager::record::wk"],[85,3,1,"_CPPv4N16HistogramManager6recordEPN2EL7IWorkerE","HistogramManager::record::wk"],[20,2,1,"_CPPv4N16HistogramManagerD0Ev","HistogramManager::~HistogramManager"],[21,2,1,"_CPPv4N16HistogramManagerD0Ev","HistogramManager::~HistogramManager"],[85,2,1,"_CPPv4N16HistogramManagerD0Ev","HistogramManager::~HistogramManager"],[86,1,1,"_CPPv418IParticleHistsAlgo","IParticleHistsAlgo"],[86,2,1,"_CPPv4I0EN18IParticleHistsAlgo8AddHistsEN2EL10StatusCodeENSt6stringE","IParticleHistsAlgo::AddHists"],[86,2,1,"_CPPv4N18IParticleHistsAlgo8AddHistsENSt6stringE","IParticleHistsAlgo::AddHists"],[86,5,1,"_CPPv4I0EN18IParticleHistsAlgo8AddHistsEN2EL10StatusCodeENSt6stringE","IParticleHistsAlgo::AddHists::HIST_T"],[86,3,1,"_CPPv4I0EN18IParticleHistsAlgo8AddHistsEN2EL10StatusCodeENSt6stringE","IParticleHistsAlgo::AddHists::name"],[86,3,1,"_CPPv4N18IParticleHistsAlgo8AddHistsENSt6stringE","IParticleHistsAlgo::AddHists::name"],[86,2,1,"_CPPv4N18IParticleHistsAlgo18IParticleHistsAlgoENSt6stringE","IParticleHistsAlgo::IParticleHistsAlgo"],[86,3,1,"_CPPv4N18IParticleHistsAlgo18IParticleHistsAlgoENSt6stringE","IParticleHistsAlgo::IParticleHistsAlgo::className"],[86,2,1,"_CPPv4N18IParticleHistsAlgo11changeInputEb","IParticleHistsAlgo::changeInput"],[86,3,1,"_CPPv4N18IParticleHistsAlgo11changeInputEb","IParticleHistsAlgo::changeInput::firstFile"],[86,2,1,"_CPPv4I00EN18IParticleHistsAlgo7executeEN2EL10StatusCodeEv","IParticleHistsAlgo::execute"],[86,2,1,"_CPPv4N18IParticleHistsAlgo7executeEv","IParticleHistsAlgo::execute"],[86,5,1,"_CPPv4I00EN18IParticleHistsAlgo7executeEN2EL10StatusCodeEv","IParticleHistsAlgo::execute::CONT_T"],[86,5,1,"_CPPv4I00EN18IParticleHistsAlgo7executeEN2EL10StatusCodeEv","IParticleHistsAlgo::execute::HIST_T"],[86,2,1,"_CPPv4N18IParticleHistsAlgo11fileExecuteEv","IParticleHistsAlgo::fileExecute"],[86,2,1,"_CPPv4N18IParticleHistsAlgo8finalizeEv","IParticleHistsAlgo::finalize"],[86,2,1,"_CPPv4N18IParticleHistsAlgo12histFinalizeEv","IParticleHistsAlgo::histFinalize"],[86,2,1,"_CPPv4N18IParticleHistsAlgo14histInitializeEv","IParticleHistsAlgo::histInitialize"],[86,2,1,"_CPPv4N18IParticleHistsAlgo10initializeEv","IParticleHistsAlgo::initialize"],[86,4,1,"_CPPv4N18IParticleHistsAlgo11m_detailStrE","IParticleHistsAlgo::m_detailStr"],[86,4,1,"_CPPv4N18IParticleHistsAlgo12m_histPrefixE","IParticleHistsAlgo::m_histPrefix"],[86,4,1,"_CPPv4N18IParticleHistsAlgo11m_histTitleE","IParticleHistsAlgo::m_histTitle"],[86,4,1,"_CPPv4N18IParticleHistsAlgo17m_inContainerNameE","IParticleHistsAlgo::m_inContainerName"],[86,4,1,"_CPPv4N18IParticleHistsAlgo11m_inputAlgoE","IParticleHistsAlgo::m_inputAlgo"],[86,2,1,"_CPPv4N18IParticleHistsAlgo11postExecuteEv","IParticleHistsAlgo::postExecute"],[86,2,1,"_CPPv4N18IParticleHistsAlgo8setupJobERN2EL3JobE","IParticleHistsAlgo::setupJob"],[86,3,1,"_CPPv4N18IParticleHistsAlgo8setupJobERN2EL3JobE","IParticleHistsAlgo::setupJob::job"],[87,1,1,"_CPPv414IsoCloseByCorr","IsoCloseByCorr"],[87,2,1,"_CPPv4N14IsoCloseByCorr14IsoCloseByCorrEv","IsoCloseByCorr::IsoCloseByCorr"],[87,2,1,"_CPPv4N14IsoCloseByCorr11changeInputEb","IsoCloseByCorr::changeInput"],[87,3,1,"_CPPv4N14IsoCloseByCorr11changeInputEb","IsoCloseByCorr::changeInput::firstFile"],[87,4,1,"_CPPv4N14IsoCloseByCorr26dummyVaraibleToKeepExampleE","IsoCloseByCorr::dummyVaraibleToKeepExample"],[87,2,1,"_CPPv4N14IsoCloseByCorr7executeEv","IsoCloseByCorr::execute"],[87,2,1,"_CPPv4N14IsoCloseByCorr11fileExecuteEv","IsoCloseByCorr::fileExecute"],[87,2,1,"_CPPv4N14IsoCloseByCorr8finalizeEv","IsoCloseByCorr::finalize"],[87,2,1,"_CPPv4N14IsoCloseByCorr12histFinalizeEv","IsoCloseByCorr::histFinalize"],[87,2,1,"_CPPv4N14IsoCloseByCorr14histInitializeEv","IsoCloseByCorr::histInitialize"],[87,2,1,"_CPPv4N14IsoCloseByCorr10initializeEv","IsoCloseByCorr::initialize"],[87,4,1,"_CPPv4N14IsoCloseByCorr7m_decorE","IsoCloseByCorr::m_decor"],[87,4,1,"_CPPv4N14IsoCloseByCorr25m_decorateSelectedObjectsE","IsoCloseByCorr::m_decorateSelectedObjects"],[87,4,1,"_CPPv4N14IsoCloseByCorr11m_doPhotonsE","IsoCloseByCorr::m_doPhotons"],[87,4,1,"_CPPv4N14IsoCloseByCorr11m_el_iso_WPE","IsoCloseByCorr::m_el_iso_WP"],[87,4,1,"_CPPv4N14IsoCloseByCorr27m_inContainerName_ElectronsE","IsoCloseByCorr::m_inContainerName_Electrons"],[87,4,1,"_CPPv4N14IsoCloseByCorr23m_inContainerName_MuonsE","IsoCloseByCorr::m_inContainerName_Muons"],[87,4,1,"_CPPv4N14IsoCloseByCorr25m_inContainerName_PhotonsE","IsoCloseByCorr::m_inContainerName_Photons"],[87,4,1,"_CPPv4N14IsoCloseByCorr20m_inputAlgoElectronsE","IsoCloseByCorr::m_inputAlgoElectrons"],[87,4,1,"_CPPv4N14IsoCloseByCorr11m_mu_iso_WPE","IsoCloseByCorr::m_mu_iso_WP"],[87,4,1,"_CPPv4N14IsoCloseByCorr24m_outContainerName_MuonsE","IsoCloseByCorr::m_outContainerName_Muons"],[87,4,1,"_CPPv4N14IsoCloseByCorr26m_outContainerName_PhotonsE","IsoCloseByCorr::m_outContainerName_Photons"],[87,2,1,"_CPPv4N14IsoCloseByCorr11postExecuteEv","IsoCloseByCorr::postExecute"],[87,2,1,"_CPPv4N14IsoCloseByCorr8setupJobERN2EL3JobE","IsoCloseByCorr::setupJob"],[87,3,1,"_CPPv4N14IsoCloseByCorr8setupJobERN2EL3JobE","IsoCloseByCorr::setupJob::job"],[25,1,1,"_CPPv413JetCalibrator","JetCalibrator"],[88,1,1,"_CPPv413JetCalibrator","JetCalibrator"],[25,2,1,"_CPPv4N13JetCalibrator13JetCalibratorEv","JetCalibrator::JetCalibrator"],[88,2,1,"_CPPv4N13JetCalibrator13JetCalibratorEv","JetCalibrator::JetCalibrator"],[25,2,1,"_CPPv4N13JetCalibrator11changeInputEb","JetCalibrator::changeInput"],[88,2,1,"_CPPv4N13JetCalibrator11changeInputEb","JetCalibrator::changeInput"],[25,3,1,"_CPPv4N13JetCalibrator11changeInputEb","JetCalibrator::changeInput::firstFile"],[88,3,1,"_CPPv4N13JetCalibrator11changeInputEb","JetCalibrator::changeInput::firstFile"],[25,2,1,"_CPPv4N13JetCalibrator7executeEv","JetCalibrator::execute"],[88,2,1,"_CPPv4N13JetCalibrator7executeEv","JetCalibrator::execute"],[25,2,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic"],[25,3,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic::calibJetsSC"],[25,3,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic::inJets"],[25,3,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic::isPDCopy"],[25,3,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic::thisSyst"],[25,3,1,"_CPPv4N13JetCalibrator17executeSystematicERKN2CP13SystematicSetEPKN4xAOD12JetContainerERNSt4pairIPN4xAOD12JetContainerEPN4xAOD19ShallowAuxContainerEEERNSt6vectorINSt6stringEEEb","JetCalibrator::executeSystematic::vecOutContainerNames"],[25,2,1,"_CPPv4N13JetCalibrator11fileExecuteEv","JetCalibrator::fileExecute"],[88,2,1,"_CPPv4N13JetCalibrator11fileExecuteEv","JetCalibrator::fileExecute"],[25,2,1,"_CPPv4N13JetCalibrator8finalizeEv","JetCalibrator::finalize"],[88,2,1,"_CPPv4N13JetCalibrator8finalizeEv","JetCalibrator::finalize"],[25,2,1,"_CPPv4N13JetCalibrator12histFinalizeEv","JetCalibrator::histFinalize"],[88,2,1,"_CPPv4N13JetCalibrator12histFinalizeEv","JetCalibrator::histFinalize"],[25,2,1,"_CPPv4N13JetCalibrator14histInitializeEv","JetCalibrator::histInitialize"],[88,2,1,"_CPPv4N13JetCalibrator14histInitializeEv","JetCalibrator::histInitialize"],[25,2,1,"_CPPv4N13JetCalibrator10initializeEv","JetCalibrator::initialize"],[88,2,1,"_CPPv4N13JetCalibrator10initializeEv","JetCalibrator::initialize"],[25,2,1,"_CPPv4N13JetCalibrator27initializeUncertaintiesToolERN3asg13AnaToolHandleI23ICPJetUncertaintiesToolEEb","JetCalibrator::initializeUncertaintiesTool"],[25,3,1,"_CPPv4N13JetCalibrator27initializeUncertaintiesToolERN3asg13AnaToolHandleI23ICPJetUncertaintiesToolEEb","JetCalibrator::initializeUncertaintiesTool::isData"],[25,3,1,"_CPPv4N13JetCalibrator27initializeUncertaintiesToolERN3asg13AnaToolHandleI23ICPJetUncertaintiesToolEEb","JetCalibrator::initializeUncertaintiesTool::uncToolHandle"],[25,4,1,"_CPPv4N13JetCalibrator28m_AllJetCleaningTool_handlesE","JetCalibrator::m_AllJetCleaningTool_handles"],[25,4,1,"_CPPv4N13JetCalibrator20m_EvtInfoHLTNPVDecorE","JetCalibrator::m_EvtInfoHLTNPVDecor"],[88,4,1,"_CPPv4N13JetCalibrator20m_EvtInfoHLTNPVDecorE","JetCalibrator::m_EvtInfoHLTNPVDecor"],[25,4,1,"_CPPv4N13JetCalibrator15m_HLTAvgMuDecorE","JetCalibrator::m_HLTAvgMuDecor"],[88,4,1,"_CPPv4N13JetCalibrator15m_HLTAvgMuDecorE","JetCalibrator::m_HLTAvgMuDecor"],[25,4,1,"_CPPv4N13JetCalibrator24m_HLTVertexContainerNameE","JetCalibrator::m_HLTVertexContainerName"],[88,4,1,"_CPPv4N13JetCalibrator24m_HLTVertexContainerNameE","JetCalibrator::m_HLTVertexContainerName"],[25,4,1,"_CPPv4N13JetCalibrator27m_JetCalibrationTool_handleE","JetCalibrator::m_JetCalibrationTool_handle"],[25,4,1,"_CPPv4N13JetCalibrator24m_JetCleaningTool_handleE","JetCalibrator::m_JetCleaningTool_handle"],[25,4,1,"_CPPv4N13JetCalibrator29m_JetUncertaintiesTool_handleE","JetCalibrator::m_JetUncertaintiesTool_handle"],[25,4,1,"_CPPv4N13JetCalibrator21m_addGhostMuonsToJetsE","JetCalibrator::m_addGhostMuonsToJets"],[88,4,1,"_CPPv4N13JetCalibrator21m_addGhostMuonsToJetsE","JetCalibrator::m_addGhostMuonsToJets"],[25,4,1,"_CPPv4N13JetCalibrator19m_applyFatJetPreSelE","JetCalibrator::m_applyFatJetPreSel"],[88,4,1,"_CPPv4N13JetCalibrator19m_applyFatJetPreSelE","JetCalibrator::m_applyFatJetPreSel"],[25,4,1,"_CPPv4N13JetCalibrator13m_calibConfigE","JetCalibrator::m_calibConfig"],[25,4,1,"_CPPv4N13JetCalibrator17m_calibConfigAFIIE","JetCalibrator::m_calibConfigAFII"],[88,4,1,"_CPPv4N13JetCalibrator17m_calibConfigAFIIE","JetCalibrator::m_calibConfigAFII"],[25,4,1,"_CPPv4N13JetCalibrator17m_calibConfigDataE","JetCalibrator::m_calibConfigData"],[88,4,1,"_CPPv4N13JetCalibrator17m_calibConfigDataE","JetCalibrator::m_calibConfigData"],[25,4,1,"_CPPv4N13JetCalibrator16m_calibConfigDirE","JetCalibrator::m_calibConfigDir"],[88,4,1,"_CPPv4N13JetCalibrator16m_calibConfigDirE","JetCalibrator::m_calibConfigDir"],[25,4,1,"_CPPv4N13JetCalibrator20m_calibConfigFullSimE","JetCalibrator::m_calibConfigFullSim"],[88,4,1,"_CPPv4N13JetCalibrator20m_calibConfigFullSimE","JetCalibrator::m_calibConfigFullSim"],[25,4,1,"_CPPv4N13JetCalibrator15m_calibGSCDepthE","JetCalibrator::m_calibGSCDepth"],[88,4,1,"_CPPv4N13JetCalibrator15m_calibGSCDepthE","JetCalibrator::m_calibGSCDepth"],[25,4,1,"_CPPv4N13JetCalibrator15m_calibSequenceE","JetCalibrator::m_calibSequence"],[88,4,1,"_CPPv4N13JetCalibrator15m_calibSequenceE","JetCalibrator::m_calibSequence"],[25,4,1,"_CPPv4N13JetCalibrator13m_cleanParentE","JetCalibrator::m_cleanParent"],[88,4,1,"_CPPv4N13JetCalibrator13m_cleanParentE","JetCalibrator::m_cleanParent"],[25,4,1,"_CPPv4N13JetCalibrator15m_decisionNamesE","JetCalibrator::m_decisionNames"],[25,4,1,"_CPPv4N13JetCalibrator12m_doCleaningE","JetCalibrator::m_doCleaning"],[88,4,1,"_CPPv4N13JetCalibrator12m_doCleaningE","JetCalibrator::m_doCleaning"],[25,4,1,"_CPPv4N13JetCalibrator15m_doJetTileCorrE","JetCalibrator::m_doJetTileCorr"],[88,4,1,"_CPPv4N13JetCalibrator15m_doJetTileCorrE","JetCalibrator::m_doJetTileCorr"],[25,4,1,"_CPPv4N13JetCalibrator13m_forceInsituE","JetCalibrator::m_forceInsitu"],[88,4,1,"_CPPv4N13JetCalibrator13m_forceInsituE","JetCalibrator::m_forceInsitu"],[25,4,1,"_CPPv4N13JetCalibrator12m_forceSmearE","JetCalibrator::m_forceSmear"],[88,4,1,"_CPPv4N13JetCalibrator12m_forceSmearE","JetCalibrator::m_forceSmear"],[25,4,1,"_CPPv4N13JetCalibrator17m_inContainerNameE","JetCalibrator::m_inContainerName"],[88,4,1,"_CPPv4N13JetCalibrator17m_inContainerNameE","JetCalibrator::m_inContainerName"],[25,4,1,"_CPPv4N13JetCalibrator15m_isTruthJetColE","JetCalibrator::m_isTruthJetCol"],[88,4,1,"_CPPv4N13JetCalibrator15m_isTruthJetColE","JetCalibrator::m_isTruthJetCol"],[25,4,1,"_CPPv4N13JetCalibrator9m_jetAlgoE","JetCalibrator::m_jetAlgo"],[88,4,1,"_CPPv4N13JetCalibrator9m_jetAlgoE","JetCalibrator::m_jetAlgo"],[25,4,1,"_CPPv4N13JetCalibrator18m_jetCalibToolsDEVE","JetCalibrator::m_jetCalibToolsDEV"],[88,4,1,"_CPPv4N13JetCalibrator18m_jetCalibToolsDEVE","JetCalibrator::m_jetCalibToolsDEV"],[25,4,1,"_CPPv4N13JetCalibrator18m_jetCleanCutLevelE","JetCalibrator::m_jetCleanCutLevel"],[88,4,1,"_CPPv4N13JetCalibrator18m_jetCleanCutLevelE","JetCalibrator::m_jetCleanCutLevel"],[25,4,1,"_CPPv4N13JetCalibrator14m_jetCleanUglyE","JetCalibrator::m_jetCleanUgly"],[88,4,1,"_CPPv4N13JetCalibrator14m_jetCleanUglyE","JetCalibrator::m_jetCleanUgly"],[25,4,1,"_CPPv4N13JetCalibrator17m_mcAndPseudoDataE","JetCalibrator::m_mcAndPseudoData"],[88,4,1,"_CPPv4N13JetCalibrator17m_mcAndPseudoDataE","JetCalibrator::m_mcAndPseudoData"],[25,4,1,"_CPPv4N13JetCalibrator10m_numEventE","JetCalibrator::m_numEvent"],[25,4,1,"_CPPv4N13JetCalibrator11m_numObjectE","JetCalibrator::m_numObject"],[25,4,1,"_CPPv4N13JetCalibrator18m_outContainerNameE","JetCalibrator::m_outContainerName"],[88,4,1,"_CPPv4N13JetCalibrator18m_outContainerNameE","JetCalibrator::m_outContainerName"],[25,4,1,"_CPPv4N13JetCalibrator12m_outputAlgoE","JetCalibrator::m_outputAlgo"],[88,4,1,"_CPPv4N13JetCalibrator12m_outputAlgoE","JetCalibrator::m_outputAlgo"],[25,4,1,"_CPPv4N13JetCalibrator22m_overrideAnalysisFileE","JetCalibrator::m_overrideAnalysisFile"],[88,4,1,"_CPPv4N13JetCalibrator22m_overrideAnalysisFileE","JetCalibrator::m_overrideAnalysisFile"],[25,4,1,"_CPPv4N13JetCalibrator19m_overrideCalibAreaE","JetCalibrator::m_overrideCalibArea"],[88,4,1,"_CPPv4N13JetCalibrator19m_overrideCalibAreaE","JetCalibrator::m_overrideCalibArea"],[25,4,1,"_CPPv4N13JetCalibrator25m_overrideUncertCalibAreaE","JetCalibrator::m_overrideUncertCalibArea"],[88,4,1,"_CPPv4N13JetCalibrator25m_overrideUncertCalibAreaE","JetCalibrator::m_overrideUncertCalibArea"],[25,4,1,"_CPPv4N13JetCalibrator20m_overrideUncertPathE","JetCalibrator::m_overrideUncertPath"],[88,4,1,"_CPPv4N13JetCalibrator20m_overrideUncertPathE","JetCalibrator::m_overrideUncertPath"],[25,4,1,"_CPPv4N13JetCalibrator12m_pseudoDataE","JetCalibrator::m_pseudoData"],[88,4,1,"_CPPv4N13JetCalibrator12m_pseudoDataE","JetCalibrator::m_pseudoData"],[25,4,1,"_CPPv4N13JetCalibrator26m_pseudodataJERTool_handleE","JetCalibrator::m_pseudodataJERTool_handle"],[25,4,1,"_CPPv4N13JetCalibrator20m_recalibrateHLTJetsE","JetCalibrator::m_recalibrateHLTJets"],[88,4,1,"_CPPv4N13JetCalibrator20m_recalibrateHLTJetsE","JetCalibrator::m_recalibrateHLTJets"],[25,4,1,"_CPPv4N13JetCalibrator10m_runSystsE","JetCalibrator::m_runSysts"],[25,4,1,"_CPPv4N13JetCalibrator23m_saveAllCleanDecisionsE","JetCalibrator::m_saveAllCleanDecisions"],[88,4,1,"_CPPv4N13JetCalibrator23m_saveAllCleanDecisionsE","JetCalibrator::m_saveAllCleanDecisions"],[25,4,1,"_CPPv4N13JetCalibrator6m_sortE","JetCalibrator::m_sort"],[88,4,1,"_CPPv4N13JetCalibrator6m_sortE","JetCalibrator::m_sort"],[25,4,1,"_CPPv4N13JetCalibrator10m_systListE","JetCalibrator::m_systList"],[25,4,1,"_CPPv4N13JetCalibrator25m_truthBosonContainerNameE","JetCalibrator::m_truthBosonContainerName"],[88,4,1,"_CPPv4N13JetCalibrator25m_truthBosonContainerNameE","JetCalibrator::m_truthBosonContainerName"],[25,4,1,"_CPPv4N13JetCalibrator16m_truthLabelNameE","JetCalibrator::m_truthLabelName"],[88,4,1,"_CPPv4N13JetCalibrator16m_truthLabelNameE","JetCalibrator::m_truthLabelName"],[25,4,1,"_CPPv4N13JetCalibrator28m_truthParticleContainerNameE","JetCalibrator::m_truthParticleContainerName"],[88,4,1,"_CPPv4N13JetCalibrator28m_truthParticleContainerNameE","JetCalibrator::m_truthParticleContainerName"],[25,4,1,"_CPPv4N13JetCalibrator28m_truthTopQuarkContainerNameE","JetCalibrator::m_truthTopQuarkContainerName"],[88,4,1,"_CPPv4N13JetCalibrator28m_truthTopQuarkContainerNameE","JetCalibrator::m_truthTopQuarkContainerName"],[25,4,1,"_CPPv4N13JetCalibrator14m_uncertConfigE","JetCalibrator::m_uncertConfig"],[88,4,1,"_CPPv4N13JetCalibrator14m_uncertConfigE","JetCalibrator::m_uncertConfig"],[25,4,1,"_CPPv4N13JetCalibrator14m_uncertMCTypeE","JetCalibrator::m_uncertMCType"],[88,4,1,"_CPPv4N13JetCalibrator14m_uncertMCTypeE","JetCalibrator::m_uncertMCType"],[25,4,1,"_CPPv4N13JetCalibrator28m_useLargeRTruthLabelingToolE","JetCalibrator::m_useLargeRTruthLabelingTool"],[88,4,1,"_CPPv4N13JetCalibrator28m_useLargeRTruthLabelingToolE","JetCalibrator::m_useLargeRTruthLabelingTool"],[25,4,1,"_CPPv4N13JetCalibrator11m_useTRUTH3E","JetCalibrator::m_useTRUTH3"],[88,4,1,"_CPPv4N13JetCalibrator11m_useTRUTH3E","JetCalibrator::m_useTRUTH3"],[25,4,1,"_CPPv4N13JetCalibrator21m_writeSystToMetadataE","JetCalibrator::m_writeSystToMetadata"],[88,4,1,"_CPPv4N13JetCalibrator21m_writeSystToMetadataE","JetCalibrator::m_writeSystToMetadata"],[25,2,1,"_CPPv4N13JetCalibrator11postExecuteEv","JetCalibrator::postExecute"],[88,2,1,"_CPPv4N13JetCalibrator11postExecuteEv","JetCalibrator::postExecute"],[25,2,1,"_CPPv4N13JetCalibrator8setupJobERN2EL3JobE","JetCalibrator::setupJob"],[88,2,1,"_CPPv4N13JetCalibrator8setupJobERN2EL3JobE","JetCalibrator::setupJob"],[25,3,1,"_CPPv4N13JetCalibrator8setupJobERN2EL3JobE","JetCalibrator::setupJob::job"],[88,3,1,"_CPPv4N13JetCalibrator8setupJobERN2EL3JobE","JetCalibrator::setupJob::job"],[27,1,1,"_CPPv412JetHistsAlgo","JetHistsAlgo"],[89,1,1,"_CPPv412JetHistsAlgo","JetHistsAlgo"],[27,2,1,"_CPPv4N12JetHistsAlgo8AddHistsENSt6stringE","JetHistsAlgo::AddHists"],[89,2,1,"_CPPv4N12JetHistsAlgo8AddHistsENSt6stringE","JetHistsAlgo::AddHists"],[27,3,1,"_CPPv4N12JetHistsAlgo8AddHistsENSt6stringE","JetHistsAlgo::AddHists::name"],[89,3,1,"_CPPv4N12JetHistsAlgo8AddHistsENSt6stringE","JetHistsAlgo::AddHists::name"],[27,2,1,"_CPPv4N12JetHistsAlgo12JetHistsAlgoEv","JetHistsAlgo::JetHistsAlgo"],[89,2,1,"_CPPv4N12JetHistsAlgo12JetHistsAlgoEv","JetHistsAlgo::JetHistsAlgo"],[27,2,1,"_CPPv4N12JetHistsAlgo7executeEv","JetHistsAlgo::execute"],[89,2,1,"_CPPv4N12JetHistsAlgo7executeEv","JetHistsAlgo::execute"],[27,2,1,"_CPPv4N12JetHistsAlgo8setupJobERN2EL3JobE","JetHistsAlgo::setupJob"],[89,2,1,"_CPPv4N12JetHistsAlgo8setupJobERN2EL3JobE","JetHistsAlgo::setupJob"],[27,3,1,"_CPPv4N12JetHistsAlgo8setupJobERN2EL3JobE","JetHistsAlgo::setupJob::job"],[89,3,1,"_CPPv4N12JetHistsAlgo8setupJobERN2EL3JobE","JetHistsAlgo::setupJob::job"],[28,1,1,"_CPPv411JetSelector","JetSelector"],[90,1,1,"_CPPv411JetSelector","JetSelector"],[28,2,1,"_CPPv4N11JetSelector11JetSelectorEv","JetSelector::JetSelector"],[90,2,1,"_CPPv4N11JetSelector11JetSelectorEv","JetSelector::JetSelector"],[28,2,1,"_CPPv4N11JetSelector8PassCutsEPKN4xAOD3JetE","JetSelector::PassCuts"],[90,2,1,"_CPPv4N11JetSelector8PassCutsEPKN4xAOD3JetE","JetSelector::PassCuts"],[28,3,1,"_CPPv4N11JetSelector8PassCutsEPKN4xAOD3JetE","JetSelector::PassCuts::jet"],[90,3,1,"_CPPv4N11JetSelector8PassCutsEPKN4xAOD3JetE","JetSelector::PassCuts::jet"],[28,2,1,"_CPPv4N11JetSelector11changeInputEb","JetSelector::changeInput"],[90,2,1,"_CPPv4N11JetSelector11changeInputEb","JetSelector::changeInput"],[28,3,1,"_CPPv4N11JetSelector11changeInputEb","JetSelector::changeInput::firstFile"],[90,3,1,"_CPPv4N11JetSelector11changeInputEb","JetSelector::changeInput::firstFile"],[28,2,1,"_CPPv4N11JetSelector7executeEv","JetSelector::execute"],[90,2,1,"_CPPv4N11JetSelector7executeEv","JetSelector::execute"],[28,2,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection"],[90,2,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection"],[28,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::count"],[90,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::count"],[28,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::inJets"],[90,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::inJets"],[28,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::isNominal"],[90,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::isNominal"],[28,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::mcEvtWeight"],[90,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::mcEvtWeight"],[28,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::outContainerName"],[90,3,1,"_CPPv4N11JetSelector16executeSelectionEPKN4xAOD12JetContainerEfbNSt6stringEb","JetSelector::executeSelection::outContainerName"],[28,2,1,"_CPPv4N11JetSelector11fileExecuteEv","JetSelector::fileExecute"],[90,2,1,"_CPPv4N11JetSelector11fileExecuteEv","JetSelector::fileExecute"],[28,2,1,"_CPPv4N11JetSelector8finalizeEv","JetSelector::finalize"],[90,2,1,"_CPPv4N11JetSelector8finalizeEv","JetSelector::finalize"],[28,2,1,"_CPPv4N11JetSelector12histFinalizeEv","JetSelector::histFinalize"],[90,2,1,"_CPPv4N11JetSelector12histFinalizeEv","JetSelector::histFinalize"],[28,2,1,"_CPPv4N11JetSelector14histInitializeEv","JetSelector::histInitialize"],[90,2,1,"_CPPv4N11JetSelector14histInitializeEv","JetSelector::histInitialize"],[28,2,1,"_CPPv4N11JetSelector10initializeEv","JetSelector::initialize"],[90,2,1,"_CPPv4N11JetSelector10initializeEv","JetSelector::initialize"],[28,4,1,"_CPPv4N11JetSelector23m_BJetSelectTool_handleE","JetSelector::m_BJetSelectTool_handle"],[28,4,1,"_CPPv4N11JetSelector8m_ET_maxE","JetSelector::m_ET_max"],[90,4,1,"_CPPv4N11JetSelector8m_ET_maxE","JetSelector::m_ET_max"],[28,4,1,"_CPPv4N11JetSelector8m_ET_minE","JetSelector::m_ET_min"],[90,4,1,"_CPPv4N11JetSelector8m_ET_minE","JetSelector::m_ET_min"],[28,4,1,"_CPPv4N11JetSelector17m_HLTBTagCutValueE","JetSelector::m_HLTBTagCutValue"],[90,4,1,"_CPPv4N11JetSelector17m_HLTBTagCutValueE","JetSelector::m_HLTBTagCutValue"],[28,4,1,"_CPPv4N11JetSelector19m_HLTBTagTaggerNameE","JetSelector::m_HLTBTagTaggerName"],[90,4,1,"_CPPv4N11JetSelector19m_HLTBTagTaggerNameE","JetSelector::m_HLTBTagTaggerName"],[28,4,1,"_CPPv4N11JetSelector8m_JVFCutE","JetSelector::m_JVFCut"],[90,4,1,"_CPPv4N11JetSelector8m_JVFCutE","JetSelector::m_JVFCut"],[28,4,1,"_CPPv4N11JetSelector8m_JVTCutE","JetSelector::m_JVTCut"],[90,4,1,"_CPPv4N11JetSelector8m_JVTCutE","JetSelector::m_JVTCut"],[28,4,1,"_CPPv4N11JetSelector11m_SFFileJVTE","JetSelector::m_SFFileJVT"],[90,4,1,"_CPPv4N11JetSelector11m_SFFileJVTE","JetSelector::m_SFFileJVT"],[28,4,1,"_CPPv4N11JetSelector12m_SFFilefJVTE","JetSelector::m_SFFilefJVT"],[90,4,1,"_CPPv4N11JetSelector12m_SFFilefJVTE","JetSelector::m_SFFilefJVT"],[28,4,1,"_CPPv4N11JetSelector17m_WorkingPointJVTE","JetSelector::m_WorkingPointJVT"],[90,4,1,"_CPPv4N11JetSelector17m_WorkingPointJVTE","JetSelector::m_WorkingPointJVT"],[28,4,1,"_CPPv4N11JetSelector18m_WorkingPointfJVTE","JetSelector::m_WorkingPointfJVT"],[90,4,1,"_CPPv4N11JetSelector18m_WorkingPointfJVTE","JetSelector::m_WorkingPointfJVT"],[28,4,1,"_CPPv4N11JetSelector11m_b_eta_maxE","JetSelector::m_b_eta_max"],[90,4,1,"_CPPv4N11JetSelector11m_b_eta_maxE","JetSelector::m_b_eta_max"],[28,4,1,"_CPPv4N11JetSelector10m_b_pt_minE","JetSelector::m_b_pt_min"],[90,4,1,"_CPPv4N11JetSelector10m_b_pt_minE","JetSelector::m_b_pt_min"],[28,4,1,"_CPPv4N11JetSelector12m_cleanEventE","JetSelector::m_cleanEvent"],[90,4,1,"_CPPv4N11JetSelector12m_cleanEventE","JetSelector::m_cleanEvent"],[28,4,1,"_CPPv4N11JetSelector18m_cleanEvtLeadJetsE","JetSelector::m_cleanEvtLeadJets"],[90,4,1,"_CPPv4N11JetSelector18m_cleanEvtLeadJetsE","JetSelector::m_cleanEvtLeadJets"],[28,4,1,"_CPPv4N11JetSelector11m_cleanJetsE","JetSelector::m_cleanJets"],[90,4,1,"_CPPv4N11JetSelector11m_cleanJetsE","JetSelector::m_cleanJets"],[28,4,1,"_CPPv4N11JetSelector14m_corrFileNameE","JetSelector::m_corrFileName"],[90,4,1,"_CPPv4N11JetSelector14m_corrFileNameE","JetSelector::m_corrFileName"],[28,4,1,"_CPPv4N11JetSelector30m_count_events_with_duplicatesE","JetSelector::m_count_events_with_duplicates"],[90,4,1,"_CPPv4N11JetSelector30m_count_events_with_duplicatesE","JetSelector::m_count_events_with_duplicates"],[28,4,1,"_CPPv4N11JetSelector25m_createSelectedContainerE","JetSelector::m_createSelectedContainer"],[90,4,1,"_CPPv4N11JetSelector25m_createSelectedContainerE","JetSelector::m_createSelectedContainer"],[28,4,1,"_CPPv4N11JetSelector13m_cutflowHistE","JetSelector::m_cutflowHist"],[28,4,1,"_CPPv4N11JetSelector14m_cutflowHistWE","JetSelector::m_cutflowHistW"],[28,4,1,"_CPPv4N11JetSelector13m_cutflow_binE","JetSelector::m_cutflow_bin"],[28,4,1,"_CPPv4N11JetSelector7m_decorE","JetSelector::m_decor"],[90,4,1,"_CPPv4N11JetSelector7m_decorE","JetSelector::m_decor"],[28,4,1,"_CPPv4N11JetSelector25m_decorateSelectedObjectsE","JetSelector::m_decorateSelectedObjects"],[90,4,1,"_CPPv4N11JetSelector25m_decorateSelectedObjectsE","JetSelector::m_decorateSelectedObjects"],[28,4,1,"_CPPv4N11JetSelector12m_detEta_maxE","JetSelector::m_detEta_max"],[90,4,1,"_CPPv4N11JetSelector12m_detEta_maxE","JetSelector::m_detEta_max"],[28,4,1,"_CPPv4N11JetSelector12m_detEta_minE","JetSelector::m_detEta_min"],[90,4,1,"_CPPv4N11JetSelector12m_detEta_minE","JetSelector::m_detEta_min"],[28,4,1,"_CPPv4N11JetSelector17m_diJetTrigChainsE","JetSelector::m_diJetTrigChains"],[90,4,1,"_CPPv4N11JetSelector17m_diJetTrigChainsE","JetSelector::m_diJetTrigChains"],[28,4,1,"_CPPv4N11JetSelector21m_diJetTrigChainsListE","JetSelector::m_diJetTrigChainsList"],[28,4,1,"_CPPv4N11JetSelector11m_doBTagCutE","JetSelector::m_doBTagCut"],[90,4,1,"_CPPv4N11JetSelector11m_doBTagCutE","JetSelector::m_doBTagCut"],[28,4,1,"_CPPv4N11JetSelector14m_doHLTBTagCutE","JetSelector::m_doHLTBTagCut"],[90,4,1,"_CPPv4N11JetSelector14m_doHLTBTagCutE","JetSelector::m_doHLTBTagCut"],[28,4,1,"_CPPv4N11JetSelector7m_doJVFE","JetSelector::m_doJVF"],[90,4,1,"_CPPv4N11JetSelector7m_doJVFE","JetSelector::m_doJVF"],[28,4,1,"_CPPv4N11JetSelector7m_doJVTE","JetSelector::m_doJVT"],[90,4,1,"_CPPv4N11JetSelector7m_doJVTE","JetSelector::m_doJVT"],[28,4,1,"_CPPv4N11JetSelector16m_doJetTimingCutE","JetSelector::m_doJetTimingCut"],[90,4,1,"_CPPv4N11JetSelector16m_doJetTimingCutE","JetSelector::m_doJetTimingCut"],[28,4,1,"_CPPv4N11JetSelector14m_doMCCleaningE","JetSelector::m_doMCCleaning"],[90,4,1,"_CPPv4N11JetSelector14m_doMCCleaningE","JetSelector::m_doMCCleaning"],[28,4,1,"_CPPv4N11JetSelector13m_doTrigMatchE","JetSelector::m_doTrigMatch"],[28,4,1,"_CPPv4N11JetSelector19m_doTruthJetTaggingE","JetSelector::m_doTruthJetTagging"],[90,4,1,"_CPPv4N11JetSelector19m_doTruthJetTaggingE","JetSelector::m_doTruthJetTagging"],[28,4,1,"_CPPv4N11JetSelector8m_dofJVTE","JetSelector::m_dofJVT"],[90,4,1,"_CPPv4N11JetSelector8m_dofJVTE","JetSelector::m_dofJVT"],[28,4,1,"_CPPv4N11JetSelector12m_dofJVTVetoE","JetSelector::m_dofJVTVeto"],[90,4,1,"_CPPv4N11JetSelector12m_dofJVTVetoE","JetSelector::m_dofJVTVeto"],[28,4,1,"_CPPv4N11JetSelector9m_eta_maxE","JetSelector::m_eta_max"],[90,4,1,"_CPPv4N11JetSelector9m_eta_maxE","JetSelector::m_eta_max"],[28,4,1,"_CPPv4N11JetSelector13m_eta_max_JVFE","JetSelector::m_eta_max_JVF"],[90,4,1,"_CPPv4N11JetSelector13m_eta_max_JVFE","JetSelector::m_eta_max_JVF"],[28,4,1,"_CPPv4N11JetSelector13m_eta_max_JVTE","JetSelector::m_eta_max_JVT"],[90,4,1,"_CPPv4N11JetSelector13m_eta_max_JVTE","JetSelector::m_eta_max_JVT"],[28,4,1,"_CPPv4N11JetSelector9m_eta_minE","JetSelector::m_eta_min"],[90,4,1,"_CPPv4N11JetSelector9m_eta_minE","JetSelector::m_eta_min"],[28,4,1,"_CPPv4N11JetSelector18m_failAuxDecorKeysE","JetSelector::m_failAuxDecorKeys"],[90,4,1,"_CPPv4N11JetSelector18m_failAuxDecorKeysE","JetSelector::m_failAuxDecorKeys"],[28,4,1,"_CPPv4N11JetSelector10m_failKeysE","JetSelector::m_failKeys"],[28,4,1,"_CPPv4N11JetSelector16m_fjvtUsedBeforeE","JetSelector::m_fjvtUsedBefore"],[90,4,1,"_CPPv4N11JetSelector16m_fjvtUsedBeforeE","JetSelector::m_fjvtUsedBefore"],[28,4,1,"_CPPv4N11JetSelector10m_getJVTSFE","JetSelector::m_getJVTSF"],[90,4,1,"_CPPv4N11JetSelector10m_getJVTSFE","JetSelector::m_getJVTSF"],[28,4,1,"_CPPv4N11JetSelector15m_haveTruthJetsE","JetSelector::m_haveTruthJets"],[90,4,1,"_CPPv4N11JetSelector15m_haveTruthJetsE","JetSelector::m_haveTruthJets"],[28,4,1,"_CPPv4N11JetSelector17m_inContainerNameE","JetSelector::m_inContainerName"],[90,4,1,"_CPPv4N11JetSelector17m_inContainerNameE","JetSelector::m_inContainerName"],[28,4,1,"_CPPv4N11JetSelector11m_inputAlgoE","JetSelector::m_inputAlgo"],[90,4,1,"_CPPv4N11JetSelector11m_inputAlgoE","JetSelector::m_inputAlgo"],[28,4,1,"_CPPv4N11JetSelector9m_isEMjetE","JetSelector::m_isEMjet"],[28,4,1,"_CPPv4N11JetSelector9m_isLCjetE","JetSelector::m_isLCjet"],[28,4,1,"_CPPv4N11JetSelector11m_jetAuthorE","JetSelector::m_jetAuthor"],[90,4,1,"_CPPv4N11JetSelector11m_jetAuthorE","JetSelector::m_jetAuthor"],[28,4,1,"_CPPv4N11JetSelector24m_jetNNJvtEfficiencyToolE","JetSelector::m_jetNNJvtEfficiencyTool"],[28,4,1,"_CPPv4N11JetSelector20m_jetNNJvtMomentToolE","JetSelector::m_jetNNJvtMomentTool"],[28,4,1,"_CPPv4N11JetSelector23m_jetNNJvtSelectionToolE","JetSelector::m_jetNNJvtSelectionTool"],[28,4,1,"_CPPv4N11JetSelector23m_jetPileupLabelingToolE","JetSelector::m_jetPileupLabelingTool"],[28,4,1,"_CPPv4N11JetSelector20m_jetScale4SelectionE","JetSelector::m_jetScale4Selection"],[90,4,1,"_CPPv4N11JetSelector20m_jetScale4SelectionE","JetSelector::m_jetScale4Selection"],[28,4,1,"_CPPv4N11JetSelector14m_jetScaleTypeE","JetSelector::m_jetScaleType"],[90,4,1,"_CPPv4N11JetSelector14m_jetScaleTypeE","JetSelector::m_jetScaleType"],[28,4,1,"_CPPv4N11JetSelector15m_jetTiming_maxE","JetSelector::m_jetTiming_max"],[90,4,1,"_CPPv4N11JetSelector15m_jetTiming_maxE","JetSelector::m_jetTiming_max"],[28,4,1,"_CPPv4N11JetSelector19m_jet_cutflowHist_1E","JetSelector::m_jet_cutflowHist_1"],[28,4,1,"_CPPv4N11JetSelector17m_jet_cutflow_allE","JetSelector::m_jet_cutflow_all"],[28,4,1,"_CPPv4N11JetSelector22m_jet_cutflow_btag_cutE","JetSelector::m_jet_cutflow_btag_cut"],[28,4,1,"_CPPv4N11JetSelector26m_jet_cutflow_cleaning_cutE","JetSelector::m_jet_cutflow_cleaning_cut"],[28,4,1,"_CPPv4N11JetSelector21m_jet_cutflow_eta_cutE","JetSelector::m_jet_cutflow_eta_cut"],[28,4,1,"_CPPv4N11JetSelector23m_jet_cutflow_etmax_cutE","JetSelector::m_jet_cutflow_etmax_cut"],[28,4,1,"_CPPv4N11JetSelector23m_jet_cutflow_etmin_cutE","JetSelector::m_jet_cutflow_etmin_cut"],[28,4,1,"_CPPv4N11JetSelector21m_jet_cutflow_jvt_cutE","JetSelector::m_jet_cutflow_jvt_cut"],[28,4,1,"_CPPv4N11JetSelector23m_jet_cutflow_ptmax_cutE","JetSelector::m_jet_cutflow_ptmax_cut"],[28,4,1,"_CPPv4N11JetSelector23m_jet_cutflow_ptmin_cutE","JetSelector::m_jet_cutflow_ptmin_cut"],[28,4,1,"_CPPv4N11JetSelector24m_jet_cutflow_timing_cutE","JetSelector::m_jet_cutflow_timing_cut"],[28,4,1,"_CPPv4N11JetSelector23m_jetfJvtEfficiencyToolE","JetSelector::m_jetfJvtEfficiencyTool"],[28,4,1,"_CPPv4N11JetSelector22m_jetfJvtSelectionToolE","JetSelector::m_jetfJvtSelectionTool"],[28,4,1,"_CPPv4N11JetSelector15m_jvtUsedBeforeE","JetSelector::m_jvtUsedBefore"],[90,4,1,"_CPPv4N11JetSelector15m_jvtUsedBeforeE","JetSelector::m_jvtUsedBefore"],[28,4,1,"_CPPv4N11JetSelector16m_markCleanEventE","JetSelector::m_markCleanEvent"],[90,4,1,"_CPPv4N11JetSelector16m_markCleanEventE","JetSelector::m_markCleanEvent"],[28,4,1,"_CPPv4N11JetSelector10m_mass_maxE","JetSelector::m_mass_max"],[90,4,1,"_CPPv4N11JetSelector10m_mass_maxE","JetSelector::m_mass_max"],[28,4,1,"_CPPv4N11JetSelector10m_mass_minE","JetSelector::m_mass_min"],[90,4,1,"_CPPv4N11JetSelector10m_mass_minE","JetSelector::m_mass_min"],[28,4,1,"_CPPv4N11JetSelector15m_mcCleaningCutE","JetSelector::m_mcCleaningCut"],[90,4,1,"_CPPv4N11JetSelector15m_mcCleaningCutE","JetSelector::m_mcCleaningCut"],[28,4,1,"_CPPv4N11JetSelector12m_nToProcessE","JetSelector::m_nToProcess"],[90,4,1,"_CPPv4N11JetSelector12m_nToProcessE","JetSelector::m_nToProcess"],[28,4,1,"_CPPv4N11JetSelector11m_noJVTVetoE","JetSelector::m_noJVTVeto"],[90,4,1,"_CPPv4N11JetSelector11m_noJVTVetoE","JetSelector::m_noJVTVeto"],[28,4,1,"_CPPv4N11JetSelector10m_numEventE","JetSelector::m_numEvent"],[28,4,1,"_CPPv4N11JetSelector14m_numEventPassE","JetSelector::m_numEventPass"],[28,4,1,"_CPPv4N11JetSelector11m_numObjectE","JetSelector::m_numObject"],[28,4,1,"_CPPv4N11JetSelector15m_numObjectPassE","JetSelector::m_numObjectPass"],[28,4,1,"_CPPv4N11JetSelector13m_operatingPtE","JetSelector::m_operatingPt"],[90,4,1,"_CPPv4N11JetSelector13m_operatingPtE","JetSelector::m_operatingPt"],[28,4,1,"_CPPv4N11JetSelector18m_outContainerNameE","JetSelector::m_outContainerName"],[90,4,1,"_CPPv4N11JetSelector18m_outContainerNameE","JetSelector::m_outContainerName"],[28,4,1,"_CPPv4N11JetSelector12m_outputAlgoE","JetSelector::m_outputAlgo"],[90,4,1,"_CPPv4N11JetSelector12m_outputAlgoE","JetSelector::m_outputAlgo"],[28,4,1,"_CPPv4N11JetSelector17m_outputJVTPassedE","JetSelector::m_outputJVTPassed"],[28,4,1,"_CPPv4N11JetSelector20m_outputSystNamesJVTE","JetSelector::m_outputSystNamesJVT"],[90,4,1,"_CPPv4N11JetSelector20m_outputSystNamesJVTE","JetSelector::m_outputSystNamesJVT"],[28,4,1,"_CPPv4N11JetSelector21m_outputSystNamesfJVTE","JetSelector::m_outputSystNamesfJVT"],[90,4,1,"_CPPv4N11JetSelector21m_outputSystNamesfJVTE","JetSelector::m_outputSystNamesfJVT"],[28,4,1,"_CPPv4N11JetSelector18m_outputfJVTPassedE","JetSelector::m_outputfJVTPassed"],[28,4,1,"_CPPv4N11JetSelector8m_pT_maxE","JetSelector::m_pT_max"],[90,4,1,"_CPPv4N11JetSelector8m_pT_maxE","JetSelector::m_pT_max"],[28,4,1,"_CPPv4N11JetSelector8m_pT_minE","JetSelector::m_pT_min"],[90,4,1,"_CPPv4N11JetSelector8m_pT_minE","JetSelector::m_pT_min"],[28,4,1,"_CPPv4N11JetSelector18m_passAuxDecorKeysE","JetSelector::m_passAuxDecorKeys"],[90,4,1,"_CPPv4N11JetSelector18m_passAuxDecorKeysE","JetSelector::m_passAuxDecorKeys"],[28,4,1,"_CPPv4N11JetSelector10m_passKeysE","JetSelector::m_passKeys"],[28,4,1,"_CPPv4N11JetSelector10m_pass_maxE","JetSelector::m_pass_max"],[90,4,1,"_CPPv4N11JetSelector10m_pass_maxE","JetSelector::m_pass_max"],[28,4,1,"_CPPv4N11JetSelector10m_pass_minE","JetSelector::m_pass_min"],[90,4,1,"_CPPv4N11JetSelector10m_pass_minE","JetSelector::m_pass_min"],[28,4,1,"_CPPv4N11JetSelector12m_pt_max_JVFE","JetSelector::m_pt_max_JVF"],[90,4,1,"_CPPv4N11JetSelector12m_pt_max_JVFE","JetSelector::m_pt_max_JVF"],[28,4,1,"_CPPv4N11JetSelector12m_pt_max_JVTE","JetSelector::m_pt_max_JVT"],[90,4,1,"_CPPv4N11JetSelector12m_pt_max_JVTE","JetSelector::m_pt_max_JVT"],[28,4,1,"_CPPv4N11JetSelector12m_pvLocationE","JetSelector::m_pvLocation"],[28,4,1,"_CPPv4N11JetSelector14m_rapidity_maxE","JetSelector::m_rapidity_max"],[90,4,1,"_CPPv4N11JetSelector14m_rapidity_maxE","JetSelector::m_rapidity_max"],[28,4,1,"_CPPv4N11JetSelector14m_rapidity_minE","JetSelector::m_rapidity_min"],[90,4,1,"_CPPv4N11JetSelector14m_rapidity_minE","JetSelector::m_rapidity_min"],[28,4,1,"_CPPv4N11JetSelector22m_recalculateJvtScoresE","JetSelector::m_recalculateJvtScores"],[90,4,1,"_CPPv4N11JetSelector22m_recalculateJvtScoresE","JetSelector::m_recalculateJvtScores"],[28,4,1,"_CPPv4N11JetSelector18m_removeDuplicatesE","JetSelector::m_removeDuplicates"],[90,4,1,"_CPPv4N11JetSelector18m_removeDuplicatesE","JetSelector::m_removeDuplicates"],[28,4,1,"_CPPv4N11JetSelector15m_requireHLTVtxE","JetSelector::m_requireHLTVtx"],[90,4,1,"_CPPv4N11JetSelector15m_requireHLTVtxE","JetSelector::m_requireHLTVtx"],[28,4,1,"_CPPv4N11JetSelector17m_requireNoHLTVtxE","JetSelector::m_requireNoHLTVtx"],[90,4,1,"_CPPv4N11JetSelector17m_requireNoHLTVtxE","JetSelector::m_requireNoHLTVtx"],[28,4,1,"_CPPv4N11JetSelector11m_scoreToolE","JetSelector::m_scoreTool"],[28,4,1,"_CPPv4N11JetSelector21m_singleJetTrigChainsE","JetSelector::m_singleJetTrigChains"],[90,4,1,"_CPPv4N11JetSelector21m_singleJetTrigChainsE","JetSelector::m_singleJetTrigChains"],[28,4,1,"_CPPv4N11JetSelector25m_singleJetTrigChainsListE","JetSelector::m_singleJetTrigChainsList"],[28,4,1,"_CPPv4N11JetSelector6m_sortE","JetSelector::m_sort"],[90,4,1,"_CPPv4N11JetSelector6m_sortE","JetSelector::m_sort"],[28,4,1,"_CPPv4N11JetSelector13m_systListJVTE","JetSelector::m_systListJVT"],[28,4,1,"_CPPv4N11JetSelector14m_systListfJVTE","JetSelector::m_systListfJVT"],[28,4,1,"_CPPv4N11JetSelector13m_systNameJVTE","JetSelector::m_systNameJVT"],[90,4,1,"_CPPv4N11JetSelector13m_systNameJVTE","JetSelector::m_systNameJVT"],[28,4,1,"_CPPv4N11JetSelector14m_systNamefJVTE","JetSelector::m_systNamefJVT"],[90,4,1,"_CPPv4N11JetSelector14m_systNamefJVTE","JetSelector::m_systNamefJVT"],[28,4,1,"_CPPv4N11JetSelector12m_systValJVTE","JetSelector::m_systValJVT"],[90,4,1,"_CPPv4N11JetSelector12m_systValJVTE","JetSelector::m_systValJVT"],[28,4,1,"_CPPv4N11JetSelector13m_systValfJVTE","JetSelector::m_systValfJVT"],[90,4,1,"_CPPv4N11JetSelector13m_systValfJVTE","JetSelector::m_systValfJVT"],[28,4,1,"_CPPv4N11JetSelector12m_taggerNameE","JetSelector::m_taggerName"],[90,4,1,"_CPPv4N11JetSelector12m_taggerNameE","JetSelector::m_taggerName"],[28,4,1,"_CPPv4N11JetSelector20m_trigDecTool_handleE","JetSelector::m_trigDecTool_handle"],[28,4,1,"_CPPv4N11JetSelector25m_trigJetMatchTool_handleE","JetSelector::m_trigJetMatchTool_handle"],[28,4,1,"_CPPv4N11JetSelector19m_truthJetContainerE","JetSelector::m_truthJetContainer"],[90,4,1,"_CPPv4N11JetSelector19m_truthJetContainerE","JetSelector::m_truthJetContainer"],[28,4,1,"_CPPv4N11JetSelector12m_truthLabelE","JetSelector::m_truthLabel"],[90,4,1,"_CPPv4N11JetSelector12m_truthLabelE","JetSelector::m_truthLabel"],[28,4,1,"_CPPv4N11JetSelector12m_useCutFlowE","JetSelector::m_useCutFlow"],[90,4,1,"_CPPv4N11JetSelector12m_useCutFlowE","JetSelector::m_useCutFlow"],[28,4,1,"_CPPv4N11JetSelector19m_useHadronConeExclE","JetSelector::m_useHadronConeExcl"],[90,4,1,"_CPPv4N11JetSelector19m_useHadronConeExclE","JetSelector::m_useHadronConeExcl"],[28,4,1,"_CPPv4N11JetSelector20m_weightNumEventPassE","JetSelector::m_weightNumEventPass"],[28,4,1,"_CPPv4N11JetSelector21m_writeSystToMetadataE","JetSelector::m_writeSystToMetadata"],[90,4,1,"_CPPv4N11JetSelector21m_writeSystToMetadataE","JetSelector::m_writeSystToMetadata"],[28,2,1,"_CPPv4N11JetSelector11postExecuteEv","JetSelector::postExecute"],[90,2,1,"_CPPv4N11JetSelector11postExecuteEv","JetSelector::postExecute"],[28,2,1,"_CPPv4N11JetSelector8setupJobERN2EL3JobE","JetSelector::setupJob"],[90,2,1,"_CPPv4N11JetSelector8setupJobERN2EL3JobE","JetSelector::setupJob"],[28,3,1,"_CPPv4N11JetSelector8setupJobERN2EL3JobE","JetSelector::setupJob::job"],[90,3,1,"_CPPv4N11JetSelector8setupJobERN2EL3JobE","JetSelector::setupJob::job"],[29,1,1,"_CPPv414METConstructor","METConstructor"],[91,1,1,"_CPPv414METConstructor","METConstructor"],[29,2,1,"_CPPv4N14METConstructor14METConstructorEv","METConstructor::METConstructor"],[91,2,1,"_CPPv4N14METConstructor14METConstructorEv","METConstructor::METConstructor"],[29,2,1,"_CPPv4N14METConstructor11changeInputEb","METConstructor::changeInput"],[91,2,1,"_CPPv4N14METConstructor11changeInputEb","METConstructor::changeInput"],[29,3,1,"_CPPv4N14METConstructor11changeInputEb","METConstructor::changeInput::firstFile"],[91,3,1,"_CPPv4N14METConstructor11changeInputEb","METConstructor::changeInput::firstFile"],[29,2,1,"_CPPv4N14METConstructor7executeEv","METConstructor::execute"],[91,2,1,"_CPPv4N14METConstructor7executeEv","METConstructor::execute"],[29,2,1,"_CPPv4N14METConstructor11fileExecuteEv","METConstructor::fileExecute"],[91,2,1,"_CPPv4N14METConstructor11fileExecuteEv","METConstructor::fileExecute"],[29,2,1,"_CPPv4N14METConstructor8finalizeEv","METConstructor::finalize"],[91,2,1,"_CPPv4N14METConstructor8finalizeEv","METConstructor::finalize"],[29,2,1,"_CPPv4N14METConstructor12histFinalizeEv","METConstructor::histFinalize"],[91,2,1,"_CPPv4N14METConstructor12histFinalizeEv","METConstructor::histFinalize"],[29,2,1,"_CPPv4N14METConstructor14histInitializeEv","METConstructor::histInitialize"],[91,2,1,"_CPPv4N14METConstructor14histInitializeEv","METConstructor::histInitialize"],[29,2,1,"_CPPv4N14METConstructor10initializeEv","METConstructor::initialize"],[91,2,1,"_CPPv4N14METConstructor10initializeEv","METConstructor::initialize"],[29,4,1,"_CPPv4N14METConstructor17m_METWorkingPointE","METConstructor::m_METWorkingPoint"],[91,4,1,"_CPPv4N14METConstructor17m_METWorkingPointE","METConstructor::m_METWorkingPoint"],[29,4,1,"_CPPv4N14METConstructor21m_addSoftClusterTermsE","METConstructor::m_addSoftClusterTerms"],[91,4,1,"_CPPv4N14METConstructor21m_addSoftClusterTermsE","METConstructor::m_addSoftClusterTerms"],[29,4,1,"_CPPv4N14METConstructor23m_calculateSignificanceE","METConstructor::m_calculateSignificance"],[91,4,1,"_CPPv4N14METConstructor23m_calculateSignificanceE","METConstructor::m_calculateSignificance"],[29,4,1,"_CPPv4N14METConstructor10m_coreNameE","METConstructor::m_coreName"],[91,4,1,"_CPPv4N14METConstructor10m_coreNameE","METConstructor::m_coreName"],[29,4,1,"_CPPv4N14METConstructor16m_doElectronCutsE","METConstructor::m_doElectronCuts"],[91,4,1,"_CPPv4N14METConstructor16m_doElectronCutsE","METConstructor::m_doElectronCuts"],[29,4,1,"_CPPv4N14METConstructor17m_doIsolMuonElossE","METConstructor::m_doIsolMuonEloss"],[91,4,1,"_CPPv4N14METConstructor17m_doIsolMuonElossE","METConstructor::m_doIsolMuonEloss"],[29,4,1,"_CPPv4N14METConstructor10m_doJVTCutE","METConstructor::m_doJVTCut"],[91,4,1,"_CPPv4N14METConstructor10m_doJVTCutE","METConstructor::m_doJVTCut"],[29,4,1,"_CPPv4N14METConstructor12m_doMuonCutsE","METConstructor::m_doMuonCuts"],[91,4,1,"_CPPv4N14METConstructor12m_doMuonCutsE","METConstructor::m_doMuonCuts"],[29,4,1,"_CPPv4N14METConstructor13m_doMuonElossE","METConstructor::m_doMuonEloss"],[91,4,1,"_CPPv4N14METConstructor13m_doMuonElossE","METConstructor::m_doMuonEloss"],[29,4,1,"_CPPv4N14METConstructor9m_doPFlowE","METConstructor::m_doPFlow"],[91,4,1,"_CPPv4N14METConstructor9m_doPFlowE","METConstructor::m_doPFlow"],[29,4,1,"_CPPv4N14METConstructor14m_doPhotonCutsE","METConstructor::m_doPhotonCuts"],[91,4,1,"_CPPv4N14METConstructor14m_doPhotonCutsE","METConstructor::m_doPhotonCuts"],[29,4,1,"_CPPv4N14METConstructor11m_doTauCutsE","METConstructor::m_doTauCuts"],[91,4,1,"_CPPv4N14METConstructor11m_doTauCutsE","METConstructor::m_doTauCuts"],[29,4,1,"_CPPv4N14METConstructor11m_dofJVTCutE","METConstructor::m_dofJVTCut"],[91,4,1,"_CPPv4N14METConstructor11m_dofJVTCutE","METConstructor::m_dofJVTCut"],[29,4,1,"_CPPv4N14METConstructor16m_eleSystematicsE","METConstructor::m_eleSystematics"],[91,4,1,"_CPPv4N14METConstructor16m_eleSystematicsE","METConstructor::m_eleSystematics"],[29,4,1,"_CPPv4N14METConstructor15m_fJVTdecorNameE","METConstructor::m_fJVTdecorName"],[91,4,1,"_CPPv4N14METConstructor15m_fJVTdecorNameE","METConstructor::m_fJVTdecorName"],[29,4,1,"_CPPv4N14METConstructor16m_inputElectronsE","METConstructor::m_inputElectrons"],[91,4,1,"_CPPv4N14METConstructor16m_inputElectronsE","METConstructor::m_inputElectrons"],[29,4,1,"_CPPv4N14METConstructor11m_inputJetsE","METConstructor::m_inputJets"],[91,4,1,"_CPPv4N14METConstructor11m_inputJetsE","METConstructor::m_inputJets"],[29,4,1,"_CPPv4N14METConstructor12m_inputMuonsE","METConstructor::m_inputMuons"],[91,4,1,"_CPPv4N14METConstructor12m_inputMuonsE","METConstructor::m_inputMuons"],[29,4,1,"_CPPv4N14METConstructor14m_inputPhotonsE","METConstructor::m_inputPhotons"],[91,4,1,"_CPPv4N14METConstructor14m_inputPhotonsE","METConstructor::m_inputPhotons"],[29,4,1,"_CPPv4N14METConstructor11m_inputTausE","METConstructor::m_inputTaus"],[91,4,1,"_CPPv4N14METConstructor11m_inputTausE","METConstructor::m_inputTaus"],[29,4,1,"_CPPv4N14METConstructor16m_jetSystematicsE","METConstructor::m_jetSystematics"],[91,4,1,"_CPPv4N14METConstructor16m_jetSystematicsE","METConstructor::m_jetSystematics"],[29,4,1,"_CPPv4N14METConstructor9m_mapNameE","METConstructor::m_mapName"],[91,4,1,"_CPPv4N14METConstructor9m_mapNameE","METConstructor::m_mapName"],[29,4,1,"_CPPv4N14METConstructor24m_metSignificance_handleE","METConstructor::m_metSignificance_handle"],[29,4,1,"_CPPv4N14METConstructor16m_metSyst_handleE","METConstructor::m_metSyst_handle"],[29,4,1,"_CPPv4N14METConstructor17m_metmaker_handleE","METConstructor::m_metmaker_handle"],[29,4,1,"_CPPv4N14METConstructor17m_muonSystematicsE","METConstructor::m_muonSystematics"],[91,4,1,"_CPPv4N14METConstructor17m_muonSystematicsE","METConstructor::m_muonSystematics"],[29,4,1,"_CPPv4N14METConstructor10m_numEventE","METConstructor::m_numEvent"],[29,4,1,"_CPPv4N14METConstructor21m_outputAlgoSystNamesE","METConstructor::m_outputAlgoSystNames"],[91,4,1,"_CPPv4N14METConstructor21m_outputAlgoSystNamesE","METConstructor::m_outputAlgoSystNames"],[29,4,1,"_CPPv4N14METConstructor17m_outputContainerE","METConstructor::m_outputContainer"],[91,4,1,"_CPPv4N14METConstructor17m_outputContainerE","METConstructor::m_outputContainer"],[29,4,1,"_CPPv4N14METConstructor16m_phoSystematicsE","METConstructor::m_phoSystematics"],[91,4,1,"_CPPv4N14METConstructor16m_phoSystematicsE","METConstructor::m_phoSystematics"],[29,4,1,"_CPPv4N14METConstructor26m_rebuildUsingTracksInJetsE","METConstructor::m_rebuildUsingTracksInJets"],[91,4,1,"_CPPv4N14METConstructor26m_rebuildUsingTracksInJetsE","METConstructor::m_rebuildUsingTracksInJets"],[29,4,1,"_CPPv4N14METConstructor12m_runNominalE","METConstructor::m_runNominal"],[91,4,1,"_CPPv4N14METConstructor12m_runNominalE","METConstructor::m_runNominal"],[29,4,1,"_CPPv4N14METConstructor26m_significanceSoftTermResoE","METConstructor::m_significanceSoftTermReso"],[91,4,1,"_CPPv4N14METConstructor26m_significanceSoftTermResoE","METConstructor::m_significanceSoftTermReso"],[29,4,1,"_CPPv4N14METConstructor25m_significanceTreatPUJetsE","METConstructor::m_significanceTreatPUJets"],[91,4,1,"_CPPv4N14METConstructor25m_significanceTreatPUJetsE","METConstructor::m_significanceTreatPUJets"],[29,4,1,"_CPPv4N14METConstructor9m_sysListE","METConstructor::m_sysList"],[29,4,1,"_CPPv4N14METConstructor18m_systConfigPrefixE","METConstructor::m_systConfigPrefix"],[91,4,1,"_CPPv4N14METConstructor18m_systConfigPrefixE","METConstructor::m_systConfigPrefix"],[29,4,1,"_CPPv4N14METConstructor23m_systConfigSoftTrkFileE","METConstructor::m_systConfigSoftTrkFile"],[91,4,1,"_CPPv4N14METConstructor23m_systConfigSoftTrkFileE","METConstructor::m_systConfigSoftTrkFile"],[29,4,1,"_CPPv4N14METConstructor10m_systNameE","METConstructor::m_systName"],[91,4,1,"_CPPv4N14METConstructor10m_systNameE","METConstructor::m_systName"],[29,4,1,"_CPPv4N14METConstructor9m_systValE","METConstructor::m_systVal"],[91,4,1,"_CPPv4N14METConstructor9m_systValE","METConstructor::m_systVal"],[29,4,1,"_CPPv4N14METConstructor19m_tauSelTool_handleE","METConstructor::m_tauSelTool_handle"],[29,4,1,"_CPPv4N14METConstructor16m_tauSystematicsE","METConstructor::m_tauSystematics"],[91,4,1,"_CPPv4N14METConstructor16m_tauSystematicsE","METConstructor::m_tauSystematics"],[29,4,1,"_CPPv4N14METConstructor21m_writeSystToMetadataE","METConstructor::m_writeSystToMetadata"],[91,4,1,"_CPPv4N14METConstructor21m_writeSystToMetadataE","METConstructor::m_writeSystToMetadata"],[29,2,1,"_CPPv4N14METConstructor11postExecuteEv","METConstructor::postExecute"],[91,2,1,"_CPPv4N14METConstructor11postExecuteEv","METConstructor::postExecute"],[29,2,1,"_CPPv4N14METConstructor8setupJobERN2EL3JobE","METConstructor::setupJob"],[91,2,1,"_CPPv4N14METConstructor8setupJobERN2EL3JobE","METConstructor::setupJob"],[29,3,1,"_CPPv4N14METConstructor8setupJobERN2EL3JobE","METConstructor::setupJob::job"],[91,3,1,"_CPPv4N14METConstructor8setupJobERN2EL3JobE","METConstructor::setupJob::job"],[30,1,1,"_CPPv418MessagePrinterAlgo","MessagePrinterAlgo"],[92,1,1,"_CPPv418MessagePrinterAlgo","MessagePrinterAlgo"],[92,2,1,"_CPPv4N18MessagePrinterAlgo18MessagePrinterAlgoEv","MessagePrinterAlgo::MessagePrinterAlgo"],[92,2,1,"_CPPv4N18MessagePrinterAlgo11changeInputEb","MessagePrinterAlgo::changeInput"],[92,3,1,"_CPPv4N18MessagePrinterAlgo11changeInputEb","MessagePrinterAlgo::changeInput::firstFile"],[92,2,1,"_CPPv4N18MessagePrinterAlgo7executeEv","MessagePrinterAlgo::execute"],[92,2,1,"_CPPv4N18MessagePrinterAlgo11fileExecuteEv","MessagePrinterAlgo::fileExecute"],[92,2,1,"_CPPv4N18MessagePrinterAlgo8finalizeEv","MessagePrinterAlgo::finalize"],[92,2,1,"_CPPv4N18MessagePrinterAlgo12histFinalizeEv","MessagePrinterAlgo::histFinalize"],[92,2,1,"_CPPv4N18MessagePrinterAlgo14histInitializeEv","MessagePrinterAlgo::histInitialize"],[92,2,1,"_CPPv4N18MessagePrinterAlgo10initializeEv","MessagePrinterAlgo::initialize"],[30,4,1,"_CPPv4N18MessagePrinterAlgo13m_sourceWidthE","MessagePrinterAlgo::m_sourceWidth"],[92,4,1,"_CPPv4N18MessagePrinterAlgo13m_sourceWidthE","MessagePrinterAlgo::m_sourceWidth"],[92,2,1,"_CPPv4N18MessagePrinterAlgo11postExecuteEv","MessagePrinterAlgo::postExecute"],[92,2,1,"_CPPv4N18MessagePrinterAlgo8setupJobERN2EL3JobE","MessagePrinterAlgo::setupJob"],[92,3,1,"_CPPv4N18MessagePrinterAlgo8setupJobERN2EL3JobE","MessagePrinterAlgo::setupJob::job"],[31,1,1,"_CPPv48MetHists","MetHists"],[93,1,1,"_CPPv48MetHists","MetHists"],[31,2,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists"],[93,2,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists"],[31,3,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists::detailStr"],[93,3,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists::detailStr"],[31,3,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists::name"],[93,3,1,"_CPPv4N8MetHists8MetHistsENSt6stringENSt6stringE","MetHists::MetHists::name"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book"],[31,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book"],[93,2,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::name"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::name"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::option"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::option"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::title"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::title"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::xbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::xbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::xbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_t","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEidd","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::xlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::xlow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xyabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xyabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xyabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::xyabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::xyabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::xyabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::ybins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ybins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ybinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::yhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::yhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiPK8Double_t","MetHists::book::ylabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ylabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEidd","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEddNSt6stringE","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEidd","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEiPK8Double_tdd","MetHists::book::ylow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringEidddd","MetHists::book::ylow"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zbins"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zbins"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zbinsArr"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zbinsArr"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zhigh"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zhigh"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiPK8Double_tNSt6stringEiPK8Double_tNSt6stringEiPK8Double_t","MetHists::book::zlabel"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zlabel"],[31,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zlow"],[93,3,1,"_CPPv4N8MetHists4bookENSt6stringENSt6stringENSt6stringEiddNSt6stringEiddNSt6stringEidd","MetHists::book::zlow"],[31,2,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute"],[31,2,1,"_CPPv4N8MetHists7executeEv","MetHists::execute"],[93,2,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute"],[93,2,1,"_CPPv4N8MetHists7executeEv","MetHists::execute"],[31,3,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute::eventWeight"],[93,3,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute::eventWeight"],[31,3,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute::met"],[93,3,1,"_CPPv4N8MetHists7executeEPKN4xAOD18MissingETContainerEf","MetHists::execute::met"],[31,2,1,"_CPPv4N8MetHists10initializeEv","MetHists::initialize"],[93,2,1,"_CPPv4N8MetHists10initializeEv","MetHists::initialize"],[31,4,1,"_CPPv4N8MetHists7m_debugE","MetHists::m_debug"],[93,4,1,"_CPPv4N8MetHists7m_debugE","MetHists::m_debug"],[31,4,1,"_CPPv4N8MetHists12m_infoSwitchE","MetHists::m_infoSwitch"],[93,4,1,"_CPPv4N8MetHists12m_infoSwitchE","MetHists::m_infoSwitch"],[31,4,1,"_CPPv4N8MetHists14m_metFinalClusE","MetHists::m_metFinalClus"],[31,4,1,"_CPPv4N8MetHists17m_metFinalClusPhiE","MetHists::m_metFinalClusPhi"],[31,4,1,"_CPPv4N8MetHists16m_metFinalClusPxE","MetHists::m_metFinalClusPx"],[31,4,1,"_CPPv4N8MetHists16m_metFinalClusPyE","MetHists::m_metFinalClusPy"],[31,4,1,"_CPPv4N8MetHists19m_metFinalClusSumEtE","MetHists::m_metFinalClusSumEt"],[31,4,1,"_CPPv4N8MetHists13m_metFinalTrkE","MetHists::m_metFinalTrk"],[31,4,1,"_CPPv4N8MetHists16m_metFinalTrkPhiE","MetHists::m_metFinalTrkPhi"],[31,4,1,"_CPPv4N8MetHists15m_metFinalTrkPxE","MetHists::m_metFinalTrkPx"],[31,4,1,"_CPPv4N8MetHists15m_metFinalTrkPyE","MetHists::m_metFinalTrkPy"],[31,4,1,"_CPPv4N8MetHists18m_metFinalTrkSumEtE","MetHists::m_metFinalTrkSumEt"],[31,2,1,"_CPPv4N8MetHistsD0Ev","MetHists::~MetHists"],[93,2,1,"_CPPv4N8MetHistsD0Ev","MetHists::~MetHists"],[32,1,1,"_CPPv412MetHistsAlgo","MetHistsAlgo"],[94,1,1,"_CPPv412MetHistsAlgo","MetHistsAlgo"],[32,2,1,"_CPPv4N12MetHistsAlgo12MetHistsAlgoEv","MetHistsAlgo::MetHistsAlgo"],[94,2,1,"_CPPv4N12MetHistsAlgo12MetHistsAlgoEv","MetHistsAlgo::MetHistsAlgo"],[32,2,1,"_CPPv4N12MetHistsAlgo11changeInputEb","MetHistsAlgo::changeInput"],[94,2,1,"_CPPv4N12MetHistsAlgo11changeInputEb","MetHistsAlgo::changeInput"],[32,3,1,"_CPPv4N12MetHistsAlgo11changeInputEb","MetHistsAlgo::changeInput::firstFile"],[94,3,1,"_CPPv4N12MetHistsAlgo11changeInputEb","MetHistsAlgo::changeInput::firstFile"],[32,2,1,"_CPPv4N12MetHistsAlgo7executeEv","MetHistsAlgo::execute"],[94,2,1,"_CPPv4N12MetHistsAlgo7executeEv","MetHistsAlgo::execute"],[32,2,1,"_CPPv4N12MetHistsAlgo11fileExecuteEv","MetHistsAlgo::fileExecute"],[94,2,1,"_CPPv4N12MetHistsAlgo11fileExecuteEv","MetHistsAlgo::fileExecute"],[32,2,1,"_CPPv4N12MetHistsAlgo8finalizeEv","MetHistsAlgo::finalize"],[94,2,1,"_CPPv4N12MetHistsAlgo8finalizeEv","MetHistsAlgo::finalize"],[32,2,1,"_CPPv4N12MetHistsAlgo12histFinalizeEv","MetHistsAlgo::histFinalize"],[94,2,1,"_CPPv4N12MetHistsAlgo12histFinalizeEv","MetHistsAlgo::histFinalize"],[32,2,1,"_CPPv4N12MetHistsAlgo14histInitializeEv","MetHistsAlgo::histInitialize"],[94,2,1,"_CPPv4N12MetHistsAlgo14histInitializeEv","MetHistsAlgo::histInitialize"],[32,2,1,"_CPPv4N12MetHistsAlgo10initializeEv","MetHistsAlgo::initialize"],[94,2,1,"_CPPv4N12MetHistsAlgo10initializeEv","MetHistsAlgo::initialize"],[32,4,1,"_CPPv4N12MetHistsAlgo11m_detailStrE","MetHistsAlgo::m_detailStr"],[94,4,1,"_CPPv4N12MetHistsAlgo11m_detailStrE","MetHistsAlgo::m_detailStr"],[32,4,1,"_CPPv4N12MetHistsAlgo17m_inContainerNameE","MetHistsAlgo::m_inContainerName"],[94,4,1,"_CPPv4N12MetHistsAlgo17m_inContainerNameE","MetHistsAlgo::m_inContainerName"],[32,4,1,"_CPPv4N12MetHistsAlgo7m_plotsE","MetHistsAlgo::m_plots"],[32,2,1,"_CPPv4N12MetHistsAlgo11postExecuteEv","MetHistsAlgo::postExecute"],[94,2,1,"_CPPv4N12MetHistsAlgo11postExecuteEv","MetHistsAlgo::postExecute"],[32,2,1,"_CPPv4N12MetHistsAlgo8setupJobERN2EL3JobE","MetHistsAlgo::setupJob"],[94,2,1,"_CPPv4N12MetHistsAlgo8setupJobERN2EL3JobE","MetHistsAlgo::setupJob"],[32,3,1,"_CPPv4N12MetHistsAlgo8setupJobERN2EL3JobE","MetHistsAlgo::setupJob::job"],[94,3,1,"_CPPv4N12MetHistsAlgo8setupJobERN2EL3JobE","MetHistsAlgo::setupJob::job"],[33,1,1,"_CPPv48MinixAOD","MinixAOD"],[95,1,1,"_CPPv48MinixAOD","MinixAOD"],[33,2,1,"_CPPv4N8MinixAOD8MinixAODEv","MinixAOD::MinixAOD"],[95,2,1,"_CPPv4N8MinixAOD8MinixAODEv","MinixAOD::MinixAOD"],[33,2,1,"_CPPv4N8MinixAOD11changeInputEb","MinixAOD::changeInput"],[95,2,1,"_CPPv4N8MinixAOD11changeInputEb","MinixAOD::changeInput"],[33,3,1,"_CPPv4N8MinixAOD11changeInputEb","MinixAOD::changeInput::firstFile"],[95,3,1,"_CPPv4N8MinixAOD11changeInputEb","MinixAOD::changeInput::firstFile"],[33,2,1,"_CPPv4N8MinixAOD7executeEv","MinixAOD::execute"],[95,2,1,"_CPPv4N8MinixAOD7executeEv","MinixAOD::execute"],[33,2,1,"_CPPv4N8MinixAOD11fileExecuteEv","MinixAOD::fileExecute"],[95,2,1,"_CPPv4N8MinixAOD11fileExecuteEv","MinixAOD::fileExecute"],[33,2,1,"_CPPv4N8MinixAOD8finalizeEv","MinixAOD::finalize"],[95,2,1,"_CPPv4N8MinixAOD8finalizeEv","MinixAOD::finalize"],[33,2,1,"_CPPv4N8MinixAOD12histFinalizeEv","MinixAOD::histFinalize"],[95,2,1,"_CPPv4N8MinixAOD12histFinalizeEv","MinixAOD::histFinalize"],[33,2,1,"_CPPv4N8MinixAOD14histInitializeEv","MinixAOD::histInitialize"],[95,2,1,"_CPPv4N8MinixAOD14histInitializeEv","MinixAOD::histInitialize"],[33,2,1,"_CPPv4N8MinixAOD10initializeEv","MinixAOD::initialize"],[95,2,1,"_CPPv4N8MinixAOD10initializeEv","MinixAOD::initialize"],[33,4,1,"_CPPv4N8MinixAOD19m_copyCutBookkeeperE","MinixAOD::m_copyCutBookkeeper"],[95,4,1,"_CPPv4N8MinixAOD19m_copyCutBookkeeperE","MinixAOD::m_copyCutBookkeeper"],[33,4,1,"_CPPv4N8MinixAOD18m_copyFileMetaDataE","MinixAOD::m_copyFileMetaData"],[95,4,1,"_CPPv4N8MinixAOD18m_copyFileMetaDataE","MinixAOD::m_copyFileMetaData"],[33,4,1,"_CPPv4N8MinixAOD30m_copyFromStoreToEventKeys_vecE","MinixAOD::m_copyFromStoreToEventKeys_vec"],[33,4,1,"_CPPv4N8MinixAOD17m_copyTriggerInfoE","MinixAOD::m_copyTriggerInfo"],[95,4,1,"_CPPv4N8MinixAOD17m_copyTriggerInfoE","MinixAOD::m_copyTriggerInfo"],[33,4,1,"_CPPv4N8MinixAOD18m_createOutputFileE","MinixAOD::m_createOutputFile"],[95,4,1,"_CPPv4N8MinixAOD18m_createOutputFileE","MinixAOD::m_createOutputFile"],[33,4,1,"_CPPv4N8MinixAOD14m_deepCopyKeysE","MinixAOD::m_deepCopyKeys"],[95,4,1,"_CPPv4N8MinixAOD14m_deepCopyKeysE","MinixAOD::m_deepCopyKeys"],[33,4,1,"_CPPv4N8MinixAOD18m_deepCopyKeys_vecE","MinixAOD::m_deepCopyKeys_vec"],[33,4,1,"_CPPv4N8MinixAOD18m_fileMetaDataToolE","MinixAOD::m_fileMetaDataTool"],[33,4,1,"_CPPv4N8MinixAOD11m_outputCBKE","MinixAOD::m_outputCBK"],[33,4,1,"_CPPv4N8MinixAOD20m_outputCBKContainerE","MinixAOD::m_outputCBKContainer"],[33,4,1,"_CPPv4N8MinixAOD24m_outputCBKContainer_auxE","MinixAOD::m_outputCBKContainer_aux"],[33,4,1,"_CPPv4N8MinixAOD16m_outputFileNameE","MinixAOD::m_outputFileName"],[95,4,1,"_CPPv4N8MinixAOD16m_outputFileNameE","MinixAOD::m_outputFileName"],[33,4,1,"_CPPv4N8MinixAOD22m_outputInCBKContainerE","MinixAOD::m_outputInCBKContainer"],[33,4,1,"_CPPv4N8MinixAOD26m_outputInCBKContainer_auxE","MinixAOD::m_outputInCBKContainer_aux"],[33,4,1,"_CPPv4N8MinixAOD17m_shallowCopyKeysE","MinixAOD::m_shallowCopyKeys"],[95,4,1,"_CPPv4N8MinixAOD17m_shallowCopyKeysE","MinixAOD::m_shallowCopyKeys"],[33,4,1,"_CPPv4N8MinixAOD21m_shallowCopyKeys_vecE","MinixAOD::m_shallowCopyKeys_vec"],[33,4,1,"_CPPv4N8MinixAOD16m_simpleCopyKeysE","MinixAOD::m_simpleCopyKeys"],[95,4,1,"_CPPv4N8MinixAOD16m_simpleCopyKeysE","MinixAOD::m_simpleCopyKeys"],[33,4,1,"_CPPv4N8MinixAOD20m_simpleCopyKeys_vecE","MinixAOD::m_simpleCopyKeys_vec"],[33,4,1,"_CPPv4N8MinixAOD15m_storeCopyKeysE","MinixAOD::m_storeCopyKeys"],[95,4,1,"_CPPv4N8MinixAOD15m_storeCopyKeysE","MinixAOD::m_storeCopyKeys"],[33,4,1,"_CPPv4N8MinixAOD16m_vectorCopyKeysE","MinixAOD::m_vectorCopyKeys"],[95,4,1,"_CPPv4N8MinixAOD16m_vectorCopyKeysE","MinixAOD::m_vectorCopyKeys"],[33,4,1,"_CPPv4N8MinixAOD20m_vectorCopyKeys_vecE","MinixAOD::m_vectorCopyKeys_vec"],[33,2,1,"_CPPv4N8MinixAOD11postExecuteEv","MinixAOD::postExecute"],[95,2,1,"_CPPv4N8MinixAOD11postExecuteEv","MinixAOD::postExecute"],[33,2,1,"_CPPv4N8MinixAOD8setupJobERN2EL3JobE","MinixAOD::setupJob"],[95,2,1,"_CPPv4N8MinixAOD8setupJobERN2EL3JobE","MinixAOD::setupJob"],[33,3,1,"_CPPv4N8MinixAOD8setupJobERN2EL3JobE","MinixAOD::setupJob::job"],[95,3,1,"_CPPv4N8MinixAOD8setupJobERN2EL3JobE","MinixAOD::setupJob::job"],[34,1,1,"_CPPv414MuonCalibrator","MuonCalibrator"],[96,1,1,"_CPPv414MuonCalibrator","MuonCalibrator"],[34,2,1,"_CPPv4N14MuonCalibrator14MuonCalibratorEv","MuonCalibrator::MuonCalibrator"],[96,2,1,"_CPPv4N14MuonCalibrator14MuonCalibratorEv","MuonCalibrator::MuonCalibrator"],[34,2,1,"_CPPv4N14MuonCalibrator11changeInputEb","MuonCalibrator::changeInput"],[96,2,1,"_CPPv4N14MuonCalibrator11changeInputEb","MuonCalibrator::changeInput"],[34,3,1,"_CPPv4N14MuonCalibrator11changeInputEb","MuonCalibrator::changeInput::firstFile"],[96,3,1,"_CPPv4N14MuonCalibrator11changeInputEb","MuonCalibrator::changeInput::firstFile"],[34,2,1,"_CPPv4N14MuonCalibrator7executeEv","MuonCalibrator::execute"],[96,2,1,"_CPPv4N14MuonCalibrator7executeEv","MuonCalibrator::execute"],[34,2,1,"_CPPv4N14MuonCalibrator11fileExecuteEv","MuonCalibrator::fileExecute"],[96,2,1,"_CPPv4N14MuonCalibrator11fileExecuteEv","MuonCalibrator::fileExecute"],[34,2,1,"_CPPv4N14MuonCalibrator8finalizeEv","MuonCalibrator::finalize"],[96,2,1,"_CPPv4N14MuonCalibrator8finalizeEv","MuonCalibrator::finalize"],[34,2,1,"_CPPv4N14MuonCalibrator12histFinalizeEv","MuonCalibrator::histFinalize"],[96,2,1,"_CPPv4N14MuonCalibrator12histFinalizeEv","MuonCalibrator::histFinalize"],[34,2,1,"_CPPv4N14MuonCalibrator14histInitializeEv","MuonCalibrator::histInitialize"],[96,2,1,"_CPPv4N14MuonCalibrator14histInitializeEv","MuonCalibrator::histInitialize"],[34,2,1,"_CPPv4N14MuonCalibrator10initializeEv","MuonCalibrator::initialize"],[96,2,1,"_CPPv4N14MuonCalibrator10initializeEv","MuonCalibrator::initialize"],[34,4,1,"_CPPv4N14MuonCalibrator17m_calibrationModeE","MuonCalibrator::m_calibrationMode"],[96,4,1,"_CPPv4N14MuonCalibrator17m_calibrationModeE","MuonCalibrator::m_calibrationMode"],[34,4,1,"_CPPv4N14MuonCalibrator19m_do2StationsHighPtE","MuonCalibrator::m_do2StationsHighPt"],[96,4,1,"_CPPv4N14MuonCalibrator19m_do2StationsHighPtE","MuonCalibrator::m_do2StationsHighPt"],[34,4,1,"_CPPv4N14MuonCalibrator16m_forceDataCalibE","MuonCalibrator::m_forceDataCalib"],[96,4,1,"_CPPv4N14MuonCalibrator16m_forceDataCalibE","MuonCalibrator::m_forceDataCalib"],[34,4,1,"_CPPv4N14MuonCalibrator17m_inContainerNameE","MuonCalibrator::m_inContainerName"],[96,4,1,"_CPPv4N14MuonCalibrator17m_inContainerNameE","MuonCalibrator::m_inContainerName"],[34,4,1,"_CPPv4N14MuonCalibrator20m_inputAlgoSystNamesE","MuonCalibrator::m_inputAlgoSystNames"],[96,4,1,"_CPPv4N14MuonCalibrator20m_inputAlgoSystNamesE","MuonCalibrator::m_inputAlgoSystNames"],[34,4,1,"_CPPv4N14MuonCalibrator11m_isRun3GeoE","MuonCalibrator::m_isRun3Geo"],[96,4,1,"_CPPv4N14MuonCalibrator11m_isRun3GeoE","MuonCalibrator::m_isRun3Geo"],[34,4,1,"_CPPv4N14MuonCalibrator28m_muonCalibrationTool_handleE","MuonCalibrator::m_muonCalibrationTool_handle"],[34,4,1,"_CPPv4N14MuonCalibrator10m_numEventE","MuonCalibrator::m_numEvent"],[34,4,1,"_CPPv4N14MuonCalibrator11m_numObjectE","MuonCalibrator::m_numObject"],[34,4,1,"_CPPv4N14MuonCalibrator21m_outAuxContainerNameE","MuonCalibrator::m_outAuxContainerName"],[34,4,1,"_CPPv4N14MuonCalibrator18m_outContainerNameE","MuonCalibrator::m_outContainerName"],[96,4,1,"_CPPv4N14MuonCalibrator18m_outContainerNameE","MuonCalibrator::m_outContainerName"],[34,4,1,"_CPPv4N14MuonCalibrator23m_outSCAuxContainerNameE","MuonCalibrator::m_outSCAuxContainerName"],[34,4,1,"_CPPv4N14MuonCalibrator20m_outSCContainerNameE","MuonCalibrator::m_outSCContainerName"],[34,4,1,"_CPPv4N14MuonCalibrator21m_outputAlgoSystNamesE","MuonCalibrator::m_outputAlgoSystNames"],[96,4,1,"_CPPv4N14MuonCalibrator21m_outputAlgoSystNamesE","MuonCalibrator::m_outputAlgoSystNames"],[34,4,1,"_CPPv4N14MuonCalibrator6m_sortE","MuonCalibrator::m_sort"],[96,4,1,"_CPPv4N14MuonCalibrator6m_sortE","MuonCalibrator::m_sort"],[34,4,1,"_CPPv4N14MuonCalibrator10m_systListE","MuonCalibrator::m_systList"],[34,4,1,"_CPPv4N14MuonCalibrator10m_systNameE","MuonCalibrator::m_systName"],[96,4,1,"_CPPv4N14MuonCalibrator10m_systNameE","MuonCalibrator::m_systName"],[34,4,1,"_CPPv4N14MuonCalibrator9m_systValE","MuonCalibrator::m_systVal"],[96,4,1,"_CPPv4N14MuonCalibrator9m_systValE","MuonCalibrator::m_systVal"],[34,4,1,"_CPPv4N14MuonCalibrator21m_writeSystToMetadataE","MuonCalibrator::m_writeSystToMetadata"],[96,4,1,"_CPPv4N14MuonCalibrator21m_writeSystToMetadataE","MuonCalibrator::m_writeSystToMetadata"],[34,2,1,"_CPPv4N14MuonCalibrator11postExecuteEv","MuonCalibrator::postExecute"],[96,2,1,"_CPPv4N14MuonCalibrator11postExecuteEv","MuonCalibrator::postExecute"],[34,2,1,"_CPPv4N14MuonCalibrator8setupJobERN2EL3JobE","MuonCalibrator::setupJob"],[96,2,1,"_CPPv4N14MuonCalibrator8setupJobERN2EL3JobE","MuonCalibrator::setupJob"],[34,3,1,"_CPPv4N14MuonCalibrator8setupJobERN2EL3JobE","MuonCalibrator::setupJob::job"],[96,3,1,"_CPPv4N14MuonCalibrator8setupJobERN2EL3JobE","MuonCalibrator::setupJob::job"],[35,1,1,"_CPPv423MuonEfficiencyCorrector","MuonEfficiencyCorrector"],[97,1,1,"_CPPv423MuonEfficiencyCorrector","MuonEfficiencyCorrector"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector23MuonEfficiencyCorrectorEv","MuonEfficiencyCorrector::MuonEfficiencyCorrector"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector23MuonEfficiencyCorrectorEv","MuonEfficiencyCorrector::MuonEfficiencyCorrector"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector11changeInputEb","MuonEfficiencyCorrector::changeInput"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector11changeInputEb","MuonEfficiencyCorrector::changeInput"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector11changeInputEb","MuonEfficiencyCorrector::changeInput::firstFile"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector11changeInputEb","MuonEfficiencyCorrector::changeInput::firstFile"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector7executeEv","MuonEfficiencyCorrector::execute"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector7executeEv","MuonEfficiencyCorrector::execute"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::eventInfo"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::eventInfo"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::inputMuons"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::inputMuons"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::nominal"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::nominal"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::writeSystNames"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD13MuonContainerEbb","MuonEfficiencyCorrector::executeSF::writeSystNames"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector11fileExecuteEv","MuonEfficiencyCorrector::fileExecute"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector11fileExecuteEv","MuonEfficiencyCorrector::fileExecute"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector8finalizeEv","MuonEfficiencyCorrector::finalize"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector8finalizeEv","MuonEfficiencyCorrector::finalize"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector12histFinalizeEv","MuonEfficiencyCorrector::histFinalize"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector12histFinalizeEv","MuonEfficiencyCorrector::histFinalize"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector14histInitializeEv","MuonEfficiencyCorrector::histInitialize"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector14histInitializeEv","MuonEfficiencyCorrector::histInitialize"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector10initializeEv","MuonEfficiencyCorrector::initialize"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector10initializeEv","MuonEfficiencyCorrector::initialize"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_AllowZeroSFE","MuonEfficiencyCorrector::m_AllowZeroSF"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_AllowZeroSFE","MuonEfficiencyCorrector::m_AllowZeroSF"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector12m_MuTrigLegsE","MuonEfficiencyCorrector::m_MuTrigLegs"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector12m_MuTrigLegsE","MuonEfficiencyCorrector::m_MuTrigLegs"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector20m_SingleMuTriggerMapE","MuonEfficiencyCorrector::m_SingleMuTriggerMap"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_TTVAEffSF_tool_nameE","MuonEfficiencyCorrector::m_TTVAEffSF_tool_name"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector17m_WorkingPointIsoE","MuonEfficiencyCorrector::m_WorkingPointIso"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector17m_WorkingPointIsoE","MuonEfficiencyCorrector::m_WorkingPointIso"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector18m_WorkingPointRecoE","MuonEfficiencyCorrector::m_WorkingPointReco"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector18m_WorkingPointRecoE","MuonEfficiencyCorrector::m_WorkingPointReco"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector18m_WorkingPointTTVAE","MuonEfficiencyCorrector::m_WorkingPointTTVA"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector18m_WorkingPointTTVAE","MuonEfficiencyCorrector::m_WorkingPointTTVA"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector7m_doLRTE","MuonEfficiencyCorrector::m_doLRT"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector7m_doLRTE","MuonEfficiencyCorrector::m_doLRT"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector17m_inContainerNameE","MuonEfficiencyCorrector::m_inContainerName"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector17m_inContainerNameE","MuonEfficiencyCorrector::m_inContainerName"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_inputSystNamesMuonsE","MuonEfficiencyCorrector::m_inputSystNamesMuons"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_inputSystNamesMuonsE","MuonEfficiencyCorrector::m_inputSystNamesMuons"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector20m_isoEffSF_tool_nameE","MuonEfficiencyCorrector::m_isoEffSF_tool_name"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_muIsoSF_toolE","MuonEfficiencyCorrector::m_muIsoSF_tool"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector15m_muRecoSF_toolE","MuonEfficiencyCorrector::m_muRecoSF_tool"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector15m_muTTVASF_toolE","MuonEfficiencyCorrector::m_muTTVASF_tool"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector15m_muTrigSF_toolE","MuonEfficiencyCorrector::m_muTrigSF_tool"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector10m_numEventE","MuonEfficiencyCorrector::m_numEvent"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector11m_numObjectE","MuonEfficiencyCorrector::m_numObject"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector20m_outputSystNamesIsoE","MuonEfficiencyCorrector::m_outputSystNamesIso"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector20m_outputSystNamesIsoE","MuonEfficiencyCorrector::m_outputSystNamesIso"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesRecoE","MuonEfficiencyCorrector::m_outputSystNamesReco"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesRecoE","MuonEfficiencyCorrector::m_outputSystNamesReco"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesTTVAE","MuonEfficiencyCorrector::m_outputSystNamesTTVA"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesTTVAE","MuonEfficiencyCorrector::m_outputSystNamesTTVA"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesTrigE","MuonEfficiencyCorrector::m_outputSystNamesTrig"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_outputSystNamesTrigE","MuonEfficiencyCorrector::m_outputSystNamesTrig"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector25m_outputSystNamesTrigBaseE","MuonEfficiencyCorrector::m_outputSystNamesTrigBase"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector22m_overrideCalibReleaseE","MuonEfficiencyCorrector::m_overrideCalibRelease"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector22m_overrideCalibReleaseE","MuonEfficiencyCorrector::m_overrideCalibRelease"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector20m_pileup_tool_handleE","MuonEfficiencyCorrector::m_pileup_tool_handle"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_recoEffSF_tool_nameE","MuonEfficiencyCorrector::m_recoEffSF_tool_name"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systListIsoE","MuonEfficiencyCorrector::m_systListIso"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systListRecoE","MuonEfficiencyCorrector::m_systListReco"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systListTTVAE","MuonEfficiencyCorrector::m_systListTTVA"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systListTrigE","MuonEfficiencyCorrector::m_systListTrig"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systNameIsoE","MuonEfficiencyCorrector::m_systNameIso"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systNameIsoE","MuonEfficiencyCorrector::m_systNameIso"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameRecoE","MuonEfficiencyCorrector::m_systNameReco"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameRecoE","MuonEfficiencyCorrector::m_systNameReco"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameTTVAE","MuonEfficiencyCorrector::m_systNameTTVA"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameTTVAE","MuonEfficiencyCorrector::m_systNameTTVA"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameTrigE","MuonEfficiencyCorrector::m_systNameTrig"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector14m_systNameTrigE","MuonEfficiencyCorrector::m_systNameTrig"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector12m_systValIsoE","MuonEfficiencyCorrector::m_systValIso"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector12m_systValIsoE","MuonEfficiencyCorrector::m_systValIso"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValRecoE","MuonEfficiencyCorrector::m_systValReco"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValRecoE","MuonEfficiencyCorrector::m_systValReco"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValTTVAE","MuonEfficiencyCorrector::m_systValTTVA"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValTTVAE","MuonEfficiencyCorrector::m_systValTTVA"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValTrigE","MuonEfficiencyCorrector::m_systValTrig"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector13m_systValTrigE","MuonEfficiencyCorrector::m_systValTrig"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_trigEffSF_tool_nameE","MuonEfficiencyCorrector::m_trigEffSF_tool_name"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector22m_usePerMuonTriggerSFsE","MuonEfficiencyCorrector::m_usePerMuonTriggerSFs"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector22m_usePerMuonTriggerSFsE","MuonEfficiencyCorrector::m_usePerMuonTriggerSFs"],[35,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_writeSystToMetadataE","MuonEfficiencyCorrector::m_writeSystToMetadata"],[97,4,1,"_CPPv4N23MuonEfficiencyCorrector21m_writeSystToMetadataE","MuonEfficiencyCorrector::m_writeSystToMetadata"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector11postExecuteEv","MuonEfficiencyCorrector::postExecute"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector11postExecuteEv","MuonEfficiencyCorrector::postExecute"],[35,2,1,"_CPPv4N23MuonEfficiencyCorrector8setupJobERN2EL3JobE","MuonEfficiencyCorrector::setupJob"],[97,2,1,"_CPPv4N23MuonEfficiencyCorrector8setupJobERN2EL3JobE","MuonEfficiencyCorrector::setupJob"],[35,3,1,"_CPPv4N23MuonEfficiencyCorrector8setupJobERN2EL3JobE","MuonEfficiencyCorrector::setupJob::job"],[97,3,1,"_CPPv4N23MuonEfficiencyCorrector8setupJobERN2EL3JobE","MuonEfficiencyCorrector::setupJob::job"],[37,1,1,"_CPPv413MuonHistsAlgo","MuonHistsAlgo"],[98,1,1,"_CPPv413MuonHistsAlgo","MuonHistsAlgo"],[37,2,1,"_CPPv4N13MuonHistsAlgo8AddHistsENSt6stringE","MuonHistsAlgo::AddHists"],[98,2,1,"_CPPv4N13MuonHistsAlgo8AddHistsENSt6stringE","MuonHistsAlgo::AddHists"],[37,3,1,"_CPPv4N13MuonHistsAlgo8AddHistsENSt6stringE","MuonHistsAlgo::AddHists::name"],[98,3,1,"_CPPv4N13MuonHistsAlgo8AddHistsENSt6stringE","MuonHistsAlgo::AddHists::name"],[37,2,1,"_CPPv4N13MuonHistsAlgo13MuonHistsAlgoEv","MuonHistsAlgo::MuonHistsAlgo"],[98,2,1,"_CPPv4N13MuonHistsAlgo13MuonHistsAlgoEv","MuonHistsAlgo::MuonHistsAlgo"],[37,2,1,"_CPPv4N13MuonHistsAlgo7executeEv","MuonHistsAlgo::execute"],[98,2,1,"_CPPv4N13MuonHistsAlgo7executeEv","MuonHistsAlgo::execute"],[37,2,1,"_CPPv4N13MuonHistsAlgo8setupJobERN2EL3JobE","MuonHistsAlgo::setupJob"],[98,2,1,"_CPPv4N13MuonHistsAlgo8setupJobERN2EL3JobE","MuonHistsAlgo::setupJob"],[37,3,1,"_CPPv4N13MuonHistsAlgo8setupJobERN2EL3JobE","MuonHistsAlgo::setupJob::job"],[98,3,1,"_CPPv4N13MuonHistsAlgo8setupJobERN2EL3JobE","MuonHistsAlgo::setupJob::job"],[38,1,1,"_CPPv421MuonInFatJetCorrector","MuonInFatJetCorrector"],[99,1,1,"_CPPv421MuonInFatJetCorrector","MuonInFatJetCorrector"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme11CalorimeterE","MuonInFatJetCorrector::Calorimeter"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme8CombinedE","MuonInFatJetCorrector::Combined"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector21MuonInFatJetCorrectorEv","MuonInFatJetCorrector::MuonInFatJetCorrector"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector21MuonInFatJetCorrectorEv","MuonInFatJetCorrector::MuonInFatJetCorrector"],[38,7,1,"_CPPv4N21MuonInFatJetCorrector6SchemeE","MuonInFatJetCorrector::Scheme"],[99,7,1,"_CPPv4N21MuonInFatJetCorrector6SchemeE","MuonInFatJetCorrector::Scheme"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme11CalorimeterE","MuonInFatJetCorrector::Scheme::Calorimeter"],[99,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme11CalorimeterE","MuonInFatJetCorrector::Scheme::Calorimeter"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme8CombinedE","MuonInFatJetCorrector::Scheme::Combined"],[99,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme8CombinedE","MuonInFatJetCorrector::Scheme::Combined"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme10SimpleMuonE","MuonInFatJetCorrector::Scheme::SimpleMuon"],[99,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme10SimpleMuonE","MuonInFatJetCorrector::Scheme::SimpleMuon"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme13TrackAssistedE","MuonInFatJetCorrector::Scheme::TrackAssisted"],[99,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme13TrackAssistedE","MuonInFatJetCorrector::Scheme::TrackAssisted"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme10SimpleMuonE","MuonInFatJetCorrector::SimpleMuon"],[38,8,1,"_CPPv4N21MuonInFatJetCorrector6Scheme13TrackAssistedE","MuonInFatJetCorrector::TrackAssisted"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector11changeInputEb","MuonInFatJetCorrector::changeInput"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector11changeInputEb","MuonInFatJetCorrector::changeInput"],[38,3,1,"_CPPv4N21MuonInFatJetCorrector11changeInputEb","MuonInFatJetCorrector::changeInput::firstFile"],[99,3,1,"_CPPv4N21MuonInFatJetCorrector11changeInputEb","MuonInFatJetCorrector::changeInput::firstFile"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector7executeEv","MuonInFatJetCorrector::execute"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector7executeEv","MuonInFatJetCorrector::execute"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector11fileExecuteEv","MuonInFatJetCorrector::fileExecute"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector11fileExecuteEv","MuonInFatJetCorrector::fileExecute"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector8finalizeEv","MuonInFatJetCorrector::finalize"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector8finalizeEv","MuonInFatJetCorrector::finalize"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector21getHbbCorrectedVectorERKN4xAOD3JetE","MuonInFatJetCorrector::getHbbCorrectedVector"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector21getHbbCorrectedVectorERKN4xAOD3JetE","MuonInFatJetCorrector::getHbbCorrectedVector"],[38,3,1,"_CPPv4N21MuonInFatJetCorrector21getHbbCorrectedVectorERKN4xAOD3JetE","MuonInFatJetCorrector::getHbbCorrectedVector::jet"],[99,3,1,"_CPPv4N21MuonInFatJetCorrector21getHbbCorrectedVectorERKN4xAOD3JetE","MuonInFatJetCorrector::getHbbCorrectedVector::jet"],[38,2,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom"],[99,2,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom"],[38,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::jet"],[99,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::jet"],[38,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::muons"],[99,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::muons"],[38,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::scheme"],[99,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::scheme"],[38,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::useJMSScale"],[99,3,1,"_CPPv4NK21MuonInFatJetCorrector26getMuonCorrectedJetFourMomERKN4xAOD3JetENSt6vectorIPKN4xAOD4MuonEEE6Schemeb","MuonInFatJetCorrector::getMuonCorrectedJetFourMom::useJMSScale"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector12histFinalizeEv","MuonInFatJetCorrector::histFinalize"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector12histFinalizeEv","MuonInFatJetCorrector::histFinalize"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector14histInitializeEv","MuonInFatJetCorrector::histInitialize"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector14histInitializeEv","MuonInFatJetCorrector::histInitialize"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector10initializeEv","MuonInFatJetCorrector::initialize"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector10initializeEv","MuonInFatJetCorrector::initialize"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector25m_calibratedMassDecoratorE","MuonInFatJetCorrector::m_calibratedMassDecorator"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector29m_calibratedMassDecoratorDataE","MuonInFatJetCorrector::m_calibratedMassDecoratorData"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector29m_calibratedMassDecoratorDataE","MuonInFatJetCorrector::m_calibratedMassDecoratorData"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector32m_calibratedMassDecoratorFullSimE","MuonInFatJetCorrector::m_calibratedMassDecoratorFullSim"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector32m_calibratedMassDecoratorFullSimE","MuonInFatJetCorrector::m_calibratedMassDecoratorFullSim"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector21m_fatJetContainerNameE","MuonInFatJetCorrector::m_fatJetContainerName"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector21m_fatJetContainerNameE","MuonInFatJetCorrector::m_fatJetContainerName"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector11m_inputAlgoE","MuonInFatJetCorrector::m_inputAlgo"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector11m_inputAlgoE","MuonInFatJetCorrector::m_inputAlgo"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector19m_muonContainerNameE","MuonInFatJetCorrector::m_muonContainerName"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector19m_muonContainerNameE","MuonInFatJetCorrector::m_muonContainerName"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector11m_muonDrMaxE","MuonInFatJetCorrector::m_muonDrMax"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector11m_muonDrMaxE","MuonInFatJetCorrector::m_muonDrMax"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector12m_muonEtaMaxE","MuonInFatJetCorrector::m_muonEtaMax"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector12m_muonEtaMaxE","MuonInFatJetCorrector::m_muonEtaMax"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector11m_muonPtMinE","MuonInFatJetCorrector::m_muonPtMin"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector11m_muonPtMinE","MuonInFatJetCorrector::m_muonPtMin"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector23m_trackJetContainerNameE","MuonInFatJetCorrector::m_trackJetContainerName"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector23m_trackJetContainerNameE","MuonInFatJetCorrector::m_trackJetContainerName"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector16m_trackJetEtaMaxE","MuonInFatJetCorrector::m_trackJetEtaMax"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector16m_trackJetEtaMaxE","MuonInFatJetCorrector::m_trackJetEtaMax"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector18m_trackJetLinkNameE","MuonInFatJetCorrector::m_trackJetLinkName"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector18m_trackJetLinkNameE","MuonInFatJetCorrector::m_trackJetLinkName"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector16m_trackJetNConstE","MuonInFatJetCorrector::m_trackJetNConst"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector16m_trackJetNConstE","MuonInFatJetCorrector::m_trackJetNConst"],[38,4,1,"_CPPv4N21MuonInFatJetCorrector15m_trackJetPtMinE","MuonInFatJetCorrector::m_trackJetPtMin"],[99,4,1,"_CPPv4N21MuonInFatJetCorrector15m_trackJetPtMinE","MuonInFatJetCorrector::m_trackJetPtMin"],[38,2,1,"_CPPv4NK21MuonInFatJetCorrector21matchTrackJetsToMuonsEv","MuonInFatJetCorrector::matchTrackJetsToMuons"],[99,2,1,"_CPPv4NK21MuonInFatJetCorrector21matchTrackJetsToMuonsEv","MuonInFatJetCorrector::matchTrackJetsToMuons"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector11postExecuteEv","MuonInFatJetCorrector::postExecute"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector11postExecuteEv","MuonInFatJetCorrector::postExecute"],[38,2,1,"_CPPv4N21MuonInFatJetCorrector8setupJobERN2EL3JobE","MuonInFatJetCorrector::setupJob"],[99,2,1,"_CPPv4N21MuonInFatJetCorrector8setupJobERN2EL3JobE","MuonInFatJetCorrector::setupJob"],[38,3,1,"_CPPv4N21MuonInFatJetCorrector8setupJobERN2EL3JobE","MuonInFatJetCorrector::setupJob::job"],[99,3,1,"_CPPv4N21MuonInFatJetCorrector8setupJobERN2EL3JobE","MuonInFatJetCorrector::setupJob::job"],[39,1,1,"_CPPv412MuonSelector","MuonSelector"],[100,1,1,"_CPPv412MuonSelector","MuonSelector"],[39,2,1,"_CPPv4N12MuonSelector12MuonSelectorEv","MuonSelector::MuonSelector"],[100,2,1,"_CPPv4N12MuonSelector12MuonSelectorEv","MuonSelector::MuonSelector"],[39,2,1,"_CPPv4N12MuonSelector11changeInputEb","MuonSelector::changeInput"],[100,2,1,"_CPPv4N12MuonSelector11changeInputEb","MuonSelector::changeInput"],[39,3,1,"_CPPv4N12MuonSelector11changeInputEb","MuonSelector::changeInput::firstFile"],[100,3,1,"_CPPv4N12MuonSelector11changeInputEb","MuonSelector::changeInput::firstFile"],[39,2,1,"_CPPv4N12MuonSelector7executeEv","MuonSelector::execute"],[100,2,1,"_CPPv4N12MuonSelector7executeEv","MuonSelector::execute"],[39,2,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection"],[100,2,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection"],[39,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::countPass"],[100,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::countPass"],[39,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::inMuons"],[100,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::inMuons"],[39,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::mcEvtWeight"],[100,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::mcEvtWeight"],[39,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::selectedMuons"],[100,3,1,"_CPPv4N12MuonSelector16executeSelectionEPKN4xAOD13MuonContainerEfbP15ConstDataVectorIN4xAOD13MuonContainerEE","MuonSelector::executeSelection::selectedMuons"],[39,2,1,"_CPPv4N12MuonSelector11fileExecuteEv","MuonSelector::fileExecute"],[100,2,1,"_CPPv4N12MuonSelector11fileExecuteEv","MuonSelector::fileExecute"],[39,2,1,"_CPPv4N12MuonSelector8finalizeEv","MuonSelector::finalize"],[100,2,1,"_CPPv4N12MuonSelector8finalizeEv","MuonSelector::finalize"],[39,2,1,"_CPPv4N12MuonSelector12histFinalizeEv","MuonSelector::histFinalize"],[100,2,1,"_CPPv4N12MuonSelector12histFinalizeEv","MuonSelector::histFinalize"],[39,2,1,"_CPPv4N12MuonSelector14histInitializeEv","MuonSelector::histInitialize"],[100,2,1,"_CPPv4N12MuonSelector14histInitializeEv","MuonSelector::histInitialize"],[39,2,1,"_CPPv4N12MuonSelector10initializeEv","MuonSelector::initialize"],[100,2,1,"_CPPv4N12MuonSelector10initializeEv","MuonSelector::initialize"],[39,4,1,"_CPPv4N12MuonSelector18m_CaloBasedIsoTypeE","MuonSelector::m_CaloBasedIsoType"],[100,4,1,"_CPPv4N12MuonSelector18m_CaloBasedIsoTypeE","MuonSelector::m_CaloBasedIsoType"],[39,4,1,"_CPPv4N12MuonSelector12m_CaloIsoEffE","MuonSelector::m_CaloIsoEff"],[100,4,1,"_CPPv4N12MuonSelector12m_CaloIsoEffE","MuonSelector::m_CaloIsoEff"],[39,4,1,"_CPPv4N12MuonSelector9m_IsoKeysE","MuonSelector::m_IsoKeys"],[39,4,1,"_CPPv4N12MuonSelector11m_IsoWPListE","MuonSelector::m_IsoWPList"],[100,4,1,"_CPPv4N12MuonSelector11m_IsoWPListE","MuonSelector::m_IsoWPList"],[39,4,1,"_CPPv4N12MuonSelector13m_MinIsoWPCutE","MuonSelector::m_MinIsoWPCut"],[100,4,1,"_CPPv4N12MuonSelector13m_MinIsoWPCutE","MuonSelector::m_MinIsoWPCut"],[39,4,1,"_CPPv4N12MuonSelector19m_TrackBasedIsoTypeE","MuonSelector::m_TrackBasedIsoType"],[100,4,1,"_CPPv4N12MuonSelector19m_TrackBasedIsoTypeE","MuonSelector::m_TrackBasedIsoType"],[39,4,1,"_CPPv4N12MuonSelector13m_TrackIsoEffE","MuonSelector::m_TrackIsoEff"],[100,4,1,"_CPPv4N12MuonSelector13m_TrackIsoEffE","MuonSelector::m_TrackIsoEff"],[39,4,1,"_CPPv4N12MuonSelector25m_createSelectedContainerE","MuonSelector::m_createSelectedContainer"],[100,4,1,"_CPPv4N12MuonSelector25m_createSelectedContainerE","MuonSelector::m_createSelectedContainer"],[39,4,1,"_CPPv4N12MuonSelector13m_cutflowHistE","MuonSelector::m_cutflowHist"],[39,4,1,"_CPPv4N12MuonSelector14m_cutflowHistWE","MuonSelector::m_cutflowHistW"],[39,4,1,"_CPPv4N12MuonSelector13m_cutflow_binE","MuonSelector::m_cutflow_bin"],[39,4,1,"_CPPv4N12MuonSelector8m_d0_maxE","MuonSelector::m_d0_max"],[100,4,1,"_CPPv4N12MuonSelector8m_d0_maxE","MuonSelector::m_d0_max"],[39,4,1,"_CPPv4N12MuonSelector11m_d0sig_maxE","MuonSelector::m_d0sig_max"],[100,4,1,"_CPPv4N12MuonSelector11m_d0sig_maxE","MuonSelector::m_d0sig_max"],[39,4,1,"_CPPv4N12MuonSelector25m_decorateSelectedObjectsE","MuonSelector::m_decorateSelectedObjects"],[100,4,1,"_CPPv4N12MuonSelector25m_decorateSelectedObjectsE","MuonSelector::m_decorateSelectedObjects"],[39,4,1,"_CPPv4N12MuonSelector16m_diMuTrigChainsE","MuonSelector::m_diMuTrigChains"],[100,4,1,"_CPPv4N12MuonSelector16m_diMuTrigChainsE","MuonSelector::m_diMuTrigChains"],[39,4,1,"_CPPv4N12MuonSelector20m_diMuTrigChainsListE","MuonSelector::m_diMuTrigChainsList"],[39,4,1,"_CPPv4N12MuonSelector13m_doIsolationE","MuonSelector::m_doIsolation"],[100,4,1,"_CPPv4N12MuonSelector13m_doIsolationE","MuonSelector::m_doIsolation"],[39,4,1,"_CPPv4N12MuonSelector7m_doLRTE","MuonSelector::m_doLRT"],[100,4,1,"_CPPv4N12MuonSelector7m_doLRTE","MuonSelector::m_doLRT"],[39,4,1,"_CPPv4N12MuonSelector13m_doTrigMatchE","MuonSelector::m_doTrigMatch"],[39,4,1,"_CPPv4N12MuonSelector9m_eta_maxE","MuonSelector::m_eta_max"],[100,4,1,"_CPPv4N12MuonSelector9m_eta_maxE","MuonSelector::m_eta_max"],[39,4,1,"_CPPv4N12MuonSelector17m_inContainerNameE","MuonSelector::m_inContainerName"],[100,4,1,"_CPPv4N12MuonSelector17m_inContainerNameE","MuonSelector::m_inContainerName"],[39,4,1,"_CPPv4N12MuonSelector20m_inputAlgoSystNamesE","MuonSelector::m_inputAlgoSystNames"],[100,4,1,"_CPPv4N12MuonSelector20m_inputAlgoSystNamesE","MuonSelector::m_inputAlgoSystNames"],[39,4,1,"_CPPv4N12MuonSelector11m_isRun3GeoE","MuonSelector::m_isRun3Geo"],[100,4,1,"_CPPv4N12MuonSelector11m_isRun3GeoE","MuonSelector::m_isRun3Geo"],[39,4,1,"_CPPv4N12MuonSelector14m_isUsedBeforeE","MuonSelector::m_isUsedBefore"],[39,4,1,"_CPPv4N12MuonSelector14m_isoDecSuffixE","MuonSelector::m_isoDecSuffix"],[100,4,1,"_CPPv4N12MuonSelector14m_isoDecSuffixE","MuonSelector::m_isoDecSuffix"],[39,4,1,"_CPPv4N12MuonSelector24m_isolationSelectionToolE","MuonSelector::m_isolationSelectionTool"],[39,4,1,"_CPPv4N12MuonSelector31m_isolationSelectionTool_handleE","MuonSelector::m_isolationSelectionTool_handle"],[39,4,1,"_CPPv4N12MuonSelector14m_merged_muonsE","MuonSelector::m_merged_muons"],[100,4,1,"_CPPv4N12MuonSelector14m_merged_muonsE","MuonSelector::m_merged_muons"],[39,4,1,"_CPPv4N12MuonSelector11m_minDeltaRE","MuonSelector::m_minDeltaR"],[100,4,1,"_CPPv4N12MuonSelector11m_minDeltaRE","MuonSelector::m_minDeltaR"],[39,4,1,"_CPPv4N12MuonSelector18m_mu_cutflowHist_1E","MuonSelector::m_mu_cutflowHist_1"],[39,4,1,"_CPPv4N12MuonSelector18m_mu_cutflowHist_2E","MuonSelector::m_mu_cutflowHist_2"],[39,4,1,"_CPPv4N12MuonSelector16m_mu_cutflow_allE","MuonSelector::m_mu_cutflow_all"],[39,4,1,"_CPPv4N12MuonSelector23m_mu_cutflow_cosmic_cutE","MuonSelector::m_mu_cutflow_cosmic_cut"],[39,4,1,"_CPPv4N12MuonSelector19m_mu_cutflow_d0_cutE","MuonSelector::m_mu_cutflow_d0_cut"],[39,4,1,"_CPPv4N12MuonSelector22m_mu_cutflow_d0sig_cutE","MuonSelector::m_mu_cutflow_d0sig_cut"],[39,4,1,"_CPPv4N12MuonSelector33m_mu_cutflow_eta_and_quaility_cutE","MuonSelector::m_mu_cutflow_eta_and_quaility_cut"],[39,4,1,"_CPPv4N12MuonSelector20m_mu_cutflow_iso_cutE","MuonSelector::m_mu_cutflow_iso_cut"],[39,4,1,"_CPPv4N12MuonSelector22m_mu_cutflow_ptmax_cutE","MuonSelector::m_mu_cutflow_ptmax_cut"],[39,4,1,"_CPPv4N12MuonSelector22m_mu_cutflow_ptmin_cutE","MuonSelector::m_mu_cutflow_ptmin_cut"],[39,4,1,"_CPPv4N12MuonSelector24m_mu_cutflow_ptnan_checkE","MuonSelector::m_mu_cutflow_ptnan_check"],[39,4,1,"_CPPv4N12MuonSelector21m_mu_cutflow_type_cutE","MuonSelector::m_mu_cutflow_type_cut"],[39,4,1,"_CPPv4N12MuonSelector27m_mu_cutflow_z0sintheta_cutE","MuonSelector::m_mu_cutflow_z0sintheta_cut"],[39,4,1,"_CPPv4N12MuonSelector13m_muonQualityE","MuonSelector::m_muonQuality"],[39,4,1,"_CPPv4N12MuonSelector16m_muonQualityStrE","MuonSelector::m_muonQualityStr"],[100,4,1,"_CPPv4N12MuonSelector16m_muonQualityStrE","MuonSelector::m_muonQualityStr"],[39,4,1,"_CPPv4N12MuonSelector26m_muonSelectionTool_handleE","MuonSelector::m_muonSelectionTool_handle"],[39,4,1,"_CPPv4N12MuonSelector12m_nToProcessE","MuonSelector::m_nToProcess"],[100,4,1,"_CPPv4N12MuonSelector12m_nToProcessE","MuonSelector::m_nToProcess"],[39,4,1,"_CPPv4N12MuonSelector10m_numEventE","MuonSelector::m_numEvent"],[39,4,1,"_CPPv4N12MuonSelector14m_numEventPassE","MuonSelector::m_numEventPass"],[39,4,1,"_CPPv4N12MuonSelector11m_numObjectE","MuonSelector::m_numObject"],[39,4,1,"_CPPv4N12MuonSelector15m_numObjectPassE","MuonSelector::m_numObjectPass"],[39,4,1,"_CPPv4N12MuonSelector21m_outAuxContainerNameE","MuonSelector::m_outAuxContainerName"],[100,4,1,"_CPPv4N12MuonSelector21m_outAuxContainerNameE","MuonSelector::m_outAuxContainerName"],[39,4,1,"_CPPv4N12MuonSelector18m_outContainerNameE","MuonSelector::m_outContainerName"],[100,4,1,"_CPPv4N12MuonSelector18m_outContainerNameE","MuonSelector::m_outContainerName"],[39,4,1,"_CPPv4N12MuonSelector21m_outputAlgoSystNamesE","MuonSelector::m_outputAlgoSystNames"],[100,4,1,"_CPPv4N12MuonSelector21m_outputAlgoSystNamesE","MuonSelector::m_outputAlgoSystNames"],[39,4,1,"_CPPv4N12MuonSelector13m_pT_NaNcheckE","MuonSelector::m_pT_NaNcheck"],[100,4,1,"_CPPv4N12MuonSelector13m_pT_NaNcheckE","MuonSelector::m_pT_NaNcheck"],[39,4,1,"_CPPv4N12MuonSelector8m_pT_maxE","MuonSelector::m_pT_max"],[100,4,1,"_CPPv4N12MuonSelector8m_pT_maxE","MuonSelector::m_pT_max"],[39,4,1,"_CPPv4N12MuonSelector8m_pT_minE","MuonSelector::m_pT_min"],[100,4,1,"_CPPv4N12MuonSelector8m_pT_minE","MuonSelector::m_pT_min"],[39,4,1,"_CPPv4N12MuonSelector10m_pass_maxE","MuonSelector::m_pass_max"],[100,4,1,"_CPPv4N12MuonSelector10m_pass_maxE","MuonSelector::m_pass_max"],[39,4,1,"_CPPv4N12MuonSelector10m_pass_minE","MuonSelector::m_pass_min"],[100,4,1,"_CPPv4N12MuonSelector10m_pass_minE","MuonSelector::m_pass_min"],[39,4,1,"_CPPv4N12MuonSelector18m_removeCosmicMuonE","MuonSelector::m_removeCosmicMuon"],[100,4,1,"_CPPv4N12MuonSelector18m_removeCosmicMuonE","MuonSelector::m_removeCosmicMuon"],[39,4,1,"_CPPv4N12MuonSelector20m_removeEventBadMuonE","MuonSelector::m_removeEventBadMuon"],[100,4,1,"_CPPv4N12MuonSelector20m_removeEventBadMuonE","MuonSelector::m_removeEventBadMuon"],[39,4,1,"_CPPv4N12MuonSelector11m_scoreToolE","MuonSelector::m_scoreTool"],[39,4,1,"_CPPv4N12MuonSelector20m_singleMuTrigChainsE","MuonSelector::m_singleMuTrigChains"],[100,4,1,"_CPPv4N12MuonSelector20m_singleMuTrigChainsE","MuonSelector::m_singleMuTrigChains"],[39,4,1,"_CPPv4N12MuonSelector24m_singleMuTrigChainsListE","MuonSelector::m_singleMuTrigChainsList"],[39,4,1,"_CPPv4N12MuonSelector20m_trigDecTool_handleE","MuonSelector::m_trigDecTool_handle"],[39,4,1,"_CPPv4N12MuonSelector17m_trigInputPrefixE","MuonSelector::m_trigInputPrefix"],[100,4,1,"_CPPv4N12MuonSelector17m_trigInputPrefixE","MuonSelector::m_trigInputPrefix"],[39,4,1,"_CPPv4N12MuonSelector26m_trigMuonMatchTool_handleE","MuonSelector::m_trigMuonMatchTool_handle"],[39,4,1,"_CPPv4N12MuonSelector12m_useCutFlowE","MuonSelector::m_useCutFlow"],[100,4,1,"_CPPv4N12MuonSelector12m_useCutFlowE","MuonSelector::m_useCutFlow"],[39,4,1,"_CPPv4N12MuonSelector20m_weightNumEventPassE","MuonSelector::m_weightNumEventPass"],[39,4,1,"_CPPv4N12MuonSelector16m_z0sintheta_maxE","MuonSelector::m_z0sintheta_max"],[100,4,1,"_CPPv4N12MuonSelector16m_z0sintheta_maxE","MuonSelector::m_z0sintheta_max"],[39,2,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts"],[100,2,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts"],[39,3,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts::muon"],[100,3,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts::muon"],[39,3,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts::primaryVertex"],[100,3,1,"_CPPv4N12MuonSelector8passCutsEPKN4xAOD4MuonEPKN4xAOD6VertexE","MuonSelector::passCuts::primaryVertex"],[39,2,1,"_CPPv4N12MuonSelector11postExecuteEv","MuonSelector::postExecute"],[100,2,1,"_CPPv4N12MuonSelector11postExecuteEv","MuonSelector::postExecute"],[39,2,1,"_CPPv4N12MuonSelector8setupJobERN2EL3JobE","MuonSelector::setupJob"],[100,2,1,"_CPPv4N12MuonSelector8setupJobERN2EL3JobE","MuonSelector::setupJob"],[39,3,1,"_CPPv4N12MuonSelector8setupJobERN2EL3JobE","MuonSelector::setupJob::job"],[100,3,1,"_CPPv4N12MuonSelector8setupJobERN2EL3JobE","MuonSelector::setupJob::job"],[39,2,1,"_CPPv4N12MuonSelectorD0Ev","MuonSelector::~MuonSelector"],[100,2,1,"_CPPv4N12MuonSelectorD0Ev","MuonSelector::~MuonSelector"],[41,1,1,"_CPPv414OverlapRemover","OverlapRemover"],[101,1,1,"_CPPv414OverlapRemover","OverlapRemover"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6ELSYSTE","OverlapRemover::ELSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7JETSYSTE","OverlapRemover::JETSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6MUSYSTE","OverlapRemover::MUSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7NOMINALE","OverlapRemover::NOMINAL"],[41,2,1,"_CPPv4N14OverlapRemover14OverlapRemoverEv","OverlapRemover::OverlapRemover"],[101,2,1,"_CPPv4N14OverlapRemover14OverlapRemoverEv","OverlapRemover::OverlapRemover"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6PHSYSTE","OverlapRemover::PHSYST"],[41,7,1,"_CPPv4N14OverlapRemover8SystTypeE","OverlapRemover::SystType"],[101,7,1,"_CPPv4N14OverlapRemover8SystTypeE","OverlapRemover::SystType"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6ELSYSTE","OverlapRemover::SystType::ELSYST"],[101,8,1,"_CPPv4N14OverlapRemover8SystType6ELSYSTE","OverlapRemover::SystType::ELSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7JETSYSTE","OverlapRemover::SystType::JETSYST"],[101,8,1,"_CPPv4N14OverlapRemover8SystType7JETSYSTE","OverlapRemover::SystType::JETSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6MUSYSTE","OverlapRemover::SystType::MUSYST"],[101,8,1,"_CPPv4N14OverlapRemover8SystType6MUSYSTE","OverlapRemover::SystType::MUSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7NOMINALE","OverlapRemover::SystType::NOMINAL"],[101,8,1,"_CPPv4N14OverlapRemover8SystType7NOMINALE","OverlapRemover::SystType::NOMINAL"],[41,8,1,"_CPPv4N14OverlapRemover8SystType6PHSYSTE","OverlapRemover::SystType::PHSYST"],[101,8,1,"_CPPv4N14OverlapRemover8SystType6PHSYSTE","OverlapRemover::SystType::PHSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7TAUSYSTE","OverlapRemover::SystType::TAUSYST"],[101,8,1,"_CPPv4N14OverlapRemover8SystType7TAUSYSTE","OverlapRemover::SystType::TAUSYST"],[41,8,1,"_CPPv4N14OverlapRemover8SystType7TAUSYSTE","OverlapRemover::TAUSYST"],[41,2,1,"_CPPv4N14OverlapRemover11changeInputEb","OverlapRemover::changeInput"],[101,2,1,"_CPPv4N14OverlapRemover11changeInputEb","OverlapRemover::changeInput"],[41,3,1,"_CPPv4N14OverlapRemover11changeInputEb","OverlapRemover::changeInput::firstFile"],[101,3,1,"_CPPv4N14OverlapRemover11changeInputEb","OverlapRemover::changeInput::firstFile"],[41,2,1,"_CPPv4N14OverlapRemover7executeEv","OverlapRemover::execute"],[101,2,1,"_CPPv4N14OverlapRemover7executeEv","OverlapRemover::execute"],[41,2,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR"],[101,2,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inElectrons"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inElectrons"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inJets"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inJets"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inMuons"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inMuons"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inPhotons"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inPhotons"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inTaus"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::inTaus"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::sysVec"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::sysVec"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::sysVecOut"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::sysVecOut"],[41,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::syst_type"],[101,3,1,"_CPPv4N14OverlapRemover9executeOREPKN4xAOD17ElectronContainerEPKN4xAOD13MuonContainerEPKN4xAOD12JetContainerEPKN4xAOD15PhotonContainerEPKN4xAOD15TauJetContainerE8SystTypePNSt6vectorINSt6stringEEEPNSt6vectorINSt6stringEEE","OverlapRemover::executeOR::syst_type"],[41,2,1,"_CPPv4N14OverlapRemover11fileExecuteEv","OverlapRemover::fileExecute"],[101,2,1,"_CPPv4N14OverlapRemover11fileExecuteEv","OverlapRemover::fileExecute"],[41,2,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow"],[101,2,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow"],[41,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::objCont"],[101,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::objCont"],[41,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::overlapFlag"],[101,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::overlapFlag"],[41,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::selectFlag"],[101,3,1,"_CPPv4N14OverlapRemover17fillObjectCutflowEPKN4xAOD18IParticleContainerERKNSt6stringERKNSt6stringE","OverlapRemover::fillObjectCutflow::selectFlag"],[41,2,1,"_CPPv4N14OverlapRemover8finalizeEv","OverlapRemover::finalize"],[101,2,1,"_CPPv4N14OverlapRemover8finalizeEv","OverlapRemover::finalize"],[41,2,1,"_CPPv4N14OverlapRemover12histFinalizeEv","OverlapRemover::histFinalize"],[101,2,1,"_CPPv4N14OverlapRemover12histFinalizeEv","OverlapRemover::histFinalize"],[41,2,1,"_CPPv4N14OverlapRemover14histInitializeEv","OverlapRemover::histInitialize"],[101,2,1,"_CPPv4N14OverlapRemover14histInitializeEv","OverlapRemover::histInitialize"],[41,2,1,"_CPPv4N14OverlapRemover10initializeEv","OverlapRemover::initialize"],[101,2,1,"_CPPv4N14OverlapRemover10initializeEv","OverlapRemover::initialize"],[41,4,1,"_CPPv4N14OverlapRemover11m_ORToolboxE","OverlapRemover::m_ORToolbox"],[101,4,1,"_CPPv4N14OverlapRemover11m_ORToolboxE","OverlapRemover::m_ORToolbox"],[41,4,1,"_CPPv4N14OverlapRemover12m_applyRelPtE","OverlapRemover::m_applyRelPt"],[101,4,1,"_CPPv4N14OverlapRemover12m_applyRelPtE","OverlapRemover::m_applyRelPt"],[41,4,1,"_CPPv4N14OverlapRemover8m_bTagWPE","OverlapRemover::m_bTagWP"],[101,4,1,"_CPPv4N14OverlapRemover8m_bTagWPE","OverlapRemover::m_bTagWP"],[41,4,1,"_CPPv4N14OverlapRemover26m_createSelectedContainersE","OverlapRemover::m_createSelectedContainers"],[101,4,1,"_CPPv4N14OverlapRemover26m_createSelectedContainersE","OverlapRemover::m_createSelectedContainers"],[41,4,1,"_CPPv4N14OverlapRemover7m_decorE","OverlapRemover::m_decor"],[101,4,1,"_CPPv4N14OverlapRemover7m_decorE","OverlapRemover::m_decor"],[41,4,1,"_CPPv4N14OverlapRemover25m_decorateSelectedObjectsE","OverlapRemover::m_decorateSelectedObjects"],[101,4,1,"_CPPv4N14OverlapRemover25m_decorateSelectedObjectsE","OverlapRemover::m_decorateSelectedObjects"],[41,4,1,"_CPPv4N14OverlapRemover12m_doEleEleORE","OverlapRemover::m_doEleEleOR"],[101,4,1,"_CPPv4N14OverlapRemover12m_doEleEleORE","OverlapRemover::m_doEleEleOR"],[41,4,1,"_CPPv4N14OverlapRemover18m_el_cutflowHist_1E","OverlapRemover::m_el_cutflowHist_1"],[101,4,1,"_CPPv4N14OverlapRemover18m_el_cutflowHist_1E","OverlapRemover::m_el_cutflowHist_1"],[41,4,1,"_CPPv4N14OverlapRemover19m_el_cutflow_OR_cutE","OverlapRemover::m_el_cutflow_OR_cut"],[101,4,1,"_CPPv4N14OverlapRemover19m_el_cutflow_OR_cutE","OverlapRemover::m_el_cutflow_OR_cut"],[41,4,1,"_CPPv4N14OverlapRemover27m_inContainerName_ElectronsE","OverlapRemover::m_inContainerName_Electrons"],[101,4,1,"_CPPv4N14OverlapRemover27m_inContainerName_ElectronsE","OverlapRemover::m_inContainerName_Electrons"],[41,4,1,"_CPPv4N14OverlapRemover22m_inContainerName_JetsE","OverlapRemover::m_inContainerName_Jets"],[101,4,1,"_CPPv4N14OverlapRemover22m_inContainerName_JetsE","OverlapRemover::m_inContainerName_Jets"],[41,4,1,"_CPPv4N14OverlapRemover23m_inContainerName_MuonsE","OverlapRemover::m_inContainerName_Muons"],[101,4,1,"_CPPv4N14OverlapRemover23m_inContainerName_MuonsE","OverlapRemover::m_inContainerName_Muons"],[41,4,1,"_CPPv4N14OverlapRemover25m_inContainerName_PhotonsE","OverlapRemover::m_inContainerName_Photons"],[101,4,1,"_CPPv4N14OverlapRemover25m_inContainerName_PhotonsE","OverlapRemover::m_inContainerName_Photons"],[41,4,1,"_CPPv4N14OverlapRemover22m_inContainerName_TausE","OverlapRemover::m_inContainerName_Taus"],[101,4,1,"_CPPv4N14OverlapRemover22m_inContainerName_TausE","OverlapRemover::m_inContainerName_Taus"],[41,4,1,"_CPPv4N14OverlapRemover20m_inputAlgoElectronsE","OverlapRemover::m_inputAlgoElectrons"],[101,4,1,"_CPPv4N14OverlapRemover20m_inputAlgoElectronsE","OverlapRemover::m_inputAlgoElectrons"],[41,4,1,"_CPPv4N14OverlapRemover15m_inputAlgoJetsE","OverlapRemover::m_inputAlgoJets"],[101,4,1,"_CPPv4N14OverlapRemover15m_inputAlgoJetsE","OverlapRemover::m_inputAlgoJets"],[41,4,1,"_CPPv4N14OverlapRemover16m_inputAlgoMuonsE","OverlapRemover::m_inputAlgoMuons"],[101,4,1,"_CPPv4N14OverlapRemover16m_inputAlgoMuonsE","OverlapRemover::m_inputAlgoMuons"],[41,4,1,"_CPPv4N14OverlapRemover18m_inputAlgoPhotonsE","OverlapRemover::m_inputAlgoPhotons"],[101,4,1,"_CPPv4N14OverlapRemover18m_inputAlgoPhotonsE","OverlapRemover::m_inputAlgoPhotons"],[41,4,1,"_CPPv4N14OverlapRemover15m_inputAlgoTausE","OverlapRemover::m_inputAlgoTaus"],[101,4,1,"_CPPv4N14OverlapRemover15m_inputAlgoTausE","OverlapRemover::m_inputAlgoTaus"],[41,4,1,"_CPPv4N14OverlapRemover19m_jet_cutflowHist_1E","OverlapRemover::m_jet_cutflowHist_1"],[101,4,1,"_CPPv4N14OverlapRemover19m_jet_cutflowHist_1E","OverlapRemover::m_jet_cutflowHist_1"],[41,4,1,"_CPPv4N14OverlapRemover20m_jet_cutflow_OR_cutE","OverlapRemover::m_jet_cutflow_OR_cut"],[101,4,1,"_CPPv4N14OverlapRemover20m_jet_cutflow_OR_cutE","OverlapRemover::m_jet_cutflow_OR_cut"],[41,4,1,"_CPPv4N14OverlapRemover10m_lepFavWPE","OverlapRemover::m_lepFavWP"],[101,4,1,"_CPPv4N14OverlapRemover10m_lepFavWPE","OverlapRemover::m_lepFavWP"],[41,4,1,"_CPPv4N14OverlapRemover20m_linkOverlapObjectsE","OverlapRemover::m_linkOverlapObjects"],[101,4,1,"_CPPv4N14OverlapRemover20m_linkOverlapObjectsE","OverlapRemover::m_linkOverlapObjects"],[41,4,1,"_CPPv4N14OverlapRemover18m_mu_cutflowHist_1E","OverlapRemover::m_mu_cutflowHist_1"],[101,4,1,"_CPPv4N14OverlapRemover18m_mu_cutflowHist_1E","OverlapRemover::m_mu_cutflowHist_1"],[41,4,1,"_CPPv4N14OverlapRemover19m_mu_cutflow_OR_cutE","OverlapRemover::m_mu_cutflow_OR_cut"],[101,4,1,"_CPPv4N14OverlapRemover19m_mu_cutflow_OR_cutE","OverlapRemover::m_mu_cutflow_OR_cut"],[41,4,1,"_CPPv4N14OverlapRemover10m_numEventE","OverlapRemover::m_numEvent"],[101,4,1,"_CPPv4N14OverlapRemover10m_numEventE","OverlapRemover::m_numEvent"],[41,4,1,"_CPPv4N14OverlapRemover14m_numEventPassE","OverlapRemover::m_numEventPass"],[101,4,1,"_CPPv4N14OverlapRemover14m_numEventPassE","OverlapRemover::m_numEventPass"],[41,4,1,"_CPPv4N14OverlapRemover11m_numObjectE","OverlapRemover::m_numObject"],[101,4,1,"_CPPv4N14OverlapRemover11m_numObjectE","OverlapRemover::m_numObject"],[41,4,1,"_CPPv4N14OverlapRemover15m_numObjectPassE","OverlapRemover::m_numObjectPass"],[101,4,1,"_CPPv4N14OverlapRemover15m_numObjectPassE","OverlapRemover::m_numObjectPass"],[41,4,1,"_CPPv4N14OverlapRemover31m_outAuxContainerName_ElectronsE","OverlapRemover::m_outAuxContainerName_Electrons"],[101,4,1,"_CPPv4N14OverlapRemover31m_outAuxContainerName_ElectronsE","OverlapRemover::m_outAuxContainerName_Electrons"],[41,4,1,"_CPPv4N14OverlapRemover26m_outAuxContainerName_JetsE","OverlapRemover::m_outAuxContainerName_Jets"],[101,4,1,"_CPPv4N14OverlapRemover26m_outAuxContainerName_JetsE","OverlapRemover::m_outAuxContainerName_Jets"],[41,4,1,"_CPPv4N14OverlapRemover27m_outAuxContainerName_MuonsE","OverlapRemover::m_outAuxContainerName_Muons"],[101,4,1,"_CPPv4N14OverlapRemover27m_outAuxContainerName_MuonsE","OverlapRemover::m_outAuxContainerName_Muons"],[41,4,1,"_CPPv4N14OverlapRemover29m_outAuxContainerName_PhotonsE","OverlapRemover::m_outAuxContainerName_Photons"],[101,4,1,"_CPPv4N14OverlapRemover29m_outAuxContainerName_PhotonsE","OverlapRemover::m_outAuxContainerName_Photons"],[41,4,1,"_CPPv4N14OverlapRemover26m_outAuxContainerName_TausE","OverlapRemover::m_outAuxContainerName_Taus"],[101,4,1,"_CPPv4N14OverlapRemover26m_outAuxContainerName_TausE","OverlapRemover::m_outAuxContainerName_Taus"],[41,4,1,"_CPPv4N14OverlapRemover28m_outContainerName_ElectronsE","OverlapRemover::m_outContainerName_Electrons"],[101,4,1,"_CPPv4N14OverlapRemover28m_outContainerName_ElectronsE","OverlapRemover::m_outContainerName_Electrons"],[41,4,1,"_CPPv4N14OverlapRemover23m_outContainerName_JetsE","OverlapRemover::m_outContainerName_Jets"],[101,4,1,"_CPPv4N14OverlapRemover23m_outContainerName_JetsE","OverlapRemover::m_outContainerName_Jets"],[41,4,1,"_CPPv4N14OverlapRemover24m_outContainerName_MuonsE","OverlapRemover::m_outContainerName_Muons"],[101,4,1,"_CPPv4N14OverlapRemover24m_outContainerName_MuonsE","OverlapRemover::m_outContainerName_Muons"],[41,4,1,"_CPPv4N14OverlapRemover26m_outContainerName_PhotonsE","OverlapRemover::m_outContainerName_Photons"],[101,4,1,"_CPPv4N14OverlapRemover26m_outContainerName_PhotonsE","OverlapRemover::m_outContainerName_Photons"],[41,4,1,"_CPPv4N14OverlapRemover23m_outContainerName_TausE","OverlapRemover::m_outContainerName_Taus"],[101,4,1,"_CPPv4N14OverlapRemover23m_outContainerName_TausE","OverlapRemover::m_outContainerName_Taus"],[41,4,1,"_CPPv4N14OverlapRemover21m_outputAlgoSystNamesE","OverlapRemover::m_outputAlgoSystNames"],[101,4,1,"_CPPv4N14OverlapRemover21m_outputAlgoSystNamesE","OverlapRemover::m_outputAlgoSystNames"],[41,4,1,"_CPPv4N14OverlapRemover18m_ph_cutflowHist_1E","OverlapRemover::m_ph_cutflowHist_1"],[101,4,1,"_CPPv4N14OverlapRemover18m_ph_cutflowHist_1E","OverlapRemover::m_ph_cutflowHist_1"],[41,4,1,"_CPPv4N14OverlapRemover19m_ph_cutflow_OR_cutE","OverlapRemover::m_ph_cutflow_OR_cut"],[101,4,1,"_CPPv4N14OverlapRemover19m_ph_cutflow_OR_cutE","OverlapRemover::m_ph_cutflow_OR_cut"],[41,4,1,"_CPPv4N14OverlapRemover19m_tau_cutflowHist_1E","OverlapRemover::m_tau_cutflowHist_1"],[101,4,1,"_CPPv4N14OverlapRemover19m_tau_cutflowHist_1E","OverlapRemover::m_tau_cutflowHist_1"],[41,4,1,"_CPPv4N14OverlapRemover20m_tau_cutflow_OR_cutE","OverlapRemover::m_tau_cutflow_OR_cut"],[101,4,1,"_CPPv4N14OverlapRemover20m_tau_cutflow_OR_cutE","OverlapRemover::m_tau_cutflow_OR_cut"],[41,4,1,"_CPPv4N14OverlapRemover19m_useBoostedLeptonsE","OverlapRemover::m_useBoostedLeptons"],[101,4,1,"_CPPv4N14OverlapRemover19m_useBoostedLeptonsE","OverlapRemover::m_useBoostedLeptons"],[41,4,1,"_CPPv4N14OverlapRemover12m_useCutFlowE","OverlapRemover::m_useCutFlow"],[101,4,1,"_CPPv4N14OverlapRemover12m_useCutFlowE","OverlapRemover::m_useCutFlow"],[41,4,1,"_CPPv4N14OverlapRemover14m_useElectronsE","OverlapRemover::m_useElectrons"],[101,4,1,"_CPPv4N14OverlapRemover14m_useElectronsE","OverlapRemover::m_useElectrons"],[41,4,1,"_CPPv4N14OverlapRemover10m_useMuonsE","OverlapRemover::m_useMuons"],[101,4,1,"_CPPv4N14OverlapRemover10m_useMuonsE","OverlapRemover::m_useMuons"],[41,4,1,"_CPPv4N14OverlapRemover12m_usePhotonsE","OverlapRemover::m_usePhotons"],[101,4,1,"_CPPv4N14OverlapRemover12m_usePhotonsE","OverlapRemover::m_usePhotons"],[41,4,1,"_CPPv4N14OverlapRemover13m_useSelectedE","OverlapRemover::m_useSelected"],[101,4,1,"_CPPv4N14OverlapRemover13m_useSelectedE","OverlapRemover::m_useSelected"],[41,4,1,"_CPPv4N14OverlapRemover9m_useTausE","OverlapRemover::m_useTaus"],[101,4,1,"_CPPv4N14OverlapRemover9m_useTausE","OverlapRemover::m_useTaus"],[41,4,1,"_CPPv4N14OverlapRemover20m_weightNumEventPassE","OverlapRemover::m_weightNumEventPass"],[101,4,1,"_CPPv4N14OverlapRemover20m_weightNumEventPassE","OverlapRemover::m_weightNumEventPass"],[41,2,1,"_CPPv4N14OverlapRemover11postExecuteEv","OverlapRemover::postExecute"],[101,2,1,"_CPPv4N14OverlapRemover11postExecuteEv","OverlapRemover::postExecute"],[41,2,1,"_CPPv4N14OverlapRemover11setCountersEv","OverlapRemover::setCounters"],[101,2,1,"_CPPv4N14OverlapRemover11setCountersEv","OverlapRemover::setCounters"],[41,2,1,"_CPPv4N14OverlapRemover14setCutFlowHistEv","OverlapRemover::setCutFlowHist"],[101,2,1,"_CPPv4N14OverlapRemover14setCutFlowHistEv","OverlapRemover::setCutFlowHist"],[41,2,1,"_CPPv4N14OverlapRemover8setupJobERN2EL3JobE","OverlapRemover::setupJob"],[101,2,1,"_CPPv4N14OverlapRemover8setupJobERN2EL3JobE","OverlapRemover::setupJob"],[41,3,1,"_CPPv4N14OverlapRemover8setupJobERN2EL3JobE","OverlapRemover::setupJob::job"],[101,3,1,"_CPPv4N14OverlapRemover8setupJobERN2EL3JobE","OverlapRemover::setupJob::job"],[43,1,1,"_CPPv416PhotonCalibrator","PhotonCalibrator"],[102,1,1,"_CPPv416PhotonCalibrator","PhotonCalibrator"],[43,2,1,"_CPPv4N16PhotonCalibrator16PhotonCalibratorEv","PhotonCalibrator::PhotonCalibrator"],[102,2,1,"_CPPv4N16PhotonCalibrator16PhotonCalibratorEv","PhotonCalibrator::PhotonCalibrator"],[43,2,1,"_CPPv4N16PhotonCalibrator11changeInputEb","PhotonCalibrator::changeInput"],[102,2,1,"_CPPv4N16PhotonCalibrator11changeInputEb","PhotonCalibrator::changeInput"],[43,3,1,"_CPPv4N16PhotonCalibrator11changeInputEb","PhotonCalibrator::changeInput::firstFile"],[102,3,1,"_CPPv4N16PhotonCalibrator11changeInputEb","PhotonCalibrator::changeInput::firstFile"],[43,2,1,"_CPPv4N16PhotonCalibrator8decorateEPN4xAOD6PhotonE","PhotonCalibrator::decorate"],[43,3,1,"_CPPv4N16PhotonCalibrator8decorateEPN4xAOD6PhotonE","PhotonCalibrator::decorate::photon"],[43,2,1,"_CPPv4N16PhotonCalibrator7executeEv","PhotonCalibrator::execute"],[102,2,1,"_CPPv4N16PhotonCalibrator7executeEv","PhotonCalibrator::execute"],[43,2,1,"_CPPv4N16PhotonCalibrator11fileExecuteEv","PhotonCalibrator::fileExecute"],[102,2,1,"_CPPv4N16PhotonCalibrator11fileExecuteEv","PhotonCalibrator::fileExecute"],[43,2,1,"_CPPv4N16PhotonCalibrator8finalizeEv","PhotonCalibrator::finalize"],[102,2,1,"_CPPv4N16PhotonCalibrator8finalizeEv","PhotonCalibrator::finalize"],[43,2,1,"_CPPv4N16PhotonCalibrator12histFinalizeEv","PhotonCalibrator::histFinalize"],[102,2,1,"_CPPv4N16PhotonCalibrator12histFinalizeEv","PhotonCalibrator::histFinalize"],[43,2,1,"_CPPv4N16PhotonCalibrator14histInitializeEv","PhotonCalibrator::histInitialize"],[102,2,1,"_CPPv4N16PhotonCalibrator14histInitializeEv","PhotonCalibrator::histInitialize"],[43,2,1,"_CPPv4N16PhotonCalibrator10initializeEv","PhotonCalibrator::initialize"],[102,2,1,"_CPPv4N16PhotonCalibrator10initializeEv","PhotonCalibrator::initialize"],[43,4,1,"_CPPv4N16PhotonCalibrator34m_EgammaCalibrationAndSmearingToolE","PhotonCalibrator::m_EgammaCalibrationAndSmearingTool"],[43,4,1,"_CPPv4N16PhotonCalibrator20m_decorrelationModelE","PhotonCalibrator::m_decorrelationModel"],[102,4,1,"_CPPv4N16PhotonCalibrator20m_decorrelationModelE","PhotonCalibrator::m_decorrelationModel"],[43,4,1,"_CPPv4N16PhotonCalibrator9m_esModelE","PhotonCalibrator::m_esModel"],[102,4,1,"_CPPv4N16PhotonCalibrator9m_esModelE","PhotonCalibrator::m_esModel"],[43,4,1,"_CPPv4N16PhotonCalibrator17m_inContainerNameE","PhotonCalibrator::m_inContainerName"],[102,4,1,"_CPPv4N16PhotonCalibrator17m_inContainerNameE","PhotonCalibrator::m_inContainerName"],[43,4,1,"_CPPv4N16PhotonCalibrator20m_inputAlgoSystNamesE","PhotonCalibrator::m_inputAlgoSystNames"],[102,4,1,"_CPPv4N16PhotonCalibrator20m_inputAlgoSystNamesE","PhotonCalibrator::m_inputAlgoSystNames"],[43,4,1,"_CPPv4N16PhotonCalibrator32m_isolationCorrectionTool_handleE","PhotonCalibrator::m_isolationCorrectionTool_handle"],[43,4,1,"_CPPv4N16PhotonCalibrator19m_looseIDConfigPathE","PhotonCalibrator::m_looseIDConfigPath"],[102,4,1,"_CPPv4N16PhotonCalibrator19m_looseIDConfigPathE","PhotonCalibrator::m_looseIDConfigPath"],[43,4,1,"_CPPv4N16PhotonCalibrator20m_mediumIDConfigPathE","PhotonCalibrator::m_mediumIDConfigPath"],[102,4,1,"_CPPv4N16PhotonCalibrator20m_mediumIDConfigPathE","PhotonCalibrator::m_mediumIDConfigPath"],[43,4,1,"_CPPv4N16PhotonCalibrator21m_outAuxContainerNameE","PhotonCalibrator::m_outAuxContainerName"],[43,4,1,"_CPPv4N16PhotonCalibrator18m_outContainerNameE","PhotonCalibrator::m_outContainerName"],[102,4,1,"_CPPv4N16PhotonCalibrator18m_outContainerNameE","PhotonCalibrator::m_outContainerName"],[43,4,1,"_CPPv4N16PhotonCalibrator23m_outSCAuxContainerNameE","PhotonCalibrator::m_outSCAuxContainerName"],[43,4,1,"_CPPv4N16PhotonCalibrator20m_outSCContainerNameE","PhotonCalibrator::m_outSCContainerName"],[43,4,1,"_CPPv4N16PhotonCalibrator21m_outputAlgoSystNamesE","PhotonCalibrator::m_outputAlgoSystNames"],[102,4,1,"_CPPv4N16PhotonCalibrator21m_outputAlgoSystNamesE","PhotonCalibrator::m_outputAlgoSystNames"],[43,4,1,"_CPPv4N16PhotonCalibrator24m_overridePhotonCalibMapE","PhotonCalibrator::m_overridePhotonCalibMap"],[102,4,1,"_CPPv4N16PhotonCalibrator24m_overridePhotonCalibMapE","PhotonCalibrator::m_overridePhotonCalibMap"],[43,4,1,"_CPPv4N16PhotonCalibrator27m_photonLooseEffTool_handleE","PhotonCalibrator::m_photonLooseEffTool_handle"],[43,4,1,"_CPPv4N16PhotonCalibrator25m_photonLooseIsEMSelectorE","PhotonCalibrator::m_photonLooseIsEMSelector"],[43,4,1,"_CPPv4N16PhotonCalibrator28m_photonMediumEffTool_handleE","PhotonCalibrator::m_photonMediumEffTool_handle"],[43,4,1,"_CPPv4N16PhotonCalibrator26m_photonMediumIsEMSelectorE","PhotonCalibrator::m_photonMediumIsEMSelector"],[43,4,1,"_CPPv4N16PhotonCalibrator27m_photonTightEffTool_handleE","PhotonCalibrator::m_photonTightEffTool_handle"],[43,4,1,"_CPPv4N16PhotonCalibrator25m_photonTightIsEMSelectorE","PhotonCalibrator::m_photonTightIsEMSelector"],[43,4,1,"_CPPv4N16PhotonCalibrator25m_photonVarCorrectionToolE","PhotonCalibrator::m_photonVarCorrectionTool"],[43,4,1,"_CPPv4N16PhotonCalibrator17m_randomRunNumberE","PhotonCalibrator::m_randomRunNumber"],[102,4,1,"_CPPv4N16PhotonCalibrator17m_randomRunNumberE","PhotonCalibrator::m_randomRunNumber"],[43,4,1,"_CPPv4N16PhotonCalibrator27m_readIDFlagsFromDerivationE","PhotonCalibrator::m_readIDFlagsFromDerivation"],[102,4,1,"_CPPv4N16PhotonCalibrator27m_readIDFlagsFromDerivationE","PhotonCalibrator::m_readIDFlagsFromDerivation"],[43,4,1,"_CPPv4N16PhotonCalibrator6m_sortE","PhotonCalibrator::m_sort"],[102,4,1,"_CPPv4N16PhotonCalibrator6m_sortE","PhotonCalibrator::m_sort"],[43,4,1,"_CPPv4N16PhotonCalibrator10m_systListE","PhotonCalibrator::m_systList"],[43,4,1,"_CPPv4N16PhotonCalibrator10m_systNameE","PhotonCalibrator::m_systName"],[102,4,1,"_CPPv4N16PhotonCalibrator10m_systNameE","PhotonCalibrator::m_systName"],[43,4,1,"_CPPv4N16PhotonCalibrator9m_systValE","PhotonCalibrator::m_systVal"],[102,4,1,"_CPPv4N16PhotonCalibrator9m_systValE","PhotonCalibrator::m_systVal"],[43,4,1,"_CPPv4N16PhotonCalibrator19m_tightIDConfigPathE","PhotonCalibrator::m_tightIDConfigPath"],[102,4,1,"_CPPv4N16PhotonCalibrator19m_tightIDConfigPathE","PhotonCalibrator::m_tightIDConfigPath"],[43,4,1,"_CPPv4N16PhotonCalibrator8m_useAF3E","PhotonCalibrator::m_useAF3"],[102,4,1,"_CPPv4N16PhotonCalibrator8m_useAF3E","PhotonCalibrator::m_useAF3"],[43,4,1,"_CPPv4N16PhotonCalibrator9m_useAFIIE","PhotonCalibrator::m_useAFII"],[102,4,1,"_CPPv4N16PhotonCalibrator9m_useAFIIE","PhotonCalibrator::m_useAFII"],[43,2,1,"_CPPv4N16PhotonCalibrator11postExecuteEv","PhotonCalibrator::postExecute"],[102,2,1,"_CPPv4N16PhotonCalibrator11postExecuteEv","PhotonCalibrator::postExecute"],[43,2,1,"_CPPv4N16PhotonCalibrator8setupJobERN2EL3JobE","PhotonCalibrator::setupJob"],[102,2,1,"_CPPv4N16PhotonCalibrator8setupJobERN2EL3JobE","PhotonCalibrator::setupJob"],[43,3,1,"_CPPv4N16PhotonCalibrator8setupJobERN2EL3JobE","PhotonCalibrator::setupJob::job"],[102,3,1,"_CPPv4N16PhotonCalibrator8setupJobERN2EL3JobE","PhotonCalibrator::setupJob::job"],[103,1,1,"_CPPv415PhotonHistsAlgo","PhotonHistsAlgo"],[103,2,1,"_CPPv4N15PhotonHistsAlgo8AddHistsENSt6stringE","PhotonHistsAlgo::AddHists"],[103,3,1,"_CPPv4N15PhotonHistsAlgo8AddHistsENSt6stringE","PhotonHistsAlgo::AddHists::name"],[103,2,1,"_CPPv4N15PhotonHistsAlgo15PhotonHistsAlgoEv","PhotonHistsAlgo::PhotonHistsAlgo"],[103,2,1,"_CPPv4N15PhotonHistsAlgo7executeEv","PhotonHistsAlgo::execute"],[103,2,1,"_CPPv4N15PhotonHistsAlgo8setupJobERN2EL3JobE","PhotonHistsAlgo::setupJob"],[103,3,1,"_CPPv4N15PhotonHistsAlgo8setupJobERN2EL3JobE","PhotonHistsAlgo::setupJob::job"],[44,1,1,"_CPPv414PhotonSelector","PhotonSelector"],[104,1,1,"_CPPv414PhotonSelector","PhotonSelector"],[44,2,1,"_CPPv4N14PhotonSelector14PhotonSelectorEv","PhotonSelector::PhotonSelector"],[104,2,1,"_CPPv4N14PhotonSelector14PhotonSelectorEv","PhotonSelector::PhotonSelector"],[44,2,1,"_CPPv4N14PhotonSelector11changeInputEb","PhotonSelector::changeInput"],[104,2,1,"_CPPv4N14PhotonSelector11changeInputEb","PhotonSelector::changeInput"],[44,3,1,"_CPPv4N14PhotonSelector11changeInputEb","PhotonSelector::changeInput::firstFile"],[104,3,1,"_CPPv4N14PhotonSelector11changeInputEb","PhotonSelector::changeInput::firstFile"],[44,2,1,"_CPPv4N14PhotonSelector7executeEv","PhotonSelector::execute"],[104,2,1,"_CPPv4N14PhotonSelector7executeEv","PhotonSelector::execute"],[44,2,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection"],[104,2,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection"],[44,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::countPass"],[104,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::countPass"],[44,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::inPhotons"],[104,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::inPhotons"],[44,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::mcEvtWeight"],[104,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::mcEvtWeight"],[44,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::selectedPhotons"],[104,3,1,"_CPPv4N14PhotonSelector16executeSelectionEPKN4xAOD15PhotonContainerEfbP15ConstDataVectorIN4xAOD15PhotonContainerEE","PhotonSelector::executeSelection::selectedPhotons"],[44,2,1,"_CPPv4N14PhotonSelector11fileExecuteEv","PhotonSelector::fileExecute"],[104,2,1,"_CPPv4N14PhotonSelector11fileExecuteEv","PhotonSelector::fileExecute"],[44,2,1,"_CPPv4N14PhotonSelector8finalizeEv","PhotonSelector::finalize"],[104,2,1,"_CPPv4N14PhotonSelector8finalizeEv","PhotonSelector::finalize"],[44,2,1,"_CPPv4N14PhotonSelector12histFinalizeEv","PhotonSelector::histFinalize"],[104,2,1,"_CPPv4N14PhotonSelector12histFinalizeEv","PhotonSelector::histFinalize"],[44,2,1,"_CPPv4N14PhotonSelector14histInitializeEv","PhotonSelector::histInitialize"],[104,2,1,"_CPPv4N14PhotonSelector14histInitializeEv","PhotonSelector::histInitialize"],[44,2,1,"_CPPv4N14PhotonSelector10initializeEv","PhotonSelector::initialize"],[104,2,1,"_CPPv4N14PhotonSelector10initializeEv","PhotonSelector::initialize"],[44,4,1,"_CPPv4N14PhotonSelector9m_IsoKeysE","PhotonSelector::m_IsoKeys"],[44,4,1,"_CPPv4N14PhotonSelector11m_IsoWPListE","PhotonSelector::m_IsoWPList"],[104,4,1,"_CPPv4N14PhotonSelector11m_IsoWPListE","PhotonSelector::m_IsoWPList"],[44,4,1,"_CPPv4N14PhotonSelector24m_IsolationSelectionToolE","PhotonSelector::m_IsolationSelectionTool"],[44,4,1,"_CPPv4N14PhotonSelector13m_MinIsoWPCutE","PhotonSelector::m_MinIsoWPCut"],[104,4,1,"_CPPv4N14PhotonSelector13m_MinIsoWPCutE","PhotonSelector::m_MinIsoWPCut"],[44,4,1,"_CPPv4N14PhotonSelector25m_createSelectedContainerE","PhotonSelector::m_createSelectedContainer"],[104,4,1,"_CPPv4N14PhotonSelector25m_createSelectedContainerE","PhotonSelector::m_createSelectedContainer"],[44,4,1,"_CPPv4N14PhotonSelector13m_cutflowHistE","PhotonSelector::m_cutflowHist"],[44,4,1,"_CPPv4N14PhotonSelector14m_cutflowHistWE","PhotonSelector::m_cutflowHistW"],[44,4,1,"_CPPv4N14PhotonSelector13m_cutflow_binE","PhotonSelector::m_cutflow_bin"],[44,4,1,"_CPPv4N14PhotonSelector25m_decorateSelectedObjectsE","PhotonSelector::m_decorateSelectedObjects"],[104,4,1,"_CPPv4N14PhotonSelector25m_decorateSelectedObjectsE","PhotonSelector::m_decorateSelectedObjects"],[44,4,1,"_CPPv4N14PhotonSelector13m_doAuthorCutE","PhotonSelector::m_doAuthorCut"],[104,4,1,"_CPPv4N14PhotonSelector13m_doAuthorCutE","PhotonSelector::m_doAuthorCut"],[44,4,1,"_CPPv4N14PhotonSelector9m_doOQCutE","PhotonSelector::m_doOQCut"],[104,4,1,"_CPPv4N14PhotonSelector9m_doOQCutE","PhotonSelector::m_doOQCut"],[44,4,1,"_CPPv4N14PhotonSelector9m_eta_maxE","PhotonSelector::m_eta_max"],[104,4,1,"_CPPv4N14PhotonSelector9m_eta_maxE","PhotonSelector::m_eta_max"],[44,4,1,"_CPPv4N14PhotonSelector17m_inContainerNameE","PhotonSelector::m_inContainerName"],[104,4,1,"_CPPv4N14PhotonSelector17m_inContainerNameE","PhotonSelector::m_inContainerName"],[44,4,1,"_CPPv4N14PhotonSelector20m_inputAlgoSystNamesE","PhotonSelector::m_inputAlgoSystNames"],[104,4,1,"_CPPv4N14PhotonSelector20m_inputAlgoSystNamesE","PhotonSelector::m_inputAlgoSystNames"],[44,4,1,"_CPPv4N14PhotonSelector12m_nToProcessE","PhotonSelector::m_nToProcess"],[104,4,1,"_CPPv4N14PhotonSelector12m_nToProcessE","PhotonSelector::m_nToProcess"],[44,4,1,"_CPPv4N14PhotonSelector10m_numEventE","PhotonSelector::m_numEvent"],[44,4,1,"_CPPv4N14PhotonSelector14m_numEventPassE","PhotonSelector::m_numEventPass"],[44,4,1,"_CPPv4N14PhotonSelector11m_numObjectE","PhotonSelector::m_numObject"],[44,4,1,"_CPPv4N14PhotonSelector15m_numObjectPassE","PhotonSelector::m_numObjectPass"],[44,4,1,"_CPPv4N14PhotonSelector21m_outAuxContainerNameE","PhotonSelector::m_outAuxContainerName"],[44,4,1,"_CPPv4N14PhotonSelector18m_outContainerNameE","PhotonSelector::m_outContainerName"],[104,4,1,"_CPPv4N14PhotonSelector18m_outContainerNameE","PhotonSelector::m_outContainerName"],[44,4,1,"_CPPv4N14PhotonSelector21m_outputAlgoSystNamesE","PhotonSelector::m_outputAlgoSystNames"],[104,4,1,"_CPPv4N14PhotonSelector21m_outputAlgoSystNamesE","PhotonSelector::m_outputAlgoSystNames"],[44,4,1,"_CPPv4N14PhotonSelector8m_pT_maxE","PhotonSelector::m_pT_max"],[104,4,1,"_CPPv4N14PhotonSelector8m_pT_maxE","PhotonSelector::m_pT_max"],[44,4,1,"_CPPv4N14PhotonSelector8m_pT_minE","PhotonSelector::m_pT_min"],[104,4,1,"_CPPv4N14PhotonSelector8m_pT_minE","PhotonSelector::m_pT_min"],[44,4,1,"_CPPv4N14PhotonSelector10m_pass_maxE","PhotonSelector::m_pass_max"],[104,4,1,"_CPPv4N14PhotonSelector10m_pass_maxE","PhotonSelector::m_pass_max"],[44,4,1,"_CPPv4N14PhotonSelector10m_pass_minE","PhotonSelector::m_pass_min"],[104,4,1,"_CPPv4N14PhotonSelector10m_pass_minE","PhotonSelector::m_pass_min"],[44,4,1,"_CPPv4N14PhotonSelector18m_ph_cutflowHist_1E","PhotonSelector::m_ph_cutflowHist_1"],[44,4,1,"_CPPv4N14PhotonSelector19m_ph_cutflow_OQ_cutE","PhotonSelector::m_ph_cutflow_OQ_cut"],[44,4,1,"_CPPv4N14PhotonSelector20m_ph_cutflow_PID_cutE","PhotonSelector::m_ph_cutflow_PID_cut"],[44,4,1,"_CPPv4N14PhotonSelector16m_ph_cutflow_allE","PhotonSelector::m_ph_cutflow_all"],[44,4,1,"_CPPv4N14PhotonSelector23m_ph_cutflow_author_cutE","PhotonSelector::m_ph_cutflow_author_cut"],[44,4,1,"_CPPv4N14PhotonSelector20m_ph_cutflow_eta_cutE","PhotonSelector::m_ph_cutflow_eta_cut"],[44,4,1,"_CPPv4N14PhotonSelector20m_ph_cutflow_iso_cutE","PhotonSelector::m_ph_cutflow_iso_cut"],[44,4,1,"_CPPv4N14PhotonSelector22m_ph_cutflow_ptmax_cutE","PhotonSelector::m_ph_cutflow_ptmax_cut"],[44,4,1,"_CPPv4N14PhotonSelector22m_ph_cutflow_ptmin_cutE","PhotonSelector::m_ph_cutflow_ptmin_cut"],[44,4,1,"_CPPv4N14PhotonSelector13m_photonIdCutE","PhotonSelector::m_photonIdCut"],[104,4,1,"_CPPv4N14PhotonSelector13m_photonIdCutE","PhotonSelector::m_photonIdCut"],[44,4,1,"_CPPv4N14PhotonSelector22m_readOQFromDerivationE","PhotonSelector::m_readOQFromDerivation"],[104,4,1,"_CPPv4N14PhotonSelector22m_readOQFromDerivationE","PhotonSelector::m_readOQFromDerivation"],[44,4,1,"_CPPv4N14PhotonSelector12m_useCutFlowE","PhotonSelector::m_useCutFlow"],[104,4,1,"_CPPv4N14PhotonSelector12m_useCutFlowE","PhotonSelector::m_useCutFlow"],[44,4,1,"_CPPv4N14PhotonSelector11m_vetoCrackE","PhotonSelector::m_vetoCrack"],[104,4,1,"_CPPv4N14PhotonSelector11m_vetoCrackE","PhotonSelector::m_vetoCrack"],[44,4,1,"_CPPv4N14PhotonSelector20m_weightNumEventPassE","PhotonSelector::m_weightNumEventPass"],[44,2,1,"_CPPv4N14PhotonSelector8passCutsEPKN4xAOD6PhotonE","PhotonSelector::passCuts"],[104,2,1,"_CPPv4N14PhotonSelector8passCutsEPKN4xAOD6PhotonE","PhotonSelector::passCuts"],[44,3,1,"_CPPv4N14PhotonSelector8passCutsEPKN4xAOD6PhotonE","PhotonSelector::passCuts::photon"],[104,3,1,"_CPPv4N14PhotonSelector8passCutsEPKN4xAOD6PhotonE","PhotonSelector::passCuts::photon"],[44,2,1,"_CPPv4N14PhotonSelector11postExecuteEv","PhotonSelector::postExecute"],[104,2,1,"_CPPv4N14PhotonSelector11postExecuteEv","PhotonSelector::postExecute"],[44,2,1,"_CPPv4N14PhotonSelector8setupJobERN2EL3JobE","PhotonSelector::setupJob"],[104,2,1,"_CPPv4N14PhotonSelector8setupJobERN2EL3JobE","PhotonSelector::setupJob"],[44,3,1,"_CPPv4N14PhotonSelector8setupJobERN2EL3JobE","PhotonSelector::setupJob::job"],[104,3,1,"_CPPv4N14PhotonSelector8setupJobERN2EL3JobE","PhotonSelector::setupJob::job"],[44,2,1,"_CPPv4N14PhotonSelectorD0Ev","PhotonSelector::~PhotonSelector"],[104,2,1,"_CPPv4N14PhotonSelectorD0Ev","PhotonSelector::~PhotonSelector"],[46,1,1,"_CPPv413TauCalibrator","TauCalibrator"],[105,1,1,"_CPPv413TauCalibrator","TauCalibrator"],[46,2,1,"_CPPv4N13TauCalibrator13TauCalibratorEv","TauCalibrator::TauCalibrator"],[105,2,1,"_CPPv4N13TauCalibrator13TauCalibratorEv","TauCalibrator::TauCalibrator"],[46,2,1,"_CPPv4N13TauCalibrator11changeInputEb","TauCalibrator::changeInput"],[105,2,1,"_CPPv4N13TauCalibrator11changeInputEb","TauCalibrator::changeInput"],[46,3,1,"_CPPv4N13TauCalibrator11changeInputEb","TauCalibrator::changeInput::firstFile"],[105,3,1,"_CPPv4N13TauCalibrator11changeInputEb","TauCalibrator::changeInput::firstFile"],[46,2,1,"_CPPv4N13TauCalibrator7executeEv","TauCalibrator::execute"],[105,2,1,"_CPPv4N13TauCalibrator7executeEv","TauCalibrator::execute"],[46,2,1,"_CPPv4N13TauCalibrator11fileExecuteEv","TauCalibrator::fileExecute"],[105,2,1,"_CPPv4N13TauCalibrator11fileExecuteEv","TauCalibrator::fileExecute"],[46,2,1,"_CPPv4N13TauCalibrator8finalizeEv","TauCalibrator::finalize"],[105,2,1,"_CPPv4N13TauCalibrator8finalizeEv","TauCalibrator::finalize"],[46,2,1,"_CPPv4N13TauCalibrator12histFinalizeEv","TauCalibrator::histFinalize"],[105,2,1,"_CPPv4N13TauCalibrator12histFinalizeEv","TauCalibrator::histFinalize"],[46,2,1,"_CPPv4N13TauCalibrator14histInitializeEv","TauCalibrator::histInitialize"],[105,2,1,"_CPPv4N13TauCalibrator14histInitializeEv","TauCalibrator::histInitialize"],[46,2,1,"_CPPv4N13TauCalibrator10initializeEv","TauCalibrator::initialize"],[105,2,1,"_CPPv4N13TauCalibrator10initializeEv","TauCalibrator::initialize"],[46,4,1,"_CPPv4N13TauCalibrator19m_RecommendationTagE","TauCalibrator::m_RecommendationTag"],[105,4,1,"_CPPv4N13TauCalibrator19m_RecommendationTagE","TauCalibrator::m_RecommendationTag"],[46,4,1,"_CPPv4N13TauCalibrator25m_applyMVATESQualityCheckE","TauCalibrator::m_applyMVATESQualityCheck"],[105,4,1,"_CPPv4N13TauCalibrator25m_applyMVATESQualityCheckE","TauCalibrator::m_applyMVATESQualityCheck"],[46,4,1,"_CPPv4N13TauCalibrator10m_campaignE","TauCalibrator::m_campaign"],[105,4,1,"_CPPv4N13TauCalibrator10m_campaignE","TauCalibrator::m_campaign"],[46,4,1,"_CPPv4N13TauCalibrator11m_generatorE","TauCalibrator::m_generator"],[105,4,1,"_CPPv4N13TauCalibrator11m_generatorE","TauCalibrator::m_generator"],[46,4,1,"_CPPv4N13TauCalibrator17m_inContainerNameE","TauCalibrator::m_inContainerName"],[105,4,1,"_CPPv4N13TauCalibrator17m_inContainerNameE","TauCalibrator::m_inContainerName"],[46,4,1,"_CPPv4N13TauCalibrator20m_inputAlgoSystNamesE","TauCalibrator::m_inputAlgoSystNames"],[105,4,1,"_CPPv4N13TauCalibrator20m_inputAlgoSystNamesE","TauCalibrator::m_inputAlgoSystNames"],[46,4,1,"_CPPv4N13TauCalibrator10m_numEventE","TauCalibrator::m_numEvent"],[46,4,1,"_CPPv4N13TauCalibrator11m_numObjectE","TauCalibrator::m_numObject"],[46,4,1,"_CPPv4N13TauCalibrator21m_outAuxContainerNameE","TauCalibrator::m_outAuxContainerName"],[46,4,1,"_CPPv4N13TauCalibrator18m_outContainerNameE","TauCalibrator::m_outContainerName"],[105,4,1,"_CPPv4N13TauCalibrator18m_outContainerNameE","TauCalibrator::m_outContainerName"],[46,4,1,"_CPPv4N13TauCalibrator23m_outSCAuxContainerNameE","TauCalibrator::m_outSCAuxContainerName"],[46,4,1,"_CPPv4N13TauCalibrator20m_outSCContainerNameE","TauCalibrator::m_outSCContainerName"],[46,4,1,"_CPPv4N13TauCalibrator21m_outputAlgoSystNamesE","TauCalibrator::m_outputAlgoSystNames"],[105,4,1,"_CPPv4N13TauCalibrator21m_outputAlgoSystNamesE","TauCalibrator::m_outputAlgoSystNames"],[46,4,1,"_CPPv4N13TauCalibrator8m_setAF3E","TauCalibrator::m_setAF3"],[105,4,1,"_CPPv4N13TauCalibrator8m_setAF3E","TauCalibrator::m_setAF3"],[46,4,1,"_CPPv4N13TauCalibrator9m_setAFIIE","TauCalibrator::m_setAFII"],[105,4,1,"_CPPv4N13TauCalibrator9m_setAFIIE","TauCalibrator::m_setAFII"],[46,4,1,"_CPPv4N13TauCalibrator21m_skipTruthMatchCheckE","TauCalibrator::m_skipTruthMatchCheck"],[105,4,1,"_CPPv4N13TauCalibrator21m_skipTruthMatchCheckE","TauCalibrator::m_skipTruthMatchCheck"],[46,4,1,"_CPPv4N13TauCalibrator6m_sortE","TauCalibrator::m_sort"],[105,4,1,"_CPPv4N13TauCalibrator6m_sortE","TauCalibrator::m_sort"],[46,4,1,"_CPPv4N13TauCalibrator10m_systListE","TauCalibrator::m_systList"],[46,4,1,"_CPPv4N13TauCalibrator24m_tauSmearingTool_handleE","TauCalibrator::m_tauSmearingTool_handle"],[46,4,1,"_CPPv4N13TauCalibrator21m_writeSystToMetadataE","TauCalibrator::m_writeSystToMetadata"],[105,4,1,"_CPPv4N13TauCalibrator21m_writeSystToMetadataE","TauCalibrator::m_writeSystToMetadata"],[46,2,1,"_CPPv4N13TauCalibrator11postExecuteEv","TauCalibrator::postExecute"],[105,2,1,"_CPPv4N13TauCalibrator11postExecuteEv","TauCalibrator::postExecute"],[46,2,1,"_CPPv4N13TauCalibrator8setupJobERN2EL3JobE","TauCalibrator::setupJob"],[105,2,1,"_CPPv4N13TauCalibrator8setupJobERN2EL3JobE","TauCalibrator::setupJob"],[46,3,1,"_CPPv4N13TauCalibrator8setupJobERN2EL3JobE","TauCalibrator::setupJob::job"],[105,3,1,"_CPPv4N13TauCalibrator8setupJobERN2EL3JobE","TauCalibrator::setupJob::job"],[47,1,1,"_CPPv422TauEfficiencyCorrector","TauEfficiencyCorrector"],[106,1,1,"_CPPv422TauEfficiencyCorrector","TauEfficiencyCorrector"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector22TauEfficiencyCorrectorEv","TauEfficiencyCorrector::TauEfficiencyCorrector"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector22TauEfficiencyCorrectorEv","TauEfficiencyCorrector::TauEfficiencyCorrector"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector11changeInputEb","TauEfficiencyCorrector::changeInput"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector11changeInputEb","TauEfficiencyCorrector::changeInput"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector11changeInputEb","TauEfficiencyCorrector::changeInput::firstFile"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector11changeInputEb","TauEfficiencyCorrector::changeInput::firstFile"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector7executeEv","TauEfficiencyCorrector::execute"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector7executeEv","TauEfficiencyCorrector::execute"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::eventInfo"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::eventInfo"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::inputTaus"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::inputTaus"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::nominal"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::nominal"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::writeSystNames"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector9executeSFEPKN4xAOD9EventInfoEPKN4xAOD15TauJetContainerEbb","TauEfficiencyCorrector::executeSF::writeSystNames"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector11fileExecuteEv","TauEfficiencyCorrector::fileExecute"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector11fileExecuteEv","TauEfficiencyCorrector::fileExecute"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector8finalizeEv","TauEfficiencyCorrector::finalize"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector8finalizeEv","TauEfficiencyCorrector::finalize"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector12histFinalizeEv","TauEfficiencyCorrector::histFinalize"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector12histFinalizeEv","TauEfficiencyCorrector::histFinalize"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector14histInitializeEv","TauEfficiencyCorrector::histInitialize"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector14histInitializeEv","TauEfficiencyCorrector::histInitialize"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector10initializeEv","TauEfficiencyCorrector::initialize"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector10initializeEv","TauEfficiencyCorrector::initialize"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector19m_RecommendationTagE","TauEfficiencyCorrector::m_RecommendationTag"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector19m_RecommendationTagE","TauEfficiencyCorrector::m_RecommendationTag"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector13m_TriggerNameE","TauEfficiencyCorrector::m_TriggerName"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector13m_TriggerNameE","TauEfficiencyCorrector::m_TriggerName"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector26m_WorkingPointEleOLRHadTauE","TauEfficiencyCorrector::m_WorkingPointEleOLRHadTau"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector26m_WorkingPointEleOLRHadTauE","TauEfficiencyCorrector::m_WorkingPointEleOLRHadTau"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector18m_WorkingPointRecoE","TauEfficiencyCorrector::m_WorkingPointReco"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector18m_WorkingPointRecoE","TauEfficiencyCorrector::m_WorkingPointReco"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector22m_WorkingPointTauEleIDE","TauEfficiencyCorrector::m_WorkingPointTauEleID"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector22m_WorkingPointTauEleIDE","TauEfficiencyCorrector::m_WorkingPointTauEleID"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector22m_WorkingPointTauJetIDE","TauEfficiencyCorrector::m_WorkingPointTauJetID"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector22m_WorkingPointTauJetIDE","TauEfficiencyCorrector::m_WorkingPointTauJetID"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector17m_inContainerNameE","TauEfficiencyCorrector::m_inContainerName"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector17m_inContainerNameE","TauEfficiencyCorrector::m_inContainerName"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector20m_inputSystNamesTausE","TauEfficiencyCorrector::m_inputSystNamesTaus"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector20m_inputSystNamesTausE","TauEfficiencyCorrector::m_inputSystNamesTaus"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector10m_numEventE","TauEfficiencyCorrector::m_numEvent"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector11m_numObjectE","TauEfficiencyCorrector::m_numObject"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector17m_outputSystNamesE","TauEfficiencyCorrector::m_outputSystNames"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector17m_outputSystNamesE","TauEfficiencyCorrector::m_outputSystNames"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector20m_pileup_tool_handleE","TauEfficiencyCorrector::m_pileup_tool_handle"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector10m_systListE","TauEfficiencyCorrector::m_systList"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector10m_systNameE","TauEfficiencyCorrector::m_systName"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector10m_systNameE","TauEfficiencyCorrector::m_systName"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector9m_systValE","TauEfficiencyCorrector::m_systVal"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector9m_systValE","TauEfficiencyCorrector::m_systVal"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector23m_tauEffCorrTool_handleE","TauEfficiencyCorrector::m_tauEffCorrTool_handle"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector19m_tauSelTool_handleE","TauEfficiencyCorrector::m_tauSelTool_handle"],[47,4,1,"_CPPv4N22TauEfficiencyCorrector21m_writeSystToMetadataE","TauEfficiencyCorrector::m_writeSystToMetadata"],[106,4,1,"_CPPv4N22TauEfficiencyCorrector21m_writeSystToMetadataE","TauEfficiencyCorrector::m_writeSystToMetadata"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector11postExecuteEv","TauEfficiencyCorrector::postExecute"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector11postExecuteEv","TauEfficiencyCorrector::postExecute"],[47,2,1,"_CPPv4N22TauEfficiencyCorrector8setupJobERN2EL3JobE","TauEfficiencyCorrector::setupJob"],[106,2,1,"_CPPv4N22TauEfficiencyCorrector8setupJobERN2EL3JobE","TauEfficiencyCorrector::setupJob"],[47,3,1,"_CPPv4N22TauEfficiencyCorrector8setupJobERN2EL3JobE","TauEfficiencyCorrector::setupJob::job"],[106,3,1,"_CPPv4N22TauEfficiencyCorrector8setupJobERN2EL3JobE","TauEfficiencyCorrector::setupJob::job"],[48,1,1,"_CPPv414TauJetMatching","TauJetMatching"],[107,1,1,"_CPPv414TauJetMatching","TauJetMatching"],[48,2,1,"_CPPv4N14TauJetMatching14TauJetMatchingEv","TauJetMatching::TauJetMatching"],[107,2,1,"_CPPv4N14TauJetMatching14TauJetMatchingEv","TauJetMatching::TauJetMatching"],[48,2,1,"_CPPv4N14TauJetMatching11changeInputEb","TauJetMatching::changeInput"],[107,2,1,"_CPPv4N14TauJetMatching11changeInputEb","TauJetMatching::changeInput"],[48,3,1,"_CPPv4N14TauJetMatching11changeInputEb","TauJetMatching::changeInput::firstFile"],[107,3,1,"_CPPv4N14TauJetMatching11changeInputEb","TauJetMatching::changeInput::firstFile"],[48,2,1,"_CPPv4N14TauJetMatching7executeEv","TauJetMatching::execute"],[107,2,1,"_CPPv4N14TauJetMatching7executeEv","TauJetMatching::execute"],[48,2,1,"_CPPv4N14TauJetMatching17executeDecorationENSt13unordered_mapIiNSt4pairIPKN4xAOD6TauJetEPKN4xAOD3JetEEEEEPKN4xAOD15TauJetContainerE","TauJetMatching::executeDecoration"],[107,2,1,"_CPPv4N14TauJetMatching17executeDecorationENSt13unordered_mapIiNSt4pairIPKN4xAOD6TauJetEPKN4xAOD3JetEEEEEPKN4xAOD15TauJetContainerE","TauJetMatching::executeDecoration"],[48,3,1,"_CPPv4N14TauJetMatching17executeDecorationENSt13unordered_mapIiNSt4pairIPKN4xAOD6TauJetEPKN4xAOD3JetEEEEEPKN4xAOD15TauJetContainerE","TauJetMatching::executeDecoration::tauCont"],[107,3,1,"_CPPv4N14TauJetMatching17executeDecorationENSt13unordered_mapIiNSt4pairIPKN4xAOD6TauJetEPKN4xAOD3JetEEEEEPKN4xAOD15TauJetContainerE","TauJetMatching::executeDecoration::tauCont"],[48,2,1,"_CPPv4N14TauJetMatching11fileExecuteEv","TauJetMatching::fileExecute"],[107,2,1,"_CPPv4N14TauJetMatching11fileExecuteEv","TauJetMatching::fileExecute"],[48,2,1,"_CPPv4N14TauJetMatching8finalizeEv","TauJetMatching::finalize"],[107,2,1,"_CPPv4N14TauJetMatching8finalizeEv","TauJetMatching::finalize"],[48,2,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR"],[107,2,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR"],[48,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::best_DR"],[107,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::best_DR"],[48,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::jetCont"],[107,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::jetCont"],[48,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::tauCont"],[107,3,1,"_CPPv4N14TauJetMatching15findBestMatchDREPKN4xAOD12JetContainerEPKN4xAOD15TauJetContainerEf","TauJetMatching::findBestMatchDR::tauCont"],[48,2,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR"],[107,2,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR"],[48,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::eta1"],[107,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::eta1"],[48,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::eta2"],[107,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::eta2"],[48,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::phi1"],[107,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::phi1"],[48,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::phi2"],[107,3,1,"_CPPv4N14TauJetMatching5getDREffff","TauJetMatching::getDR::phi2"],[48,2,1,"_CPPv4N14TauJetMatching12histFinalizeEv","TauJetMatching::histFinalize"],[107,2,1,"_CPPv4N14TauJetMatching12histFinalizeEv","TauJetMatching::histFinalize"],[48,2,1,"_CPPv4N14TauJetMatching14histInitializeEv","TauJetMatching::histInitialize"],[107,2,1,"_CPPv4N14TauJetMatching14histInitializeEv","TauJetMatching::histInitialize"],[48,2,1,"_CPPv4N14TauJetMatching10initializeEv","TauJetMatching::initialize"],[107,2,1,"_CPPv4N14TauJetMatching10initializeEv","TauJetMatching::initialize"],[48,4,1,"_CPPv4N14TauJetMatching8m_DeltaRE","TauJetMatching::m_DeltaR"],[107,4,1,"_CPPv4N14TauJetMatching8m_DeltaRE","TauJetMatching::m_DeltaR"],[48,4,1,"_CPPv4N14TauJetMatching17m_inContainerNameE","TauJetMatching::m_inContainerName"],[107,4,1,"_CPPv4N14TauJetMatching17m_inContainerNameE","TauJetMatching::m_inContainerName"],[48,4,1,"_CPPv4N14TauJetMatching20m_inJetContainerNameE","TauJetMatching::m_inJetContainerName"],[107,4,1,"_CPPv4N14TauJetMatching20m_inJetContainerNameE","TauJetMatching::m_inJetContainerName"],[48,4,1,"_CPPv4N14TauJetMatching20m_inputAlgoSystNamesE","TauJetMatching::m_inputAlgoSystNames"],[107,4,1,"_CPPv4N14TauJetMatching20m_inputAlgoSystNamesE","TauJetMatching::m_inputAlgoSystNames"],[48,4,1,"_CPPv4N14TauJetMatching10m_numEventE","TauJetMatching::m_numEvent"],[48,4,1,"_CPPv4N14TauJetMatching11m_numObjectE","TauJetMatching::m_numObject"],[48,4,1,"_CPPv4N14TauJetMatching21m_outAuxContainerNameE","TauJetMatching::m_outAuxContainerName"],[107,4,1,"_CPPv4N14TauJetMatching21m_outAuxContainerNameE","TauJetMatching::m_outAuxContainerName"],[48,4,1,"_CPPv4N14TauJetMatching18m_outContainerNameE","TauJetMatching::m_outContainerName"],[107,4,1,"_CPPv4N14TauJetMatching18m_outContainerNameE","TauJetMatching::m_outContainerName"],[48,4,1,"_CPPv4N14TauJetMatching21m_outputAlgoSystNamesE","TauJetMatching::m_outputAlgoSystNames"],[107,4,1,"_CPPv4N14TauJetMatching21m_outputAlgoSystNamesE","TauJetMatching::m_outputAlgoSystNames"],[48,2,1,"_CPPv4N14TauJetMatching11postExecuteEv","TauJetMatching::postExecute"],[107,2,1,"_CPPv4N14TauJetMatching11postExecuteEv","TauJetMatching::postExecute"],[48,2,1,"_CPPv4N14TauJetMatching8setupJobERN2EL3JobE","TauJetMatching::setupJob"],[107,2,1,"_CPPv4N14TauJetMatching8setupJobERN2EL3JobE","TauJetMatching::setupJob"],[48,3,1,"_CPPv4N14TauJetMatching8setupJobERN2EL3JobE","TauJetMatching::setupJob::job"],[107,3,1,"_CPPv4N14TauJetMatching8setupJobERN2EL3JobE","TauJetMatching::setupJob::job"],[48,2,1,"_CPPv4N14TauJetMatchingD0Ev","TauJetMatching::~TauJetMatching"],[107,2,1,"_CPPv4N14TauJetMatchingD0Ev","TauJetMatching::~TauJetMatching"],[49,1,1,"_CPPv411TauSelector","TauSelector"],[108,1,1,"_CPPv411TauSelector","TauSelector"],[49,2,1,"_CPPv4N11TauSelector11TauSelectorEv","TauSelector::TauSelector"],[108,2,1,"_CPPv4N11TauSelector11TauSelectorEv","TauSelector::TauSelector"],[49,2,1,"_CPPv4N11TauSelector11changeInputEb","TauSelector::changeInput"],[108,2,1,"_CPPv4N11TauSelector11changeInputEb","TauSelector::changeInput"],[49,3,1,"_CPPv4N11TauSelector11changeInputEb","TauSelector::changeInput::firstFile"],[108,3,1,"_CPPv4N11TauSelector11changeInputEb","TauSelector::changeInput::firstFile"],[49,2,1,"_CPPv4N11TauSelector7executeEv","TauSelector::execute"],[108,2,1,"_CPPv4N11TauSelector7executeEv","TauSelector::execute"],[49,2,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection"],[108,2,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection"],[49,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::countPass"],[108,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::countPass"],[49,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::inTaus"],[108,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::inTaus"],[49,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::mcEvtWeight"],[108,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::mcEvtWeight"],[49,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::selectedTaus"],[108,3,1,"_CPPv4N11TauSelector16executeSelectionEPKN4xAOD15TauJetContainerEfbP15ConstDataVectorIN4xAOD15TauJetContainerEE","TauSelector::executeSelection::selectedTaus"],[49,2,1,"_CPPv4N11TauSelector11fileExecuteEv","TauSelector::fileExecute"],[108,2,1,"_CPPv4N11TauSelector11fileExecuteEv","TauSelector::fileExecute"],[49,2,1,"_CPPv4N11TauSelector8finalizeEv","TauSelector::finalize"],[108,2,1,"_CPPv4N11TauSelector8finalizeEv","TauSelector::finalize"],[49,2,1,"_CPPv4N11TauSelector12histFinalizeEv","TauSelector::histFinalize"],[108,2,1,"_CPPv4N11TauSelector12histFinalizeEv","TauSelector::histFinalize"],[49,2,1,"_CPPv4N11TauSelector14histInitializeEv","TauSelector::histInitialize"],[108,2,1,"_CPPv4N11TauSelector14histInitializeEv","TauSelector::histInitialize"],[49,2,1,"_CPPv4N11TauSelector10initializeEv","TauSelector::initialize"],[108,2,1,"_CPPv4N11TauSelector10initializeEv","TauSelector::initialize"],[49,4,1,"_CPPv4N11TauSelector12m_ConfigPathE","TauSelector::m_ConfigPath"],[108,4,1,"_CPPv4N11TauSelector12m_ConfigPathE","TauSelector::m_ConfigPath"],[49,4,1,"_CPPv4N11TauSelector7m_EleIDE","TauSelector::m_EleID"],[108,4,1,"_CPPv4N11TauSelector7m_EleIDE","TauSelector::m_EleID"],[49,4,1,"_CPPv4N11TauSelector10m_EleRNNWPE","TauSelector::m_EleRNNWP"],[108,4,1,"_CPPv4N11TauSelector10m_EleRNNWPE","TauSelector::m_EleRNNWP"],[49,4,1,"_CPPv4N11TauSelector9m_JetIDWPE","TauSelector::m_JetIDWP"],[108,4,1,"_CPPv4N11TauSelector9m_JetIDWPE","TauSelector::m_JetIDWP"],[49,4,1,"_CPPv4N11TauSelector25m_createSelectedContainerE","TauSelector::m_createSelectedContainer"],[108,4,1,"_CPPv4N11TauSelector25m_createSelectedContainerE","TauSelector::m_createSelectedContainer"],[49,4,1,"_CPPv4N11TauSelector13m_cutflowHistE","TauSelector::m_cutflowHist"],[49,4,1,"_CPPv4N11TauSelector14m_cutflowHistWE","TauSelector::m_cutflowHistW"],[49,4,1,"_CPPv4N11TauSelector13m_cutflow_binE","TauSelector::m_cutflow_bin"],[49,4,1,"_CPPv4N11TauSelector25m_decorateSelectedObjectsE","TauSelector::m_decorateSelectedObjects"],[108,4,1,"_CPPv4N11TauSelector25m_decorateSelectedObjectsE","TauSelector::m_decorateSelectedObjects"],[49,4,1,"_CPPv4N11TauSelector20m_decorateWithTracksE","TauSelector::m_decorateWithTracks"],[108,4,1,"_CPPv4N11TauSelector20m_decorateWithTracksE","TauSelector::m_decorateWithTracks"],[49,4,1,"_CPPv4N11TauSelector16m_decorationNameE","TauSelector::m_decorationName"],[108,4,1,"_CPPv4N11TauSelector16m_decorationNameE","TauSelector::m_decorationName"],[49,4,1,"_CPPv4N11TauSelector17m_diTauTrigChainsE","TauSelector::m_diTauTrigChains"],[108,4,1,"_CPPv4N11TauSelector17m_diTauTrigChainsE","TauSelector::m_diTauTrigChains"],[49,4,1,"_CPPv4N11TauSelector21m_diTauTrigChainsListE","TauSelector::m_diTauTrigChainsList"],[49,4,1,"_CPPv4N11TauSelector13m_doTrigMatchE","TauSelector::m_doTrigMatch"],[49,4,1,"_CPPv4N11TauSelector17m_inContainerNameE","TauSelector::m_inContainerName"],[108,4,1,"_CPPv4N11TauSelector17m_inContainerNameE","TauSelector::m_inContainerName"],[49,4,1,"_CPPv4N11TauSelector20m_inputAlgoSystNamesE","TauSelector::m_inputAlgoSystNames"],[108,4,1,"_CPPv4N11TauSelector20m_inputAlgoSystNamesE","TauSelector::m_inputAlgoSystNames"],[49,4,1,"_CPPv4N11TauSelector14m_isUsedBeforeE","TauSelector::m_isUsedBefore"],[49,4,1,"_CPPv4N11TauSelector11m_minPtDAODE","TauSelector::m_minPtDAOD"],[108,4,1,"_CPPv4N11TauSelector11m_minPtDAODE","TauSelector::m_minPtDAOD"],[49,4,1,"_CPPv4N11TauSelector12m_nToProcessE","TauSelector::m_nToProcess"],[108,4,1,"_CPPv4N11TauSelector12m_nToProcessE","TauSelector::m_nToProcess"],[49,4,1,"_CPPv4N11TauSelector10m_numEventE","TauSelector::m_numEvent"],[49,4,1,"_CPPv4N11TauSelector14m_numEventPassE","TauSelector::m_numEventPass"],[49,4,1,"_CPPv4N11TauSelector11m_numObjectE","TauSelector::m_numObject"],[49,4,1,"_CPPv4N11TauSelector15m_numObjectPassE","TauSelector::m_numObjectPass"],[49,4,1,"_CPPv4N11TauSelector21m_outAuxContainerNameE","TauSelector::m_outAuxContainerName"],[108,4,1,"_CPPv4N11TauSelector21m_outAuxContainerNameE","TauSelector::m_outAuxContainerName"],[49,4,1,"_CPPv4N11TauSelector18m_outContainerNameE","TauSelector::m_outContainerName"],[108,4,1,"_CPPv4N11TauSelector18m_outContainerNameE","TauSelector::m_outContainerName"],[49,4,1,"_CPPv4N11TauSelector21m_outputAlgoSystNamesE","TauSelector::m_outputAlgoSystNames"],[108,4,1,"_CPPv4N11TauSelector21m_outputAlgoSystNamesE","TauSelector::m_outputAlgoSystNames"],[49,4,1,"_CPPv4N11TauSelector10m_pass_maxE","TauSelector::m_pass_max"],[108,4,1,"_CPPv4N11TauSelector10m_pass_maxE","TauSelector::m_pass_max"],[49,4,1,"_CPPv4N11TauSelector10m_pass_minE","TauSelector::m_pass_min"],[108,4,1,"_CPPv4N11TauSelector10m_pass_minE","TauSelector::m_pass_min"],[49,4,1,"_CPPv4N11TauSelector11m_scoreToolE","TauSelector::m_scoreTool"],[49,4,1,"_CPPv4N11TauSelector21m_singleTauTrigChainsE","TauSelector::m_singleTauTrigChains"],[108,4,1,"_CPPv4N11TauSelector21m_singleTauTrigChainsE","TauSelector::m_singleTauTrigChains"],[49,4,1,"_CPPv4N11TauSelector25m_singleTauTrigChainsListE","TauSelector::m_singleTauTrigChainsList"],[49,4,1,"_CPPv4N11TauSelector19m_tauSelTool_handleE","TauSelector::m_tauSelTool_handle"],[49,4,1,"_CPPv4N11TauSelector19m_tau_cutflowHist_1E","TauSelector::m_tau_cutflowHist_1"],[49,4,1,"_CPPv4N11TauSelector19m_tau_cutflowHist_2E","TauSelector::m_tau_cutflowHist_2"],[49,4,1,"_CPPv4N11TauSelector17m_tau_cutflow_allE","TauSelector::m_tau_cutflow_all"],[49,4,1,"_CPPv4N11TauSelector22m_tau_cutflow_selectedE","TauSelector::m_tau_cutflow_selected"],[49,4,1,"_CPPv4N11TauSelector20m_trigDecTool_handleE","TauSelector::m_trigDecTool_handle"],[49,4,1,"_CPPv4N11TauSelector25m_trigTauMatchTool_handleE","TauSelector::m_trigTauMatchTool_handle"],[49,4,1,"_CPPv4N11TauSelector12m_useCutFlowE","TauSelector::m_useCutFlow"],[108,4,1,"_CPPv4N11TauSelector12m_useCutFlowE","TauSelector::m_useCutFlow"],[49,4,1,"_CPPv4N11TauSelector20m_weightNumEventPassE","TauSelector::m_weightNumEventPass"],[49,2,1,"_CPPv4N11TauSelector8passCutsEPKN4xAOD6TauJetE","TauSelector::passCuts"],[108,2,1,"_CPPv4N11TauSelector8passCutsEPKN4xAOD6TauJetE","TauSelector::passCuts"],[49,3,1,"_CPPv4N11TauSelector8passCutsEPKN4xAOD6TauJetE","TauSelector::passCuts::tau"],[108,3,1,"_CPPv4N11TauSelector8passCutsEPKN4xAOD6TauJetE","TauSelector::passCuts::tau"],[49,2,1,"_CPPv4N11TauSelector11postExecuteEv","TauSelector::postExecute"],[108,2,1,"_CPPv4N11TauSelector11postExecuteEv","TauSelector::postExecute"],[49,2,1,"_CPPv4N11TauSelector8setupJobERN2EL3JobE","TauSelector::setupJob"],[108,2,1,"_CPPv4N11TauSelector8setupJobERN2EL3JobE","TauSelector::setupJob"],[49,3,1,"_CPPv4N11TauSelector8setupJobERN2EL3JobE","TauSelector::setupJob::job"],[108,3,1,"_CPPv4N11TauSelector8setupJobERN2EL3JobE","TauSelector::setupJob::job"],[49,2,1,"_CPPv4N11TauSelectorD0Ev","TauSelector::~TauSelector"],[108,2,1,"_CPPv4N11TauSelectorD0Ev","TauSelector::~TauSelector"],[52,1,1,"_CPPv414TrackHistsAlgo","TrackHistsAlgo"],[109,1,1,"_CPPv414TrackHistsAlgo","TrackHistsAlgo"],[52,2,1,"_CPPv4N14TrackHistsAlgo14TrackHistsAlgoEv","TrackHistsAlgo::TrackHistsAlgo"],[109,2,1,"_CPPv4N14TrackHistsAlgo14TrackHistsAlgoEv","TrackHistsAlgo::TrackHistsAlgo"],[52,2,1,"_CPPv4N14TrackHistsAlgo11changeInputEb","TrackHistsAlgo::changeInput"],[109,2,1,"_CPPv4N14TrackHistsAlgo11changeInputEb","TrackHistsAlgo::changeInput"],[52,3,1,"_CPPv4N14TrackHistsAlgo11changeInputEb","TrackHistsAlgo::changeInput::firstFile"],[109,3,1,"_CPPv4N14TrackHistsAlgo11changeInputEb","TrackHistsAlgo::changeInput::firstFile"],[52,2,1,"_CPPv4N14TrackHistsAlgo7executeEv","TrackHistsAlgo::execute"],[109,2,1,"_CPPv4N14TrackHistsAlgo7executeEv","TrackHistsAlgo::execute"],[52,2,1,"_CPPv4N14TrackHistsAlgo11fileExecuteEv","TrackHistsAlgo::fileExecute"],[109,2,1,"_CPPv4N14TrackHistsAlgo11fileExecuteEv","TrackHistsAlgo::fileExecute"],[52,2,1,"_CPPv4N14TrackHistsAlgo8finalizeEv","TrackHistsAlgo::finalize"],[109,2,1,"_CPPv4N14TrackHistsAlgo8finalizeEv","TrackHistsAlgo::finalize"],[52,2,1,"_CPPv4N14TrackHistsAlgo12histFinalizeEv","TrackHistsAlgo::histFinalize"],[109,2,1,"_CPPv4N14TrackHistsAlgo12histFinalizeEv","TrackHistsAlgo::histFinalize"],[52,2,1,"_CPPv4N14TrackHistsAlgo14histInitializeEv","TrackHistsAlgo::histInitialize"],[109,2,1,"_CPPv4N14TrackHistsAlgo14histInitializeEv","TrackHistsAlgo::histInitialize"],[52,2,1,"_CPPv4N14TrackHistsAlgo10initializeEv","TrackHistsAlgo::initialize"],[109,2,1,"_CPPv4N14TrackHistsAlgo10initializeEv","TrackHistsAlgo::initialize"],[52,4,1,"_CPPv4N14TrackHistsAlgo11m_detailStrE","TrackHistsAlgo::m_detailStr"],[109,4,1,"_CPPv4N14TrackHistsAlgo11m_detailStrE","TrackHistsAlgo::m_detailStr"],[52,4,1,"_CPPv4N14TrackHistsAlgo17m_inContainerNameE","TrackHistsAlgo::m_inContainerName"],[109,4,1,"_CPPv4N14TrackHistsAlgo17m_inContainerNameE","TrackHistsAlgo::m_inContainerName"],[52,4,1,"_CPPv4N14TrackHistsAlgo7m_plotsE","TrackHistsAlgo::m_plots"],[52,2,1,"_CPPv4N14TrackHistsAlgo11postExecuteEv","TrackHistsAlgo::postExecute"],[109,2,1,"_CPPv4N14TrackHistsAlgo11postExecuteEv","TrackHistsAlgo::postExecute"],[52,2,1,"_CPPv4N14TrackHistsAlgo8setupJobERN2EL3JobE","TrackHistsAlgo::setupJob"],[109,2,1,"_CPPv4N14TrackHistsAlgo8setupJobERN2EL3JobE","TrackHistsAlgo::setupJob"],[52,3,1,"_CPPv4N14TrackHistsAlgo8setupJobERN2EL3JobE","TrackHistsAlgo::setupJob::job"],[109,3,1,"_CPPv4N14TrackHistsAlgo8setupJobERN2EL3JobE","TrackHistsAlgo::setupJob::job"],[53,1,1,"_CPPv413TrackSelector","TrackSelector"],[110,1,1,"_CPPv413TrackSelector","TrackSelector"],[53,2,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts"],[110,2,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts"],[53,3,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts::jet"],[110,3,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts::jet"],[53,3,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts::pvx"],[110,3,1,"_CPPv4N13TrackSelector8PassCutsEPKN4xAOD13TrackParticleEPKN4xAOD6VertexE","TrackSelector::PassCuts::pvx"],[53,2,1,"_CPPv4N13TrackSelector13TrackSelectorEv","TrackSelector::TrackSelector"],[110,2,1,"_CPPv4N13TrackSelector13TrackSelectorEv","TrackSelector::TrackSelector"],[53,2,1,"_CPPv4N13TrackSelector11changeInputEb","TrackSelector::changeInput"],[110,2,1,"_CPPv4N13TrackSelector11changeInputEb","TrackSelector::changeInput"],[53,3,1,"_CPPv4N13TrackSelector11changeInputEb","TrackSelector::changeInput::firstFile"],[110,3,1,"_CPPv4N13TrackSelector11changeInputEb","TrackSelector::changeInput::firstFile"],[53,2,1,"_CPPv4N13TrackSelector7executeEv","TrackSelector::execute"],[110,2,1,"_CPPv4N13TrackSelector7executeEv","TrackSelector::execute"],[53,2,1,"_CPPv4N13TrackSelector22executeTrackCollectionEf","TrackSelector::executeTrackCollection"],[110,2,1,"_CPPv4N13TrackSelector22executeTrackCollectionEf","TrackSelector::executeTrackCollection"],[53,3,1,"_CPPv4N13TrackSelector22executeTrackCollectionEf","TrackSelector::executeTrackCollection::mcEvtWeight"],[110,3,1,"_CPPv4N13TrackSelector22executeTrackCollectionEf","TrackSelector::executeTrackCollection::mcEvtWeight"],[53,2,1,"_CPPv4N13TrackSelector19executeTracksInJetsEv","TrackSelector::executeTracksInJets"],[110,2,1,"_CPPv4N13TrackSelector19executeTracksInJetsEv","TrackSelector::executeTracksInJets"],[53,2,1,"_CPPv4N13TrackSelector11fileExecuteEv","TrackSelector::fileExecute"],[110,2,1,"_CPPv4N13TrackSelector11fileExecuteEv","TrackSelector::fileExecute"],[53,2,1,"_CPPv4N13TrackSelector8finalizeEv","TrackSelector::finalize"],[110,2,1,"_CPPv4N13TrackSelector8finalizeEv","TrackSelector::finalize"],[53,2,1,"_CPPv4N13TrackSelector12histFinalizeEv","TrackSelector::histFinalize"],[110,2,1,"_CPPv4N13TrackSelector12histFinalizeEv","TrackSelector::histFinalize"],[53,2,1,"_CPPv4N13TrackSelector14histInitializeEv","TrackSelector::histInitialize"],[110,2,1,"_CPPv4N13TrackSelector14histInitializeEv","TrackSelector::histInitialize"],[53,2,1,"_CPPv4N13TrackSelector10initializeEv","TrackSelector::initialize"],[110,2,1,"_CPPv4N13TrackSelector10initializeEv","TrackSelector::initialize"],[53,4,1,"_CPPv4N13TrackSelector17m_chi2NdofCut_maxE","TrackSelector::m_chi2NdofCut_max"],[110,4,1,"_CPPv4N13TrackSelector17m_chi2NdofCut_maxE","TrackSelector::m_chi2NdofCut_max"],[53,4,1,"_CPPv4N13TrackSelector14m_chi2Prob_maxE","TrackSelector::m_chi2Prob_max"],[110,4,1,"_CPPv4N13TrackSelector14m_chi2Prob_maxE","TrackSelector::m_chi2Prob_max"],[53,4,1,"_CPPv4N13TrackSelector14m_chi2Prob_minE","TrackSelector::m_chi2Prob_min"],[110,4,1,"_CPPv4N13TrackSelector14m_chi2Prob_minE","TrackSelector::m_chi2Prob_min"],[53,4,1,"_CPPv4N13TrackSelector25m_createSelectedContainerE","TrackSelector::m_createSelectedContainer"],[110,4,1,"_CPPv4N13TrackSelector25m_createSelectedContainerE","TrackSelector::m_createSelectedContainer"],[53,4,1,"_CPPv4N13TrackSelector16m_cutLevelStringE","TrackSelector::m_cutLevelString"],[110,4,1,"_CPPv4N13TrackSelector16m_cutLevelStringE","TrackSelector::m_cutLevelString"],[53,4,1,"_CPPv4N13TrackSelector13m_cutflowHistE","TrackSelector::m_cutflowHist"],[53,4,1,"_CPPv4N13TrackSelector14m_cutflowHistWE","TrackSelector::m_cutflowHistW"],[53,4,1,"_CPPv4N13TrackSelector13m_cutflow_binE","TrackSelector::m_cutflow_bin"],[53,4,1,"_CPPv4N13TrackSelector8m_d0_maxE","TrackSelector::m_d0_max"],[110,4,1,"_CPPv4N13TrackSelector8m_d0_maxE","TrackSelector::m_d0_max"],[53,4,1,"_CPPv4N13TrackSelector19m_d0oversigmad0_maxE","TrackSelector::m_d0oversigmad0_max"],[110,4,1,"_CPPv4N13TrackSelector19m_d0oversigmad0_maxE","TrackSelector::m_d0oversigmad0_max"],[53,4,1,"_CPPv4N13TrackSelector25m_decorateSelectedObjectsE","TrackSelector::m_decorateSelectedObjects"],[110,4,1,"_CPPv4N13TrackSelector25m_decorateSelectedObjectsE","TrackSelector::m_decorateSelectedObjects"],[53,4,1,"_CPPv4N13TrackSelector16m_doTracksInJetsE","TrackSelector::m_doTracksInJets"],[110,4,1,"_CPPv4N13TrackSelector16m_doTracksInJetsE","TrackSelector::m_doTracksInJets"],[53,4,1,"_CPPv4N13TrackSelector15m_etaSigned_maxE","TrackSelector::m_etaSigned_max"],[110,4,1,"_CPPv4N13TrackSelector15m_etaSigned_maxE","TrackSelector::m_etaSigned_max"],[53,4,1,"_CPPv4N13TrackSelector15m_etaSigned_minE","TrackSelector::m_etaSigned_min"],[110,4,1,"_CPPv4N13TrackSelector15m_etaSigned_minE","TrackSelector::m_etaSigned_min"],[53,4,1,"_CPPv4N13TrackSelector9m_eta_maxE","TrackSelector::m_eta_max"],[110,4,1,"_CPPv4N13TrackSelector9m_eta_maxE","TrackSelector::m_eta_max"],[53,4,1,"_CPPv4N13TrackSelector9m_eta_minE","TrackSelector::m_eta_min"],[110,4,1,"_CPPv4N13TrackSelector9m_eta_minE","TrackSelector::m_eta_min"],[53,4,1,"_CPPv4N13TrackSelector18m_failAuxDecorKeysE","TrackSelector::m_failAuxDecorKeys"],[110,4,1,"_CPPv4N13TrackSelector18m_failAuxDecorKeysE","TrackSelector::m_failAuxDecorKeys"],[53,4,1,"_CPPv4N13TrackSelector10m_failKeysE","TrackSelector::m_failKeys"],[53,4,1,"_CPPv4N13TrackSelector17m_inContainerNameE","TrackSelector::m_inContainerName"],[110,4,1,"_CPPv4N13TrackSelector17m_inContainerNameE","TrackSelector::m_inContainerName"],[53,4,1,"_CPPv4N13TrackSelector20m_inJetContainerNameE","TrackSelector::m_inJetContainerName"],[110,4,1,"_CPPv4N13TrackSelector20m_inJetContainerNameE","TrackSelector::m_inJetContainerName"],[53,4,1,"_CPPv4N13TrackSelector9m_nBL_minE","TrackSelector::m_nBL_min"],[110,4,1,"_CPPv4N13TrackSelector9m_nBL_minE","TrackSelector::m_nBL_min"],[53,4,1,"_CPPv4N13TrackSelector30m_nBothInnermostLayersHits_minE","TrackSelector::m_nBothInnermostLayersHits_min"],[110,4,1,"_CPPv4N13TrackSelector30m_nBothInnermostLayersHits_minE","TrackSelector::m_nBothInnermostLayersHits_min"],[53,4,1,"_CPPv4N13TrackSelector21m_nInnermostPixel_minE","TrackSelector::m_nInnermostPixel_min"],[110,4,1,"_CPPv4N13TrackSelector21m_nInnermostPixel_minE","TrackSelector::m_nInnermostPixel_min"],[53,4,1,"_CPPv4N13TrackSelector27m_nNextToInnermostPixel_minE","TrackSelector::m_nNextToInnermostPixel_min"],[110,4,1,"_CPPv4N13TrackSelector27m_nNextToInnermostPixel_minE","TrackSelector::m_nNextToInnermostPixel_min"],[53,4,1,"_CPPv4N13TrackSelector15m_nPixHoles_maxE","TrackSelector::m_nPixHoles_max"],[110,4,1,"_CPPv4N13TrackSelector15m_nPixHoles_maxE","TrackSelector::m_nPixHoles_max"],[53,4,1,"_CPPv4N13TrackSelector24m_nPixelHitsPhysical_minE","TrackSelector::m_nPixelHitsPhysical_min"],[110,4,1,"_CPPv4N13TrackSelector24m_nPixelHitsPhysical_minE","TrackSelector::m_nPixelHitsPhysical_min"],[53,4,1,"_CPPv4N13TrackSelector16m_nPixelHits_minE","TrackSelector::m_nPixelHits_min"],[110,4,1,"_CPPv4N13TrackSelector16m_nPixelHits_minE","TrackSelector::m_nPixelHits_min"],[53,4,1,"_CPPv4N13TrackSelector22m_nPixelSharedHits_maxE","TrackSelector::m_nPixelSharedHits_max"],[110,4,1,"_CPPv4N13TrackSelector22m_nPixelSharedHits_maxE","TrackSelector::m_nPixelSharedHits_max"],[53,4,1,"_CPPv4N13TrackSelector22m_nSctHitsPhysical_minE","TrackSelector::m_nSctHitsPhysical_min"],[110,4,1,"_CPPv4N13TrackSelector22m_nSctHitsPhysical_minE","TrackSelector::m_nSctHitsPhysical_min"],[53,4,1,"_CPPv4N13TrackSelector14m_nSctHits_minE","TrackSelector::m_nSctHits_min"],[110,4,1,"_CPPv4N13TrackSelector14m_nSctHits_minE","TrackSelector::m_nSctHits_min"],[53,4,1,"_CPPv4N13TrackSelector15m_nSctHoles_maxE","TrackSelector::m_nSctHoles_max"],[110,4,1,"_CPPv4N13TrackSelector15m_nSctHoles_maxE","TrackSelector::m_nSctHoles_max"],[53,4,1,"_CPPv4N13TrackSelector20m_nSctSharedHits_maxE","TrackSelector::m_nSctSharedHits_max"],[110,4,1,"_CPPv4N13TrackSelector20m_nSctSharedHits_maxE","TrackSelector::m_nSctSharedHits_max"],[53,4,1,"_CPPv4N13TrackSelector14m_nSiHoles_maxE","TrackSelector::m_nSiHoles_max"],[110,4,1,"_CPPv4N13TrackSelector14m_nSiHoles_maxE","TrackSelector::m_nSiHoles_max"],[53,4,1,"_CPPv4N13TrackSelector17m_nSiPhysical_minE","TrackSelector::m_nSiPhysical_min"],[110,4,1,"_CPPv4N13TrackSelector17m_nSiPhysical_minE","TrackSelector::m_nSiPhysical_min"],[53,4,1,"_CPPv4N13TrackSelector19m_nSiSharedHits_maxE","TrackSelector::m_nSiSharedHits_max"],[110,4,1,"_CPPv4N13TrackSelector19m_nSiSharedHits_maxE","TrackSelector::m_nSiSharedHits_max"],[53,4,1,"_CPPv4N13TrackSelector22m_nSiSharedModules_maxE","TrackSelector::m_nSiSharedModules_max"],[110,4,1,"_CPPv4N13TrackSelector22m_nSiSharedModules_maxE","TrackSelector::m_nSiSharedModules_max"],[53,4,1,"_CPPv4N13TrackSelector9m_nSi_minE","TrackSelector::m_nSi_min"],[110,4,1,"_CPPv4N13TrackSelector9m_nSi_minE","TrackSelector::m_nSi_min"],[53,4,1,"_CPPv4N13TrackSelector12m_nToProcessE","TrackSelector::m_nToProcess"],[110,4,1,"_CPPv4N13TrackSelector12m_nToProcessE","TrackSelector::m_nToProcess"],[53,4,1,"_CPPv4N13TrackSelector10m_numEventE","TrackSelector::m_numEvent"],[53,4,1,"_CPPv4N13TrackSelector14m_numEventPassE","TrackSelector::m_numEventPass"],[53,4,1,"_CPPv4N13TrackSelector11m_numObjectE","TrackSelector::m_numObject"],[53,4,1,"_CPPv4N13TrackSelector15m_numObjectPassE","TrackSelector::m_numObjectPass"],[53,4,1,"_CPPv4N13TrackSelector18m_outContainerNameE","TrackSelector::m_outContainerName"],[110,4,1,"_CPPv4N13TrackSelector18m_outContainerNameE","TrackSelector::m_outContainerName"],[53,4,1,"_CPPv4N13TrackSelector8m_pT_maxE","TrackSelector::m_pT_max"],[110,4,1,"_CPPv4N13TrackSelector8m_pT_maxE","TrackSelector::m_pT_max"],[53,4,1,"_CPPv4N13TrackSelector8m_pT_minE","TrackSelector::m_pT_min"],[110,4,1,"_CPPv4N13TrackSelector8m_pT_minE","TrackSelector::m_pT_min"],[53,4,1,"_CPPv4N13TrackSelector7m_p_minE","TrackSelector::m_p_min"],[110,4,1,"_CPPv4N13TrackSelector7m_p_minE","TrackSelector::m_p_min"],[53,4,1,"_CPPv4N13TrackSelector18m_passAuxDecorKeysE","TrackSelector::m_passAuxDecorKeys"],[110,4,1,"_CPPv4N13TrackSelector18m_passAuxDecorKeysE","TrackSelector::m_passAuxDecorKeys"],[53,4,1,"_CPPv4N13TrackSelector10m_passKeysE","TrackSelector::m_passKeys"],[53,4,1,"_CPPv4N13TrackSelector10m_pass_maxE","TrackSelector::m_pass_max"],[110,4,1,"_CPPv4N13TrackSelector10m_pass_maxE","TrackSelector::m_pass_max"],[53,4,1,"_CPPv4N13TrackSelector10m_pass_minE","TrackSelector::m_pass_min"],[110,4,1,"_CPPv4N13TrackSelector10m_pass_minE","TrackSelector::m_pass_min"],[53,4,1,"_CPPv4N13TrackSelector13m_sigmad0_maxE","TrackSelector::m_sigmad0_max"],[110,4,1,"_CPPv4N13TrackSelector13m_sigmad0_maxE","TrackSelector::m_sigmad0_max"],[53,4,1,"_CPPv4N13TrackSelector13m_sigmaz0_maxE","TrackSelector::m_sigmaz0_max"],[110,4,1,"_CPPv4N13TrackSelector13m_sigmaz0_maxE","TrackSelector::m_sigmaz0_max"],[53,4,1,"_CPPv4N13TrackSelector21m_sigmaz0sintheta_maxE","TrackSelector::m_sigmaz0sintheta_max"],[110,4,1,"_CPPv4N13TrackSelector21m_sigmaz0sintheta_maxE","TrackSelector::m_sigmaz0sintheta_max"],[53,4,1,"_CPPv4N13TrackSelector19m_trkSelTool_handleE","TrackSelector::m_trkSelTool_handle"],[53,4,1,"_CPPv4N13TrackSelector12m_useCutFlowE","TrackSelector::m_useCutFlow"],[110,4,1,"_CPPv4N13TrackSelector12m_useCutFlowE","TrackSelector::m_useCutFlow"],[53,4,1,"_CPPv4N13TrackSelector8m_z0_maxE","TrackSelector::m_z0_max"],[110,4,1,"_CPPv4N13TrackSelector8m_z0_maxE","TrackSelector::m_z0_max"],[53,4,1,"_CPPv4N13TrackSelector19m_z0oversigmaz0_maxE","TrackSelector::m_z0oversigmaz0_max"],[110,4,1,"_CPPv4N13TrackSelector19m_z0oversigmaz0_maxE","TrackSelector::m_z0oversigmaz0_max"],[53,4,1,"_CPPv4N13TrackSelector12m_z0sinT_maxE","TrackSelector::m_z0sinT_max"],[110,4,1,"_CPPv4N13TrackSelector12m_z0sinT_maxE","TrackSelector::m_z0sinT_max"],[53,4,1,"_CPPv4N13TrackSelector35m_z0sinthetaoversigmaz0sintheta_maxE","TrackSelector::m_z0sinthetaoversigmaz0sintheta_max"],[110,4,1,"_CPPv4N13TrackSelector35m_z0sinthetaoversigmaz0sintheta_maxE","TrackSelector::m_z0sinthetaoversigmaz0sintheta_max"],[53,2,1,"_CPPv4N13TrackSelector11postExecuteEv","TrackSelector::postExecute"],[110,2,1,"_CPPv4N13TrackSelector11postExecuteEv","TrackSelector::postExecute"],[53,2,1,"_CPPv4N13TrackSelector8setupJobERN2EL3JobE","TrackSelector::setupJob"],[110,2,1,"_CPPv4N13TrackSelector8setupJobERN2EL3JobE","TrackSelector::setupJob"],[53,3,1,"_CPPv4N13TrackSelector8setupJobERN2EL3JobE","TrackSelector::setupJob::job"],[110,3,1,"_CPPv4N13TrackSelector8setupJobERN2EL3JobE","TrackSelector::setupJob::job"],[54,1,1,"_CPPv48TreeAlgo","TreeAlgo"],[111,1,1,"_CPPv48TreeAlgo","TreeAlgo"],[54,2,1,"_CPPv4N8TreeAlgo8TreeAlgoEv","TreeAlgo::TreeAlgo"],[111,2,1,"_CPPv4N8TreeAlgo8TreeAlgoEv","TreeAlgo::TreeAlgo"],[54,2,1,"_CPPv4N8TreeAlgo11changeInputEb","TreeAlgo::changeInput"],[111,2,1,"_CPPv4N8TreeAlgo11changeInputEb","TreeAlgo::changeInput"],[54,3,1,"_CPPv4N8TreeAlgo11changeInputEb","TreeAlgo::changeInput::firstFile"],[111,3,1,"_CPPv4N8TreeAlgo11changeInputEb","TreeAlgo::changeInput::firstFile"],[54,2,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree"],[111,2,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::debug"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::debug"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::event"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::event"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::file"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::file"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::store"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::store"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::tree"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::tree"],[54,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::units"],[111,3,1,"_CPPv4N8TreeAlgo10createTreeEPN4xAOD6TEventEP5TTreeP5TFileKfbPN4xAOD6TStoreE","TreeAlgo::createTree::units"],[54,2,1,"_CPPv4N8TreeAlgo7executeEv","TreeAlgo::execute"],[111,2,1,"_CPPv4N8TreeAlgo7executeEv","TreeAlgo::execute"],[54,2,1,"_CPPv4N8TreeAlgo11fileExecuteEv","TreeAlgo::fileExecute"],[111,2,1,"_CPPv4N8TreeAlgo11fileExecuteEv","TreeAlgo::fileExecute"],[54,2,1,"_CPPv4N8TreeAlgo8finalizeEv","TreeAlgo::finalize"],[111,2,1,"_CPPv4N8TreeAlgo8finalizeEv","TreeAlgo::finalize"],[54,2,1,"_CPPv4N8TreeAlgo12histFinalizeEv","TreeAlgo::histFinalize"],[111,2,1,"_CPPv4N8TreeAlgo12histFinalizeEv","TreeAlgo::histFinalize"],[54,2,1,"_CPPv4N8TreeAlgo14histInitializeEv","TreeAlgo::histInitialize"],[111,2,1,"_CPPv4N8TreeAlgo14histInitializeEv","TreeAlgo::histInitialize"],[54,2,1,"_CPPv4N8TreeAlgo10initializeEv","TreeAlgo::initialize"],[111,2,1,"_CPPv4N8TreeAlgo10initializeEv","TreeAlgo::initialize"],[54,4,1,"_CPPv4N8TreeAlgo18m_METContainerNameE","TreeAlgo::m_METContainerName"],[111,4,1,"_CPPv4N8TreeAlgo18m_METContainerNameE","TreeAlgo::m_METContainerName"],[54,4,1,"_CPPv4N8TreeAlgo14m_METDetailStrE","TreeAlgo::m_METDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo14m_METDetailStrE","TreeAlgo::m_METDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo27m_METReferenceContainerNameE","TreeAlgo::m_METReferenceContainerName"],[111,4,1,"_CPPv4N8TreeAlgo27m_METReferenceContainerNameE","TreeAlgo::m_METReferenceContainerName"],[54,4,1,"_CPPv4N8TreeAlgo23m_METReferenceDetailStrE","TreeAlgo::m_METReferenceDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo23m_METReferenceDetailStrE","TreeAlgo::m_METReferenceDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo11m_autoFlushE","TreeAlgo::m_autoFlush"],[111,4,1,"_CPPv4N8TreeAlgo11m_autoFlushE","TreeAlgo::m_autoFlush"],[54,4,1,"_CPPv4N8TreeAlgo19m_clusterBranchNameE","TreeAlgo::m_clusterBranchName"],[111,4,1,"_CPPv4N8TreeAlgo19m_clusterBranchNameE","TreeAlgo::m_clusterBranchName"],[54,4,1,"_CPPv4N8TreeAlgo17m_clusterBranchesE","TreeAlgo::m_clusterBranches"],[111,4,1,"_CPPv4N8TreeAlgo17m_clusterBranchesE","TreeAlgo::m_clusterBranches"],[54,4,1,"_CPPv4N8TreeAlgo22m_clusterContainerNameE","TreeAlgo::m_clusterContainerName"],[111,4,1,"_CPPv4N8TreeAlgo22m_clusterContainerNameE","TreeAlgo::m_clusterContainerName"],[54,4,1,"_CPPv4N8TreeAlgo19m_clusterContainersE","TreeAlgo::m_clusterContainers"],[111,4,1,"_CPPv4N8TreeAlgo19m_clusterContainersE","TreeAlgo::m_clusterContainers"],[54,4,1,"_CPPv4N8TreeAlgo18m_clusterDetailStrE","TreeAlgo::m_clusterDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo18m_clusterDetailStrE","TreeAlgo::m_clusterDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo16m_clusterDetailsE","TreeAlgo::m_clusterDetails"],[111,4,1,"_CPPv4N8TreeAlgo16m_clusterDetailsE","TreeAlgo::m_clusterDetails"],[54,4,1,"_CPPv4N8TreeAlgo17m_elContainerNameE","TreeAlgo::m_elContainerName"],[111,4,1,"_CPPv4N8TreeAlgo17m_elContainerNameE","TreeAlgo::m_elContainerName"],[54,4,1,"_CPPv4N8TreeAlgo13m_elDetailStrE","TreeAlgo::m_elDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo13m_elDetailStrE","TreeAlgo::m_elDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo12m_elSystsVecE","TreeAlgo::m_elSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo12m_elSystsVecE","TreeAlgo::m_elSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo18m_evtContainerNameE","TreeAlgo::m_evtContainerName"],[111,4,1,"_CPPv4N8TreeAlgo18m_evtContainerNameE","TreeAlgo::m_evtContainerName"],[54,4,1,"_CPPv4N8TreeAlgo14m_evtDetailStrE","TreeAlgo::m_evtDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo14m_evtDetailStrE","TreeAlgo::m_evtDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo18m_fatJetBranchNameE","TreeAlgo::m_fatJetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo18m_fatJetBranchNameE","TreeAlgo::m_fatJetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo16m_fatJetBranchesE","TreeAlgo::m_fatJetBranches"],[111,4,1,"_CPPv4N8TreeAlgo16m_fatJetBranchesE","TreeAlgo::m_fatJetBranches"],[54,4,1,"_CPPv4N8TreeAlgo21m_fatJetContainerNameE","TreeAlgo::m_fatJetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo21m_fatJetContainerNameE","TreeAlgo::m_fatJetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo18m_fatJetContainersE","TreeAlgo::m_fatJetContainers"],[111,4,1,"_CPPv4N8TreeAlgo18m_fatJetContainersE","TreeAlgo::m_fatJetContainers"],[54,4,1,"_CPPv4N8TreeAlgo17m_fatJetDetailStrE","TreeAlgo::m_fatJetDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo17m_fatJetDetailStrE","TreeAlgo::m_fatJetDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo15m_fatJetDetailsE","TreeAlgo::m_fatJetDetails"],[111,4,1,"_CPPv4N8TreeAlgo15m_fatJetDetailsE","TreeAlgo::m_fatJetDetails"],[54,4,1,"_CPPv4N8TreeAlgo16m_fatJetSystsVecE","TreeAlgo::m_fatJetSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo16m_fatJetSystsVecE","TreeAlgo::m_fatJetSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo15m_jetBranchNameE","TreeAlgo::m_jetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo15m_jetBranchNameE","TreeAlgo::m_jetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo13m_jetBranchesE","TreeAlgo::m_jetBranches"],[111,4,1,"_CPPv4N8TreeAlgo13m_jetBranchesE","TreeAlgo::m_jetBranches"],[54,4,1,"_CPPv4N8TreeAlgo18m_jetContainerNameE","TreeAlgo::m_jetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo18m_jetContainerNameE","TreeAlgo::m_jetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo15m_jetContainersE","TreeAlgo::m_jetContainers"],[111,4,1,"_CPPv4N8TreeAlgo15m_jetContainersE","TreeAlgo::m_jetContainers"],[54,4,1,"_CPPv4N8TreeAlgo14m_jetDetailStrE","TreeAlgo::m_jetDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo14m_jetDetailStrE","TreeAlgo::m_jetDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo12m_jetDetailsE","TreeAlgo::m_jetDetails"],[111,4,1,"_CPPv4N8TreeAlgo12m_jetDetailsE","TreeAlgo::m_jetDetails"],[54,4,1,"_CPPv4N8TreeAlgo13m_jetSystsVecE","TreeAlgo::m_jetSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo13m_jetSystsVecE","TreeAlgo::m_jetSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo17m_l1JetBranchNameE","TreeAlgo::m_l1JetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo17m_l1JetBranchNameE","TreeAlgo::m_l1JetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo15m_l1JetBranchesE","TreeAlgo::m_l1JetBranches"],[111,4,1,"_CPPv4N8TreeAlgo15m_l1JetBranchesE","TreeAlgo::m_l1JetBranches"],[54,4,1,"_CPPv4N8TreeAlgo20m_l1JetContainerNameE","TreeAlgo::m_l1JetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo20m_l1JetContainerNameE","TreeAlgo::m_l1JetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo17m_l1JetContainersE","TreeAlgo::m_l1JetContainers"],[111,4,1,"_CPPv4N8TreeAlgo17m_l1JetContainersE","TreeAlgo::m_l1JetContainers"],[54,4,1,"_CPPv4N8TreeAlgo13m_metSystsVecE","TreeAlgo::m_metSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo13m_metSystsVecE","TreeAlgo::m_metSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo17m_muContainerNameE","TreeAlgo::m_muContainerName"],[111,4,1,"_CPPv4N8TreeAlgo17m_muContainerNameE","TreeAlgo::m_muContainerName"],[54,4,1,"_CPPv4N8TreeAlgo13m_muDetailStrE","TreeAlgo::m_muDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo13m_muDetailStrE","TreeAlgo::m_muDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo12m_muSystsVecE","TreeAlgo::m_muSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo12m_muSystsVecE","TreeAlgo::m_muSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo12m_outHistDirE","TreeAlgo::m_outHistDir"],[111,4,1,"_CPPv4N8TreeAlgo12m_outHistDirE","TreeAlgo::m_outHistDir"],[54,4,1,"_CPPv4N8TreeAlgo21m_photonContainerNameE","TreeAlgo::m_photonContainerName"],[111,4,1,"_CPPv4N8TreeAlgo21m_photonContainerNameE","TreeAlgo::m_photonContainerName"],[54,4,1,"_CPPv4N8TreeAlgo17m_photonDetailStrE","TreeAlgo::m_photonDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo17m_photonDetailStrE","TreeAlgo::m_photonDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo16m_photonSystsVecE","TreeAlgo::m_photonSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo16m_photonSystsVecE","TreeAlgo::m_photonSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo12m_retrievePVE","TreeAlgo::m_retrievePV"],[111,4,1,"_CPPv4N8TreeAlgo12m_retrievePVE","TreeAlgo::m_retrievePV"],[54,4,1,"_CPPv4N8TreeAlgo12m_sortL1JetsE","TreeAlgo::m_sortL1Jets"],[111,4,1,"_CPPv4N8TreeAlgo12m_sortL1JetsE","TreeAlgo::m_sortL1Jets"],[54,4,1,"_CPPv4N8TreeAlgo18m_tauContainerNameE","TreeAlgo::m_tauContainerName"],[111,4,1,"_CPPv4N8TreeAlgo18m_tauContainerNameE","TreeAlgo::m_tauContainerName"],[54,4,1,"_CPPv4N8TreeAlgo14m_tauDetailStrE","TreeAlgo::m_tauDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo14m_tauDetailStrE","TreeAlgo::m_tauDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo13m_tauSystsVecE","TreeAlgo::m_tauSystsVec"],[111,4,1,"_CPPv4N8TreeAlgo13m_tauSystsVecE","TreeAlgo::m_tauSystsVec"],[54,4,1,"_CPPv4N8TreeAlgo29m_trackParticlesContainerNameE","TreeAlgo::m_trackParticlesContainerName"],[111,4,1,"_CPPv4N8TreeAlgo29m_trackParticlesContainerNameE","TreeAlgo::m_trackParticlesContainerName"],[54,4,1,"_CPPv4N8TreeAlgo25m_trackParticlesDetailStrE","TreeAlgo::m_trackParticlesDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo25m_trackParticlesDetailStrE","TreeAlgo::m_trackParticlesDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo16m_treeStreamNameE","TreeAlgo::m_treeStreamName"],[111,4,1,"_CPPv4N8TreeAlgo16m_treeStreamNameE","TreeAlgo::m_treeStreamName"],[54,4,1,"_CPPv4N8TreeAlgo7m_treesE","TreeAlgo::m_trees"],[111,4,1,"_CPPv4N8TreeAlgo7m_treesE","TreeAlgo::m_trees"],[54,4,1,"_CPPv4N8TreeAlgo15m_trigDetailStrE","TreeAlgo::m_trigDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo15m_trigDetailStrE","TreeAlgo::m_trigDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo19m_trigJetBranchNameE","TreeAlgo::m_trigJetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo19m_trigJetBranchNameE","TreeAlgo::m_trigJetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo17m_trigJetBranchesE","TreeAlgo::m_trigJetBranches"],[111,4,1,"_CPPv4N8TreeAlgo17m_trigJetBranchesE","TreeAlgo::m_trigJetBranches"],[54,4,1,"_CPPv4N8TreeAlgo22m_trigJetContainerNameE","TreeAlgo::m_trigJetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo22m_trigJetContainerNameE","TreeAlgo::m_trigJetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo19m_trigJetContainersE","TreeAlgo::m_trigJetContainers"],[111,4,1,"_CPPv4N8TreeAlgo19m_trigJetContainersE","TreeAlgo::m_trigJetContainers"],[54,4,1,"_CPPv4N8TreeAlgo18m_trigJetDetailStrE","TreeAlgo::m_trigJetDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo18m_trigJetDetailStrE","TreeAlgo::m_trigJetDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo16m_trigJetDetailsE","TreeAlgo::m_trigJetDetails"],[111,4,1,"_CPPv4N8TreeAlgo16m_trigJetDetailsE","TreeAlgo::m_trigJetDetails"],[54,4,1,"_CPPv4N8TreeAlgo23m_truthFatJetBranchNameE","TreeAlgo::m_truthFatJetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo23m_truthFatJetBranchNameE","TreeAlgo::m_truthFatJetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo26m_truthFatJetContainerNameE","TreeAlgo::m_truthFatJetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo26m_truthFatJetContainerNameE","TreeAlgo::m_truthFatJetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo22m_truthFatJetDetailStrE","TreeAlgo::m_truthFatJetDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo22m_truthFatJetDetailStrE","TreeAlgo::m_truthFatJetDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo20m_truthJetBranchNameE","TreeAlgo::m_truthJetBranchName"],[111,4,1,"_CPPv4N8TreeAlgo20m_truthJetBranchNameE","TreeAlgo::m_truthJetBranchName"],[54,4,1,"_CPPv4N8TreeAlgo18m_truthJetBranchesE","TreeAlgo::m_truthJetBranches"],[111,4,1,"_CPPv4N8TreeAlgo18m_truthJetBranchesE","TreeAlgo::m_truthJetBranches"],[54,4,1,"_CPPv4N8TreeAlgo23m_truthJetContainerNameE","TreeAlgo::m_truthJetContainerName"],[111,4,1,"_CPPv4N8TreeAlgo23m_truthJetContainerNameE","TreeAlgo::m_truthJetContainerName"],[54,4,1,"_CPPv4N8TreeAlgo20m_truthJetContainersE","TreeAlgo::m_truthJetContainers"],[111,4,1,"_CPPv4N8TreeAlgo20m_truthJetContainersE","TreeAlgo::m_truthJetContainers"],[54,4,1,"_CPPv4N8TreeAlgo19m_truthJetDetailStrE","TreeAlgo::m_truthJetDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo19m_truthJetDetailStrE","TreeAlgo::m_truthJetDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo26m_truthParticlesBranchNameE","TreeAlgo::m_truthParticlesBranchName"],[111,4,1,"_CPPv4N8TreeAlgo26m_truthParticlesBranchNameE","TreeAlgo::m_truthParticlesBranchName"],[54,4,1,"_CPPv4N8TreeAlgo24m_truthParticlesBranchesE","TreeAlgo::m_truthParticlesBranches"],[111,4,1,"_CPPv4N8TreeAlgo24m_truthParticlesBranchesE","TreeAlgo::m_truthParticlesBranches"],[54,4,1,"_CPPv4N8TreeAlgo29m_truthParticlesContainerNameE","TreeAlgo::m_truthParticlesContainerName"],[111,4,1,"_CPPv4N8TreeAlgo29m_truthParticlesContainerNameE","TreeAlgo::m_truthParticlesContainerName"],[54,4,1,"_CPPv4N8TreeAlgo26m_truthParticlesContainersE","TreeAlgo::m_truthParticlesContainers"],[111,4,1,"_CPPv4N8TreeAlgo26m_truthParticlesContainersE","TreeAlgo::m_truthParticlesContainers"],[54,4,1,"_CPPv4N8TreeAlgo25m_truthParticlesDetailStrE","TreeAlgo::m_truthParticlesDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo25m_truthParticlesDetailStrE","TreeAlgo::m_truthParticlesDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo7m_unitsE","TreeAlgo::m_units"],[111,4,1,"_CPPv4N8TreeAlgo7m_unitsE","TreeAlgo::m_units"],[54,4,1,"_CPPv4N8TreeAlgo18m_vertexBranchNameE","TreeAlgo::m_vertexBranchName"],[111,4,1,"_CPPv4N8TreeAlgo18m_vertexBranchNameE","TreeAlgo::m_vertexBranchName"],[54,4,1,"_CPPv4N8TreeAlgo16m_vertexBranchesE","TreeAlgo::m_vertexBranches"],[111,4,1,"_CPPv4N8TreeAlgo16m_vertexBranchesE","TreeAlgo::m_vertexBranches"],[54,4,1,"_CPPv4N8TreeAlgo18m_vertexContainersE","TreeAlgo::m_vertexContainers"],[111,4,1,"_CPPv4N8TreeAlgo18m_vertexContainersE","TreeAlgo::m_vertexContainers"],[54,4,1,"_CPPv4N8TreeAlgo17m_vertexDetailStrE","TreeAlgo::m_vertexDetailStr"],[111,4,1,"_CPPv4N8TreeAlgo17m_vertexDetailStrE","TreeAlgo::m_vertexDetailStr"],[54,4,1,"_CPPv4N8TreeAlgo15m_vertexDetailsE","TreeAlgo::m_vertexDetails"],[111,4,1,"_CPPv4N8TreeAlgo15m_vertexDetailsE","TreeAlgo::m_vertexDetails"],[54,2,1,"_CPPv4N8TreeAlgo11postExecuteEv","TreeAlgo::postExecute"],[111,2,1,"_CPPv4N8TreeAlgo11postExecuteEv","TreeAlgo::postExecute"],[54,2,1,"_CPPv4N8TreeAlgo8setupJobERN2EL3JobE","TreeAlgo::setupJob"],[111,2,1,"_CPPv4N8TreeAlgo8setupJobERN2EL3JobE","TreeAlgo::setupJob"],[54,3,1,"_CPPv4N8TreeAlgo8setupJobERN2EL3JobE","TreeAlgo::setupJob::job"],[111,3,1,"_CPPv4N8TreeAlgo8setupJobERN2EL3JobE","TreeAlgo::setupJob::job"],[112,1,1,"_CPPv411TrigMatcher","TrigMatcher"],[112,2,1,"_CPPv4N11TrigMatcher11TrigMatcherEv","TrigMatcher::TrigMatcher"],[112,2,1,"_CPPv4N11TrigMatcher7executeEv","TrigMatcher::execute"],[112,2,1,"_CPPv4N11TrigMatcher15executeMatchingEPKN4xAOD18IParticleContainerE","TrigMatcher::executeMatching"],[112,3,1,"_CPPv4N11TrigMatcher15executeMatchingEPKN4xAOD18IParticleContainerE","TrigMatcher::executeMatching::inParticles"],[112,2,1,"_CPPv4N11TrigMatcher10initializeEv","TrigMatcher::initialize"],[112,4,1,"_CPPv4N11TrigMatcher17m_inContainerNameE","TrigMatcher::m_inContainerName"],[112,4,1,"_CPPv4N11TrigMatcher11m_systNamesE","TrigMatcher::m_systNames"],[112,4,1,"_CPPv4N11TrigMatcher12m_trigChainsE","TrigMatcher::m_trigChains"],[112,2,1,"_CPPv4N11TrigMatcher8setupJobERN2EL3JobE","TrigMatcher::setupJob"],[112,3,1,"_CPPv4N11TrigMatcher8setupJobERN2EL3JobE","TrigMatcher::setupJob::job"],[112,2,1,"_CPPv4N11TrigMatcherD0Ev","TrigMatcher::~TrigMatcher"],[55,1,1,"_CPPv413TruthSelector","TruthSelector"],[113,1,1,"_CPPv413TruthSelector","TruthSelector"],[55,2,1,"_CPPv4N13TruthSelector8PassCutsEPKN4xAOD13TruthParticleE","TruthSelector::PassCuts"],[113,2,1,"_CPPv4N13TruthSelector8PassCutsEPKN4xAOD13TruthParticleE","TruthSelector::PassCuts"],[55,3,1,"_CPPv4N13TruthSelector8PassCutsEPKN4xAOD13TruthParticleE","TruthSelector::PassCuts::truthPart"],[113,3,1,"_CPPv4N13TruthSelector8PassCutsEPKN4xAOD13TruthParticleE","TruthSelector::PassCuts::truthPart"],[55,2,1,"_CPPv4N13TruthSelector13TruthSelectorEv","TruthSelector::TruthSelector"],[113,2,1,"_CPPv4N13TruthSelector13TruthSelectorEv","TruthSelector::TruthSelector"],[55,2,1,"_CPPv4N13TruthSelector11changeInputEb","TruthSelector::changeInput"],[113,2,1,"_CPPv4N13TruthSelector11changeInputEb","TruthSelector::changeInput"],[55,3,1,"_CPPv4N13TruthSelector11changeInputEb","TruthSelector::changeInput::firstFile"],[113,3,1,"_CPPv4N13TruthSelector11changeInputEb","TruthSelector::changeInput::firstFile"],[55,2,1,"_CPPv4N13TruthSelector7executeEv","TruthSelector::execute"],[113,2,1,"_CPPv4N13TruthSelector7executeEv","TruthSelector::execute"],[55,2,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection"],[113,2,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection"],[55,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::count"],[113,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::count"],[55,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::inTruthParts"],[113,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::inTruthParts"],[55,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::mcEvtWeight"],[113,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::mcEvtWeight"],[55,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::outContainerName"],[113,3,1,"_CPPv4N13TruthSelector16executeSelectionEPKN4xAOD22TruthParticleContainerEfbNSt6stringE","TruthSelector::executeSelection::outContainerName"],[55,2,1,"_CPPv4N13TruthSelector11fileExecuteEv","TruthSelector::fileExecute"],[113,2,1,"_CPPv4N13TruthSelector11fileExecuteEv","TruthSelector::fileExecute"],[55,2,1,"_CPPv4N13TruthSelector8finalizeEv","TruthSelector::finalize"],[113,2,1,"_CPPv4N13TruthSelector8finalizeEv","TruthSelector::finalize"],[55,2,1,"_CPPv4N13TruthSelector12histFinalizeEv","TruthSelector::histFinalize"],[113,2,1,"_CPPv4N13TruthSelector12histFinalizeEv","TruthSelector::histFinalize"],[55,2,1,"_CPPv4N13TruthSelector14histInitializeEv","TruthSelector::histInitialize"],[113,2,1,"_CPPv4N13TruthSelector14histInitializeEv","TruthSelector::histInitialize"],[55,2,1,"_CPPv4N13TruthSelector10initializeEv","TruthSelector::initialize"],[113,2,1,"_CPPv4N13TruthSelector10initializeEv","TruthSelector::initialize"],[55,4,1,"_CPPv4N13TruthSelector25m_createSelectedContainerE","TruthSelector::m_createSelectedContainer"],[113,4,1,"_CPPv4N13TruthSelector25m_createSelectedContainerE","TruthSelector::m_createSelectedContainer"],[55,4,1,"_CPPv4N13TruthSelector13m_cutflowHistE","TruthSelector::m_cutflowHist"],[55,4,1,"_CPPv4N13TruthSelector14m_cutflowHistWE","TruthSelector::m_cutflowHistW"],[55,4,1,"_CPPv4N13TruthSelector13m_cutflow_binE","TruthSelector::m_cutflow_bin"],[55,4,1,"_CPPv4N13TruthSelector7m_decorE","TruthSelector::m_decor"],[113,4,1,"_CPPv4N13TruthSelector7m_decorE","TruthSelector::m_decor"],[55,4,1,"_CPPv4N13TruthSelector25m_decorateSelectedObjectsE","TruthSelector::m_decorateSelectedObjects"],[113,4,1,"_CPPv4N13TruthSelector25m_decorateSelectedObjectsE","TruthSelector::m_decorateSelectedObjects"],[55,4,1,"_CPPv4N13TruthSelector17m_eta_dressed_maxE","TruthSelector::m_eta_dressed_max"],[113,4,1,"_CPPv4N13TruthSelector17m_eta_dressed_maxE","TruthSelector::m_eta_dressed_max"],[55,4,1,"_CPPv4N13TruthSelector17m_eta_dressed_minE","TruthSelector::m_eta_dressed_min"],[113,4,1,"_CPPv4N13TruthSelector17m_eta_dressed_minE","TruthSelector::m_eta_dressed_min"],[55,4,1,"_CPPv4N13TruthSelector9m_eta_maxE","TruthSelector::m_eta_max"],[113,4,1,"_CPPv4N13TruthSelector9m_eta_maxE","TruthSelector::m_eta_max"],[55,4,1,"_CPPv4N13TruthSelector9m_eta_minE","TruthSelector::m_eta_min"],[113,4,1,"_CPPv4N13TruthSelector9m_eta_minE","TruthSelector::m_eta_min"],[55,4,1,"_CPPv4N13TruthSelector17m_inContainerNameE","TruthSelector::m_inContainerName"],[113,4,1,"_CPPv4N13TruthSelector17m_inContainerNameE","TruthSelector::m_inContainerName"],[55,4,1,"_CPPv4N13TruthSelector10m_mass_maxE","TruthSelector::m_mass_max"],[113,4,1,"_CPPv4N13TruthSelector10m_mass_maxE","TruthSelector::m_mass_max"],[55,4,1,"_CPPv4N13TruthSelector10m_mass_minE","TruthSelector::m_mass_min"],[113,4,1,"_CPPv4N13TruthSelector10m_mass_minE","TruthSelector::m_mass_min"],[55,4,1,"_CPPv4N13TruthSelector12m_nToProcessE","TruthSelector::m_nToProcess"],[113,4,1,"_CPPv4N13TruthSelector12m_nToProcessE","TruthSelector::m_nToProcess"],[55,4,1,"_CPPv4N13TruthSelector10m_numEventE","TruthSelector::m_numEvent"],[55,4,1,"_CPPv4N13TruthSelector14m_numEventPassE","TruthSelector::m_numEventPass"],[55,4,1,"_CPPv4N13TruthSelector11m_numObjectE","TruthSelector::m_numObject"],[55,4,1,"_CPPv4N13TruthSelector15m_numObjectPassE","TruthSelector::m_numObjectPass"],[55,4,1,"_CPPv4N13TruthSelector8m_originE","TruthSelector::m_origin"],[113,4,1,"_CPPv4N13TruthSelector8m_originE","TruthSelector::m_origin"],[55,4,1,"_CPPv4N13TruthSelector15m_originOptionsE","TruthSelector::m_originOptions"],[113,4,1,"_CPPv4N13TruthSelector15m_originOptionsE","TruthSelector::m_originOptions"],[55,4,1,"_CPPv4N13TruthSelector18m_outContainerNameE","TruthSelector::m_outContainerName"],[113,4,1,"_CPPv4N13TruthSelector18m_outContainerNameE","TruthSelector::m_outContainerName"],[55,4,1,"_CPPv4N13TruthSelector16m_pT_dressed_minE","TruthSelector::m_pT_dressed_min"],[113,4,1,"_CPPv4N13TruthSelector16m_pT_dressed_minE","TruthSelector::m_pT_dressed_min"],[55,4,1,"_CPPv4N13TruthSelector8m_pT_maxE","TruthSelector::m_pT_max"],[113,4,1,"_CPPv4N13TruthSelector8m_pT_maxE","TruthSelector::m_pT_max"],[55,4,1,"_CPPv4N13TruthSelector8m_pT_minE","TruthSelector::m_pT_min"],[113,4,1,"_CPPv4N13TruthSelector8m_pT_minE","TruthSelector::m_pT_min"],[55,4,1,"_CPPv4N13TruthSelector10m_pass_maxE","TruthSelector::m_pass_max"],[113,4,1,"_CPPv4N13TruthSelector10m_pass_maxE","TruthSelector::m_pass_max"],[55,4,1,"_CPPv4N13TruthSelector10m_pass_minE","TruthSelector::m_pass_min"],[113,4,1,"_CPPv4N13TruthSelector10m_pass_minE","TruthSelector::m_pass_min"],[55,4,1,"_CPPv4N13TruthSelector14m_rapidity_maxE","TruthSelector::m_rapidity_max"],[113,4,1,"_CPPv4N13TruthSelector14m_rapidity_maxE","TruthSelector::m_rapidity_max"],[55,4,1,"_CPPv4N13TruthSelector14m_rapidity_minE","TruthSelector::m_rapidity_min"],[113,4,1,"_CPPv4N13TruthSelector14m_rapidity_minE","TruthSelector::m_rapidity_min"],[55,4,1,"_CPPv4N13TruthSelector21m_truth_cutflowHist_1E","TruthSelector::m_truth_cutflowHist_1"],[55,4,1,"_CPPv4N13TruthSelector19m_truth_cutflow_allE","TruthSelector::m_truth_cutflow_all"],[55,4,1,"_CPPv4N13TruthSelector23m_truth_cutflow_eta_cutE","TruthSelector::m_truth_cutflow_eta_cut"],[55,4,1,"_CPPv4N13TruthSelector25m_truth_cutflow_ptmax_cutE","TruthSelector::m_truth_cutflow_ptmax_cut"],[55,4,1,"_CPPv4N13TruthSelector25m_truth_cutflow_ptmin_cutE","TruthSelector::m_truth_cutflow_ptmin_cut"],[55,4,1,"_CPPv4N13TruthSelector6m_typeE","TruthSelector::m_type"],[113,4,1,"_CPPv4N13TruthSelector6m_typeE","TruthSelector::m_type"],[55,4,1,"_CPPv4N13TruthSelector13m_typeOptionsE","TruthSelector::m_typeOptions"],[113,4,1,"_CPPv4N13TruthSelector13m_typeOptionsE","TruthSelector::m_typeOptions"],[55,4,1,"_CPPv4N13TruthSelector12m_useCutFlowE","TruthSelector::m_useCutFlow"],[113,4,1,"_CPPv4N13TruthSelector12m_useCutFlowE","TruthSelector::m_useCutFlow"],[55,4,1,"_CPPv4N13TruthSelector20m_weightNumEventPassE","TruthSelector::m_weightNumEventPass"],[55,2,1,"_CPPv4N13TruthSelector11postExecuteEv","TruthSelector::postExecute"],[113,2,1,"_CPPv4N13TruthSelector11postExecuteEv","TruthSelector::postExecute"],[55,2,1,"_CPPv4N13TruthSelector8setupJobERN2EL3JobE","TruthSelector::setupJob"],[113,2,1,"_CPPv4N13TruthSelector8setupJobERN2EL3JobE","TruthSelector::setupJob"],[55,3,1,"_CPPv4N13TruthSelector8setupJobERN2EL3JobE","TruthSelector::setupJob::job"],[113,3,1,"_CPPv4N13TruthSelector8setupJobERN2EL3JobE","TruthSelector::setupJob::job"],[114,1,1,"_CPPv46Writer","Writer"],[114,2,1,"_CPPv4N6Writer6WriterEv","Writer::Writer"],[114,2,1,"_CPPv4N6Writer11changeInputEb","Writer::changeInput"],[114,3,1,"_CPPv4N6Writer11changeInputEb","Writer::changeInput::firstFile"],[114,2,1,"_CPPv4N6Writer7executeEv","Writer::execute"],[114,2,1,"_CPPv4N6Writer11fileExecuteEv","Writer::fileExecute"],[114,2,1,"_CPPv4N6Writer8finalizeEv","Writer::finalize"],[114,2,1,"_CPPv4N6Writer12histFinalizeEv","Writer::histFinalize"],[114,2,1,"_CPPv4N6Writer14histInitializeEv","Writer::histInitialize"],[114,2,1,"_CPPv4N6Writer10initializeEv","Writer::initialize"],[114,4,1,"_CPPv4N6Writer27m_electronContainerNamesStrE","Writer::m_electronContainerNamesStr"],[114,4,1,"_CPPv4N6Writer22m_jetContainerNamesStrE","Writer::m_jetContainerNamesStr"],[114,4,1,"_CPPv4N6Writer23m_muonContainerNamesStrE","Writer::m_muonContainerNamesStr"],[114,4,1,"_CPPv4N6Writer13m_outputLabelE","Writer::m_outputLabel"],[114,2,1,"_CPPv4N6Writer11postExecuteEv","Writer::postExecute"],[114,2,1,"_CPPv4N6Writer8setupJobERN2EL3JobE","Writer::setupJob"],[114,3,1,"_CPPv4N6Writer8setupJobERN2EL3JobE","Writer::setupJob::job"],[553,6,1,"_CPPv413floatAccessor","floatAccessor"],[554,6,1,"_CPPv413floatAccessor","floatAccessor"],[555,6,1,"_CPPv413floatAccessor","floatAccessor"],[116,1,1,"_CPPv4N3xAH9AlgorithmE","xAH::Algorithm"],[564,1,1,"_CPPv4N3xAH9AlgorithmE","xAH::Algorithm"],[116,2,1,"_CPPv4N3xAH9Algorithm9AlgorithmENSt6stringE","xAH::Algorithm::Algorithm"],[564,2,1,"_CPPv4N3xAH9Algorithm9AlgorithmENSt6stringE","xAH::Algorithm::Algorithm"],[116,3,1,"_CPPv4N3xAH9Algorithm9AlgorithmENSt6stringE","xAH::Algorithm::Algorithm::className"],[564,3,1,"_CPPv4N3xAH9Algorithm9AlgorithmENSt6stringE","xAH::Algorithm::Algorithm::className"],[116,2,1,"_CPPv4N3xAH9Algorithm11algFinalizeEv","xAH::Algorithm::algFinalize"],[564,2,1,"_CPPv4N3xAH9Algorithm11algFinalizeEv","xAH::Algorithm::algFinalize"],[116,2,1,"_CPPv4N3xAH9Algorithm13algInitializeEv","xAH::Algorithm::algInitialize"],[564,2,1,"_CPPv4N3xAH9Algorithm13algInitializeEv","xAH::Algorithm::algInitialize"],[116,2,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore"],[564,2,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore"],[116,5,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore::T"],[564,5,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore::T"],[116,3,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore::tool_name"],[564,3,1,"_CPPv4I0EN3xAH9Algorithm14checkToolStoreE10StatusCodeRKNSt6stringE","xAH::Algorithm::checkToolStore::tool_name"],[116,2,1,"_CPPv4NK3xAH9Algorithm10getAddressEv","xAH::Algorithm::getAddress"],[564,2,1,"_CPPv4NK3xAH9Algorithm10getAddressEv","xAH::Algorithm::getAddress"],[116,2,1,"_CPPv4N3xAH9Algorithm5isAF3Ev","xAH::Algorithm::isAF3"],[564,2,1,"_CPPv4N3xAH9Algorithm5isAF3Ev","xAH::Algorithm::isAF3"],[116,2,1,"_CPPv4N3xAH9Algorithm9isFastSimEv","xAH::Algorithm::isFastSim"],[564,2,1,"_CPPv4N3xAH9Algorithm9isFastSimEv","xAH::Algorithm::isFastSim"],[116,2,1,"_CPPv4N3xAH9Algorithm4isMCEv","xAH::Algorithm::isMC"],[564,2,1,"_CPPv4N3xAH9Algorithm4isMCEv","xAH::Algorithm::isMC"],[116,2,1,"_CPPv4N3xAH9Algorithm6isPHYSEv","xAH::Algorithm::isPHYS"],[564,2,1,"_CPPv4N3xAH9Algorithm6isPHYSEv","xAH::Algorithm::isPHYS"],[116,2,1,"_CPPv4N3xAH9Algorithm17isToolAlreadyUsedERKNSt6stringE","xAH::Algorithm::isToolAlreadyUsed"],[564,2,1,"_CPPv4N3xAH9Algorithm17isToolAlreadyUsedERKNSt6stringE","xAH::Algorithm::isToolAlreadyUsed"],[116,3,1,"_CPPv4N3xAH9Algorithm17isToolAlreadyUsedERKNSt6stringE","xAH::Algorithm::isToolAlreadyUsed::tool_name"],[564,3,1,"_CPPv4N3xAH9Algorithm17isToolAlreadyUsedERKNSt6stringE","xAH::Algorithm::isToolAlreadyUsed::tool_name"],[116,4,1,"_CPPv4N3xAH9Algorithm12m_HLTSummaryE","xAH::Algorithm::m_HLTSummary"],[564,4,1,"_CPPv4N3xAH9Algorithm12m_HLTSummaryE","xAH::Algorithm::m_HLTSummary"],[116,4,1,"_CPPv4N3xAH9Algorithm11m_classNameE","xAH::Algorithm::m_className"],[564,4,1,"_CPPv4N3xAH9Algorithm11m_classNameE","xAH::Algorithm::m_className"],[116,4,1,"_CPPv4N3xAH9Algorithm19m_cutFlowStreamNameE","xAH::Algorithm::m_cutFlowStreamName"],[564,4,1,"_CPPv4N3xAH9Algorithm19m_cutFlowStreamNameE","xAH::Algorithm::m_cutFlowStreamName"],[116,4,1,"_CPPv4N3xAH9Algorithm7m_debugE","xAH::Algorithm::m_debug"],[564,4,1,"_CPPv4N3xAH9Algorithm7m_debugE","xAH::Algorithm::m_debug"],[116,4,1,"_CPPv4N3xAH9Algorithm7m_eventE","xAH::Algorithm::m_event"],[564,4,1,"_CPPv4N3xAH9Algorithm7m_eventE","xAH::Algorithm::m_event"],[116,4,1,"_CPPv4N3xAH9Algorithm24m_eventInfoContainerNameE","xAH::Algorithm::m_eventInfoContainerName"],[564,4,1,"_CPPv4N3xAH9Algorithm24m_eventInfoContainerNameE","xAH::Algorithm::m_eventInfoContainerName"],[116,4,1,"_CPPv4N3xAH9Algorithm11m_forceDataE","xAH::Algorithm::m_forceData"],[564,4,1,"_CPPv4N3xAH9Algorithm11m_forceDataE","xAH::Algorithm::m_forceData"],[116,4,1,"_CPPv4N3xAH9Algorithm14m_forceFastSimE","xAH::Algorithm::m_forceFastSim"],[564,4,1,"_CPPv4N3xAH9Algorithm14m_forceFastSimE","xAH::Algorithm::m_forceFastSim"],[116,4,1,"_CPPv4N3xAH9Algorithm14m_forceFullSimE","xAH::Algorithm::m_forceFullSim"],[564,4,1,"_CPPv4N3xAH9Algorithm14m_forceFullSimE","xAH::Algorithm::m_forceFullSim"],[564,4,1,"_CPPv4N3xAH9Algorithm18m_instanceRegistryE","xAH::Algorithm::m_instanceRegistry"],[116,4,1,"_CPPv4N3xAH9Algorithm7m_isAF3E","xAH::Algorithm::m_isAF3"],[564,4,1,"_CPPv4N3xAH9Algorithm7m_isAF3E","xAH::Algorithm::m_isAF3"],[116,4,1,"_CPPv4N3xAH9Algorithm11m_isFastSimE","xAH::Algorithm::m_isFastSim"],[564,4,1,"_CPPv4N3xAH9Algorithm11m_isFastSimE","xAH::Algorithm::m_isFastSim"],[116,4,1,"_CPPv4N3xAH9Algorithm6m_isMCE","xAH::Algorithm::m_isMC"],[564,4,1,"_CPPv4N3xAH9Algorithm6m_isMCE","xAH::Algorithm::m_isMC"],[116,4,1,"_CPPv4N3xAH9Algorithm10m_msgLevelE","xAH::Algorithm::m_msgLevel"],[564,4,1,"_CPPv4N3xAH9Algorithm10m_msgLevelE","xAH::Algorithm::m_msgLevel"],[116,4,1,"_CPPv4N3xAH9Algorithm6m_nameE","xAH::Algorithm::m_name"],[564,4,1,"_CPPv4N3xAH9Algorithm6m_nameE","xAH::Algorithm::m_name"],[564,4,1,"_CPPv4N3xAH9Algorithm12m_registeredE","xAH::Algorithm::m_registered"],[116,4,1,"_CPPv4N3xAH9Algorithm8m_setAF3E","xAH::Algorithm::m_setAF3"],[564,4,1,"_CPPv4N3xAH9Algorithm8m_setAF3E","xAH::Algorithm::m_setAF3"],[116,4,1,"_CPPv4N3xAH9Algorithm9m_setAFIIE","xAH::Algorithm::m_setAFII"],[564,4,1,"_CPPv4N3xAH9Algorithm9m_setAFIIE","xAH::Algorithm::m_setAFII"],[116,4,1,"_CPPv4N3xAH9Algorithm7m_storeE","xAH::Algorithm::m_store"],[564,4,1,"_CPPv4N3xAH9Algorithm7m_storeE","xAH::Algorithm::m_store"],[116,4,1,"_CPPv4N3xAH9Algorithm10m_systNameE","xAH::Algorithm::m_systName"],[564,4,1,"_CPPv4N3xAH9Algorithm10m_systNameE","xAH::Algorithm::m_systName"],[116,4,1,"_CPPv4N3xAH9Algorithm9m_systValE","xAH::Algorithm::m_systVal"],[564,4,1,"_CPPv4N3xAH9Algorithm9m_systValE","xAH::Algorithm::m_systVal"],[116,4,1,"_CPPv4N3xAH9Algorithm15m_systValVectorE","xAH::Algorithm::m_systValVector"],[564,4,1,"_CPPv4N3xAH9Algorithm15m_systValVectorE","xAH::Algorithm::m_systValVector"],[116,4,1,"_CPPv4N3xAH9Algorithm21m_systValVectorStringE","xAH::Algorithm::m_systValVectorString"],[564,4,1,"_CPPv4N3xAH9Algorithm21m_systValVectorStringE","xAH::Algorithm::m_systValVectorString"],[564,4,1,"_CPPv4N3xAH9Algorithm17m_toolAlreadyUsedE","xAH::Algorithm::m_toolAlreadyUsed"],[116,4,1,"_CPPv4N3xAH9Algorithm19m_useRun3navigationE","xAH::Algorithm::m_useRun3navigation"],[564,4,1,"_CPPv4N3xAH9Algorithm19m_useRun3navigationE","xAH::Algorithm::m_useRun3navigation"],[116,4,1,"_CPPv4N3xAH9Algorithm9m_verboseE","xAH::Algorithm::m_verbose"],[564,4,1,"_CPPv4N3xAH9Algorithm9m_verboseE","xAH::Algorithm::m_verbose"],[116,4,1,"_CPPv4N3xAH9Algorithm21m_vertexContainerNameE","xAH::Algorithm::m_vertexContainerName"],[564,4,1,"_CPPv4N3xAH9Algorithm21m_vertexContainerNameE","xAH::Algorithm::m_vertexContainerName"],[116,2,1,"_CPPv4N3xAH9Algorithm12numInstancesEv","xAH::Algorithm::numInstances"],[564,2,1,"_CPPv4N3xAH9Algorithm12numInstancesEv","xAH::Algorithm::numInstances"],[116,2,1,"_CPPv4N3xAH9Algorithm18parseSystValVectorEv","xAH::Algorithm::parseSystValVector"],[564,2,1,"_CPPv4N3xAH9Algorithm18parseSystValVectorEv","xAH::Algorithm::parseSystValVector"],[116,2,1,"_CPPv4N3xAH9Algorithm16registerInstanceEv","xAH::Algorithm::registerInstance"],[564,2,1,"_CPPv4N3xAH9Algorithm16registerInstanceEv","xAH::Algorithm::registerInstance"],[116,2,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName"],[564,2,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName"],[116,5,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::T"],[564,5,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::T"],[116,3,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::handle"],[564,3,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::handle"],[116,3,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::name"],[564,3,1,"_CPPv4I0ENK3xAH9Algorithm11setToolNameEvRN3asg13AnaToolHandleI1TEERKNSt6stringE","xAH::Algorithm::setToolName::name"],[116,2,1,"_CPPv4N3xAH9Algorithm18unregisterInstanceEv","xAH::Algorithm::unregisterInstance"],[564,2,1,"_CPPv4N3xAH9Algorithm18unregisterInstanceEv","xAH::Algorithm::unregisterInstance"],[116,2,1,"_CPPv4N3xAH9AlgorithmD0Ev","xAH::Algorithm::~Algorithm"],[564,2,1,"_CPPv4N3xAH9AlgorithmD0Ev","xAH::Algorithm::~Algorithm"],[117,1,1,"_CPPv4N3xAH7ClusterE","xAH::Cluster"],[118,1,1,"_CPPv4N3xAH16ClusterContainerE","xAH::ClusterContainer"],[118,2,1,"_CPPv4N3xAH16ClusterContainer16ClusterContainerERKNSt6stringERKNSt6stringEfb","xAH::ClusterContainer::ClusterContainer"],[118,3,1,"_CPPv4N3xAH16ClusterContainer16ClusterContainerERKNSt6stringERKNSt6stringEfb","xAH::ClusterContainer::ClusterContainer::detailStr"],[118,3,1,"_CPPv4N3xAH16ClusterContainer16ClusterContainerERKNSt6stringERKNSt6stringEfb","xAH::ClusterContainer::ClusterContainer::mc"],[118,3,1,"_CPPv4N3xAH16ClusterContainer16ClusterContainerERKNSt6stringERKNSt6stringEfb","xAH::ClusterContainer::ClusterContainer::name"],[118,3,1,"_CPPv4N3xAH16ClusterContainer16ClusterContainerERKNSt6stringERKNSt6stringEfb","xAH::ClusterContainer::ClusterContainer::units"],[118,2,1,"_CPPv4N3xAH16ClusterContainer11FillClusterEPKN4xAOD11CaloClusterE","xAH::ClusterContainer::FillCluster"],[118,2,1,"_CPPv4N3xAH16ClusterContainer11FillClusterEPKN4xAOD9IParticleE","xAH::ClusterContainer::FillCluster"],[118,3,1,"_CPPv4N3xAH16ClusterContainer11FillClusterEPKN4xAOD11CaloClusterE","xAH::ClusterContainer::FillCluster::cluster"],[118,3,1,"_CPPv4N3xAH16ClusterContainer11FillClusterEPKN4xAOD9IParticleE","xAH::ClusterContainer::FillCluster::particle"],[118,2,1,"_CPPv4N3xAH16ClusterContainer5clearEv","xAH::ClusterContainer::clear"],[118,2,1,"_CPPv4N3xAH16ClusterContainer11setBranchesEP5TTree","xAH::ClusterContainer::setBranches"],[118,3,1,"_CPPv4N3xAH16ClusterContainer11setBranchesEP5TTree","xAH::ClusterContainer::setBranches::tree"],[118,2,1,"_CPPv4N3xAH16ClusterContainer7setTreeEP5TTree","xAH::ClusterContainer::setTree"],[118,2,1,"_CPPv4N3xAH16ClusterContainer7setTreeEP5TTree","xAH::ClusterContainer::setTree"],[118,3,1,"_CPPv4N3xAH16ClusterContainer7setTreeEP5TTree","xAH::ClusterContainer::setTree::tree"],[118,3,1,"_CPPv4N3xAH16ClusterContainer7setTreeEP5TTree","xAH::ClusterContainer::setTree::tree"],[118,2,1,"_CPPv4N3xAH16ClusterContainer14updateParticleE4uintR7Cluster","xAH::ClusterContainer::updateParticle"],[118,3,1,"_CPPv4N3xAH16ClusterContainer14updateParticleE4uintR7Cluster","xAH::ClusterContainer::updateParticle::cluster"],[118,3,1,"_CPPv4N3xAH16ClusterContainer14updateParticleE4uintR7Cluster","xAH::ClusterContainer::updateParticle::idx"],[118,2,1,"_CPPv4N3xAH16ClusterContainerD0Ev","xAH::ClusterContainer::~ClusterContainer"],[119,1,1,"_CPPv4N3xAH8ElectronE","xAH::Electron"],[119,4,1,"_CPPv4N3xAH8Electron9IsoEff_SFE","xAH::Electron::IsoEff_SF"],[119,4,1,"_CPPv4N3xAH8Electron2OQE","xAH::Electron::OQ"],[119,4,1,"_CPPv4N3xAH8Electron3PIDE","xAH::Electron::PID"],[119,4,1,"_CPPv4N3xAH8Electron9PIDEff_SFE","xAH::Electron::PIDEff_SF"],[119,4,1,"_CPPv4N3xAH8Electron23PromptLeptonInput_DL1muE","xAH::Electron::PromptLeptonInput_DL1mu"],[119,4,1,"_CPPv4N3xAH8Electron22PromptLeptonInput_DRljE","xAH::Electron::PromptLeptonInput_DRlj"],[119,4,1,"_CPPv4N3xAH8Electron30PromptLeptonInput_LepJetPtFracE","xAH::Electron::PromptLeptonInput_LepJetPtFrac"],[119,4,1,"_CPPv4N3xAH8Electron24PromptLeptonInput_PtFracE","xAH::Electron::PromptLeptonInput_PtFrac"],[119,4,1,"_CPPv4N3xAH8Electron23PromptLeptonInput_PtRelE","xAH::Electron::PromptLeptonInput_PtRel"],[119,4,1,"_CPPv4N3xAH8Electron32PromptLeptonInput_TrackJetNTrackE","xAH::Electron::PromptLeptonInput_TrackJetNTrack"],[119,4,1,"_CPPv4N3xAH8Electron21PromptLeptonInput_ip2E","xAH::Electron::PromptLeptonInput_ip2"],[119,4,1,"_CPPv4N3xAH8Electron21PromptLeptonInput_ip3E","xAH::Electron::PromptLeptonInput_ip3"],[119,4,1,"_CPPv4N3xAH8Electron23PromptLeptonInput_rnnipE","xAH::Electron::PromptLeptonInput_rnnip"],[119,4,1,"_CPPv4N3xAH8Electron30PromptLeptonInput_sv1_jf_ntrkvE","xAH::Electron::PromptLeptonInput_sv1_jf_ntrkv"],[119,4,1,"_CPPv4N3xAH8Electron15PromptLeptonIsoE","xAH::Electron::PromptLeptonIso"],[119,4,1,"_CPPv4N3xAH8Electron16PromptLeptonVetoE","xAH::Electron::PromptLeptonVeto"],[119,4,1,"_CPPv4N3xAH8Electron10RecoEff_SFE","xAH::Electron::RecoEff_SF"],[119,4,1,"_CPPv4N3xAH8Electron10TrigEff_SFE","xAH::Electron::TrigEff_SF"],[119,4,1,"_CPPv4N3xAH8Electron9TrigMCEffE","xAH::Electron::TrigMCEff"],[119,4,1,"_CPPv4N3xAH8Electron6authorE","xAH::Electron::author"],[119,4,1,"_CPPv4N3xAH8Electron15caloCluster_etaE","xAH::Electron::caloCluster_eta"],[119,4,1,"_CPPv4N3xAH8Electron6chargeE","xAH::Electron::charge"],[119,4,1,"_CPPv4N3xAH8Electron8etcone20E","xAH::Electron::etcone20"],[119,4,1,"_CPPv4N3xAH8Electron10isIsolatedE","xAH::Electron::isIsolated"],[119,4,1,"_CPPv4N3xAH8Electron5isLRTE","xAH::Electron::isLRT"],[119,4,1,"_CPPv4N3xAH8Electron13isTrigMatchedE","xAH::Electron::isTrigMatched"],[119,4,1,"_CPPv4N3xAH8Electron20isTrigMatchedToChainE","xAH::Electron::isTrigMatchedToChain"],[119,4,1,"_CPPv4N3xAH8Electron14listTrigChainsE","xAH::Electron::listTrigChains"],[119,4,1,"_CPPv4N3xAH8Electron12neflowisol20E","xAH::Electron::neflowisol20"],[119,4,1,"_CPPv4N3xAH8Electron6passORE","xAH::Electron::passOR"],[119,4,1,"_CPPv4N3xAH8Electron7passSelE","xAH::Electron::passSel"],[119,4,1,"_CPPv4N3xAH8Electron8ptcone20E","xAH::Electron::ptcone20"],[119,4,1,"_CPPv4N3xAH8Electron52ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000E","xAH::Electron::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000"],[119,4,1,"_CPPv4N3xAH8Electron64ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorrE","xAH::Electron::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr"],[119,4,1,"_CPPv4N3xAH8Electron51ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500E","xAH::Electron::ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500"],[119,4,1,"_CPPv4N3xAH8Electron8ptcone30E","xAH::Electron::ptcone30"],[119,4,1,"_CPPv4N3xAH8Electron8ptcone40E","xAH::Electron::ptcone40"],[119,4,1,"_CPPv4N3xAH8Electron11ptvarcone20E","xAH::Electron::ptvarcone20"],[119,4,1,"_CPPv4N3xAH8Electron11ptvarcone30E","xAH::Electron::ptvarcone30"],[119,4,1,"_CPPv4N3xAH8Electron55ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000E","xAH::Electron::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000"],[119,4,1,"_CPPv4N3xAH8Electron67ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorrE","xAH::Electron::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr"],[119,4,1,"_CPPv4N3xAH8Electron54ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500E","xAH::Electron::ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500"],[119,4,1,"_CPPv4N3xAH8Electron11ptvarcone40E","xAH::Electron::ptvarcone40"],[119,4,1,"_CPPv4N3xAH8Electron12topoetcone20E","xAH::Electron::topoetcone20"],[119,4,1,"_CPPv4N3xAH8Electron24topoetcone20_CloseByCorrE","xAH::Electron::topoetcone20_CloseByCorr"],[119,4,1,"_CPPv4N3xAH8Electron12topoetcone30E","xAH::Electron::topoetcone30"],[119,4,1,"_CPPv4N3xAH8Electron12topoetcone40E","xAH::Electron::topoetcone40"],[119,4,1,"_CPPv4N3xAH8Electron10trkPixdEdXE","xAH::Electron::trkPixdEdX"],[119,4,1,"_CPPv4N3xAH8Electron9trkchargeE","xAH::Electron::trkcharge"],[119,4,1,"_CPPv4N3xAH8Electron5trkd0E","xAH::Electron::trkd0"],[119,4,1,"_CPPv4N3xAH8Electron8trkd0sigE","xAH::Electron::trkd0sig"],[119,4,1,"_CPPv4N3xAH8Electron14trknBLayerHitsE","xAH::Electron::trknBLayerHits"],[119,4,1,"_CPPv4N3xAH8Electron23trknInnermostPixLayHitsE","xAH::Electron::trknInnermostPixLayHits"],[119,4,1,"_CPPv4N3xAH8Electron11trknPixHitsE","xAH::Electron::trknPixHits"],[119,4,1,"_CPPv4N3xAH8Electron12trknPixHolesE","xAH::Electron::trknPixHoles"],[119,4,1,"_CPPv4N3xAH8Electron11trknSCTHitsE","xAH::Electron::trknSCTHits"],[119,4,1,"_CPPv4N3xAH8Electron12trknSCTHolesE","xAH::Electron::trknSCTHoles"],[119,4,1,"_CPPv4N3xAH8Electron10trknSiHitsE","xAH::Electron::trknSiHits"],[119,4,1,"_CPPv4N3xAH8Electron11trknTRTHitsE","xAH::Electron::trknTRTHits"],[119,4,1,"_CPPv4N3xAH8Electron12trknTRTHolesE","xAH::Electron::trknTRTHoles"],[119,4,1,"_CPPv4N3xAH8Electron7trkphi0E","xAH::Electron::trkphi0"],[119,4,1,"_CPPv4N3xAH8Electron9trkqOverPE","xAH::Electron::trkqOverP"],[119,4,1,"_CPPv4N3xAH8Electron8trkthetaE","xAH::Electron::trktheta"],[119,4,1,"_CPPv4N3xAH8Electron5trkz0E","xAH::Electron::trkz0"],[119,4,1,"_CPPv4N3xAH8Electron13trkz0sinthetaE","xAH::Electron::trkz0sintheta"],[120,1,1,"_CPPv4N3xAH17ElectronContainerE","xAH::ElectronContainer"],[120,2,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer"],[120,3,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer::detailStr"],[120,3,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer::mc"],[120,3,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer::name"],[120,3,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer::storeSystSFs"],[120,3,1,"_CPPv4N3xAH17ElectronContainer17ElectronContainerERKNSt6stringERKNSt6stringEfbb","xAH::ElectronContainer::ElectronContainer::units"],[120,2,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron"],[120,2,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron"],[120,3,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron::elec"],[120,3,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron::particle"],[120,3,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD8ElectronEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron::primaryVertex"],[120,3,1,"_CPPv4N3xAH17ElectronContainer12FillElectronEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::ElectronContainer::FillElectron::primaryVertex"],[120,2,1,"_CPPv4N3xAH17ElectronContainer5clearEv","xAH::ElectronContainer::clear"],[120,2,1,"_CPPv4N3xAH17ElectronContainer11setBranchesEP5TTree","xAH::ElectronContainer::setBranches"],[120,3,1,"_CPPv4N3xAH17ElectronContainer11setBranchesEP5TTree","xAH::ElectronContainer::setBranches::tree"],[120,2,1,"_CPPv4N3xAH17ElectronContainer7setTreeEP5TTree","xAH::ElectronContainer::setTree"],[120,2,1,"_CPPv4N3xAH17ElectronContainer7setTreeEP5TTree","xAH::ElectronContainer::setTree"],[120,3,1,"_CPPv4N3xAH17ElectronContainer7setTreeEP5TTree","xAH::ElectronContainer::setTree::tree"],[120,3,1,"_CPPv4N3xAH17ElectronContainer7setTreeEP5TTree","xAH::ElectronContainer::setTree::tree"],[120,2,1,"_CPPv4N3xAH17ElectronContainer14updateParticleE4uintR8Electron","xAH::ElectronContainer::updateParticle"],[120,3,1,"_CPPv4N3xAH17ElectronContainer14updateParticleE4uintR8Electron","xAH::ElectronContainer::updateParticle::elec"],[120,3,1,"_CPPv4N3xAH17ElectronContainer14updateParticleE4uintR8Electron","xAH::ElectronContainer::updateParticle::idx"],[120,2,1,"_CPPv4N3xAH17ElectronContainerD0Ev","xAH::ElectronContainer::~ElectronContainer"],[121,1,1,"_CPPv4N3xAH9EventInfoE","xAH::EventInfo"],[121,2,1,"_CPPv4N3xAH9EventInfo9EventInfoERKNSt6stringEfbb","xAH::EventInfo::EventInfo"],[121,3,1,"_CPPv4N3xAH9EventInfo9EventInfoERKNSt6stringEfbb","xAH::EventInfo::EventInfo::detailStr"],[121,3,1,"_CPPv4N3xAH9EventInfo9EventInfoERKNSt6stringEfbb","xAH::EventInfo::EventInfo::mc"],[121,3,1,"_CPPv4N3xAH9EventInfo9EventInfoERKNSt6stringEfbb","xAH::EventInfo::EventInfo::storeSyst"],[121,3,1,"_CPPv4N3xAH9EventInfo9EventInfoERKNSt6stringEfbb","xAH::EventInfo::EventInfo::units"],[121,2,1,"_CPPv4N3xAH9EventInfo9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","xAH::EventInfo::FillEvent"],[121,3,1,"_CPPv4N3xAH9EventInfo9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","xAH::EventInfo::FillEvent::event"],[121,3,1,"_CPPv4N3xAH9EventInfo9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","xAH::EventInfo::FillEvent::eventInfo"],[121,3,1,"_CPPv4N3xAH9EventInfo9FillEventEPKN4xAOD9EventInfoEPN4xAOD6TEventEPKN4xAOD15VertexContainerE","xAH::EventInfo::FillEvent::vertices"],[121,2,1,"_CPPv4N3xAH9EventInfo5clearEv","xAH::EventInfo::clear"],[121,2,1,"_CPPv4I0EN3xAH9EventInfo13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::EventInfo::connectBranch"],[121,5,1,"_CPPv4I0EN3xAH9EventInfo13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::EventInfo::connectBranch::T_BR"],[121,3,1,"_CPPv4I0EN3xAH9EventInfo13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::EventInfo::connectBranch::name"],[121,3,1,"_CPPv4I0EN3xAH9EventInfo13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::EventInfo::connectBranch::tree"],[121,3,1,"_CPPv4I0EN3xAH9EventInfo13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::EventInfo::connectBranch::variable"],[121,4,1,"_CPPv4N3xAH9EventInfo15m_DistEmptyBCIDE","xAH::EventInfo::m_DistEmptyBCID"],[121,4,1,"_CPPv4N3xAH9EventInfo22m_DistLastUnpairedBCIDE","xAH::EventInfo::m_DistLastUnpairedBCID"],[121,4,1,"_CPPv4N3xAH9EventInfo22m_DistNextUnpairedBCIDE","xAH::EventInfo::m_DistNextUnpairedBCID"],[121,4,1,"_CPPv4N3xAH9EventInfo10m_LArErrorE","xAH::EventInfo::m_LArError"],[121,4,1,"_CPPv4N3xAH9EventInfo10m_LArFlagsE","xAH::EventInfo::m_LArFlags"],[121,4,1,"_CPPv4N3xAH9EventInfo10m_SCTErrorE","xAH::EventInfo::m_SCTError"],[121,4,1,"_CPPv4N3xAH9EventInfo10m_SCTFlagsE","xAH::EventInfo::m_SCTFlags"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_TileErrorE","xAH::EventInfo::m_TileError"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_TileFlagsE","xAH::EventInfo::m_TileFlags"],[121,4,1,"_CPPv4N3xAH9EventInfo10m_actualMuE","xAH::EventInfo::m_actualMu"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_averageMuE","xAH::EventInfo::m_averageMu"],[121,4,1,"_CPPv4N3xAH9EventInfo6m_bcidE","xAH::EventInfo::m_bcid"],[121,4,1,"_CPPv4N3xAH9EventInfo16m_beamspotweightE","xAH::EventInfo::m_beamspotweight"],[121,4,1,"_CPPv4N3xAH9EventInfo15m_caloCluster_eE","xAH::EventInfo::m_caloCluster_e"],[121,4,1,"_CPPv4N3xAH9EventInfo17m_caloCluster_etaE","xAH::EventInfo::m_caloCluster_eta"],[121,4,1,"_CPPv4N3xAH9EventInfo17m_caloCluster_phiE","xAH::EventInfo::m_caloCluster_phi"],[121,4,1,"_CPPv4N3xAH9EventInfo16m_caloCluster_ptE","xAH::EventInfo::m_caloCluster_pt"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_coreFlagsE","xAH::EventInfo::m_coreFlags"],[121,4,1,"_CPPv4N3xAH9EventInfo25m_correctedAndScaledAvgMuE","xAH::EventInfo::m_correctedAndScaledAvgMu"],[121,4,1,"_CPPv4N3xAH9EventInfo22m_correctedAndScaledMuE","xAH::EventInfo::m_correctedAndScaledMu"],[121,4,1,"_CPPv4N3xAH9EventInfo16m_correctedAvgMuE","xAH::EventInfo::m_correctedAvgMu"],[121,4,1,"_CPPv4N3xAH9EventInfo13m_correctedMuE","xAH::EventInfo::m_correctedMu"],[121,4,1,"_CPPv4N3xAH9EventInfo7m_debugE","xAH::EventInfo::m_debug"],[121,4,1,"_CPPv4N3xAH9EventInfo21m_eventClean_LooseBadE","xAH::EventInfo::m_eventClean_LooseBad"],[121,4,1,"_CPPv4N3xAH9EventInfo21m_eventClean_TightBadE","xAH::EventInfo::m_eventClean_TightBad"],[121,4,1,"_CPPv4N3xAH9EventInfo13m_eventNumberE","xAH::EventInfo::m_eventNumber"],[121,4,1,"_CPPv4N3xAH9EventInfo12m_infoSwitchE","xAH::EventInfo::m_infoSwitch"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_lumiBlockE","xAH::EventInfo::m_lumiBlock"],[121,4,1,"_CPPv4N3xAH9EventInfo4m_mcE","xAH::EventInfo::m_mc"],[121,4,1,"_CPPv4N3xAH9EventInfo17m_mcChannelNumberE","xAH::EventInfo::m_mcChannelNumber"],[121,4,1,"_CPPv4N3xAH9EventInfo15m_mcEventNumberE","xAH::EventInfo::m_mcEventNumber"],[121,4,1,"_CPPv4N3xAH9EventInfo15m_mcEventWeightE","xAH::EventInfo::m_mcEventWeight"],[121,4,1,"_CPPv4N3xAH9EventInfo16m_mcEventWeightsE","xAH::EventInfo::m_mcEventWeights"],[121,4,1,"_CPPv4N3xAH9EventInfo5m_npvE","xAH::EventInfo::m_npv"],[121,4,1,"_CPPv4N3xAH9EventInfo8m_pdfId1E","xAH::EventInfo::m_pdfId1"],[121,4,1,"_CPPv4N3xAH9EventInfo8m_pdfId2E","xAH::EventInfo::m_pdfId2"],[121,4,1,"_CPPv4N3xAH9EventInfo8m_pdgId1E","xAH::EventInfo::m_pdgId1"],[121,4,1,"_CPPv4N3xAH9EventInfo8m_pdgId2E","xAH::EventInfo::m_pdgId2"],[121,4,1,"_CPPv4N3xAH9EventInfo3m_qE","xAH::EventInfo::m_q"],[121,4,1,"_CPPv4N3xAH9EventInfo19m_rand_lumiblock_nrE","xAH::EventInfo::m_rand_lumiblock_nr"],[121,4,1,"_CPPv4N3xAH9EventInfo13m_rand_run_nrE","xAH::EventInfo::m_rand_run_nr"],[121,4,1,"_CPPv4N3xAH9EventInfo7m_rhoEME","xAH::EventInfo::m_rhoEM"],[121,4,1,"_CPPv4N3xAH9EventInfo12m_rhoEMPFLOWE","xAH::EventInfo::m_rhoEMPFLOW"],[121,4,1,"_CPPv4N3xAH9EventInfo7m_rhoLCE","xAH::EventInfo::m_rhoLC"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_runNumberE","xAH::EventInfo::m_runNumber"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_storeSystE","xAH::EventInfo::m_storeSyst"],[121,4,1,"_CPPv4N3xAH9EventInfo11m_timeStampE","xAH::EventInfo::m_timeStamp"],[121,4,1,"_CPPv4N3xAH9EventInfo19m_timeStampNSOffsetE","xAH::EventInfo::m_timeStampNSOffset"],[121,4,1,"_CPPv4N3xAH9EventInfo7m_unitsE","xAH::EventInfo::m_units"],[121,4,1,"_CPPv4N3xAH9EventInfo15m_weight_pileupE","xAH::EventInfo::m_weight_pileup"],[121,4,1,"_CPPv4N3xAH9EventInfo20m_weight_pileup_downE","xAH::EventInfo::m_weight_pileup_down"],[121,4,1,"_CPPv4N3xAH9EventInfo18m_weight_pileup_upE","xAH::EventInfo::m_weight_pileup_up"],[121,4,1,"_CPPv4N3xAH9EventInfo4m_x1E","xAH::EventInfo::m_x1"],[121,4,1,"_CPPv4N3xAH9EventInfo4m_x2E","xAH::EventInfo::m_x2"],[121,4,1,"_CPPv4N3xAH9EventInfo5m_xf1E","xAH::EventInfo::m_xf1"],[121,4,1,"_CPPv4N3xAH9EventInfo5m_xf2E","xAH::EventInfo::m_xf2"],[121,2,1,"_CPPv4N3xAH9EventInfo11setBranchesEP5TTree","xAH::EventInfo::setBranches"],[121,3,1,"_CPPv4N3xAH9EventInfo11setBranchesEP5TTree","xAH::EventInfo::setBranches::tree"],[121,2,1,"_CPPv4N3xAH9EventInfo7setTreeEP5TTree","xAH::EventInfo::setTree"],[121,3,1,"_CPPv4N3xAH9EventInfo7setTreeEP5TTree","xAH::EventInfo::setTree::tree"],[121,2,1,"_CPPv4N3xAH9EventInfoD0Ev","xAH::EventInfo::~EventInfo"],[122,1,1,"_CPPv4N3xAH6FatJetE","xAH::FatJet"],[122,4,1,"_CPPv4N3xAH6FatJet10ActiveAreaE","xAH::FatJet::ActiveArea"],[122,4,1,"_CPPv4N3xAH6FatJet18ActiveArea4vec_etaE","xAH::FatJet::ActiveArea4vec_eta"],[122,4,1,"_CPPv4N3xAH6FatJet16ActiveArea4vec_mE","xAH::FatJet::ActiveArea4vec_m"],[122,4,1,"_CPPv4N3xAH6FatJet18ActiveArea4vec_phiE","xAH::FatJet::ActiveArea4vec_phi"],[122,4,1,"_CPPv4N3xAH6FatJet17ActiveArea4vec_ptE","xAH::FatJet::ActiveArea4vec_pt"],[122,4,1,"_CPPv4N3xAH6FatJet2C2E","xAH::FatJet::C2"],[122,4,1,"_CPPv4N3xAH6FatJet2D2E","xAH::FatJet::D2"],[122,4,1,"_CPPv4N3xAH6FatJet4ECF1E","xAH::FatJet::ECF1"],[122,4,1,"_CPPv4N3xAH6FatJet4ECF2E","xAH::FatJet::ECF2"],[122,4,1,"_CPPv4N3xAH6FatJet4ECF3E","xAH::FatJet::ECF3"],[122,4,1,"_CPPv4N3xAH6FatJet6EMFracE","xAH::FatJet::EMFrac"],[122,4,1,"_CPPv4N3xAH6FatJet9GhostAreaE","xAH::FatJet::GhostArea"],[122,4,1,"_CPPv4N3xAH6FatJet27JetConstitScaleMomentum_etaE","xAH::FatJet::JetConstitScaleMomentum_eta"],[122,4,1,"_CPPv4N3xAH6FatJet25JetConstitScaleMomentum_mE","xAH::FatJet::JetConstitScaleMomentum_m"],[122,4,1,"_CPPv4N3xAH6FatJet27JetConstitScaleMomentum_phiE","xAH::FatJet::JetConstitScaleMomentum_phi"],[122,4,1,"_CPPv4N3xAH6FatJet26JetConstitScaleMomentum_ptE","xAH::FatJet::JetConstitScaleMomentum_pt"],[122,4,1,"_CPPv4N3xAH6FatJet22JetEMScaleMomentum_etaE","xAH::FatJet::JetEMScaleMomentum_eta"],[122,4,1,"_CPPv4N3xAH6FatJet20JetEMScaleMomentum_mE","xAH::FatJet::JetEMScaleMomentum_m"],[122,4,1,"_CPPv4N3xAH6FatJet22JetEMScaleMomentum_phiE","xAH::FatJet::JetEMScaleMomentum_phi"],[122,4,1,"_CPPv4N3xAH6FatJet21JetEMScaleMomentum_ptE","xAH::FatJet::JetEMScaleMomentum_pt"],[122,4,1,"_CPPv4N3xAH6FatJet9NClustersE","xAH::FatJet::NClusters"],[122,4,1,"_CPPv4N3xAH6FatJet12NTrimSubjetsE","xAH::FatJet::NTrimSubjets"],[122,4,1,"_CPPv4N3xAH6FatJet7Split12E","xAH::FatJet::Split12"],[122,4,1,"_CPPv4N3xAH6FatJet7Split23E","xAH::FatJet::Split23"],[122,4,1,"_CPPv4N3xAH6FatJet7Split34E","xAH::FatJet::Split34"],[122,4,1,"_CPPv4N3xAH6FatJet11VoronoiAreaE","xAH::FatJet::VoronoiArea"],[122,4,1,"_CPPv4N3xAH6FatJet11Wtag_mediumE","xAH::FatJet::Wtag_medium"],[122,4,1,"_CPPv4N3xAH6FatJet10Wtag_tightE","xAH::FatJet::Wtag_tight"],[122,4,1,"_CPPv4N3xAH6FatJet11Ztag_mediumE","xAH::FatJet::Ztag_medium"],[122,4,1,"_CPPv4N3xAH6FatJet10Ztag_tightE","xAH::FatJet::Ztag_tight"],[122,4,1,"_CPPv4N3xAH6FatJet18constituentWeightsE","xAH::FatJet::constituentWeights"],[122,4,1,"_CPPv4N3xAH6FatJet13constituent_eE","xAH::FatJet::constituent_e"],[122,4,1,"_CPPv4N3xAH6FatJet15constituent_etaE","xAH::FatJet::constituent_eta"],[122,4,1,"_CPPv4N3xAH6FatJet15constituent_phiE","xAH::FatJet::constituent_phi"],[122,4,1,"_CPPv4N3xAH6FatJet14constituent_ptE","xAH::FatJet::constituent_pt"],[122,4,1,"_CPPv4N3xAH6FatJet17muonCorrected_etaE","xAH::FatJet::muonCorrected_eta"],[122,4,1,"_CPPv4N3xAH6FatJet15muonCorrected_mE","xAH::FatJet::muonCorrected_m"],[122,4,1,"_CPPv4N3xAH6FatJet17muonCorrected_phiE","xAH::FatJet::muonCorrected_phi"],[122,4,1,"_CPPv4N3xAH6FatJet16muonCorrected_ptE","xAH::FatJet::muonCorrected_pt"],[122,4,1,"_CPPv4N3xAH6FatJet17nChargedParticlesE","xAH::FatJet::nChargedParticles"],[122,4,1,"_CPPv4N3xAH6FatJet8nHBosonsE","xAH::FatJet::nHBosons"],[122,4,1,"_CPPv4N3xAH6FatJet8nTQuarksE","xAH::FatJet::nTQuarks"],[122,4,1,"_CPPv4N3xAH6FatJet7nTracksE","xAH::FatJet::nTracks"],[122,4,1,"_CPPv4N3xAH6FatJet8nWBosonsE","xAH::FatJet::nWBosons"],[122,4,1,"_CPPv4N3xAH6FatJet8nZBosonsE","xAH::FatJet::nZBosons"],[122,4,1,"_CPPv4N3xAH6FatJet15numConstituentsE","xAH::FatJet::numConstituents"],[122,4,1,"_CPPv4N3xAH6FatJet8tau1_wtaE","xAH::FatJet::tau1_wta"],[122,4,1,"_CPPv4N3xAH6FatJet9tau21_wtaE","xAH::FatJet::tau21_wta"],[122,4,1,"_CPPv4N3xAH6FatJet8tau2_wtaE","xAH::FatJet::tau2_wta"],[122,4,1,"_CPPv4N3xAH6FatJet9tau32_wtaE","xAH::FatJet::tau32_wta"],[122,4,1,"_CPPv4N3xAH6FatJet8tau3_wtaE","xAH::FatJet::tau3_wta"],[122,4,1,"_CPPv4N3xAH6FatJet7trkJetsE","xAH::FatJet::trkJets"],[122,4,1,"_CPPv4N3xAH6FatJet8truth_p4E","xAH::FatJet::truth_p4"],[122,4,1,"_CPPv4N3xAH6FatJet10ungrtrk500E","xAH::FatJet::ungrtrk500"],[123,1,1,"_CPPv4N3xAH15FatJetContainerE","xAH::FatJetContainer"],[123,2,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::detailStr"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::mc"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::name"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::subjetDetailStr"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::suffix"],[123,3,1,"_CPPv4N3xAH15FatJetContainer15FatJetContainerERKNSt6stringERKNSt6stringERKNSt6stringERKNSt6stringEfb","xAH::FatJetContainer::FatJetContainer::units"],[123,2,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD3JetEi","xAH::FatJetContainer::FillFatJet"],[123,2,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD9IParticleEi","xAH::FatJetContainer::FillFatJet"],[123,3,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD3JetEi","xAH::FatJetContainer::FillFatJet::jet"],[123,3,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD9IParticleEi","xAH::FatJetContainer::FillFatJet::particle"],[123,3,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD3JetEi","xAH::FatJetContainer::FillFatJet::pvLocation"],[123,3,1,"_CPPv4N3xAH15FatJetContainer10FillFatJetEPKN4xAOD9IParticleEi","xAH::FatJetContainer::FillFatJet::pvLocation"],[123,2,1,"_CPPv4N3xAH15FatJetContainer5clearEv","xAH::FatJetContainer::clear"],[123,4,1,"_CPPv4N3xAH15FatJetContainer16m_trackJetEtaCutE","xAH::FatJetContainer::m_trackJetEtaCut"],[123,4,1,"_CPPv4N3xAH15FatJetContainer15m_trackJetPtCutE","xAH::FatJetContainer::m_trackJetPtCut"],[123,2,1,"_CPPv4N3xAH15FatJetContainer11setBranchesEP5TTree","xAH::FatJetContainer::setBranches"],[123,3,1,"_CPPv4N3xAH15FatJetContainer11setBranchesEP5TTree","xAH::FatJetContainer::setBranches::tree"],[123,2,1,"_CPPv4N3xAH15FatJetContainer7setTreeEP5TTree","xAH::FatJetContainer::setTree"],[123,2,1,"_CPPv4N3xAH15FatJetContainer7setTreeEP5TTree","xAH::FatJetContainer::setTree"],[123,3,1,"_CPPv4N3xAH15FatJetContainer7setTreeEP5TTree","xAH::FatJetContainer::setTree::tree"],[123,3,1,"_CPPv4N3xAH15FatJetContainer7setTreeEP5TTree","xAH::FatJetContainer::setTree::tree"],[123,2,1,"_CPPv4N3xAH15FatJetContainer14updateParticleE4uintR6FatJet","xAH::FatJetContainer::updateParticle"],[123,3,1,"_CPPv4N3xAH15FatJetContainer14updateParticleE4uintR6FatJet","xAH::FatJetContainer::updateParticle::idx"],[123,3,1,"_CPPv4N3xAH15FatJetContainer14updateParticleE4uintR6FatJet","xAH::FatJetContainer::updateParticle::jet"],[123,2,1,"_CPPv4N3xAH15FatJetContainerD0Ev","xAH::FatJetContainer::~FatJetContainer"],[124,1,1,"_CPPv4N3xAH3JetE","xAH::Jet"],[124,4,1,"_CPPv4N3xAH3Jet12AverageLArQFE","xAH::Jet::AverageLArQF"],[124,7,1,"_CPPv4N3xAH3Jet9BTaggerOPE","xAH::Jet::BTaggerOP"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP18DL1dv00_ContinuousE","xAH::Jet::BTaggerOP::DL1dv00_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_60E","xAH::Jet::BTaggerOP::DL1dv00_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_70E","xAH::Jet::BTaggerOP::DL1dv00_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_77E","xAH::Jet::BTaggerOP::DL1dv00_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_85E","xAH::Jet::BTaggerOP::DL1dv00_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP18DL1dv01_ContinuousE","xAH::Jet::BTaggerOP::DL1dv01_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_60E","xAH::Jet::BTaggerOP::DL1dv01_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_70E","xAH::Jet::BTaggerOP::DL1dv01_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_77E","xAH::Jet::BTaggerOP::DL1dv01_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_85E","xAH::Jet::BTaggerOP::DL1dv01_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP15DL1r_ContinuousE","xAH::Jet::BTaggerOP::DL1r_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_60E","xAH::Jet::BTaggerOP::DL1r_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_70E","xAH::Jet::BTaggerOP::DL1r_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_77E","xAH::Jet::BTaggerOP::DL1r_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_85E","xAH::Jet::BTaggerOP::DL1r_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN120220509_ContinuousE","xAH::Jet::BTaggerOP::GN120220509_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_60E","xAH::Jet::BTaggerOP::GN120220509_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_70E","xAH::Jet::BTaggerOP::GN120220509_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_77E","xAH::Jet::BTaggerOP::GN120220509_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_85E","xAH::Jet::BTaggerOP::GN120220509_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_60E","xAH::Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_70E","xAH::Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_77E","xAH::Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_85E","xAH::Jet::BTaggerOP::GN2v00LegacyWP_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_60E","xAH::Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_70E","xAH::Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_77E","xAH::Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_85E","xAH::Jet::BTaggerOP::GN2v00NewAliasWP_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP17GN2v01_ContinuousE","xAH::Jet::BTaggerOP::GN2v01_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_65E","xAH::Jet::BTaggerOP::GN2v01_FixedCutBEff_65"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_70E","xAH::Jet::BTaggerOP::GN2v01_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_77E","xAH::Jet::BTaggerOP::GN2v01_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_85E","xAH::Jet::BTaggerOP::GN2v01_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_90E","xAH::Jet::BTaggerOP::GN2v01_FixedCutBEff_90"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP4NoneE","xAH::Jet::BTaggerOP::None"],[124,4,1,"_CPPv4N3xAH3Jet11BchCorrCellE","xAH::Jet::BchCorrCell"],[124,4,1,"_CPPv4N3xAH3Jet5COMBxE","xAH::Jet::COMBx"],[124,4,1,"_CPPv4N3xAH3Jet9CentroidRE","xAH::Jet::CentroidR"],[124,4,1,"_CPPv4N3xAH3Jet15ChargedFractionE","xAH::Jet::ChargedFraction"],[124,4,1,"_CPPv4N3xAH3Jet16ConeTruthLabelIDE","xAH::Jet::ConeTruthLabelID"],[124,4,1,"_CPPv4N3xAH3Jet7DL1dv00E","xAH::Jet::DL1dv00"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP18DL1dv00_ContinuousE","xAH::Jet::DL1dv00_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_60E","xAH::Jet::DL1dv00_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_70E","xAH::Jet::DL1dv00_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_77E","xAH::Jet::DL1dv00_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv00_FixedCutBEff_85E","xAH::Jet::DL1dv00_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv00_pbE","xAH::Jet::DL1dv00_pb"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv00_pcE","xAH::Jet::DL1dv00_pc"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv00_puE","xAH::Jet::DL1dv00_pu"],[124,4,1,"_CPPv4N3xAH3Jet7DL1dv01E","xAH::Jet::DL1dv01"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP18DL1dv01_ContinuousE","xAH::Jet::DL1dv01_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_60E","xAH::Jet::DL1dv01_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_70E","xAH::Jet::DL1dv01_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_77E","xAH::Jet::DL1dv01_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP23DL1dv01_FixedCutBEff_85E","xAH::Jet::DL1dv01_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv01_pbE","xAH::Jet::DL1dv01_pb"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv01_pcE","xAH::Jet::DL1dv01_pc"],[124,4,1,"_CPPv4N3xAH3Jet10DL1dv01_puE","xAH::Jet::DL1dv01_pu"],[124,4,1,"_CPPv4N3xAH3Jet4DL1rE","xAH::Jet::DL1r"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP15DL1r_ContinuousE","xAH::Jet::DL1r_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_60E","xAH::Jet::DL1r_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_70E","xAH::Jet::DL1r_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_77E","xAH::Jet::DL1r_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP20DL1r_FixedCutBEff_85E","xAH::Jet::DL1r_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet7DL1r_pbE","xAH::Jet::DL1r_pb"],[124,4,1,"_CPPv4N3xAH3Jet7DL1r_pcE","xAH::Jet::DL1r_pc"],[124,4,1,"_CPPv4N3xAH3Jet7DL1r_puE","xAH::Jet::DL1r_pu"],[124,4,1,"_CPPv4N3xAH3Jet6EMFracE","xAH::Jet::EMFrac"],[124,4,1,"_CPPv4N3xAH3Jet15FracSamplingMaxE","xAH::Jet::FracSamplingMax"],[124,4,1,"_CPPv4N3xAH3Jet20FracSamplingMaxIndexE","xAH::Jet::FracSamplingMaxIndex"],[124,4,1,"_CPPv4N3xAH3Jet3GN1E","xAH::Jet::GN1"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN120220509_ContinuousE","xAH::Jet::GN120220509_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_60E","xAH::Jet::GN120220509_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_70E","xAH::Jet::GN120220509_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_77E","xAH::Jet::GN120220509_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP27GN120220509_FixedCutBEff_85E","xAH::Jet::GN120220509_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet6GN1_pbE","xAH::Jet::GN1_pb"],[124,4,1,"_CPPv4N3xAH3Jet6GN1_pcE","xAH::Jet::GN1_pc"],[124,4,1,"_CPPv4N3xAH3Jet6GN1_puE","xAH::Jet::GN1_pu"],[124,4,1,"_CPPv4N3xAH3Jet14GN2v00LegacyWPE","xAH::Jet::GN2v00LegacyWP"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_60E","xAH::Jet::GN2v00LegacyWP_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_70E","xAH::Jet::GN2v00LegacyWP_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_77E","xAH::Jet::GN2v00LegacyWP_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP30GN2v00LegacyWP_FixedCutBEff_85E","xAH::Jet::GN2v00LegacyWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet17GN2v00LegacyWP_pbE","xAH::Jet::GN2v00LegacyWP_pb"],[124,4,1,"_CPPv4N3xAH3Jet17GN2v00LegacyWP_pcE","xAH::Jet::GN2v00LegacyWP_pc"],[124,4,1,"_CPPv4N3xAH3Jet17GN2v00LegacyWP_puE","xAH::Jet::GN2v00LegacyWP_pu"],[124,4,1,"_CPPv4N3xAH3Jet16GN2v00NewAliasWPE","xAH::Jet::GN2v00NewAliasWP"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_60E","xAH::Jet::GN2v00NewAliasWP_FixedCutBEff_60"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_70E","xAH::Jet::GN2v00NewAliasWP_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_77E","xAH::Jet::GN2v00NewAliasWP_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP32GN2v00NewAliasWP_FixedCutBEff_85E","xAH::Jet::GN2v00NewAliasWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet19GN2v00NewAliasWP_pbE","xAH::Jet::GN2v00NewAliasWP_pb"],[124,4,1,"_CPPv4N3xAH3Jet19GN2v00NewAliasWP_pcE","xAH::Jet::GN2v00NewAliasWP_pc"],[124,4,1,"_CPPv4N3xAH3Jet19GN2v00NewAliasWP_puE","xAH::Jet::GN2v00NewAliasWP_pu"],[124,4,1,"_CPPv4N3xAH3Jet6GN2v01E","xAH::Jet::GN2v01"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP17GN2v01_ContinuousE","xAH::Jet::GN2v01_Continuous"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_65E","xAH::Jet::GN2v01_FixedCutBEff_65"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_70E","xAH::Jet::GN2v01_FixedCutBEff_70"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_77E","xAH::Jet::GN2v01_FixedCutBEff_77"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_85E","xAH::Jet::GN2v01_FixedCutBEff_85"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP22GN2v01_FixedCutBEff_90E","xAH::Jet::GN2v01_FixedCutBEff_90"],[124,4,1,"_CPPv4N3xAH3Jet9GN2v01_pbE","xAH::Jet::GN2v01_pb"],[124,4,1,"_CPPv4N3xAH3Jet9GN2v01_pcE","xAH::Jet::GN2v01_pc"],[124,4,1,"_CPPv4N3xAH3Jet11GN2v01_ptauE","xAH::Jet::GN2v01_ptau"],[124,4,1,"_CPPv4N3xAH3Jet9GN2v01_puE","xAH::Jet::GN2v01_pu"],[124,4,1,"_CPPv4N3xAH3Jet21GhostMuonSegmentCountE","xAH::Jet::GhostMuonSegmentCount"],[124,4,1,"_CPPv4N3xAH3Jet29GhostTruthAssociationFractionE","xAH::Jet::GhostTruthAssociationFraction"],[124,4,1,"_CPPv4N3xAH3Jet7HECFracE","xAH::Jet::HECFrac"],[124,4,1,"_CPPv4N3xAH3Jet10HECQualityE","xAH::Jet::HECQuality"],[124,4,1,"_CPPv4N3xAH3Jet34HadronConeExclExtendedTruthLabelIDE","xAH::Jet::HadronConeExclExtendedTruthLabelID"],[124,4,1,"_CPPv4N3xAH3Jet26HadronConeExclTruthLabelIDE","xAH::Jet::HadronConeExclTruthLabelID"],[124,4,1,"_CPPv4N3xAH3Jet4IP2DE","xAH::Jet::IP2D"],[124,4,1,"_CPPv4N3xAH3Jet6IP2D_cE","xAH::Jet::IP2D_c"],[124,4,1,"_CPPv4N3xAH3Jet7IP2D_cuE","xAH::Jet::IP2D_cu"],[124,4,1,"_CPPv4N3xAH3Jet23IP2D_flagFromV0ofTracksE","xAH::Jet::IP2D_flagFromV0ofTracks"],[124,4,1,"_CPPv4N3xAH3Jet18IP2D_gradeOfTracksE","xAH::Jet::IP2D_gradeOfTracks"],[124,4,1,"_CPPv4N3xAH3Jet7IP2D_pbE","xAH::Jet::IP2D_pb"],[124,4,1,"_CPPv4N3xAH3Jet7IP2D_pcE","xAH::Jet::IP2D_pc"],[124,4,1,"_CPPv4N3xAH3Jet7IP2D_puE","xAH::Jet::IP2D_pu"],[124,4,1,"_CPPv4N3xAH3Jet23IP2D_sigD0wrtPVofTracksE","xAH::Jet::IP2D_sigD0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet23IP2D_valD0wrtPVofTracksE","xAH::Jet::IP2D_valD0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP2D_weightBofTracksE","xAH::Jet::IP2D_weightBofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP2D_weightCofTracksE","xAH::Jet::IP2D_weightCofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP2D_weightUofTracksE","xAH::Jet::IP2D_weightUofTracks"],[124,4,1,"_CPPv4N3xAH3Jet4IP3DE","xAH::Jet::IP3D"],[124,4,1,"_CPPv4N3xAH3Jet6IP3D_cE","xAH::Jet::IP3D_c"],[124,4,1,"_CPPv4N3xAH3Jet7IP3D_cuE","xAH::Jet::IP3D_cu"],[124,4,1,"_CPPv4N3xAH3Jet23IP3D_flagFromV0ofTracksE","xAH::Jet::IP3D_flagFromV0ofTracks"],[124,4,1,"_CPPv4N3xAH3Jet18IP3D_gradeOfTracksE","xAH::Jet::IP3D_gradeOfTracks"],[124,4,1,"_CPPv4N3xAH3Jet7IP3D_pbE","xAH::Jet::IP3D_pb"],[124,4,1,"_CPPv4N3xAH3Jet7IP3D_pcE","xAH::Jet::IP3D_pc"],[124,4,1,"_CPPv4N3xAH3Jet7IP3D_puE","xAH::Jet::IP3D_pu"],[124,4,1,"_CPPv4N3xAH3Jet23IP3D_sigD0wrtPVofTracksE","xAH::Jet::IP3D_sigD0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet23IP3D_sigZ0wrtPVofTracksE","xAH::Jet::IP3D_sigZ0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet23IP3D_valD0wrtPVofTracksE","xAH::Jet::IP3D_valD0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet23IP3D_valZ0wrtPVofTracksE","xAH::Jet::IP3D_valZ0wrtPVofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP3D_weightBofTracksE","xAH::Jet::IP3D_weightBofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP3D_weightCofTracksE","xAH::Jet::IP3D_weightCofTracks"],[124,4,1,"_CPPv4N3xAH3Jet20IP3D_weightUofTracksE","xAH::Jet::IP3D_weightUofTracks"],[124,4,1,"_CPPv4N3xAH3Jet3JVCE","xAH::Jet::JVC"],[124,4,1,"_CPPv4N3xAH3Jet5JVFPVE","xAH::Jet::JVFPV"],[124,4,1,"_CPPv4N3xAH3Jet16JetFitter_N2TparE","xAH::Jet::JetFitter_N2Tpar"],[124,4,1,"_CPPv4N3xAH3Jet18JetFitter_deltaetaE","xAH::Jet::JetFitter_deltaeta"],[124,4,1,"_CPPv4N3xAH3Jet18JetFitter_deltaphiE","xAH::Jet::JetFitter_deltaphi"],[124,4,1,"_CPPv4N3xAH3Jet24JetFitter_energyFractionE","xAH::Jet::JetFitter_energyFraction"],[124,4,1,"_CPPv4N3xAH3Jet14JetFitter_massE","xAH::Jet::JetFitter_mass"],[124,4,1,"_CPPv4N3xAH3Jet23JetFitter_nSingleTracksE","xAH::Jet::JetFitter_nSingleTracks"],[124,4,1,"_CPPv4N3xAH3Jet22JetFitter_nTracksAtVtxE","xAH::Jet::JetFitter_nTracksAtVtx"],[124,4,1,"_CPPv4N3xAH3Jet14JetFitter_nVTXE","xAH::Jet::JetFitter_nVTX"],[124,4,1,"_CPPv4N3xAH3Jet24JetFitter_significance3dE","xAH::Jet::JetFitter_significance3d"],[124,4,1,"_CPPv4N3xAH3Jet3JvtE","xAH::Jet::Jvt"],[124,4,1,"_CPPv4N3xAH3Jet10JvtJvfcorrE","xAH::Jet::JvtJvfcorr"],[124,4,1,"_CPPv4N3xAH3Jet6JvtRptE","xAH::Jet::JvtRpt"],[124,4,1,"_CPPv4N3xAH3Jet13LArBadHVEFracE","xAH::Jet::LArBadHVEFrac"],[124,4,1,"_CPPv4N3xAH3Jet13LArBadHVNCellE","xAH::Jet::LArBadHVNCell"],[124,4,1,"_CPPv4N3xAH3Jet10LArQualityE","xAH::Jet::LArQuality"],[124,4,1,"_CPPv4N3xAH3Jet26LeadingClusterCenterLambdaE","xAH::Jet::LeadingClusterCenterLambda"],[124,4,1,"_CPPv4N3xAH3Jet16LeadingClusterPtE","xAH::Jet::LeadingClusterPt"],[124,4,1,"_CPPv4N3xAH3Jet26LeadingClusterSecondLambdaE","xAH::Jet::LeadingClusterSecondLambda"],[124,4,1,"_CPPv4N3xAH3Jet21LeadingClusterSecondRE","xAH::Jet::LeadingClusterSecondR"],[124,4,1,"_CPPv4N3xAH3Jet21LowEtConstituentsFracE","xAH::Jet::LowEtConstituentsFrac"],[124,4,1,"_CPPv4N3xAH3Jet15N90ConstituentsE","xAH::Jet::N90Constituents"],[124,4,1,"_CPPv4N3xAH3Jet9NegativeEE","xAH::Jet::NegativeE"],[124,8,1,"_CPPv4N3xAH3Jet9BTaggerOP4NoneE","xAH::Jet::None"],[124,4,1,"_CPPv4N3xAH3Jet14NumTrkPt1000PVE","xAH::Jet::NumTrkPt1000PV"],[124,4,1,"_CPPv4N3xAH3Jet13NumTrkPt500PVE","xAH::Jet::NumTrkPt500PV"],[124,4,1,"_CPPv4N3xAH3Jet17OotFracClusters10E","xAH::Jet::OotFracClusters10"],[124,4,1,"_CPPv4N3xAH3Jet16OotFracClusters5E","xAH::Jet::OotFracClusters5"],[124,4,1,"_CPPv4N3xAH3Jet18PartonTruthLabelIDE","xAH::Jet::PartonTruthLabelID"],[124,4,1,"_CPPv4N3xAH3Jet21SF_DL1dv00_ContinuousE","xAH::Jet::SF_DL1dv00_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv00_FixedCutBEff_60E","xAH::Jet::SF_DL1dv00_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv00_FixedCutBEff_70E","xAH::Jet::SF_DL1dv00_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv00_FixedCutBEff_77E","xAH::Jet::SF_DL1dv00_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv00_FixedCutBEff_85E","xAH::Jet::SF_DL1dv00_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet21SF_DL1dv01_ContinuousE","xAH::Jet::SF_DL1dv01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv01_FixedCutBEff_60E","xAH::Jet::SF_DL1dv01_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv01_FixedCutBEff_70E","xAH::Jet::SF_DL1dv01_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv01_FixedCutBEff_77E","xAH::Jet::SF_DL1dv01_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet26SF_DL1dv01_FixedCutBEff_85E","xAH::Jet::SF_DL1dv01_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet18SF_DL1r_ContinuousE","xAH::Jet::SF_DL1r_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet23SF_DL1r_FixedCutBEff_60E","xAH::Jet::SF_DL1r_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet23SF_DL1r_FixedCutBEff_70E","xAH::Jet::SF_DL1r_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet23SF_DL1r_FixedCutBEff_77E","xAH::Jet::SF_DL1r_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet23SF_DL1r_FixedCutBEff_85E","xAH::Jet::SF_DL1r_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN120220509_ContinuousE","xAH::Jet::SF_GN120220509_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet30SF_GN120220509_FixedCutBEff_60E","xAH::Jet::SF_GN120220509_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet30SF_GN120220509_FixedCutBEff_70E","xAH::Jet::SF_GN120220509_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet30SF_GN120220509_FixedCutBEff_77E","xAH::Jet::SF_GN120220509_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet30SF_GN120220509_FixedCutBEff_85E","xAH::Jet::SF_GN120220509_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet28SF_GN2v00LegacyWP_ContinuousE","xAH::Jet::SF_GN2v00LegacyWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet33SF_GN2v00LegacyWP_FixedCutBEff_60E","xAH::Jet::SF_GN2v00LegacyWP_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet33SF_GN2v00LegacyWP_FixedCutBEff_70E","xAH::Jet::SF_GN2v00LegacyWP_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet33SF_GN2v00LegacyWP_FixedCutBEff_77E","xAH::Jet::SF_GN2v00LegacyWP_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet33SF_GN2v00LegacyWP_FixedCutBEff_85E","xAH::Jet::SF_GN2v00LegacyWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet30SF_GN2v00NewAliasWP_ContinuousE","xAH::Jet::SF_GN2v00NewAliasWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet35SF_GN2v00NewAliasWP_FixedCutBEff_60E","xAH::Jet::SF_GN2v00NewAliasWP_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet35SF_GN2v00NewAliasWP_FixedCutBEff_70E","xAH::Jet::SF_GN2v00NewAliasWP_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet35SF_GN2v00NewAliasWP_FixedCutBEff_77E","xAH::Jet::SF_GN2v00NewAliasWP_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet35SF_GN2v00NewAliasWP_FixedCutBEff_85E","xAH::Jet::SF_GN2v00NewAliasWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet20SF_GN2v01_ContinuousE","xAH::Jet::SF_GN2v01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN2v01_FixedCutBEff_65E","xAH::Jet::SF_GN2v01_FixedCutBEff_65"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN2v01_FixedCutBEff_70E","xAH::Jet::SF_GN2v01_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN2v01_FixedCutBEff_77E","xAH::Jet::SF_GN2v01_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN2v01_FixedCutBEff_85E","xAH::Jet::SF_GN2v01_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet25SF_GN2v01_FixedCutBEff_90E","xAH::Jet::SF_GN2v01_FixedCutBEff_90"],[124,2,1,"_CPPv4NK3xAH3Jet7SF_btagE9BTaggerOP","xAH::Jet::SF_btag"],[124,3,1,"_CPPv4NK3xAH3Jet7SF_btagE9BTaggerOP","xAH::Jet::SF_btag::op"],[124,4,1,"_CPPv4N3xAH3Jet3SV0E","xAH::Jet::SV0"],[124,4,1,"_CPPv4N3xAH3Jet3SV1E","xAH::Jet::SV1"],[124,4,1,"_CPPv4N3xAH3Jet7SV1IP3DE","xAH::Jet::SV1IP3D"],[124,4,1,"_CPPv4N3xAH3Jet22SumPtChargedPFOPt500PVE","xAH::Jet::SumPtChargedPFOPt500PV"],[124,4,1,"_CPPv4N3xAH3Jet16SumPtTrkPt1000PVE","xAH::Jet::SumPtTrkPt1000PV"],[124,4,1,"_CPPv4N3xAH3Jet15SumPtTrkPt500PVE","xAH::Jet::SumPtTrkPt500PV"],[124,4,1,"_CPPv4N3xAH3Jet6TimingE","xAH::Jet::Timing"],[124,4,1,"_CPPv4N3xAH3Jet18TrackWidthPt1000PVE","xAH::Jet::TrackWidthPt1000PV"],[124,4,1,"_CPPv4N3xAH3Jet17TrackWidthPt500PVE","xAH::Jet::TrackWidthPt500PV"],[124,4,1,"_CPPv4N3xAH3Jet10TruthCountE","xAH::Jet::TruthCount"],[124,4,1,"_CPPv4N3xAH3Jet18TruthLabelDeltaR_BE","xAH::Jet::TruthLabelDeltaR_B"],[124,4,1,"_CPPv4N3xAH3Jet18TruthLabelDeltaR_CE","xAH::Jet::TruthLabelDeltaR_C"],[124,4,1,"_CPPv4N3xAH3Jet18TruthLabelDeltaR_TE","xAH::Jet::TruthLabelDeltaR_T"],[124,4,1,"_CPPv4N3xAH3Jet5WidthE","xAH::Jet::Width"],[124,4,1,"_CPPv4N3xAH3Jet12bs_online_vxE","xAH::Jet::bs_online_vx"],[124,4,1,"_CPPv4N3xAH3Jet12bs_online_vyE","xAH::Jet::bs_online_vy"],[124,4,1,"_CPPv4N3xAH3Jet12bs_online_vzE","xAH::Jet::bs_online_vz"],[124,4,1,"_CPPv4N3xAH3Jet6chargeE","xAH::Jet::charge"],[124,4,1,"_CPPv4N3xAH3Jet18clean_passLooseBadE","xAH::Jet::clean_passLooseBad"],[124,4,1,"_CPPv4N3xAH3Jet21clean_passLooseBadLLPE","xAH::Jet::clean_passLooseBadLLP"],[124,4,1,"_CPPv4N3xAH3Jet25clean_passLooseBadTriggerE","xAH::Jet::clean_passLooseBadTrigger"],[124,4,1,"_CPPv4N3xAH3Jet29clean_passLooseBadTriggerUglyE","xAH::Jet::clean_passLooseBadTriggerUgly"],[124,4,1,"_CPPv4N3xAH3Jet22clean_passLooseBadUglyE","xAH::Jet::clean_passLooseBadUgly"],[124,4,1,"_CPPv4N3xAH3Jet18clean_passTightBadE","xAH::Jet::clean_passTightBad"],[124,4,1,"_CPPv4N3xAH3Jet22clean_passTightBadUglyE","xAH::Jet::clean_passTightBadUgly"],[124,4,1,"_CPPv4N3xAH3Jet8fChargedE","xAH::Jet::fCharged"],[124,4,1,"_CPPv4N3xAH3Jet8fastDIPSE","xAH::Jet::fastDIPS"],[124,4,1,"_CPPv4N3xAH3Jet11fastDIPS_pbE","xAH::Jet::fastDIPS_pb"],[124,4,1,"_CPPv4N3xAH3Jet11fastDIPS_pcE","xAH::Jet::fastDIPS_pc"],[124,4,1,"_CPPv4N3xAH3Jet11fastDIPS_puE","xAH::Jet::fastDIPS_pu"],[124,4,1,"_CPPv4N3xAH3Jet26inEffSF_DL1dv00_ContinuousE","xAH::Jet::inEffSF_DL1dv00_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet26inEffSF_DL1dv01_ContinuousE","xAH::Jet::inEffSF_DL1dv01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet23inEffSF_DL1r_ContinuousE","xAH::Jet::inEffSF_DL1r_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet30inEffSF_GN120220509_ContinuousE","xAH::Jet::inEffSF_GN120220509_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet33inEffSF_GN2v00LegacyWP_ContinuousE","xAH::Jet::inEffSF_GN2v00LegacyWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet35inEffSF_GN2v00NewAliasWP_ContinuousE","xAH::Jet::inEffSF_GN2v00NewAliasWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet25inEffSF_GN2v01_ContinuousE","xAH::Jet::inEffSF_GN2v01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet13isTrigMatchedE","xAH::Jet::isTrigMatched"],[124,4,1,"_CPPv4N3xAH3Jet20isTrigMatchedToChainE","xAH::Jet::isTrigMatchedToChain"],[124,4,1,"_CPPv4N3xAH3Jet21is_DL1dv00_ContinuousE","xAH::Jet::is_DL1dv00_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv00_FixedCutBEff_60E","xAH::Jet::is_DL1dv00_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv00_FixedCutBEff_70E","xAH::Jet::is_DL1dv00_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv00_FixedCutBEff_77E","xAH::Jet::is_DL1dv00_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv00_FixedCutBEff_85E","xAH::Jet::is_DL1dv00_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet21is_DL1dv01_ContinuousE","xAH::Jet::is_DL1dv01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv01_FixedCutBEff_60E","xAH::Jet::is_DL1dv01_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv01_FixedCutBEff_70E","xAH::Jet::is_DL1dv01_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv01_FixedCutBEff_77E","xAH::Jet::is_DL1dv01_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet26is_DL1dv01_FixedCutBEff_85E","xAH::Jet::is_DL1dv01_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet18is_DL1r_ContinuousE","xAH::Jet::is_DL1r_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet23is_DL1r_FixedCutBEff_60E","xAH::Jet::is_DL1r_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet23is_DL1r_FixedCutBEff_70E","xAH::Jet::is_DL1r_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet23is_DL1r_FixedCutBEff_77E","xAH::Jet::is_DL1r_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet23is_DL1r_FixedCutBEff_85E","xAH::Jet::is_DL1r_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN120220509_ContinuousE","xAH::Jet::is_GN120220509_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet30is_GN120220509_FixedCutBEff_60E","xAH::Jet::is_GN120220509_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet30is_GN120220509_FixedCutBEff_70E","xAH::Jet::is_GN120220509_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet30is_GN120220509_FixedCutBEff_77E","xAH::Jet::is_GN120220509_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet30is_GN120220509_FixedCutBEff_85E","xAH::Jet::is_GN120220509_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet28is_GN2v00LegacyWP_ContinuousE","xAH::Jet::is_GN2v00LegacyWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet33is_GN2v00LegacyWP_FixedCutBEff_60E","xAH::Jet::is_GN2v00LegacyWP_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet33is_GN2v00LegacyWP_FixedCutBEff_70E","xAH::Jet::is_GN2v00LegacyWP_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet33is_GN2v00LegacyWP_FixedCutBEff_77E","xAH::Jet::is_GN2v00LegacyWP_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet33is_GN2v00LegacyWP_FixedCutBEff_85E","xAH::Jet::is_GN2v00LegacyWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet30is_GN2v00NewAliasWP_ContinuousE","xAH::Jet::is_GN2v00NewAliasWP_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet35is_GN2v00NewAliasWP_FixedCutBEff_60E","xAH::Jet::is_GN2v00NewAliasWP_FixedCutBEff_60"],[124,4,1,"_CPPv4N3xAH3Jet35is_GN2v00NewAliasWP_FixedCutBEff_70E","xAH::Jet::is_GN2v00NewAliasWP_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet35is_GN2v00NewAliasWP_FixedCutBEff_77E","xAH::Jet::is_GN2v00NewAliasWP_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet35is_GN2v00NewAliasWP_FixedCutBEff_85E","xAH::Jet::is_GN2v00NewAliasWP_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet20is_GN2v01_ContinuousE","xAH::Jet::is_GN2v01_Continuous"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN2v01_FixedCutBEff_65E","xAH::Jet::is_GN2v01_FixedCutBEff_65"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN2v01_FixedCutBEff_70E","xAH::Jet::is_GN2v01_FixedCutBEff_70"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN2v01_FixedCutBEff_77E","xAH::Jet::is_GN2v01_FixedCutBEff_77"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN2v01_FixedCutBEff_85E","xAH::Jet::is_GN2v01_FixedCutBEff_85"],[124,4,1,"_CPPv4N3xAH3Jet25is_GN2v01_FixedCutBEff_90E","xAH::Jet::is_GN2v01_FixedCutBEff_90"],[124,2,1,"_CPPv4NK3xAH3Jet7is_btagE9BTaggerOP","xAH::Jet::is_btag"],[124,3,1,"_CPPv4NK3xAH3Jet7is_btagE9BTaggerOP","xAH::Jet::is_btag::op"],[124,4,1,"_CPPv4N3xAH3Jet14listTrigChainsE","xAH::Jet::listTrigChains"],[124,4,1,"_CPPv4N3xAH3Jet10matchedJetE","xAH::Jet::matchedJet"],[124,4,1,"_CPPv4N3xAH3Jet11matchedMuonE","xAH::Jet::matchedMuon"],[124,2,1,"_CPPv4N3xAH3Jet19muonInJetCorrectionEPKN3xAH13MuonContainerE","xAH::Jet::muonInJetCorrection"],[124,3,1,"_CPPv4N3xAH3Jet19muonInJetCorrectionEPKN3xAH13MuonContainerE","xAH::Jet::muonInJetCorrection::muons"],[124,4,1,"_CPPv4N3xAH3Jet11nIP2DTracksE","xAH::Jet::nIP2DTracks"],[124,4,1,"_CPPv4N3xAH3Jet11nIP3DTracksE","xAH::Jet::nIP3DTracks"],[124,4,1,"_CPPv4N3xAH3Jet6passORE","xAH::Jet::passOR"],[124,4,1,"_CPPv4N3xAH3Jet7passSelE","xAH::Jet::passSel"],[124,4,1,"_CPPv4N3xAH3Jet8rapidityE","xAH::Jet::rapidity"],[124,4,1,"_CPPv4N3xAH3Jet11sv0_N2TpairE","xAH::Jet::sv0_N2Tpair"],[124,4,1,"_CPPv4N3xAH3Jet12sv0_NGTinSvxE","xAH::Jet::sv0_NGTinSvx"],[124,4,1,"_CPPv4N3xAH3Jet12sv0_efracsvxE","xAH::Jet::sv0_efracsvx"],[124,4,1,"_CPPv4N3xAH3Jet10sv0_massvxE","xAH::Jet::sv0_massvx"],[124,4,1,"_CPPv4N3xAH3Jet12sv0_normdistE","xAH::Jet::sv0_normdist"],[124,4,1,"_CPPv4N3xAH3Jet7sv1_L3dE","xAH::Jet::sv1_L3d"],[124,4,1,"_CPPv4N3xAH3Jet7sv1_LxyE","xAH::Jet::sv1_Lxy"],[124,4,1,"_CPPv4N3xAH3Jet11sv1_N2TpairE","xAH::Jet::sv1_N2Tpair"],[124,4,1,"_CPPv4N3xAH3Jet12sv1_NGTinSvxE","xAH::Jet::sv1_NGTinSvx"],[124,4,1,"_CPPv4N3xAH3Jet5sv1_cE","xAH::Jet::sv1_c"],[124,4,1,"_CPPv4N3xAH3Jet6sv1_cuE","xAH::Jet::sv1_cu"],[124,4,1,"_CPPv4N3xAH3Jet6sv1_dRE","xAH::Jet::sv1_dR"],[124,4,1,"_CPPv4N3xAH3Jet14sv1_distmatlayE","xAH::Jet::sv1_distmatlay"],[124,4,1,"_CPPv4N3xAH3Jet12sv1_efracsvxE","xAH::Jet::sv1_efracsvx"],[124,4,1,"_CPPv4N3xAH3Jet10sv1_massvxE","xAH::Jet::sv1_massvx"],[124,4,1,"_CPPv4N3xAH3Jet12sv1_normdistE","xAH::Jet::sv1_normdist"],[124,4,1,"_CPPv4N3xAH3Jet6sv1_pbE","xAH::Jet::sv1_pb"],[124,4,1,"_CPPv4N3xAH3Jet6sv1_pcE","xAH::Jet::sv1_pc"],[124,4,1,"_CPPv4N3xAH3Jet6sv1_puE","xAH::Jet::sv1_pu"],[124,4,1,"_CPPv4N3xAH3Jet9sv1_sig3dE","xAH::Jet::sv1_sig3d"],[124,4,1,"_CPPv4N3xAH3Jet8truth_p4E","xAH::Jet::truth_p4"],[124,4,1,"_CPPv4N3xAH3Jet11vtxHadDummyE","xAH::Jet::vtxHadDummy"],[124,4,1,"_CPPv4N3xAH3Jet14vtxOnlineValidE","xAH::Jet::vtxOnlineValid"],[124,4,1,"_CPPv4N3xAH3Jet14vtx_offline_x0E","xAH::Jet::vtx_offline_x0"],[124,4,1,"_CPPv4N3xAH3Jet14vtx_offline_y0E","xAH::Jet::vtx_offline_y0"],[124,4,1,"_CPPv4N3xAH3Jet14vtx_offline_z0E","xAH::Jet::vtx_offline_z0"],[124,4,1,"_CPPv4N3xAH3Jet17vtx_online_bkg_x0E","xAH::Jet::vtx_online_bkg_x0"],[124,4,1,"_CPPv4N3xAH3Jet17vtx_online_bkg_y0E","xAH::Jet::vtx_online_bkg_y0"],[124,4,1,"_CPPv4N3xAH3Jet17vtx_online_bkg_z0E","xAH::Jet::vtx_online_bkg_z0"],[124,4,1,"_CPPv4N3xAH3Jet13vtx_online_x0E","xAH::Jet::vtx_online_x0"],[124,4,1,"_CPPv4N3xAH3Jet13vtx_online_y0E","xAH::Jet::vtx_online_y0"],[124,4,1,"_CPPv4N3xAH3Jet13vtx_online_z0E","xAH::Jet::vtx_online_z0"],[125,1,1,"_CPPv4N3xAH12JetContainerE","xAH::JetContainer"],[125,2,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet"],[125,2,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD9IParticleEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::jet"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD9IParticleEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::particle"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::pv"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD9IParticleEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::pv"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD3JetEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::pvLocation"],[125,3,1,"_CPPv4N3xAH12JetContainer7FillJetEPKN4xAOD9IParticleEPKN4xAOD6VertexEi","xAH::JetContainer::FillJet::pvLocation"],[125,2,1,"_CPPv4N3xAH12JetContainer12JetContainerERKNSt6stringERKNSt6stringEfb","xAH::JetContainer::JetContainer"],[125,3,1,"_CPPv4N3xAH12JetContainer12JetContainerERKNSt6stringERKNSt6stringEfb","xAH::JetContainer::JetContainer::detailStr"],[125,3,1,"_CPPv4N3xAH12JetContainer12JetContainerERKNSt6stringERKNSt6stringEfb","xAH::JetContainer::JetContainer::mc"],[125,3,1,"_CPPv4N3xAH12JetContainer12JetContainerERKNSt6stringERKNSt6stringEfb","xAH::JetContainer::JetContainer::name"],[125,3,1,"_CPPv4N3xAH12JetContainer12JetContainerERKNSt6stringERKNSt6stringEfb","xAH::JetContainer::JetContainer::units"],[551,1,1,"_CPPv4N3xAH12JetContainer11btagOpPointE","xAH::JetContainer::btagOpPoint"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPoint4FillEPKN4xAOD3JetE","xAH::JetContainer::btagOpPoint::Fill"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint4FillEPKN4xAOD3JetE","xAH::JetContainer::btagOpPoint::Fill::jet"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPoint11btagOpPointEbRKNSt6stringERKNSt6stringE","xAH::JetContainer::btagOpPoint::btagOpPoint"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint11btagOpPointEbRKNSt6stringERKNSt6stringE","xAH::JetContainer::btagOpPoint::btagOpPoint::mc"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint11btagOpPointEbRKNSt6stringERKNSt6stringE","xAH::JetContainer::btagOpPoint::btagOpPoint::tagger"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint11btagOpPointEbRKNSt6stringERKNSt6stringE","xAH::JetContainer::btagOpPoint::btagOpPoint::wp"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPoint5clearEv","xAH::JetContainer::btagOpPoint::clear"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint14m_accessorNameE","xAH::JetContainer::btagOpPoint::m_accessorName"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint9m_ineffSfE","xAH::JetContainer::btagOpPoint::m_ineffSf"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint14m_isContinuousE","xAH::JetContainer::btagOpPoint::m_isContinuous"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint7m_isTagE","xAH::JetContainer::btagOpPoint::m_isTag"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint4m_mcE","xAH::JetContainer::btagOpPoint::m_mc"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint4m_opE","xAH::JetContainer::btagOpPoint::m_op"],[551,4,1,"_CPPv4N3xAH12JetContainer11btagOpPoint4m_sfE","xAH::JetContainer::btagOpPoint::m_sf"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPoint9setBranchEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setBranch"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint9setBranchEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setBranch::jetName"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint9setBranchEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setBranch::tree"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPoint7setTreeEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setTree"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint7setTreeEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setTree::jetName"],[551,3,1,"_CPPv4N3xAH12JetContainer11btagOpPoint7setTreeEP5TTreeRKNSt6stringE","xAH::JetContainer::btagOpPoint::setTree::tree"],[551,2,1,"_CPPv4N3xAH12JetContainer11btagOpPointD0Ev","xAH::JetContainer::btagOpPoint::~btagOpPoint"],[125,2,1,"_CPPv4N3xAH12JetContainer5clearEv","xAH::JetContainer::clear"],[125,2,1,"_CPPv4N3xAH12JetContainer11setBranchesEP5TTree","xAH::JetContainer::setBranches"],[125,3,1,"_CPPv4N3xAH12JetContainer11setBranchesEP5TTree","xAH::JetContainer::setBranches::tree"],[125,2,1,"_CPPv4N3xAH12JetContainer7setTreeEP5TTree","xAH::JetContainer::setTree"],[125,3,1,"_CPPv4N3xAH12JetContainer7setTreeEP5TTree","xAH::JetContainer::setTree::tree"],[125,2,1,"_CPPv4N3xAH12JetContainer14updateParticleE4uintR3Jet","xAH::JetContainer::updateParticle"],[125,3,1,"_CPPv4N3xAH12JetContainer14updateParticleE4uintR3Jet","xAH::JetContainer::updateParticle::idx"],[125,3,1,"_CPPv4N3xAH12JetContainer14updateParticleE4uintR3Jet","xAH::JetContainer::updateParticle::jet"],[125,2,1,"_CPPv4N3xAH12JetContainerD0Ev","xAH::JetContainer::~JetContainer"],[126,1,1,"_CPPv4N3xAH14L1JetContainerE","xAH::L1JetContainer"],[126,2,1,"_CPPv4N3xAH14L1JetContainer16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerEb","xAH::L1JetContainer::FillLegacyL1Jets"],[126,3,1,"_CPPv4N3xAH14L1JetContainer16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerEb","xAH::L1JetContainer::FillLegacyL1Jets::jets"],[126,3,1,"_CPPv4N3xAH14L1JetContainer16FillLegacyL1JetsEPKN4xAOD15JetRoIContainerEb","xAH::L1JetContainer::FillLegacyL1Jets::sort"],[126,2,1,"_CPPv4I0EN3xAH14L1JetContainer16FillPhase1L1JetsEvRP1Tb","xAH::L1JetContainer::FillPhase1L1Jets"],[126,5,1,"_CPPv4I0EN3xAH14L1JetContainer16FillPhase1L1JetsEvRP1Tb","xAH::L1JetContainer::FillPhase1L1Jets::T"],[126,3,1,"_CPPv4I0EN3xAH14L1JetContainer16FillPhase1L1JetsEvRP1Tb","xAH::L1JetContainer::FillPhase1L1Jets::jets"],[126,3,1,"_CPPv4I0EN3xAH14L1JetContainer16FillPhase1L1JetsEvRP1Tb","xAH::L1JetContainer::FillPhase1L1Jets::sort"],[126,2,1,"_CPPv4N3xAH14L1JetContainer14L1JetContainerERKNSt6stringEfb","xAH::L1JetContainer::L1JetContainer"],[126,3,1,"_CPPv4N3xAH14L1JetContainer14L1JetContainerERKNSt6stringEfb","xAH::L1JetContainer::L1JetContainer::mc"],[126,3,1,"_CPPv4N3xAH14L1JetContainer14L1JetContainerERKNSt6stringEfb","xAH::L1JetContainer::L1JetContainer::name"],[126,3,1,"_CPPv4N3xAH14L1JetContainer14L1JetContainerERKNSt6stringEfb","xAH::L1JetContainer::L1JetContainer::units"],[126,2,1,"_CPPv4N3xAH14L1JetContainer5clearEv","xAH::L1JetContainer::clear"],[126,2,1,"_CPPv4N3xAH14L1JetContainer11setBranchesEP5TTree","xAH::L1JetContainer::setBranches"],[126,3,1,"_CPPv4N3xAH14L1JetContainer11setBranchesEP5TTree","xAH::L1JetContainer::setBranches::tree"],[126,2,1,"_CPPv4N3xAH14L1JetContainer7setTreeEP5TTree","xAH::L1JetContainer::setTree"],[126,3,1,"_CPPv4N3xAH14L1JetContainer7setTreeEP5TTree","xAH::L1JetContainer::setTree::tree"],[126,2,1,"_CPPv4N3xAH14L1JetContainer14updateParticleE4uintR3Jet","xAH::L1JetContainer::updateParticle"],[126,3,1,"_CPPv4N3xAH14L1JetContainer14updateParticleE4uintR3Jet","xAH::L1JetContainer::updateParticle::idx"],[126,3,1,"_CPPv4N3xAH14L1JetContainer14updateParticleE4uintR3Jet","xAH::L1JetContainer::updateParticle::jet"],[126,2,1,"_CPPv4N3xAH14L1JetContainerD0Ev","xAH::L1JetContainer::~L1JetContainer"],[127,1,1,"_CPPv4N3xAH12MetContainerE","xAH::MetContainer"],[127,2,1,"_CPPv4N3xAH12MetContainer7FillMETEPKN4xAOD18MissingETContainerE","xAH::MetContainer::FillMET"],[127,3,1,"_CPPv4N3xAH12MetContainer7FillMETEPKN4xAOD18MissingETContainerE","xAH::MetContainer::FillMET::met"],[127,2,1,"_CPPv4N3xAH12MetContainer12MetContainerERKNSt6stringERKNSt6stringEf","xAH::MetContainer::MetContainer"],[127,3,1,"_CPPv4N3xAH12MetContainer12MetContainerERKNSt6stringERKNSt6stringEf","xAH::MetContainer::MetContainer::detailStr"],[127,3,1,"_CPPv4N3xAH12MetContainer12MetContainerERKNSt6stringERKNSt6stringEf","xAH::MetContainer::MetContainer::name"],[127,3,1,"_CPPv4N3xAH12MetContainer12MetContainerERKNSt6stringERKNSt6stringEf","xAH::MetContainer::MetContainer::units"],[127,2,1,"_CPPv4N3xAH12MetContainer5clearEv","xAH::MetContainer::clear"],[127,2,1,"_CPPv4I0EN3xAH12MetContainer13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::MetContainer::connectBranch"],[127,5,1,"_CPPv4I0EN3xAH12MetContainer13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::MetContainer::connectBranch::T_BR"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::MetContainer::connectBranch::name"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::MetContainer::connectBranch::tree"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer13connectBranchEvP5TTreeNSt6stringEP4T_BR","xAH::MetContainer::connectBranch::variable"],[127,4,1,"_CPPv4N3xAH12MetContainer7m_debugE","xAH::MetContainer::m_debug"],[127,4,1,"_CPPv4N3xAH12MetContainer12m_infoSwitchE","xAH::MetContainer::m_infoSwitch"],[127,4,1,"_CPPv4N3xAH12MetContainer8m_metEleE","xAH::MetContainer::m_metEle"],[127,4,1,"_CPPv4N3xAH12MetContainer11m_metElePhiE","xAH::MetContainer::m_metElePhi"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metEleSumEtE","xAH::MetContainer::m_metEleSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer14m_metFinalClusE","xAH::MetContainer::m_metFinalClus"],[127,4,1,"_CPPv4N3xAH12MetContainer24m_metFinalClusOverSqrtHtE","xAH::MetContainer::m_metFinalClusOverSqrtHt"],[127,4,1,"_CPPv4N3xAH12MetContainer27m_metFinalClusOverSqrtSumEtE","xAH::MetContainer::m_metFinalClusOverSqrtSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer17m_metFinalClusPhiE","xAH::MetContainer::m_metFinalClusPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metFinalClusPxE","xAH::MetContainer::m_metFinalClusPx"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metFinalClusPyE","xAH::MetContainer::m_metFinalClusPy"],[127,4,1,"_CPPv4N3xAH12MetContainer17m_metFinalClusRhoE","xAH::MetContainer::m_metFinalClusRho"],[127,4,1,"_CPPv4N3xAH12MetContainer28m_metFinalClusSigDirectionalE","xAH::MetContainer::m_metFinalClusSigDirectional"],[127,4,1,"_CPPv4N3xAH12MetContainer26m_metFinalClusSignificanceE","xAH::MetContainer::m_metFinalClusSignificance"],[127,4,1,"_CPPv4N3xAH12MetContainer19m_metFinalClusSumEtE","xAH::MetContainer::m_metFinalClusSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer18m_metFinalClusVarLE","xAH::MetContainer::m_metFinalClusVarL"],[127,4,1,"_CPPv4N3xAH12MetContainer18m_metFinalClusVarTE","xAH::MetContainer::m_metFinalClusVarT"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metFinalTrkE","xAH::MetContainer::m_metFinalTrk"],[127,4,1,"_CPPv4N3xAH12MetContainer23m_metFinalTrkOverSqrtHtE","xAH::MetContainer::m_metFinalTrkOverSqrtHt"],[127,4,1,"_CPPv4N3xAH12MetContainer26m_metFinalTrkOverSqrtSumEtE","xAH::MetContainer::m_metFinalTrkOverSqrtSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metFinalTrkPhiE","xAH::MetContainer::m_metFinalTrkPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer15m_metFinalTrkPxE","xAH::MetContainer::m_metFinalTrkPx"],[127,4,1,"_CPPv4N3xAH12MetContainer15m_metFinalTrkPyE","xAH::MetContainer::m_metFinalTrkPy"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metFinalTrkRhoE","xAH::MetContainer::m_metFinalTrkRho"],[127,4,1,"_CPPv4N3xAH12MetContainer27m_metFinalTrkSigDirectionalE","xAH::MetContainer::m_metFinalTrkSigDirectional"],[127,4,1,"_CPPv4N3xAH12MetContainer25m_metFinalTrkSignificanceE","xAH::MetContainer::m_metFinalTrkSignificance"],[127,4,1,"_CPPv4N3xAH12MetContainer18m_metFinalTrkSumEtE","xAH::MetContainer::m_metFinalTrkSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer17m_metFinalTrkVarLE","xAH::MetContainer::m_metFinalTrkVarL"],[127,4,1,"_CPPv4N3xAH12MetContainer17m_metFinalTrkVarTE","xAH::MetContainer::m_metFinalTrkVarT"],[127,4,1,"_CPPv4N3xAH12MetContainer10m_metGammaE","xAH::MetContainer::m_metGamma"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metGammaPhiE","xAH::MetContainer::m_metGammaPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer15m_metGammaSumEtE","xAH::MetContainer::m_metGammaSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer8m_metJetE","xAH::MetContainer::m_metJet"],[127,4,1,"_CPPv4N3xAH12MetContainer11m_metJetPhiE","xAH::MetContainer::m_metJetPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metJetSumEtE","xAH::MetContainer::m_metJetSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer11m_metJetTrkE","xAH::MetContainer::m_metJetTrk"],[127,4,1,"_CPPv4N3xAH12MetContainer14m_metJetTrkPhiE","xAH::MetContainer::m_metJetTrkPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metJetTrkSumEtE","xAH::MetContainer::m_metJetTrkSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer10m_metMuonsE","xAH::MetContainer::m_metMuons"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metMuonsPhiE","xAH::MetContainer::m_metMuonsPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer15m_metMuonsSumEtE","xAH::MetContainer::m_metMuonsSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metSoftClusE","xAH::MetContainer::m_metSoftClus"],[127,4,1,"_CPPv4N3xAH12MetContainer16m_metSoftClusPhiE","xAH::MetContainer::m_metSoftClusPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer18m_metSoftClusSumEtE","xAH::MetContainer::m_metSoftClusSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer12m_metSoftTrkE","xAH::MetContainer::m_metSoftTrk"],[127,4,1,"_CPPv4N3xAH12MetContainer15m_metSoftTrkPhiE","xAH::MetContainer::m_metSoftTrkPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer17m_metSoftTrkSumEtE","xAH::MetContainer::m_metSoftTrkSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer8m_metTauE","xAH::MetContainer::m_metTau"],[127,4,1,"_CPPv4N3xAH12MetContainer11m_metTauPhiE","xAH::MetContainer::m_metTauPhi"],[127,4,1,"_CPPv4N3xAH12MetContainer13m_metTauSumEtE","xAH::MetContainer::m_metTauSumEt"],[127,4,1,"_CPPv4N3xAH12MetContainer6m_nameE","xAH::MetContainer::m_name"],[127,4,1,"_CPPv4N3xAH12MetContainer7m_unitsE","xAH::MetContainer::m_units"],[127,2,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch"],[127,5,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch::T_BR"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch::name"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch::tree"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch::type"],[127,3,1,"_CPPv4I0EN3xAH12MetContainer9setBranchEvP5TTreeNSt6stringEP4T_BRNSt6stringE","xAH::MetContainer::setBranch::variable"],[127,2,1,"_CPPv4N3xAH12MetContainer11setBranchesEP5TTree","xAH::MetContainer::setBranches"],[127,3,1,"_CPPv4N3xAH12MetContainer11setBranchesEP5TTree","xAH::MetContainer::setBranches::tree"],[127,2,1,"_CPPv4N3xAH12MetContainer7setTreeEP5TTree","xAH::MetContainer::setTree"],[127,3,1,"_CPPv4N3xAH12MetContainer7setTreeEP5TTree","xAH::MetContainer::setTree::tree"],[127,2,1,"_CPPv4N3xAH12MetContainerD0Ev","xAH::MetContainer::~MetContainer"],[128,1,1,"_CPPv4N3xAH4MuonE","xAH::Muon"],[128,4,1,"_CPPv4N3xAH4Muon10EnergyLossE","xAH::Muon::EnergyLoss"],[128,4,1,"_CPPv4N3xAH4Muon15EnergyLossSigmaE","xAH::Muon::EnergyLossSigma"],[128,4,1,"_CPPv4N3xAH4Muon9IsoEff_SFE","xAH::Muon::IsoEff_SF"],[128,4,1,"_CPPv4N3xAH4Muon14MeasEnergyLossE","xAH::Muon::MeasEnergyLoss"],[128,4,1,"_CPPv4N3xAH4Muon19MeasEnergyLossSigmaE","xAH::Muon::MeasEnergyLossSigma"],[128,4,1,"_CPPv4N3xAH4Muon15ParamEnergyLossE","xAH::Muon::ParamEnergyLoss"],[128,4,1,"_CPPv4N3xAH4Muon25ParamEnergyLossSigmaMinusE","xAH::Muon::ParamEnergyLossSigmaMinus"],[128,4,1,"_CPPv4N3xAH4Muon24ParamEnergyLossSigmaPlusE","xAH::Muon::ParamEnergyLossSigmaPlus"],[128,4,1,"_CPPv4N3xAH4Muon23PromptLeptonInput_DL1muE","xAH::Muon::PromptLeptonInput_DL1mu"],[128,4,1,"_CPPv4N3xAH4Muon22PromptLeptonInput_DRljE","xAH::Muon::PromptLeptonInput_DRlj"],[128,4,1,"_CPPv4N3xAH4Muon30PromptLeptonInput_LepJetPtFracE","xAH::Muon::PromptLeptonInput_LepJetPtFrac"],[128,4,1,"_CPPv4N3xAH4Muon24PromptLeptonInput_PtFracE","xAH::Muon::PromptLeptonInput_PtFrac"],[128,4,1,"_CPPv4N3xAH4Muon23PromptLeptonInput_PtRelE","xAH::Muon::PromptLeptonInput_PtRel"],[128,4,1,"_CPPv4N3xAH4Muon32PromptLeptonInput_TrackJetNTrackE","xAH::Muon::PromptLeptonInput_TrackJetNTrack"],[128,4,1,"_CPPv4N3xAH4Muon21PromptLeptonInput_ip2E","xAH::Muon::PromptLeptonInput_ip2"],[128,4,1,"_CPPv4N3xAH4Muon21PromptLeptonInput_ip3E","xAH::Muon::PromptLeptonInput_ip3"],[128,4,1,"_CPPv4N3xAH4Muon23PromptLeptonInput_rnnipE","xAH::Muon::PromptLeptonInput_rnnip"],[128,4,1,"_CPPv4N3xAH4Muon30PromptLeptonInput_sv1_jf_ntrkvE","xAH::Muon::PromptLeptonInput_sv1_jf_ntrkv"],[128,4,1,"_CPPv4N3xAH4Muon15PromptLeptonIsoE","xAH::Muon::PromptLeptonIso"],[128,4,1,"_CPPv4N3xAH4Muon16PromptLeptonVetoE","xAH::Muon::PromptLeptonVeto"],[128,4,1,"_CPPv4N3xAH4Muon10RecoEff_SFE","xAH::Muon::RecoEff_SF"],[128,4,1,"_CPPv4N3xAH4Muon10TTVAEff_SFE","xAH::Muon::TTVAEff_SF"],[128,4,1,"_CPPv4N3xAH4Muon10TrigEff_SFE","xAH::Muon::TrigEff_SF"],[128,4,1,"_CPPv4N3xAH4Muon9TrigMCEffE","xAH::Muon::TrigMCEff"],[128,4,1,"_CPPv4N3xAH4Muon6chargeE","xAH::Muon::charge"],[128,4,1,"_CPPv4N3xAH4Muon14energyLossTypeE","xAH::Muon::energyLossType"],[128,4,1,"_CPPv4N3xAH4Muon10isIsolatedE","xAH::Muon::isIsolated"],[128,4,1,"_CPPv4N3xAH4Muon5isLRTE","xAH::Muon::isLRT"],[128,4,1,"_CPPv4N3xAH4Muon13isTrigMatchedE","xAH::Muon::isTrigMatched"],[128,4,1,"_CPPv4N3xAH4Muon20isTrigMatchedToChainE","xAH::Muon::isTrigMatchedToChain"],[128,4,1,"_CPPv4N3xAH4Muon14listTrigChainsE","xAH::Muon::listTrigChains"],[128,4,1,"_CPPv4N3xAH4Muon12neflowisol20E","xAH::Muon::neflowisol20"],[128,4,1,"_CPPv4N3xAH4Muon24neflowisol20_CloseByCorrE","xAH::Muon::neflowisol20_CloseByCorr"],[128,4,1,"_CPPv4N3xAH4Muon10passIDcutsE","xAH::Muon::passIDcuts"],[128,4,1,"_CPPv4N3xAH4Muon6passORE","xAH::Muon::passOR"],[128,4,1,"_CPPv4N3xAH4Muon7passSelE","xAH::Muon::passSel"],[128,4,1,"_CPPv4N3xAH4Muon8ptcone20E","xAH::Muon::ptcone20"],[128,4,1,"_CPPv4N3xAH4Muon43ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000E","xAH::Muon::ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000"],[128,4,1,"_CPPv4N3xAH4Muon42ptcone20_Nonprompt_All_MaxWeightTTVA_pt500E","xAH::Muon::ptcone20_Nonprompt_All_MaxWeightTTVA_pt500"],[128,4,1,"_CPPv4N3xAH4Muon8ptcone30E","xAH::Muon::ptcone30"],[128,4,1,"_CPPv4N3xAH4Muon8ptcone40E","xAH::Muon::ptcone40"],[128,4,1,"_CPPv4N3xAH4Muon11ptvarcone20E","xAH::Muon::ptvarcone20"],[128,4,1,"_CPPv4N3xAH4Muon11ptvarcone30E","xAH::Muon::ptvarcone30"],[128,4,1,"_CPPv4N3xAH4Muon46ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000E","xAH::Muon::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000"],[128,4,1,"_CPPv4N3xAH4Muon58ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorrE","xAH::Muon::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr"],[128,4,1,"_CPPv4N3xAH4Muon45ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500E","xAH::Muon::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500"],[128,4,1,"_CPPv4N3xAH4Muon57ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorrE","xAH::Muon::ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr"],[128,4,1,"_CPPv4N3xAH4Muon11ptvarcone40E","xAH::Muon::ptvarcone40"],[128,4,1,"_CPPv4N3xAH4Muon7qualityE","xAH::Muon::quality"],[128,4,1,"_CPPv4N3xAH4Muon12topoetcone20E","xAH::Muon::topoetcone20"],[128,4,1,"_CPPv4N3xAH4Muon24topoetcone20_CloseByCorrE","xAH::Muon::topoetcone20_CloseByCorr"],[128,4,1,"_CPPv4N3xAH4Muon12topoetcone30E","xAH::Muon::topoetcone30"],[128,4,1,"_CPPv4N3xAH4Muon12topoetcone40E","xAH::Muon::topoetcone40"],[128,4,1,"_CPPv4N3xAH4Muon10trkPixdEdXE","xAH::Muon::trkPixdEdX"],[128,4,1,"_CPPv4N3xAH4Muon9trkchargeE","xAH::Muon::trkcharge"],[128,4,1,"_CPPv4N3xAH4Muon5trkd0E","xAH::Muon::trkd0"],[128,4,1,"_CPPv4N3xAH4Muon8trkd0sigE","xAH::Muon::trkd0sig"],[128,4,1,"_CPPv4N3xAH4Muon14trknBLayerHitsE","xAH::Muon::trknBLayerHits"],[128,4,1,"_CPPv4N3xAH4Muon23trknInnermostPixLayHitsE","xAH::Muon::trknInnermostPixLayHits"],[128,4,1,"_CPPv4N3xAH4Muon11trknPixHitsE","xAH::Muon::trknPixHits"],[128,4,1,"_CPPv4N3xAH4Muon12trknPixHolesE","xAH::Muon::trknPixHoles"],[128,4,1,"_CPPv4N3xAH4Muon11trknSCTHitsE","xAH::Muon::trknSCTHits"],[128,4,1,"_CPPv4N3xAH4Muon12trknSCTHolesE","xAH::Muon::trknSCTHoles"],[128,4,1,"_CPPv4N3xAH4Muon10trknSiHitsE","xAH::Muon::trknSiHits"],[128,4,1,"_CPPv4N3xAH4Muon11trknTRTHitsE","xAH::Muon::trknTRTHits"],[128,4,1,"_CPPv4N3xAH4Muon12trknTRTHolesE","xAH::Muon::trknTRTHoles"],[128,4,1,"_CPPv4N3xAH4Muon7trkphi0E","xAH::Muon::trkphi0"],[128,4,1,"_CPPv4N3xAH4Muon9trkqOverPE","xAH::Muon::trkqOverP"],[128,4,1,"_CPPv4N3xAH4Muon8trkthetaE","xAH::Muon::trktheta"],[128,4,1,"_CPPv4N3xAH4Muon5trkz0E","xAH::Muon::trkz0"],[128,4,1,"_CPPv4N3xAH4Muon13trkz0sinthetaE","xAH::Muon::trkz0sintheta"],[128,2,1,"_CPPv4NK3xAH4Muon9vec_eLossEv","xAH::Muon::vec_eLoss"],[129,1,1,"_CPPv4N3xAH13MuonContainerE","xAH::MuonContainer"],[129,2,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon"],[129,2,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon"],[129,3,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon::muon"],[129,3,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon::particle"],[129,3,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD4MuonEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon::primaryVertex"],[129,3,1,"_CPPv4N3xAH13MuonContainer8FillMuonEPKN4xAOD9IParticleEPKN4xAOD6VertexE","xAH::MuonContainer::FillMuon::primaryVertex"],[129,2,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer"],[129,3,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer::detailStr"],[129,3,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer::mc"],[129,3,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer::name"],[129,3,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer::storeSystSFs"],[129,3,1,"_CPPv4N3xAH13MuonContainer13MuonContainerERKNSt6stringERKNSt6stringEfbb","xAH::MuonContainer::MuonContainer::units"],[129,2,1,"_CPPv4N3xAH13MuonContainer5clearEv","xAH::MuonContainer::clear"],[129,2,1,"_CPPv4N3xAH13MuonContainer11setBranchesEP5TTree","xAH::MuonContainer::setBranches"],[129,3,1,"_CPPv4N3xAH13MuonContainer11setBranchesEP5TTree","xAH::MuonContainer::setBranches::tree"],[129,2,1,"_CPPv4N3xAH13MuonContainer7setTreeEP5TTree","xAH::MuonContainer::setTree"],[129,2,1,"_CPPv4N3xAH13MuonContainer7setTreeEP5TTree","xAH::MuonContainer::setTree"],[129,3,1,"_CPPv4N3xAH13MuonContainer7setTreeEP5TTree","xAH::MuonContainer::setTree::tree"],[129,3,1,"_CPPv4N3xAH13MuonContainer7setTreeEP5TTree","xAH::MuonContainer::setTree::tree"],[129,2,1,"_CPPv4N3xAH13MuonContainer14updateParticleE4uintR4Muon","xAH::MuonContainer::updateParticle"],[129,3,1,"_CPPv4N3xAH13MuonContainer14updateParticleE4uintR4Muon","xAH::MuonContainer::updateParticle::idx"],[129,3,1,"_CPPv4N3xAH13MuonContainer14updateParticleE4uintR4Muon","xAH::MuonContainer::updateParticle::muon"],[129,2,1,"_CPPv4N3xAH13MuonContainerD0Ev","xAH::MuonContainer::~MuonContainer"],[130,1,1,"_CPPv4N3xAH18OnlineBeamSpotToolE","xAH::OnlineBeamSpotTool"],[130,7,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSDataE","xAH::OnlineBeamSpotTool::BSData"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSxE","xAH::OnlineBeamSpotTool::BSData::BSx"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSyE","xAH::OnlineBeamSpotTool::BSData::BSy"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSzE","xAH::OnlineBeamSpotTool::BSData::BSz"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSxE","xAH::OnlineBeamSpotTool::BSx"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSyE","xAH::OnlineBeamSpotTool::BSy"],[130,8,1,"_CPPv4N3xAH18OnlineBeamSpotTool6BSData3BSzE","xAH::OnlineBeamSpotTool::BSz"],[552,1,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBDataE","xAH::OnlineBeamSpotTool::LBData"],[552,2,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData"],[552,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData::BSx"],[552,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData::BSy"],[552,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData::BSz"],[552,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData::LBEnd"],[552,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData6LBDataEiifff","xAH::OnlineBeamSpotTool::LBData::LBData::LBStart"],[552,4,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData5m_BSxE","xAH::OnlineBeamSpotTool::LBData::m_BSx"],[552,4,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData5m_BSyE","xAH::OnlineBeamSpotTool::LBData::m_BSy"],[552,4,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData5m_BSzE","xAH::OnlineBeamSpotTool::LBData::m_BSz"],[552,4,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData7m_LBEndE","xAH::OnlineBeamSpotTool::LBData::m_LBEnd"],[552,4,1,"_CPPv4N3xAH18OnlineBeamSpotTool6LBData9m_LBStartE","xAH::OnlineBeamSpotTool::LBData::m_LBStart"],[130,2,1,"_CPPv4N3xAH18OnlineBeamSpotTool18OnlineBeamSpotToolEv","xAH::OnlineBeamSpotTool::OnlineBeamSpotTool"],[130,2,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN3xAH9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo"],[130,2,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN4xAOD9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo"],[130,2,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEiib6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN3xAH9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::datakey"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN4xAOD9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::datakey"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEiib6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::datakey"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN3xAH9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::eventInfo"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEPKN4xAOD9EventInfoE6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::eventInfo"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEiib6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::isMC"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEiib6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::lumiBlock"],[130,3,1,"_CPPv4N3xAH18OnlineBeamSpotTool15getOnlineBSInfoEiib6BSData","xAH::OnlineBeamSpotTool::getOnlineBSInfo::runNumber"],[130,2,1,"_CPPv4N3xAH18OnlineBeamSpotToolD0Ev","xAH::OnlineBeamSpotTool::~OnlineBeamSpotTool"],[131,1,1,"_CPPv4N3xAH8ParticleE","xAH::Particle"],[131,4,1,"_CPPv4N3xAH8Particle2p4E","xAH::Particle::p4"],[131,2,1,"_CPPv4N3xAH8ParticleD0Ev","xAH::Particle::~Particle"],[132,1,1,"_CPPv4I00EN3xAH17ParticleContainerE","xAH::ParticleContainer"],[132,2,1,"_CPPv4N3xAH17ParticleContainer12FillParticleEPKN4xAOD9IParticleE","xAH::ParticleContainer::FillParticle"],[132,3,1,"_CPPv4N3xAH17ParticleContainer12FillParticleEPKN4xAOD9IParticleE","xAH::ParticleContainer::FillParticle::particle"],[132,2,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::detailStr"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::mc"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::name"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::storeSystSFs"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::suffix"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::units"],[132,3,1,"_CPPv4N3xAH17ParticleContainer17ParticleContainerERKNSt6stringERKNSt6stringEfbbbRKNSt6stringE","xAH::ParticleContainer::ParticleContainer::useMass"],[132,5,1,"_CPPv4I00EN3xAH17ParticleContainerE","xAH::ParticleContainer::T_INFOSWITCH"],[132,5,1,"_CPPv4I00EN3xAH17ParticleContainerE","xAH::ParticleContainer::T_PARTICLE"],[132,2,1,"_CPPv4NK3xAH17ParticleContainer2atE4uint","xAH::ParticleContainer::at"],[132,3,1,"_CPPv4NK3xAH17ParticleContainer2atE4uint","xAH::ParticleContainer::at::idx"],[132,2,1,"_CPPv4N3xAH17ParticleContainer11at_nonConstE4uint","xAH::ParticleContainer::at_nonConst"],[132,3,1,"_CPPv4N3xAH17ParticleContainer11at_nonConstE4uint","xAH::ParticleContainer::at_nonConst::idx"],[132,2,1,"_CPPv4N3xAH17ParticleContainer10branchNameERKNSt6stringE","xAH::ParticleContainer::branchName"],[132,3,1,"_CPPv4N3xAH17ParticleContainer10branchNameERKNSt6stringE","xAH::ParticleContainer::branchName::varName"],[132,2,1,"_CPPv4N3xAH17ParticleContainer5clearEv","xAH::ParticleContainer::clear"],[132,2,1,"_CPPv4I0EN3xAH17ParticleContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::ParticleContainer::connectBranch"],[132,5,1,"_CPPv4I0EN3xAH17ParticleContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::ParticleContainer::connectBranch::T_BR"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::ParticleContainer::connectBranch::branch"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::ParticleContainer::connectBranch::tree"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::ParticleContainer::connectBranch::variable"],[132,4,1,"_CPPv4N3xAH17ParticleContainer7m_debugE","xAH::ParticleContainer::m_debug"],[132,4,1,"_CPPv4N3xAH17ParticleContainer12m_infoSwitchE","xAH::ParticleContainer::m_infoSwitch"],[132,4,1,"_CPPv4N3xAH17ParticleContainer4m_mcE","xAH::ParticleContainer::m_mc"],[132,4,1,"_CPPv4N3xAH17ParticleContainer3m_nE","xAH::ParticleContainer::m_n"],[132,4,1,"_CPPv4N3xAH17ParticleContainer6m_nameE","xAH::ParticleContainer::m_name"],[132,4,1,"_CPPv4N3xAH17ParticleContainer11m_particlesE","xAH::ParticleContainer::m_particles"],[132,4,1,"_CPPv4N3xAH17ParticleContainer14m_storeSystSFsE","xAH::ParticleContainer::m_storeSystSFs"],[132,4,1,"_CPPv4N3xAH17ParticleContainer7m_unitsE","xAH::ParticleContainer::m_units"],[132,2,1,"_CPPv4NK3xAH17ParticleContainerixE4uint","xAH::ParticleContainer::operator[]"],[132,3,1,"_CPPv4NK3xAH17ParticleContainerixE4uint","xAH::ParticleContainer::operator[]::idx"],[132,2,1,"_CPPv4N3xAH17ParticleContainer9particlesEv","xAH::ParticleContainer::particles"],[132,2,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::T"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::U"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::V"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::accessor"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::defaultValue"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::destination"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::units"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer8safeFillEvPK1VRN2SG10AuxElement13ConstAccessorI1TEEPNSt6vectorI1UEE1Ui","xAH::ParticleContainer::safeFill::xAODObj"],[132,2,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill"],[132,5,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::T"],[132,5,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::V"],[132,3,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::accessor"],[132,3,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::defaultValue"],[132,3,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::destination"],[132,3,1,"_CPPv4I00EN3xAH17ParticleContainer13safeSFVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1TEEEERKNSt6vectorI1TEE","xAH::ParticleContainer::safeSFVecFill::xAODObj"],[132,2,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::T"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::U"],[132,5,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::V"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::accessor"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::destination"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::units"],[132,3,1,"_CPPv4I000EN3xAH17ParticleContainer11safeVecFillEvPK1VRN2SG10AuxElement13ConstAccessorINSt6vectorI1TEEEEPNSt6vectorINSt6vectorI1UEEEEi","xAH::ParticleContainer::safeVecFill::xAODObj"],[132,2,1,"_CPPv4I0EN3xAH17ParticleContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::ParticleContainer::setBranch"],[132,5,1,"_CPPv4I0EN3xAH17ParticleContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::ParticleContainer::setBranch::T"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::ParticleContainer::setBranch::localVectorPtr"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::ParticleContainer::setBranch::tree"],[132,3,1,"_CPPv4I0EN3xAH17ParticleContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::ParticleContainer::setBranch::varName"],[132,2,1,"_CPPv4N3xAH17ParticleContainer11setBranchesEP5TTree","xAH::ParticleContainer::setBranches"],[132,3,1,"_CPPv4N3xAH17ParticleContainer11setBranchesEP5TTree","xAH::ParticleContainer::setBranches::tree"],[132,2,1,"_CPPv4N3xAH17ParticleContainer7setTreeEP5TTree","xAH::ParticleContainer::setTree"],[132,3,1,"_CPPv4N3xAH17ParticleContainer7setTreeEP5TTree","xAH::ParticleContainer::setTree::tree"],[132,2,1,"_CPPv4NK3xAH17ParticleContainer4sizeEv","xAH::ParticleContainer::size"],[132,2,1,"_CPPv4N3xAH17ParticleContainer11updateEntryEv","xAH::ParticleContainer::updateEntry"],[132,2,1,"_CPPv4N3xAH17ParticleContainer14updateParticleE4uintR10T_PARTICLE","xAH::ParticleContainer::updateParticle"],[132,3,1,"_CPPv4N3xAH17ParticleContainer14updateParticleE4uintR10T_PARTICLE","xAH::ParticleContainer::updateParticle::idx"],[132,3,1,"_CPPv4N3xAH17ParticleContainer14updateParticleE4uintR10T_PARTICLE","xAH::ParticleContainer::updateParticle::particle"],[132,2,1,"_CPPv4N3xAH17ParticleContainerD0Ev","xAH::ParticleContainer::~ParticleContainer"],[133,1,1,"_CPPv4N3xAH6PhotonE","xAH::Photon"],[133,4,1,"_CPPv4N3xAH6Photon7IsLooseE","xAH::Photon::IsLoose"],[133,4,1,"_CPPv4N3xAH6Photon8IsMediumE","xAH::Photon::IsMedium"],[133,4,1,"_CPPv4N3xAH6Photon7IsTightE","xAH::Photon::IsTight"],[133,4,1,"_CPPv4N3xAH6Photon10LooseEffSFE","xAH::Photon::LooseEffSF"],[133,4,1,"_CPPv4N3xAH6Photon16LooseEffSF_ErrorE","xAH::Photon::LooseEffSF_Error"],[133,4,1,"_CPPv4N3xAH6Photon11MediumEffSFE","xAH::Photon::MediumEffSF"],[133,4,1,"_CPPv4N3xAH6Photon17MediumEffSF_ErrorE","xAH::Photon::MediumEffSF_Error"],[133,4,1,"_CPPv4N3xAH6Photon10TightEffSFE","xAH::Photon::TightEffSF"],[133,4,1,"_CPPv4N3xAH6Photon16TightEffSF_ErrorE","xAH::Photon::TightEffSF_Error"],[133,4,1,"_CPPv4N3xAH6Photon6deltaeE","xAH::Photon::deltae"],[133,4,1,"_CPPv4N3xAH6Photon4e277E","xAH::Photon::e277"],[133,4,1,"_CPPv4N3xAH6Photon6eratioE","xAH::Photon::eratio"],[133,4,1,"_CPPv4N3xAH6Photon2f1E","xAH::Photon::f1"],[133,4,1,"_CPPv4N3xAH6Photon17isIsolated_Cone20E","xAH::Photon::isIsolated_Cone20"],[133,4,1,"_CPPv4N3xAH6Photon17isIsolated_Cone40E","xAH::Photon::isIsolated_Cone40"],[133,4,1,"_CPPv4N3xAH6Photon25isIsolated_Cone40CaloOnlyE","xAH::Photon::isIsolated_Cone40CaloOnly"],[133,4,1,"_CPPv4N3xAH6Photon8ptcone20E","xAH::Photon::ptcone20"],[133,4,1,"_CPPv4N3xAH6Photon8ptcone30E","xAH::Photon::ptcone30"],[133,4,1,"_CPPv4N3xAH6Photon8ptcone40E","xAH::Photon::ptcone40"],[133,4,1,"_CPPv4N3xAH6Photon11ptvarcone20E","xAH::Photon::ptvarcone20"],[133,4,1,"_CPPv4N3xAH6Photon11ptvarcone30E","xAH::Photon::ptvarcone30"],[133,4,1,"_CPPv4N3xAH6Photon11ptvarcone40E","xAH::Photon::ptvarcone40"],[133,4,1,"_CPPv4N3xAH6Photon6radhadE","xAH::Photon::radhad"],[133,4,1,"_CPPv4N3xAH6Photon7radhad1E","xAH::Photon::radhad1"],[133,4,1,"_CPPv4N3xAH6Photon4retaE","xAH::Photon::reta"],[133,4,1,"_CPPv4N3xAH6Photon4rphiE","xAH::Photon::rphi"],[133,4,1,"_CPPv4N3xAH6Photon12topoetcone20E","xAH::Photon::topoetcone20"],[133,4,1,"_CPPv4N3xAH6Photon12topoetcone30E","xAH::Photon::topoetcone30"],[133,4,1,"_CPPv4N3xAH6Photon12topoetcone40E","xAH::Photon::topoetcone40"],[133,4,1,"_CPPv4N3xAH6Photon11trigMatchedE","xAH::Photon::trigMatched"],[133,4,1,"_CPPv4N3xAH6Photon5weta2E","xAH::Photon::weta2"],[133,4,1,"_CPPv4N3xAH6Photon4wtotE","xAH::Photon::wtot"],[134,1,1,"_CPPv4N3xAH15PhotonContainerE","xAH::PhotonContainer"],[134,2,1,"_CPPv4N3xAH15PhotonContainer10FillPhotonEPKN4xAOD6PhotonE","xAH::PhotonContainer::FillPhoton"],[134,2,1,"_CPPv4N3xAH15PhotonContainer10FillPhotonEPKN4xAOD9IParticleE","xAH::PhotonContainer::FillPhoton"],[134,3,1,"_CPPv4N3xAH15PhotonContainer10FillPhotonEPKN4xAOD9IParticleE","xAH::PhotonContainer::FillPhoton::particle"],[134,3,1,"_CPPv4N3xAH15PhotonContainer10FillPhotonEPKN4xAOD6PhotonE","xAH::PhotonContainer::FillPhoton::photon"],[134,2,1,"_CPPv4N3xAH15PhotonContainer15PhotonContainerERKNSt6stringERKNSt6stringEfb","xAH::PhotonContainer::PhotonContainer"],[134,3,1,"_CPPv4N3xAH15PhotonContainer15PhotonContainerERKNSt6stringERKNSt6stringEfb","xAH::PhotonContainer::PhotonContainer::detailStr"],[134,3,1,"_CPPv4N3xAH15PhotonContainer15PhotonContainerERKNSt6stringERKNSt6stringEfb","xAH::PhotonContainer::PhotonContainer::mc"],[134,3,1,"_CPPv4N3xAH15PhotonContainer15PhotonContainerERKNSt6stringERKNSt6stringEfb","xAH::PhotonContainer::PhotonContainer::name"],[134,3,1,"_CPPv4N3xAH15PhotonContainer15PhotonContainerERKNSt6stringERKNSt6stringEfb","xAH::PhotonContainer::PhotonContainer::units"],[134,2,1,"_CPPv4N3xAH15PhotonContainer5clearEv","xAH::PhotonContainer::clear"],[134,2,1,"_CPPv4N3xAH15PhotonContainer11setBranchesEP5TTree","xAH::PhotonContainer::setBranches"],[134,3,1,"_CPPv4N3xAH15PhotonContainer11setBranchesEP5TTree","xAH::PhotonContainer::setBranches::tree"],[134,2,1,"_CPPv4N3xAH15PhotonContainer7setTreeEP5TTree","xAH::PhotonContainer::setTree"],[134,2,1,"_CPPv4N3xAH15PhotonContainer7setTreeEP5TTree","xAH::PhotonContainer::setTree"],[134,3,1,"_CPPv4N3xAH15PhotonContainer7setTreeEP5TTree","xAH::PhotonContainer::setTree::tree"],[134,3,1,"_CPPv4N3xAH15PhotonContainer7setTreeEP5TTree","xAH::PhotonContainer::setTree::tree"],[134,2,1,"_CPPv4N3xAH15PhotonContainer14updateParticleE4uintR6Photon","xAH::PhotonContainer::updateParticle"],[134,3,1,"_CPPv4N3xAH15PhotonContainer14updateParticleE4uintR6Photon","xAH::PhotonContainer::updateParticle::idx"],[134,3,1,"_CPPv4N3xAH15PhotonContainer14updateParticleE4uintR6Photon","xAH::PhotonContainer::updateParticle::photon"],[134,2,1,"_CPPv4N3xAH15PhotonContainerD0Ev","xAH::PhotonContainer::~PhotonContainer"],[135,1,1,"_CPPv4N3xAH3TauE","xAH::Tau"],[135,4,1,"_CPPv4N3xAH3Tau11EleRNNScoreE","xAH::Tau::EleRNNScore"],[135,4,1,"_CPPv4N3xAH3Tau11JetRNNScoreE","xAH::Tau::JetRNNScore"],[135,4,1,"_CPPv4N3xAH3Tau19JetRNNScoreSigTransE","xAH::Tau::JetRNNScoreSigTrans"],[135,4,1,"_CPPv4N3xAH3Tau9TauEff_SFE","xAH::Tau::TauEff_SF"],[135,4,1,"_CPPv4N3xAH3Tau13TauTrigEff_SFE","xAH::Tau::TauTrigEff_SF"],[135,4,1,"_CPPv4N3xAH3Tau6chargeE","xAH::Tau::charge"],[135,4,1,"_CPPv4N3xAH3Tau13isEleRNNLooseE","xAH::Tau::isEleRNNLoose"],[135,4,1,"_CPPv4N3xAH3Tau14isEleRNNMediumE","xAH::Tau::isEleRNNMedium"],[135,4,1,"_CPPv4N3xAH3Tau13isEleRNNTightE","xAH::Tau::isEleRNNTight"],[135,4,1,"_CPPv4N3xAH3Tau16isJetRNNSigLooseE","xAH::Tau::isJetRNNSigLoose"],[135,4,1,"_CPPv4N3xAH3Tau17isJetRNNSigMediumE","xAH::Tau::isJetRNNSigMedium"],[135,4,1,"_CPPv4N3xAH3Tau16isJetRNNSigTightE","xAH::Tau::isJetRNNSigTight"],[135,4,1,"_CPPv4N3xAH3Tau20isJetRNNSigVeryLooseE","xAH::Tau::isJetRNNSigVeryLoose"],[135,4,1,"_CPPv4N3xAH3Tau13isTrigMatchedE","xAH::Tau::isTrigMatched"],[135,4,1,"_CPPv4N3xAH3Tau20isTrigMatchedToChainE","xAH::Tau::isTrigMatchedToChain"],[135,4,1,"_CPPv4N3xAH3Tau14listTrigChainsE","xAH::Tau::listTrigChains"],[135,4,1,"_CPPv4N3xAH3Tau13matchedJetJvtE","xAH::Tau::matchedJetJvt"],[135,4,1,"_CPPv4N3xAH3Tau15matchedJetWidthE","xAH::Tau::matchedJetWidth"],[135,4,1,"_CPPv4N3xAH3Tau4ntrkE","xAH::Tau::ntrk"],[135,4,1,"_CPPv4N3xAH3Tau10passEleOLRE","xAH::Tau::passEleOLR"],[135,4,1,"_CPPv4N3xAH3Tau10tracks_etaE","xAH::Tau::tracks_eta"],[135,4,1,"_CPPv4N3xAH3Tau22tracks_failTrackFilterE","xAH::Tau::tracks_failTrackFilter"],[135,4,1,"_CPPv4N3xAH3Tau18tracks_isClChargedE","xAH::Tau::tracks_isClCharged"],[135,4,1,"_CPPv4N3xAH3Tau15tracks_isClConvE","xAH::Tau::tracks_isClConv"],[135,4,1,"_CPPv4N3xAH3Tau15tracks_isClFakeE","xAH::Tau::tracks_isClFake"],[135,4,1,"_CPPv4N3xAH3Tau14tracks_isClIsoE","xAH::Tau::tracks_isClIso"],[135,4,1,"_CPPv4N3xAH3Tau13tracks_isCoreE","xAH::Tau::tracks_isCore"],[135,4,1,"_CPPv4N3xAH3Tau13tracks_isWideE","xAH::Tau::tracks_isWide"],[135,4,1,"_CPPv4N3xAH3Tau17tracks_passTrkSelE","xAH::Tau::tracks_passTrkSel"],[135,4,1,"_CPPv4N3xAH3Tau10tracks_phiE","xAH::Tau::tracks_phi"],[135,4,1,"_CPPv4N3xAH3Tau9tracks_ptE","xAH::Tau::tracks_pt"],[136,1,1,"_CPPv4N3xAH12TauContainerE","xAH::TauContainer"],[136,2,1,"_CPPv4N3xAH12TauContainer7FillTauEPKN4xAOD6TauJetE","xAH::TauContainer::FillTau"],[136,2,1,"_CPPv4N3xAH12TauContainer7FillTauEPKN4xAOD9IParticleE","xAH::TauContainer::FillTau"],[136,3,1,"_CPPv4N3xAH12TauContainer7FillTauEPKN4xAOD9IParticleE","xAH::TauContainer::FillTau::particle"],[136,3,1,"_CPPv4N3xAH12TauContainer7FillTauEPKN4xAOD6TauJetE","xAH::TauContainer::FillTau::tau"],[136,2,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer"],[136,3,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer::detailStr"],[136,3,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer::mc"],[136,3,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer::name"],[136,3,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer::storeSystSFs"],[136,3,1,"_CPPv4N3xAH12TauContainer12TauContainerERKNSt6stringERKNSt6stringEfbb","xAH::TauContainer::TauContainer::units"],[136,2,1,"_CPPv4N3xAH12TauContainer5clearEv","xAH::TauContainer::clear"],[136,2,1,"_CPPv4N3xAH12TauContainer11setBranchesEP5TTree","xAH::TauContainer::setBranches"],[136,3,1,"_CPPv4N3xAH12TauContainer11setBranchesEP5TTree","xAH::TauContainer::setBranches::tree"],[136,2,1,"_CPPv4N3xAH12TauContainer7setTreeEP5TTree","xAH::TauContainer::setTree"],[136,2,1,"_CPPv4N3xAH12TauContainer7setTreeEP5TTree","xAH::TauContainer::setTree"],[136,3,1,"_CPPv4N3xAH12TauContainer7setTreeEP5TTree","xAH::TauContainer::setTree::tree"],[136,3,1,"_CPPv4N3xAH12TauContainer7setTreeEP5TTree","xAH::TauContainer::setTree::tree"],[136,2,1,"_CPPv4N3xAH12TauContainer14updateParticleE4uintR3Tau","xAH::TauContainer::updateParticle"],[136,3,1,"_CPPv4N3xAH12TauContainer14updateParticleE4uintR3Tau","xAH::TauContainer::updateParticle::idx"],[136,3,1,"_CPPv4N3xAH12TauContainer14updateParticleE4uintR3Tau","xAH::TauContainer::updateParticle::tau"],[136,2,1,"_CPPv4N3xAH12TauContainerD0Ev","xAH::TauContainer::~TauContainer"],[137,1,1,"_CPPv4N3xAH14TrackContainerE","xAH::TrackContainer"],[137,2,1,"_CPPv4N3xAH14TrackContainer9FillTrackEPKN4xAOD13TrackParticleE","xAH::TrackContainer::FillTrack"],[137,2,1,"_CPPv4N3xAH14TrackContainer9FillTrackEPKN4xAOD9IParticleE","xAH::TrackContainer::FillTrack"],[137,3,1,"_CPPv4N3xAH14TrackContainer9FillTrackEPKN4xAOD9IParticleE","xAH::TrackContainer::FillTrack::particle"],[137,3,1,"_CPPv4N3xAH14TrackContainer9FillTrackEPKN4xAOD13TrackParticleE","xAH::TrackContainer::FillTrack::track"],[137,2,1,"_CPPv4N3xAH14TrackContainer14TrackContainerERKNSt6stringERKNSt6stringEf","xAH::TrackContainer::TrackContainer"],[137,3,1,"_CPPv4N3xAH14TrackContainer14TrackContainerERKNSt6stringERKNSt6stringEf","xAH::TrackContainer::TrackContainer::detailStr"],[137,3,1,"_CPPv4N3xAH14TrackContainer14TrackContainerERKNSt6stringERKNSt6stringEf","xAH::TrackContainer::TrackContainer::name"],[137,3,1,"_CPPv4N3xAH14TrackContainer14TrackContainerERKNSt6stringERKNSt6stringEf","xAH::TrackContainer::TrackContainer::units"],[137,2,1,"_CPPv4N3xAH14TrackContainer5clearEv","xAH::TrackContainer::clear"],[137,2,1,"_CPPv4N3xAH14TrackContainer11setBranchesEP5TTree","xAH::TrackContainer::setBranches"],[137,3,1,"_CPPv4N3xAH14TrackContainer11setBranchesEP5TTree","xAH::TrackContainer::setBranches::tree"],[137,2,1,"_CPPv4N3xAH14TrackContainer7setTreeEP5TTree","xAH::TrackContainer::setTree"],[137,2,1,"_CPPv4N3xAH14TrackContainer7setTreeEP5TTree","xAH::TrackContainer::setTree"],[137,3,1,"_CPPv4N3xAH14TrackContainer7setTreeEP5TTree","xAH::TrackContainer::setTree::tree"],[137,3,1,"_CPPv4N3xAH14TrackContainer7setTreeEP5TTree","xAH::TrackContainer::setTree::tree"],[137,2,1,"_CPPv4N3xAH14TrackContainer14updateParticleE4uintR9TrackPart","xAH::TrackContainer::updateParticle"],[137,3,1,"_CPPv4N3xAH14TrackContainer14updateParticleE4uintR9TrackPart","xAH::TrackContainer::updateParticle::idx"],[137,3,1,"_CPPv4N3xAH14TrackContainer14updateParticleE4uintR9TrackPart","xAH::TrackContainer::updateParticle::track"],[137,2,1,"_CPPv4N3xAH14TrackContainerD0Ev","xAH::TrackContainer::~TrackContainer"],[138,1,1,"_CPPv4N3xAH9TrackPartE","xAH::TrackPart"],[138,4,1,"_CPPv4N3xAH9TrackPart10chiSquaredE","xAH::TrackPart::chiSquared"],[138,4,1,"_CPPv4N3xAH9TrackPart2d0E","xAH::TrackPart::d0"],[138,4,1,"_CPPv4N3xAH9TrackPart27definingParametersCovMatrixE","xAH::TrackPart::definingParametersCovMatrix"],[138,4,1,"_CPPv4N3xAH9TrackPart28expectInnermostPixelLayerHitE","xAH::TrackPart::expectInnermostPixelLayerHit"],[138,4,1,"_CPPv4N3xAH9TrackPart34expectNextToInnermostPixelLayerHitE","xAH::TrackPart::expectNextToInnermostPixelLayerHit"],[138,4,1,"_CPPv4N3xAH9TrackPart9numberDoFE","xAH::TrackPart::numberDoF"],[138,4,1,"_CPPv4N3xAH9TrackPart31numberOfInnermostPixelLayerHitsE","xAH::TrackPart::numberOfInnermostPixelLayerHits"],[138,4,1,"_CPPv4N3xAH9TrackPart37numberOfNextToInnermostPixelLayerHitsE","xAH::TrackPart::numberOfNextToInnermostPixelLayerHits"],[138,4,1,"_CPPv4N3xAH9TrackPart21numberOfPhiHoleLayersE","xAH::TrackPart::numberOfPhiHoleLayers"],[138,4,1,"_CPPv4N3xAH9TrackPart17numberOfPhiLayersE","xAH::TrackPart::numberOfPhiLayers"],[138,4,1,"_CPPv4N3xAH9TrackPart24numberOfPixelDeadSensorsE","xAH::TrackPart::numberOfPixelDeadSensors"],[138,4,1,"_CPPv4N3xAH9TrackPart17numberOfPixelHitsE","xAH::TrackPart::numberOfPixelHits"],[138,4,1,"_CPPv4N3xAH9TrackPart18numberOfPixelHolesE","xAH::TrackPart::numberOfPixelHoles"],[138,4,1,"_CPPv4N3xAH9TrackPart23numberOfPixelSharedHitsE","xAH::TrackPart::numberOfPixelSharedHits"],[138,4,1,"_CPPv4N3xAH9TrackPart27numberOfPrecisionHoleLayersE","xAH::TrackPart::numberOfPrecisionHoleLayers"],[138,4,1,"_CPPv4N3xAH9TrackPart23numberOfPrecisionLayersE","xAH::TrackPart::numberOfPrecisionLayers"],[138,4,1,"_CPPv4N3xAH9TrackPart22numberOfSCTDeadSensorsE","xAH::TrackPart::numberOfSCTDeadSensors"],[138,4,1,"_CPPv4N3xAH9TrackPart15numberOfSCTHitsE","xAH::TrackPart::numberOfSCTHits"],[138,4,1,"_CPPv4N3xAH9TrackPart16numberOfSCTHolesE","xAH::TrackPart::numberOfSCTHoles"],[138,4,1,"_CPPv4N3xAH9TrackPart21numberOfSCTSharedHitsE","xAH::TrackPart::numberOfSCTSharedHits"],[138,4,1,"_CPPv4N3xAH9TrackPart15numberOfTRTHitsE","xAH::TrackPart::numberOfTRTHits"],[138,4,1,"_CPPv4N3xAH9TrackPart19numberOfTRTOutliersE","xAH::TrackPart::numberOfTRTOutliers"],[138,4,1,"_CPPv4N3xAH9TrackPart3phiE","xAH::TrackPart::phi"],[138,4,1,"_CPPv4N3xAH9TrackPart6qOverPE","xAH::TrackPart::qOverP"],[138,4,1,"_CPPv4N3xAH9TrackPart5thetaE","xAH::TrackPart::theta"],[138,4,1,"_CPPv4N3xAH9TrackPart10vertexLinkE","xAH::TrackPart::vertexLink"],[138,4,1,"_CPPv4N3xAH9TrackPart20vertexLink_persIndexE","xAH::TrackPart::vertexLink_persIndex"],[138,4,1,"_CPPv4N3xAH9TrackPart18vertexLink_persKeyE","xAH::TrackPart::vertexLink_persKey"],[138,4,1,"_CPPv4N3xAH9TrackPart2vzE","xAH::TrackPart::vz"],[138,4,1,"_CPPv4N3xAH9TrackPart2z0E","xAH::TrackPart::z0"],[139,1,1,"_CPPv4N3xAH14TruthContainerE","xAH::TruthContainer"],[139,2,1,"_CPPv4N3xAH14TruthContainer9FillTruthEPKN4xAOD13TruthParticleE","xAH::TruthContainer::FillTruth"],[139,2,1,"_CPPv4N3xAH14TruthContainer9FillTruthEPKN4xAOD9IParticleE","xAH::TruthContainer::FillTruth"],[139,3,1,"_CPPv4N3xAH14TruthContainer9FillTruthEPKN4xAOD9IParticleE","xAH::TruthContainer::FillTruth::particle"],[139,3,1,"_CPPv4N3xAH14TruthContainer9FillTruthEPKN4xAOD13TruthParticleE","xAH::TruthContainer::FillTruth::truth"],[139,2,1,"_CPPv4N3xAH14TruthContainer14TruthContainerERKNSt6stringERKNSt6stringEf","xAH::TruthContainer::TruthContainer"],[139,3,1,"_CPPv4N3xAH14TruthContainer14TruthContainerERKNSt6stringERKNSt6stringEf","xAH::TruthContainer::TruthContainer::detailStr"],[139,3,1,"_CPPv4N3xAH14TruthContainer14TruthContainerERKNSt6stringERKNSt6stringEf","xAH::TruthContainer::TruthContainer::name"],[139,3,1,"_CPPv4N3xAH14TruthContainer14TruthContainerERKNSt6stringERKNSt6stringEf","xAH::TruthContainer::TruthContainer::units"],[139,2,1,"_CPPv4N3xAH14TruthContainer5clearEv","xAH::TruthContainer::clear"],[139,2,1,"_CPPv4N3xAH14TruthContainer11setBranchesEP5TTree","xAH::TruthContainer::setBranches"],[139,3,1,"_CPPv4N3xAH14TruthContainer11setBranchesEP5TTree","xAH::TruthContainer::setBranches::tree"],[139,2,1,"_CPPv4N3xAH14TruthContainer7setTreeEP5TTree","xAH::TruthContainer::setTree"],[139,2,1,"_CPPv4N3xAH14TruthContainer7setTreeEP5TTree","xAH::TruthContainer::setTree"],[139,3,1,"_CPPv4N3xAH14TruthContainer7setTreeEP5TTree","xAH::TruthContainer::setTree::tree"],[139,3,1,"_CPPv4N3xAH14TruthContainer7setTreeEP5TTree","xAH::TruthContainer::setTree::tree"],[139,2,1,"_CPPv4N3xAH14TruthContainer14updateParticleE4uintR9TruthPart","xAH::TruthContainer::updateParticle"],[139,3,1,"_CPPv4N3xAH14TruthContainer14updateParticleE4uintR9TruthPart","xAH::TruthContainer::updateParticle::idx"],[139,3,1,"_CPPv4N3xAH14TruthContainer14updateParticleE4uintR9TruthPart","xAH::TruthContainer::updateParticle::truth"],[139,2,1,"_CPPv4N3xAH14TruthContainerD0Ev","xAH::TruthContainer::~TruthContainer"],[140,1,1,"_CPPv4N3xAH9TruthPartE","xAH::TruthPart"],[140,4,1,"_CPPv4N3xAH9TruthPart8Bdecay_xE","xAH::TruthPart::Bdecay_x"],[140,4,1,"_CPPv4N3xAH9TruthPart8Bdecay_yE","xAH::TruthPart::Bdecay_y"],[140,4,1,"_CPPv4N3xAH9TruthPart8Bdecay_zE","xAH::TruthPart::Bdecay_z"],[140,4,1,"_CPPv4N3xAH9TruthPart7barcodeE","xAH::TruthPart::barcode"],[140,4,1,"_CPPv4N3xAH9TruthPart13child_barcodeE","xAH::TruthPart::child_barcode"],[140,4,1,"_CPPv4N3xAH9TruthPart11child_pdgIdE","xAH::TruthPart::child_pdgId"],[140,4,1,"_CPPv4N3xAH9TruthPart12child_statusE","xAH::TruthPart::child_status"],[140,4,1,"_CPPv4N3xAH9TruthPart9e_dressedE","xAH::TruthPart::e_dressed"],[140,4,1,"_CPPv4N3xAH9TruthPart11eta_dressedE","xAH::TruthPart::eta_dressed"],[140,4,1,"_CPPv4N3xAH9TruthPart7is_bhadE","xAH::TruthPart::is_bhad"],[140,4,1,"_CPPv4N3xAH9TruthPart8is_higgsE","xAH::TruthPart::is_higgs"],[140,4,1,"_CPPv4N3xAH9TruthPart9nChildrenE","xAH::TruthPart::nChildren"],[140,4,1,"_CPPv4N3xAH9TruthPart8nParentsE","xAH::TruthPart::nParents"],[140,4,1,"_CPPv4N3xAH9TruthPart6originE","xAH::TruthPart::origin"],[140,4,1,"_CPPv4N3xAH9TruthPart14parent_barcodeE","xAH::TruthPart::parent_barcode"],[140,4,1,"_CPPv4N3xAH9TruthPart12parent_pdgIdE","xAH::TruthPart::parent_pdgId"],[140,4,1,"_CPPv4N3xAH9TruthPart13parent_statusE","xAH::TruthPart::parent_status"],[140,4,1,"_CPPv4N3xAH9TruthPart5pdgIdE","xAH::TruthPart::pdgId"],[140,4,1,"_CPPv4N3xAH9TruthPart11phi_dressedE","xAH::TruthPart::phi_dressed"],[140,4,1,"_CPPv4N3xAH9TruthPart10pt_dressedE","xAH::TruthPart::pt_dressed"],[140,4,1,"_CPPv4N3xAH9TruthPart6statusE","xAH::TruthPart::status"],[140,4,1,"_CPPv4N3xAH9TruthPart4typeE","xAH::TruthPart::type"],[141,1,1,"_CPPv4N3xAH15VertexContainerE","xAH::VertexContainer"],[141,2,1,"_CPPv4N3xAH15VertexContainer17FillTruthVerticesEPKN4xAOD20TruthVertexContainerE","xAH::VertexContainer::FillTruthVertices"],[141,3,1,"_CPPv4N3xAH15VertexContainer17FillTruthVerticesEPKN4xAOD20TruthVertexContainerE","xAH::VertexContainer::FillTruthVertices::truthVertices"],[141,2,1,"_CPPv4N3xAH15VertexContainer12FillVerticesEPKN4xAOD15VertexContainerE","xAH::VertexContainer::FillVertices"],[141,3,1,"_CPPv4N3xAH15VertexContainer12FillVerticesEPKN4xAOD15VertexContainerE","xAH::VertexContainer::FillVertices::vertices"],[141,2,1,"_CPPv4N3xAH15VertexContainer15VertexContainerERKNSt6stringERKNSt6stringE","xAH::VertexContainer::VertexContainer"],[141,3,1,"_CPPv4N3xAH15VertexContainer15VertexContainerERKNSt6stringERKNSt6stringE","xAH::VertexContainer::VertexContainer::detailStr"],[141,3,1,"_CPPv4N3xAH15VertexContainer15VertexContainerERKNSt6stringERKNSt6stringE","xAH::VertexContainer::VertexContainer::name"],[141,2,1,"_CPPv4N3xAH15VertexContainer10branchNameERKNSt6stringE","xAH::VertexContainer::branchName"],[141,3,1,"_CPPv4N3xAH15VertexContainer10branchNameERKNSt6stringE","xAH::VertexContainer::branchName::varName"],[141,2,1,"_CPPv4N3xAH15VertexContainer5clearEv","xAH::VertexContainer::clear"],[141,2,1,"_CPPv4I0EN3xAH15VertexContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::VertexContainer::connectBranch"],[141,5,1,"_CPPv4I0EN3xAH15VertexContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::VertexContainer::connectBranch::T_BR"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::VertexContainer::connectBranch::branch"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::VertexContainer::connectBranch::tree"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer13connectBranchEvP5TTreeRKNSt6stringEPPNSt6vectorI4T_BREE","xAH::VertexContainer::connectBranch::variable"],[141,4,1,"_CPPv4N3xAH15VertexContainer6m_nameE","xAH::VertexContainer::m_name"],[141,2,1,"_CPPv4I0EN3xAH15VertexContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::VertexContainer::setBranch"],[141,5,1,"_CPPv4I0EN3xAH15VertexContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::VertexContainer::setBranch::T"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::VertexContainer::setBranch::localVectorPtr"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::VertexContainer::setBranch::tree"],[141,3,1,"_CPPv4I0EN3xAH15VertexContainer9setBranchEvP5TTreeNSt6stringEPNSt6vectorI1TEE","xAH::VertexContainer::setBranch::varName"],[141,2,1,"_CPPv4N3xAH15VertexContainer11setBranchesEP5TTree","xAH::VertexContainer::setBranches"],[141,3,1,"_CPPv4N3xAH15VertexContainer11setBranchesEP5TTree","xAH::VertexContainer::setBranches::tree"],[141,2,1,"_CPPv4N3xAH15VertexContainer7setTreeEP5TTree","xAH::VertexContainer::setTree"],[141,3,1,"_CPPv4N3xAH15VertexContainer7setTreeEP5TTree","xAH::VertexContainer::setTree::tree"],[141,2,1,"_CPPv4N3xAH15VertexContainerD0Ev","xAH::VertexContainer::~VertexContainer"],[317,2,1,"_CPPv4N3xAH8addRucioERN2SH13SampleHandlerERKNSt6stringERKNSt6stringE","xAH::addRucio"],[317,3,1,"_CPPv4N3xAH8addRucioERN2SH13SampleHandlerERKNSt6stringERKNSt6stringE","xAH::addRucio::dslist"],[317,3,1,"_CPPv4N3xAH8addRucioERN2SH13SampleHandlerERKNSt6stringERKNSt6stringE","xAH::addRucio::name"],[317,3,1,"_CPPv4N3xAH8addRucioERN2SH13SampleHandlerERKNSt6stringERKNSt6stringE","xAH::addRucio::sh"]]},objnames:{"0":["c","macro","C macro"],"1":["cpp","class","C++ class"],"2":["cpp","function","C++ function"],"3":["cpp","functionParam","C++ function parameter"],"4":["cpp","member","C++ member"],"5":["cpp","templateParam","C++ template parameter"],"6":["cpp","type","C++ type"],"7":["cpp","enum","C++ enum"],"8":["cpp","enumerator","C++ enumerator"]},objtypes:{"0":"c:macro","1":"cpp:class","2":"cpp:function","3":"cpp:functionParam","4":"cpp:member","5":"cpp:templateParam","6":"cpp:type","7":"cpp:enum","8":"cpp:enumerator"},terms:{"0":[10,12,13,14,17,19,20,21,28,29,31,34,35,38,39,43,47,48,54,56,57,66,68,70,85,90,91,93,96,97,99,100,102,106,107,111,116,123,324,326,334,348,350,399,400,401,403,406,407,408,409,411,412,413,415,416,417,418,420,423,424,425,426,428,429,431,434,436,437,438,439,440,442,443,444,445,446,447,448,449,451,452,453,454,455,456,458,460,461,462,463,464,465,466,467,468,469,480,481,483,486,488,489,490,491,493,494,499,501,502,503,510,512,513,515,516,518,520,523,525,531,532,535,540,545,546,549,564],"00":[10,34,49,56,57,96,108,533],"001":[425,458],"0011":426,"0012":426,"0013":426,"0022":1,"0024":426,"0025":426,"00265573":10,"00267638":56,"0027":426,"0028":426,"0029":426,"0030":426,"0031":426,"0035":426,"0036":426,"0037":426,"0040":426,"0041":426,"0042":426,"0043":426,"0049":426,"0050":426,"0051":426,"0057":426,"0058":426,"0059":426,"0060":426,"0062":426,"0063":426,"0064":426,"0065":426,"0066":426,"0067":426,"0068":426,"0069":426,"0070":426,"0071":426,"0072":426,"0073":426,"0074":426,"0075":426,"0076":426,"0077":426,"0078":426,"0079":426,"0080":426,"0081":426,"0082":426,"0083":426,"0084":426,"0085":426,"0086":426,"0087":426,"0088":426,"0089":426,"00_phys_standardgrl_all_good":57,"01":[10,34,49,56,57,96,108,415,425,426,458,533],"018":425,"01_dqdefect":56,"02_dqdefect":57,"02_phys_standardgrl_all_good":56,"03":10,"04":[401,442,458],"05":[10,19,56,326,334,350,425,491],"05403652":10,"07":[13,68,463,483],"08":[1,2,60,419,470],"0alpha2":491,"0e":458,"0x1":401,"1":[1,2,3,10,13,14,17,19,20,21,28,29,31,38,39,43,44,49,53,55,56,57,60,61,68,70,85,86,87,90,91,93,100,102,104,108,110,113,114,116,132,321,326,346,375,399,400,401,402,404,406,407,408,409,411,412,413,415,416,417,418,420,421,423,424,425,426,428,429,431,432,435,436,437,438,439,440,442,443,444,445,446,447,448,451,452,453,454,455,456,457,458,459,460,461,462,465,467,469,470,471,475,476,478,480,482,483,484,487,488,489,490,491,494,495,497,498,500,501,502,503,504,505,507,508,510,512,514,515,516,518,520,523,526,527,529,531,532,533,536,538,540,541,544,545,547,564],"10":[1,21,29,55,56,91,113,400,401,407,418,419,420,425,426,438,447,449,458,467,503],"100":[56,403,406,407,420,426,434,438,447,449,458,461,467],"1000":[55,113,400,401,418,420,425,426,458,465,509,544],"10000":[38,99,401,442,447,458,515],"1000000":[54,111],"1000e3":426,"101":[409,426,440],"1024":56,"10240":56,"1041939":436,"1073741824":451,"10e3":[123,486],"10mm":426,"11":[56,400,418,426],"110":[409,440],"12":[21,55,113,417,419,426],"120":[20,31,85,93,403,420,426,449,458],"1214":10,"13":[10,21,55,113,417,426,447],"134217728":451,"13p6tev":[2,60,470],"14":[10,56,387,418,426],"15":[21,370,400,401,403,426,458,467],"150":426,"150e3":424,"1532974":436,"15e3":[49,108,533],"16":[3,61,369,381,400,401,418,426],"1652845":401,"17":[373,401,426],"18":[306,401,426],"18559067":10,"18972258":[19,346],"19":[21,49,108,311,426,458,533],"1_20150921":14,"1_v1":[2,60,470],"1d":[20,419,426],"1e":[406,408,428,437,439,447,452,454],"1e3":[17,54,70,111,118,120,121,123,125,126,127,129,132,134,136,137,139,403,409,420,426,434,445,449,458,467,473,479,484,486,489,498,502,505,511,520,524,530,534,540,542],"1e8":[13,28,39,44,53,55,68,90,100,104,110,113,411,428,443,451,460,465,483,501,516,527,538,544],"1mm":426,"1st":[408,411,424,428,439,443,445,451,454,455,456,463,465],"2":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564],"20":[10,18,56,80,409,419,425,426,431,440,448,458,461,467],"200":[420,426,434],"2000":[412,426,434],"2009":56,"2014":419,"2015":[1,3,10,56,61,401,419,439],"2016":[3,13,61,68,401,411,439,444],"2017":[3,61,401,439,444],"2018":[3,61,401,439],"20180825":[43,102,523],"2019":21,"2022":[3,61,439,529],"2023":[2,3,60,61,439,470],"2024":[21,439],"20e3":[2,28,56,60,90,431,470,501],"21":[19,55,56,113,338,424,425,426,428,461,563],"22":[2,60,383,401,426,470,563],"23":[401,426],"24":[302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388,425,426],"240":[458,461],"25":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564],"250":56,"25e3":[431,458],"26":[21,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388,406,426,447],"27":426,"284484":439,"284500":[3,61,401,471],"29":[370,419,426,458],"297730":426,"298595":426,"298609":426,"298633":426,"298687":426,"298690":426,"298771":426,"298773":426,"298862":426,"298967":426,"299055":426,"299144":426,"299147":426,"299184":426,"299243":426,"299584":426,"2d":[20,403,419,426,458,499],"2e8":460,"2f":401,"2f22":1,"2nd":[411,443,451],"3":[1,14,19,21,25,55,56,88,113,116,334,350,401,406,408,409,417,418,425,426,428,431,434,437,439,440,442,443,446,447,452,454,458,491,518,564],"30":[425,426,448,458,467],"300":[458,461],"3000":[20,31,85,93,420],"300000":[3,61,401,471],"3000e3":424,"300279":426,"300345":426,"300415":426,"300418":426,"300487":426,"300540":426,"300571":426,"300600":426,"300655":426,"300687":426,"300784":426,"300800":426,"300863":426,"300908":426,"300e3":426,"301912":426,"301918":426,"301932":426,"301973":426,"302053":426,"302137":426,"302265":426,"302269":426,"302300":426,"302347":426,"302380":426,"302391":426,"302393":426,"302737":426,"302831":426,"302872":426,"302919":426,"302925":426,"302956":426,"303007":426,"303079":426,"303201":426,"303208":426,"303264":426,"303266":426,"303291":426,"303304":426,"303338":426,"303421":426,"303499":426,"303560":426,"303638":426,"303832":426,"303846":426,"303892":426,"303943":426,"304006":426,"304008":426,"304128":426,"304178":426,"304198":426,"304211":426,"304243":426,"304308":426,"304337":426,"304409":426,"304431":426,"304494":426,"305380":426,"305543":426,"305571":426,"305618":426,"305671":426,"305674":426,"305723":426,"305727":426,"305735":426,"305777":426,"305811":426,"305920":426,"306269":426,"306278":426,"306310":426,"306384":426,"306419":426,"306442":426,"306448":426,"306451":426,"307126":426,"307195":426,"307259":426,"307306":426,"307354":426,"307358":426,"307394":426,"307454":426,"307514":426,"307539":426,"307569":426,"307601":426,"307619":426,"307656":426,"307710":426,"307716":426,"307732":426,"307861":426,"307935":426,"308047":426,"308084":426,"309375":426,"309390":426,"309440":426,"309516":426,"309640":426,"309674":426,"309759":426,"31":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564],"310000":[3,61,401,471],"310015":426,"310247":426,"310249":426,"310341":426,"310370":426,"310405":426,"310468":426,"310473":426,"310634":426,"310691":426,"310738":426,"310809":426,"310863":426,"310872":426,"310969":426,"311071":426,"311170":426,"311244":426,"311287":426,"311321":426,"311365":426,"311402":426,"311473":426,"311481":426,"311500":426,"32":[21,426],"35":[21,426],"352220000":401,"361023":10,"363102":401,"363122":401,"363331":401,"363361":401,"363435":401,"363483":401,"364292":439,"3654":401,"37":[34,96,401,411,431,447,451],"370150":14,"39":426,"3be30397de7c6cfdc15de38f532fdb4b9f338297":401,"3d":[20,419],"3rd":426,"4":[1,10,18,21,22,28,38,55,56,57,75,90,99,113,400,401,403,408,417,418,420,423,424,425,426,428,431,439,442,443,451,458,467,501,515,518],"40":[18,80,400,426,448,458,461],"400":420,"4000":420,"410000":[3,57,61,401,471],"410250":[2,60,400],"410464":[2,60,400],"410470":[2,60,400],"410480":400,"410558":[2,60,400],"411233":400,"412116":400,"42":461,"426005":401,"440613":439,"4434":[28,90,501],"445":[13,68],"450000":[3,61,401,471],"456749":439,"49":[426,458,467],"499":[426,467],"4b":7,"4vector":[28,90],"5":[10,21,28,38,56,57,90,99,123,400,401,403,409,417,418,423,424,425,426,428,431,440,443,446,458,461,467,486,501,515,518],"50":[56,425,426,458,461,467],"500":[56,418,420,422,425,426],"5000":[56,426],"501":426,"50e3":[28,56,90,501],"51":426,"52":[411,431,447,451],"5332":549,"55":56,"57":56,"58":419,"5e6":458,"6":[21,401,417,426,431,458],"60":[1,407,426,438],"600":[56,426,458],"600666":400,"601229":400,"601398":400,"601414":400,"60e3":[28,90,501],"65535":426,"67":56,"67108864":451,"6e":458,"6e4":458,"7":[10,21,38,99,400,417,426,458,515],"70":[1,426],"700122":400,"700660":400,"700808":400,"701050":418,"726681":[18,73],"75":56,"79":425,"7e3":[406,447],"8":[21,400,416,417,426,458],"80":[403,407,420,426,438,458],"800":403,"8212":33,"85":[1,56],"882":[19,321,491],"9":[21,56,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388,419,420,425,426,458,467],"90":[13,39,68,100,425,483,516],"900":426,"900000":412,"9237216":491,"95":425,"98":[13,39,68,100,420,451,483,516],"982":425,"99":[407,415,425,426,428,438,458,464,467],"999":[401,407,411,412,413,416,425,433,438,444,451,453,457,464,466,498],"999999":[444,464],"boolean":[18,34,56,76,96,399,564],"break":[56,400,401,406,408,411,417,418,420,423,424,425,428,437,439,442,443,445,451,452,454,456,460,462,465],"byte":416,"case":[1,10,11,13,14,19,20,21,25,28,33,34,41,56,57,64,68,85,86,88,90,95,96,101,112,338,400,401,411,413,414,417,418,420,421,423,425,428,429,431,442,443,445,451,455,456,462,463],"catch":413,"char":[10,19,56,116,119,124,128,138,345,400,401,407,409,411,412,415,418,424,425,426,428,438,440,443,445,446,447,448,451,453,456,457,460,465,477,479,491,496,498,509,511,534,537,564],"class":[0,1,2,3,5,6,9,10,11,12,13,14,16,19,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,49,51,52,53,54,55,57,58,59,147,148,240,331,370,399,403,404,411,414,415,416,419,430,435,439,454,458,459,461,467,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,551,552,557,563,564],"const":[2,10,12,13,17,18,19,20,21,25,28,31,35,38,39,41,42,44,47,48,49,53,54,55,56,60,65,66,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,90,93,97,99,100,101,104,106,107,108,110,111,112,113,116,118,120,121,123,124,125,126,127,128,129,130,132,134,136,137,139,141,243,314,315,317,322,324,325,326,327,331,333,335,336,338,341,343,345,346,348,352,389,393,399,400,401,402,403,404,406,407,408,409,411,412,413,414,415,416,417,418,419,420,422,423,424,425,426,428,429,431,433,434,435,436,437,438,439,440,442,443,444,445,446,447,448,449,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,473,474,477,479,480,481,483,484,486,488,489,490,491,492,493,494,496,497,498,499,501,502,505,506,509,511,512,513,515,516,517,518,520,521,524,525,527,530,531,532,533,534,535,538,539,540,541,542,544,545,546,550,551,556,564],"default":[1,2,10,11,13,17,18,19,20,21,25,28,34,35,39,41,44,54,56,60,64,68,70,85,86,87,88,90,96,97,100,101,104,111,112,116,147,332,339,400,401,408,411,416,420,422,423,424,425,428,431,437,442,443,445,446,454,455,462,471,480,489,490,491,521,533,540,564],"do":[2,10,13,18,20,21,22,23,25,28,29,33,34,39,41,44,53,56,57,60,68,72,79,81,88,90,91,95,96,100,101,104,110,116,400,401,406,408,411,414,415,418,422,424,425,428,431,436,437,439,442,443,445,446,447,451,452,454,455,456,460,462,463,468,488,521,529,549,563,564],"enum":[1,18,19,38,41,73,99,101,124,130,339,417,446,490,491,496,515,517,518,557],"export":[56,57],"final":[1,2,3,6,7,9,10,11,12,13,16,20,23,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,85,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,116,400,401,404,405,406,408,411,414,415,421,422,424,426,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,492,494,495,497,499,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547,564],"float":[2,12,13,17,19,20,21,28,29,31,34,35,38,39,43,44,47,48,49,53,54,55,56,60,66,68,70,85,90,91,93,96,97,99,100,102,104,106,107,108,110,111,113,116,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,315,320,333,399,400,401,402,403,404,407,408,409,411,412,413,415,416,418,420,423,425,426,428,429,431,433,434,435,436,438,439,440,442,443,444,447,448,449,451,453,454,455,456,457,458,459,460,461,462,464,465,466,467,469,470,473,474,477,479,480,481,483,484,485,486,489,491,493,494,496,498,499,501,502,503,505,506,509,510,511,512,513,515,516,517,520,522,523,524,525,527,528,530,531,532,533,534,535,537,538,539,540,542,543,544,545,546,551,552,553,554,555,564],"function":[0,2,3,6,9,10,11,12,13,16,17,18,20,21,23,25,27,28,29,31,32,33,34,35,37,38,39,41,42,43,44,46,47,48,49,52,53,54,55,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,118,120,121,123,124,125,126,127,128,129,130,131,132,134,136,137,139,141,399,418,419,428,430,431,470,471,475,476,478,480,482,483,487,488,489,491,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,550,551,552,557,564],"import":[10,14,57,406,411,437,443,445,447,451,452,454,455,456,533],"int":[2,3,10,11,12,13,17,18,19,20,21,25,28,29,30,31,34,35,39,41,43,44,46,47,48,49,53,54,55,56,60,61,68,70,75,80,85,87,90,92,93,100,101,102,104,107,108,110,111,113,116,119,121,122,123,124,125,128,130,132,133,135,140,301,318,322,343,346,353,399,400,401,406,407,408,411,412,413,416,418,419,420,423,424,425,426,428,429,436,437,438,439,442,443,444,445,446,447,448,451,452,453,454,455,456,457,460,462,464,465,466,467,469,470,471,477,478,479,480,483,484,485,486,489,490,491,492,493,495,496,497,498,501,502,503,504,509,510,511,512,516,517,518,520,522,523,524,527,528,529,530,531,532,533,538,540,542,543,544,546,547,549,551,552,564],"long":[2,3,60,401,471],"new":[1,14,17,20,21,23,25,33,56,70,85,88,95,116,401,404,406,407,408,409,411,413,414,415,416,418,419,420,421,424,425,426,428,429,432,434,435,436,437,438,440,442,443,444,445,446,447,448,449,451,452,453,455,456,457,458,459,460,461,462,464,465,466,491,494,498,520,545,563,564],"null":[414,418,419,443,491],"public":[2,3,6,9,10,11,12,13,14,16,17,18,19,20,21,25,27,28,29,30,31,32,33,34,35,37,38,39,41,42,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,439,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,550,551,552,564],"return":[1,10,17,19,20,31,56,70,85,93,116,302,303,304,305,307,308,309,310,312,313,324,346,348,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,561,564],"short":[407,438],"static":[10,17,19,70,340,399,401,407,409,411,412,413,415,416,418,423,424,425,426,428,438,439,440,442,443,445,447,448,451,453,455,456,457,463,465,469,489,494,498,564],"super":21,"switch":[1,18,22,24,34,39,56,57,72,79,81,96,100,400,401,416,417,420,423,425,437,442,445,462],"throw":[2,60,399,401,416,425,428],"true":[2,3,10,11,12,13,18,19,20,25,28,29,33,34,35,39,41,43,44,46,49,53,54,55,56,57,60,61,64,66,68,76,88,90,91,95,96,97,100,101,102,104,105,108,110,111,113,116,120,121,129,132,136,324,328,399,400,401,402,407,408,411,412,413,414,415,416,417,418,419,424,425,428,431,438,439,442,443,445,447,448,451,453,454,455,456,457,458,462,464,465,467,468,469,470,471,478,479,480,483,484,488,491,492,497,501,503,508,510,511,512,516,518,520,523,527,529,530,531,533,538,540,544,564],"try":[1,10,24,56,116,401,413,415,468,564],"var":[57,400,406,426],"void":[2,17,19,20,56,60,70,71,72,74,75,77,78,79,80,81,82,83,84,85,116,118,120,121,123,124,125,126,127,129,132,134,136,137,139,141,317,327,341,344,399,400,402,407,412,413,416,417,418,419,423,425,426,429,433,438,444,448,453,457,461,464,466,469,470,473,479,484,486,489,490,491,492,496,498,499,502,505,511,517,520,524,530,534,539,542,545,551,564],"while":[10,56,116,399,400,401,411,417,418,428,436,439,443,451,456,460,462,463,465,489,490,549,564],A:[1,10,13,17,18,19,23,25,28,33,39,41,68,70,76,88,90,100,101,112,116,314,351,400,401,411,414,415,428,436,439,443,444,445,454,456,463,533,564],AND:[411,424,428,443,456,462],And:[10,437,452],As:[10,19,21,23,56,57,351,401,428],At:[10,12,21,22,38,56,66,99,418],But:[10,116,564],By:[10,25,88,411,428,431,443,446,456,499,557],FOR:56,For:[1,2,3,7,10,18,20,22,23,33,56,57,60,61,75,77,78,85,95,116,401,406,408,411,415,424,428,431,439,443,454,456,463,470,489,491,523,529,564],IS:462,If:[1,2,3,10,11,13,14,18,19,20,21,22,23,24,25,28,33,39,41,56,57,60,61,64,68,76,88,90,95,100,101,112,116,302,303,304,305,307,308,309,310,312,313,339,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,399,400,401,406,408,411,414,416,417,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,468,491,533,563,564],In:[1,3,10,11,12,13,14,20,21,34,41,56,57,61,64,66,68,96,101,112,408,415,425,428,439,443,444,454,457,464],Is:[401,431],It:[1,2,3,10,12,14,20,21,24,31,35,47,56,57,60,61,66,85,93,97,106,401,406,408,411,418,419,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],Its:564,NOT:[56,407,419,438],No:[1,10,57,397,400,401,415,418,424,439,442,468,488],Not:[1,2,60,400,411,529],OF:425,ON:[1,41,101],OR:[2,60,400,401,411,428,443,445,456],On:10,One:[1,10,404,421,435,459],THE:[425,462],That:57,The:[1,2,3,7,10,11,12,13,14,17,18,19,20,21,22,23,25,28,33,35,38,41,47,55,56,57,60,61,64,66,68,70,72,74,75,76,77,78,79,80,81,82,83,84,85,86,88,90,95,97,99,101,106,112,113,116,149,314,338,351,401,406,407,408,411,417,418,419,422,424,428,431,436,437,438,439,443,445,446,447,451,452,454,455,456,460,462,463,468,471,491,520,563,564],Then:[10,14,22,56,57],There:[20,21,30,38,57,85,92,99,462],These:[1,10,17,21,56,70,403,408,420,439,454,458,467],To:[1,2,10,13,21,23,29,43,56,57,60,68,91,102,431,439,480,512],WITH:425,Will:[401,406,408,411,428,431,437,439,443,447,452,454,456,491],_000001:10,_0001:10,_:[18,22,78,400,401,407,408,411,413,416,417,425,428,439,443,446,451,489,491,498,520,545],__attribute__:[19,116,243,389,393,469,491,556,564],__cint__:430,__cxa_demangl:491,__file__:425,__func__:425,__makecint__:416,_build:21,_calib_algo:424,_dsid:401,_egammacalibrationandsmearingtool_photon:447,_eleidelectron:454,_fjvt_:428,_handl:10,_i:438,_inefficiencysf_:498,_insitu:[25,88,424],_is_:498,_isisolated_:[407,438],_isloos:448,_ismedium:448,_iso:439,_isoeff_sf_:407,_isoeff_sf_iso:438,_isol:[407,408],_isolfixedcutloos:477,_isolfixedcuttight:477,_isolfixedcuttighttrackonli:477,_isolgradi:477,_isolgradientloos:477,_isolloos:477,_isolloosetrackonli:477,_isoltight:477,_istight:448,_jetselect:428,_jvt_:428,_l:467,_lb0179:10,_mbts_1_1:56,_pd:424,_pdshallowcopi:424,_pdshallowcopyaux:424,_photoniso:451,_photonlooseisemselector:447,_photonmediumisemselector:447,_photontightisemselector:447,_pideff_sf_:407,_platform:14,_quantil:400,_quantile_:498,_rd0_fill:56,_reco:[416,438,439],_recoeff_sf_reco:438,_sf:400,_sf_:498,_smear:[25,88,424],_sysnam:[416,439,454],_taueff_sf_:453,_tauid:454,_tautrigeff_sf_:453,_tracks_eta:453,_tracks_failtrackfilt:453,_tracks_isclcharg:453,_tracks_isclconv:453,_tracks_isclfak:453,_tracks_iscliso:453,_tracks_iscor:453,_tracks_iswid:453,_tracks_passtrksel:453,_tracks_phi:453,_tracks_pt:453,_trig:454,_trigeff_sf_:[407,438],_trigmceff_:[407,438],_vtx:[426,460],_weight:400,_xaod:10,a1:436,a2:436,aa:[18,77],ab:[400,411,428,443,447,455,467],abi:491,abid:10,abl:[21,41,56,101,112,431],abort:[10,401,411,418,428,432,443,445,451,456,465],about:[10,14,17,18,21,33,41,56,70,76,95,101,416,468,564],abov:[10,13,20,21,31,33,39,56,57,85,93,95,100,116,408,414,418,425,438,439,453,454,564],absolut:[39,100,426],abver:56,acc_activearea4vec_eta:413,acc_activearea4vec_m:413,acc_activearea4vec_phi:413,acc_activearea4vec_pt:413,acc_activearea:413,acc_bs_online_v:425,acc_c2:413,acc_correctedfatjets_tlv:413,acc_crackvetoclean:411,acc_d2:413,acc_dfcommonjets_eventclean_loosebad:412,acc_dfcommonjets_eventclean_tightbad:412,acc_disabledtrigg:416,acc_dl1mu:[407,438],acc_drlj:[407,438],acc_ecf1:413,acc_ecf2:413,acc_ecf3:413,acc_eg_loos:411,acc_eg_medium:411,acc_eg_tight:411,acc_ghostarea:413,acc_ghosttrackcount:413,acc_ip2:[407,438],acc_ip3:[407,438],acc_iso:[407,438],acc_jetconstitscalemomentum_eta:413,acc_jetconstitscalemomentum_m:413,acc_jetconstitscalemomentum_phi:413,acc_jetconstitscalemomentum_pt:413,acc_jetemscalemomentum_eta:413,acc_jetemscalemomentum_m:413,acc_jetemscalemomentum_phi:413,acc_jetemscalemomentum_pt:413,acc_lepjetptfrac:[407,438],acc_muonsintrackjet:442,acc_nchargedparticl:413,acc_nclust:413,acc_neflowisol20_closebycorr:438,acc_numtrkpt500:413,acc_par:[413,442],acc_passedtrigg:416,acc_ptcone20_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:407,acc_ptfrac:[407,438],acc_ptrel:[407,438],acc_ptvarcone30_nonprompt_all_maxweightttva_pt1000_closebycorr:438,acc_ptvarcone30_nonprompt_all_maxweightttva_pt500_closebycorr:438,acc_ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:407,acc_rnd:439,acc_rnnip:[407,438],acc_split12:413,acc_split23:413,acc_split34:413,acc_sv1_jf_ntrkv:[407,438],acc_tau1_wta:413,acc_tau21_wta:413,acc_tau2_wta:413,acc_tau32_wta:413,acc_tau3_wta:413,acc_topoetcone20_closebycorr:[407,438],acc_trackjetntrack:[407,438],acc_truthtyp:10,acc_veto:[407,438],acc_voronoiarea:413,accblay:407,accelectron_islrt:407,accelectron_passor:407,accelectron_passsel:407,accept:[20,31,85,93,400,411,425,428,431,443,447,451,456,460],accept_list:[411,443,451],acceptalg:10,acceptmuon:443,access:[1,3,10,19,20,22,31,56,61,85,93,331,401,442,502],accessor:[10,17,70,132,401,407,409,411,415,425,428,438,440,442,443,448,451,453,456,460,465,473,489,494,520,524,553,554,555],accisbjet:424,accisol:[407,409,438,440],accisosf:[407,438],accmuon_energyloss:438,accmuon_energylosssigma:438,accmuon_energylosstyp:438,accmuon_islrt:438,accmuon_measenergyloss:438,accmuon_measenergylosssigma:438,accmuon_paramenergyloss:438,accmuon_paramenergylosssigmaminu:438,accmuon_paramenergylosssigmaplu:438,accmuon_passidcut:438,accmuon_passor:438,accmuon_passsel:438,accompani:[18,72,79],accomplish:56,accord:[13,34,41,68,96,101,112,401],accordingli:[116,401,564],account:[7,10,35,41,97,101,112,418,480],accpid:407,accpidsf:407,accqual:[438,440],accrecosf:[407,438],acctaueffsf:453,acctautrigsf:453,acctrigeff:[407,438],acctrigsf:[407,438],accttvasf:438,acd:[3,61],acod:[1,413,425,446],actarea:426,action:[11,12,13,57,64,66,68,563],activ:[401,406,408,411,422,424,426,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],activearea4vec_eta:[122,413,425,485],activearea4vec_m:[122,413,425,485],activearea4vec_phi:[122,413,425,485],activearea4vec_pt:[122,413,425,485],activearea:[122,413,425,426,485],activearea_eta:425,activearea_m:425,activearea_phi:425,activearea_pt:425,actual:[18,20,41,83,101,401,406,408,411,422,424,426,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,489],actualinteractionspercross:[3,61,401,412,426],actualmu:[3,61,401,426],ad:[1,3,13,20,21,23,39,56,57,61,68,100,317,400,401,409,411,415,416,418,419,420,426,431,436,443,449,451,460,462,483,489,501,516,532,533,538,544],adapt:424,add:[1,3,10,12,13,17,20,23,39,56,57,66,68,70,100,317,400,401,403,404,406,408,411,415,416,417,418,419,421,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,458,459,460,461,462,463,465,467,468,471,490,494,563],add_argu:57,addclust:[17,70,416,462,489],addclustersus:[17,70,416,489],addelectron:[17,70,416,462,489],addelectronsus:[17,70,416,489],addelectronwp:411,addep:422,addev:[17,70,416,462,489],addeventus:[17,70,416,489],addfatjet:[17,70,416,462,489],addfatjetsus:[17,70,416,489],addghostmuonstojet:424,addhist:[27,37,67,86,89,98,103,410,421,427,441,450,482,494,500,514,526],addit:[10,17,18,56,70,72,79,81,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,471],addition:[408,439,454],addjet:[17,70,416,425,462,489],addjetsus:[17,70,416,489],addjettrigg:[17,70,416,489],addjettriggerus:[17,70,489],addl1jet:[17,70,416,462,489],addmet:[17,70,416,462,489],addmetadataitem:10,addmetus:[17,70,416,489],addmuon:[17,70,416,462,489],addmuonsus:[17,70,416,489],addmuonwp:443,addnacceptedev:436,addoutput:[419,462],addphoton:[17,70,416,462,489],addphotonsus:[17,70,416,489],addphotonwp:451,address:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,468,469],addrucio:[243,389,396,418,430,491,556],addsumofeventweight:436,addsumofeventweightssquar:436,addtau:[17,70,416,462,489],addtausus:[17,70,416,489],addtrackpart:[17,70,416,462,489],addtracksus:[17,70,416,489],addtrigg:[17,70,416,462,489],addtriggerus:[17,70,416,489],addtruthfatjet:[17,70,416,462,489],addtruthfatjetsus:[17,70,416,489],addtruthpart:[17,70,416,462,489],addtruthus:[17,70,416,489],addtruthvertic:[17,70,416,489],adduserdefinedwp:[411,443],addvertic:[17,70,416,462,489],adjust:[38,99,431],adopt:23,advantag:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],advis:[2,12,35,47,60,66,97,106],af3:[116,401,447,564],af:56,affect:[13,68,400,408,411,428,431,439],affectingsystemat:[400,408,428,439],affectsyst:400,affectsystlist:400,affectsystsfjvt:428,affectsystsiso:[408,439],affectsystsjvt:428,affectsystspid:408,affectsystsreco:[408,439],affectsyststrig:[408,439],affectsyststtva:439,afii:[1,3,25,61,88,116,401,406,408,431,447,564],after:[1,10,12,14,18,23,25,54,56,57,66,77,80,88,111,401,406,408,411,414,417,422,424,428,431,437,439,442,443,445,447,451,452,454,455,456,460,468,510,523,529],afterward:14,again:[10,21,24,408,411,418,439,443,451,454,455,456],against:[401,428],ahead:10,aim:21,aka:[415,439],alabast:21,albeit:10,algfin:[116,399,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,465,468,469,564],alginiti:[116,399,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,465,468,469,564],algo:[1,3,13,23,28,34,43,46,61,86,90,96,102,105,401,408,411,428,431,439,443,445,451,454,455,456,463,510,529],algorithm:[0,2,3,6,9,11,12,13,14,16,23,25,28,29,30,32,33,34,35,38,39,40,41,43,44,46,47,48,49,52,53,55,58,60,61,62,63,64,66,68,69,85,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,144,145,181,190,193,205,220,222,223,227,228,230,232,235,239,243,246,247,249,252,253,255,256,259,260,262,264,267,268,270,275,279,281,283,284,285,288,290,292,293,296,299,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388,389,396,400,401,404,405,406,408,410,411,414,415,418,421,422,424,426,427,428,430,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,470,471,475,476,478,480,482,483,487,488,491,494,495,497,500,501,503,504,507,508,510,512,514,515,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,556,557,563],algorithmclass:[115,389],algorithmnam:57,algortihm:[38,99],algsadd:56,alia:56,alic:10,alison:[223,240,253,400,405,414,415,434,440,465,487,489],all:[1,3,10,12,13,14,18,19,20,21,22,23,25,28,29,30,31,35,39,41,44,49,50,56,57,61,66,68,72,78,85,86,88,90,91,92,93,97,100,101,104,112,116,314,324,333,348,399,400,401,406,407,408,411,415,416,417,418,422,424,425,428,430,431,436,437,438,439,442,443,445,446,447,451,452,454,455,456,460,462,465,466,468,471,480,489,491,502,503,512,521,533,542,564],allcheck:428,alldet_detdescr:10,alleventscbk:401,allexecutedev:401,allexecutedevents_nonnominalmcweight_:401,allfromunknownstream:401,alll:[13,28,39,68,90,100],alllumicalcfil:401,alloc:[33,95],allok:428,allow:[1,2,10,20,21,28,56,57,60,85,90,400,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,468,470,471],allowed_vari:400,allowzerosf:439,alltrack:[18,77,417,425,456,498],alltrackdetail:[18,77,417,425,498],alltrackdetailpvsel:417,alltrackpvsel:[18,77,417],almost:[10,56],along:[20,23,85,436],alphanumer:419,alrb_localconfigdir:56,alreadi:[10,13,21,28,56,57,90,116,399,401,408,411,418,419,426,428,431,439,442,443,445,451,455,456,462,469,564],also:[1,3,10,18,21,22,23,33,41,56,61,76,95,101,112,116,401,406,408,411,418,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,471,564],alta:56,alter:[1,23],altern:401,although:[10,411],alwai:[10,21,22,33,56,95,401,403,406,408,412,420,424,436,437,439,445,447,452,454,458,462,467],am:426,amc:400,amcatnlo:418,amcatnloh:418,amcatnlopi:418,amch7:[19,149,400,418,491],amcpy8:[19,149,400,418,491],ami:[3,61],among:[56,407,425,438,453,564],amount:[54,111],an:[1,2,3,10,11,12,13,14,18,19,20,21,23,25,28,31,33,41,56,57,60,61,64,66,68,76,77,85,88,90,93,95,101,116,223,324,339,348,351,399,400,401,406,411,416,418,424,426,431,436,437,443,445,446,447,452,455,456,463,491,563,564],ana_check:[10,19,314,348,351,399,400,401,403,404,405,406,408,409,411,414,415,418,420,421,422,424,425,426,428,431,432,435,436,437,439,440,442,443,445,446,447,449,451,452,454,455,456,458,459,460,461,462,463,465,467,468,493,494,548,549],ana_msg_debug:[10,400,401,405,406,408,411,414,415,421,422,424,428,431,436,437,439,442,443,445,447,451,452,454,455,456,460,462,463,465],ana_msg_error:[301,389,399,400,401,404,406,408,409,411,414,415,419,421,422,424,426,428,431,435,436,437,439,440,443,445,447,449,451,452,454,455,456,458,459,460,462,463,465,468,488,549,556],ana_msg_fat:[10,401,411,414,415,428,432,439,442,443,454,456,463],ana_msg_head:[273,389,474,481,493,499,513,521,525,535,539,546,556],ana_msg_info:[10,400,401,404,405,406,408,411,414,415,421,422,424,428,431,435,436,437,439,443,445,447,451,452,454,455,456,459,462,463,465,468,469,549,562],ana_msg_sourc:[154,160,197,200,209,212,218,389,403,409,420,426,440,446,449,458,461,467,556],ana_msg_verbos:[401,415,424,431,436,437],ana_msg_warn:[400,401,406,408,411,419,424,428,431,437,439,443,445,447,452,454,456,462,465],ana_msg_xxxx:[20,85],anahelp:56,analys:[3,7,23,56,61,437],analysi:[7,14,20,23,25,29,41,56,57,88,91,101,112,223,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,463,468,563],analysisbas:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564],analysisbase_platform:22,analysisfil:424,analysistop_platform:22,analyz:[23,116,408,439,564],anatoolhandl:[2,3,10,13,14,16,25,28,29,34,35,39,43,46,47,49,53,116,221,223,235,249,253,255,262,264,268,275,281,283,285,290,293,401,411,422,424,428,439,443,456,463,469,470,471,483,487,488,495,497,501,503,510,512,516,523,529,531,533,538,541,564],ani:[1,2,3,10,12,14,17,18,20,21,28,35,47,55,56,57,60,61,66,70,72,79,81,85,90,97,106,112,113,116,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,465,468,564],annoi:[10,431],anoth:[1,10,14,23,41,57,101,424,431],anti:57,antikt10:[20,424],antikt10lctopo:424,antikt10lctopojet:[19,324,348],antikt10trackcaloclust:424,antikt2lctopo:424,antikt4:56,antikt4em:424,antikt4empflowjet:[2,28,60,90,470,501],antikt4emtopo:[25,56,88],antikt4emtopojet:[25,33,56,57,88,95],antikt4lctopojetsaux:468,antikt4truthjet:[28,90,401,501],antikt4truthwzjet:401,antikt6lctopo:424,antikt_algorithm:[19,326,491],antiktvr30rmax4rmin02trackjet:[38,99,515],antimatchdr:415,anymor:401,anyon:[10,401],anyth:[10,20,85,421,424,491],anywai:56,anywher:14,aod:[10,56,116,401,564],api:[21,563],aplanar:426,appar:[417,447],appear:401,append:[11,17,20,25,64,70,88,116,401,406,424,437,447,452,564],appened:[17,70],applehelp:21,appli:[1,2,3,10,11,12,13,20,23,25,28,29,41,56,57,60,61,64,66,68,88,90,91,101,253,400,401,406,408,411,418,422,424,425,428,431,437,439,442,443,445,447,451,452,454,455,456,460,463,465,468,491,501,529,533,544],applic:400,appliedsystemat:408,applycalibr:424,applycorrect:[406,424,431,437,447,452],applyefficiencyscalefactor:439,applygrl:[56,401],applyjetcalibrationr21:424,applymceffici:439,applyprimaryvertexselect:[19,243,389,393,418,491,556],applyrelpt:[41,101,445],applysystematicvari:[400,401,406,408,424,428,431,437,439,447,452,454],appmgr:10,approach:[407,425,438],appropi:425,appropri:[14,18,19,33,76,95,324,333,348,400,462],ar:[1,2,3,7,10,12,13,17,18,19,20,21,23,24,25,28,33,38,39,41,49,56,57,60,61,66,68,70,76,85,86,88,90,95,99,100,101,112,116,338,346,399,400,401,403,404,406,407,408,411,413,414,415,416,418,420,421,422,424,426,428,431,435,436,437,438,439,443,445,446,447,451,452,454,455,456,458,459,460,463,465,467,468,470,471,474,475,476,478,480,481,482,483,487,488,489,491,493,494,495,497,499,500,501,503,504,506,507,508,510,512,513,514,516,518,523,525,526,527,529,531,532,533,535,536,538,540,541,544,546,547,564],arbitrari:[1,19,324,348],architectur:22,area:[7,18,77,413,417,424,425,426,485,486,498,499],aren:[19,339,401,411,428,443,456],arg:[57,439],argcomplet:57,argpars:[21,57],argument:[10,14,20,21,31,56,57,85,93,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388],argumentpars:57,aris:439,around:[23,399,462],arrai:56,arrow:[10,400,428],articl:10,asdatavector:[431,439,491],asetup:[10,22],asg:[2,3,10,13,14,16,25,28,29,34,35,39,41,43,44,46,47,49,53,56,68,100,101,104,112,116,401,406,408,411,414,422,424,428,432,439,443,445,447,451,456,463,469,470,471,483,487,488,495,497,501,503,504,510,512,516,523,529,531,533,538,541,564],asg_make_ana_tool:[10,424],asganalysisinterfac:[223,262,471,510],asgdeadhvcellremovaltool:411,asgelectronefficiencycorrectiontool:[12,66,232,408,480],asgelectronefficiencycorrectiontool_iso:408,asgelectronefficiencycorrectiontool_pid:408,asgelectronefficiencycorrectiontool_reco:408,asgelectronefficiencycorrectiontool_trig:408,asgelectronefficiencycorrectiontool_trigmceff:408,asgelectronisemselector:[42,65,162,273,411,446,521],asgelectronlikelihoodtool:[162,168,273,411,417,446,521],asgmessag:[151,167,169,170,185,221,243,244,245,256,273,300,400,401,416,418,419,434,469,491,492,493,504,521,548,549],asgmetadatatool:[10,152,401],asgphotonefficiencycorrectiontool:[43,523],asgphotonisemselector:[43,198,447,523],asgtool:[10,152,221,223,235,249,253,255,262,264,268,275,281,283,285,290,293,401,469,471,483,488,497,501,503,510,512,516,523,529,531,533,538,541],ask:[7,10,14,21,25,33,57,95,416,425,442,490],ass:439,assert:[422,431,439],assign:[10,18,20,21,76,85,112,426,436],assist:442,assoc:486,associ:[1,13,14,18,25,38,68,75,77,88,99,240,411,413,414,415,424,428,431,439,442,443,456,468,486],associated_muon:442,associated_trackjet:442,associated_trackjets_filt:442,associationlink:426,associationutil:[41,101,247,270,495,518],assotrkjet:413,asssoci:442,assum:[21,22,33,41,57,95,101,112,411,425,436,462,540],asterisk:[116,564],at_nonconst:[132,520],atemp:426,ath_check:428,ath_msg_error:428,ath_msg_warn:413,athcontain:[155,157,159,172,173,175,179,186,188,190,194,196,198,203,205,207,210,211,213,216,233,242,243,277,404,406,408,415,421,422,424,428,435,437,439,443,445,447,452,454,455,456,459,460,462,465,481,490,491,525],athena:[1,2,10,19,55,60,113,340,401,417,439,491],athenacommon:10,athenapoolcnvsvc:10,athfilterseq:10,athsequenc:10,atla:[1,7,10,19,22,23,55,56,57,113,338,401,407,411,413,416,425,438,439,443,446,458,563],atlas_local_root_bas:56,atlascomput:503,atlasg:10,atlasinst:10,atlaslabel:56,atlaslocalrootbas:56,atlaslocalsetup:56,atlasoff:[10,13,39,68,100,418,431,454,491],atlasprotect:[13,400,401,411,422,425,437,443,452,470,471,523],atlasstyl:56,atlasutil:56,atlfast3:[116,399,564],atlfast:399,atlfastii:[116,399,564],atlsusysw:[13,68],atoi:417,attempt:[13,19,28,39,68,90,100,112,348,400,424,533],attent:[1,10],attribut:[17,18,20,23,31,41,54,70,76,85,87,93,101,111,116,132,564],attriubt:[18,77],august:1,author:[13,19,41,56,68,101,119,244,339,407,411,431,447,451,477,491],author_cut:[411,451],authorambigu:[411,447,451],authorelectron:411,authorphoton:[447,451],auto:[2,3,20,25,31,60,61,85,88,93,400,401,406,407,408,409,411,412,413,414,415,416,417,418,419,420,421,424,425,426,428,429,431,436,437,438,439,440,443,445,446,447,451,452,453,454,455,456,460,462,463,465,466,467,468,471,491,494,502],autoconfig:401,autoconfigur:[3,61,401,424],autoconfigurepileuprwtool:[3,401,471],automag:[14,20],automat:[1,2,3,13,14,17,21,23,41,56,57,60,61,70,101,116,399,401,406,408,411,422,424,428,431,437,439,442,443,445,447,451,452,454,455,456,460,463,468,564],aux:[19,33,314,351,406,411,414,415,428,431,437,443,445,447,451,452,456,468,491],auxcont:491,auxcont_new:491,auxcontainerbas:[179,187,428,436],auxdata:[10,19,331,413,415,424,425,426,428,451,460,464,465,491],auxdataconst:401,auxdecor:[1,10,401,404,411,415,418,431,433,435,443,446,447,451,459,460],auxel:[10,17,70,132,399,400,401,407,408,409,411,412,413,415,416,418,424,425,426,428,438,439,440,442,443,445,447,448,451,453,454,455,456,457,463,465,473,489,491,494,498,520,524,553,554,555],auxiliari:[1,13,39,41,44,100,101,104,414,415,436,532,533],auxnam:468,avail:[1,18,19,23,53,56,57,72,110,116,324,399,400,401,406,407,408,411,422,424,425,428,431,437,438,439,443,445,447,451,452,454,455,456,460,462,465,468,477,479,509,511,564],averag:[25,88,407,426,438],averageinteractionspercross:[412,426,431],averageinteractionspercrossingkei:424,averagelarqf:[124,425,426,496],averagemu:426,avg:[28,90,428],avg_mu:426,avgmu:[25,88,426,497],avgmu_vs_jetpt:426,avlarqf:[425,426],avoid:[23,56,416,431],awai:[408,428,439,454],awar:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],awesom:491,axi:[20,31,85,93,407,438],axix:[20,31,85,93],b1:436,b2:436,b:[0,1,7,8,10,13,22,41,56,57,60,101,400,401,411,418,424,425,426,428,429,436,439,442,443,444,456,470,501,502,533],babel:21,back:[57,400,415,418,419,425,442,464,489,520],background:563,backup_pvx:415,backupprefix:422,backupvtxcollect:415,backward:[19,116,346,399,417,426,447,523,564],bad:[10,39,56,100,426,428,443],badcluselectron:[407,411],badclusphoton:451,badindic:428,balanc:7,bar:57,barcod:[140,464,466,543],barrel:426,basd:445,base:[0,2,11,13,18,19,20,23,40,41,56,57,58,76,340,389,400,401,406,408,411,417,419,422,424,428,431,433,434,437,439,443,445,447,451,452,454,455,456,460,465,468,529,556],base_decor:[411,443,451],baseeventsel:[56,399],baselin:[10,406,424,437,447,452,531],baselinejet:[19,314,351],basenam:418,bash:22,bash_profil:[21,56],basic:[3,18,21,23,56,61,83,223,401,403,411,416,417,420,428,443,447,451,455,456,458,465,467,493],basiceventselect:[1,3,10,14,24,56,57,116,144,145,181,220,221,243,389,399,411,414,415,428,430,439,443,454,456,463,556,557,564],basiceventselectionclass:[115,389],batch:56,bb:[18,77],bch:426,bchcorrcel:[124,425,426,496],bcid:[3,61,401,412],bcidinfo:[18,74,417],bdecay_i:[140,464,543],bdecay_x:[140,464,543],bdecay_z:[140,464,543],beam:[407,438,484],beampo:458,beamposi:458,beampossigmai:[411,443],beampossigmax:[411,443],beampossigmaxi:[411,443],beamposx:458,beamposz:458,beamspot:[407,411,415,438,443],beamspotweight:[18,74,412,417],bear:[12,66],beautifulsoup4:21,becaus:[10,14,21,33,95,414,462,483,516,564],becom:491,been:[1,10,13,14,23,24,33,56,57,95,116,400,401,406,408,411,414,415,416,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,469,564],beer:57,befor:[1,2,10,12,21,23,33,35,47,60,66,95,97,106,400,401,404,405,406,408,411,414,415,417,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,463,465,468],beforehand:[17,70],begin:[401,403,406,407,408,411,413,415,418,422,424,425,426,428,429,431,436,437,438,439,442,443,445,447,448,451,452,453,454,455,456,458,460,462,467,468,491,502],behav:14,behaviour:[401,419],behind:[41,101,112],being:[3,12,20,21,57,66,85,116,401,416,417,436,469,470,471,475,478,480,482,490,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,540,544,547,564],belong:[41,101],below:[1,22,23,57,462,490],ben:491,best:[10,19,33,95,116,314,400,425,455,564],best_dr:[48,107,455,532],best_ijet:455,best_itau:455,best_jet:455,best_tau:455,better:[56,411,428,443,451,455,456,465],between:[10,41,57,101,270,411,418,443,529],bewar:446,bgpattern:401,bhad:426,bigpanda:56,bin:[13,21,57,400,401,411,422,425,428,437,443,452,456,465,470,471,503,523],bind2nd:425,bit:[10,57,424],bitmask_t:431,bjet:[400,415,428,488],bjetcollect:415,bjeteffcod:400,bjetefficiency_algo:[2,60,470],bjetefficiencycorrect:400,bjetefficiencycorrectiontool:400,bjetefficiencycorrector:[2,41,101,116,144,145,181,220,221,242,243,389,430,556,557,564],bjetefficiencycorrectorclass:[115,389],bjetlabel:445,bjetselectiontool:[400,428],bjetselector:[18,147,490],bl:[13,39,68,100,411,425],bl_cut:411,blank:[11,13,25,64,68,88,411,421,443,445,451,455,456,463],blayer:[411,458,460],blayerdecor:411,blayerpass:[407,411],blob:[55,113,401,439],block:[10,56,401,406,408,411,422,424,426,428,431,437,439,443,445,447,451,452,454,455,456,458,460,468],bnl:[1,413,425,446],bob:10,book:[10,20,21,31,85,93,401,403,409,419,420,426,434,440,449,458,461,467,474,481,492,493,499,506,513,525,535,539,546],bookeeep:401,bookeep:3,bookkeep:[401,564],bool:[2,3,6,9,11,12,13,16,17,18,19,20,21,25,28,29,31,32,33,34,35,38,39,41,42,43,44,46,47,48,49,52,53,54,55,56,60,61,62,63,64,65,66,68,69,70,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,116,118,120,121,123,125,126,127,129,130,132,134,136,140,319,321,322,324,325,328,330,335,347,352,399,400,401,402,404,405,406,407,408,411,412,413,414,415,416,418,419,421,422,424,425,426,428,429,431,432,435,436,437,438,439,442,443,444,445,446,447,448,451,452,453,454,455,456,458,459,460,462,463,464,465,468,469,470,471,473,474,475,476,478,479,480,481,483,484,486,487,488,489,490,491,492,493,494,495,497,498,499,501,502,503,504,505,506,507,508,510,511,512,513,515,516,517,518,520,521,523,524,525,527,529,530,531,532,533,535,536,538,540,543,544,546,547,550,551,561,564],boost:[41,101,150,399],boostedlepton:445,born:563,borrow:401,boson:[25,88,485],bosoncount:[18,77,417,486],both:[3,7,10,19,33,38,61,95,99,324,348,417,491],bound:[20,31,85,93],box:21,bquark:426,branch:[10,17,18,19,22,23,70,72,76,79,132,141,327,401,402,406,407,408,411,412,413,416,422,424,425,428,431,437,438,439,443,445,447,448,451,452,453,454,455,456,460,462,464,468,471,486,489,491,498,502,505,520,534,540,542,545],branchnam:[132,141,413,520,545],brandnewjetcontain:[33,95],breakdown:23,breath:21,brew:21,brian:7,brief:[10,21,425,426,480,488],bring:10,brows:10,browser1:1,browser:[10,13,39,68,100,413,418,425,431,446,454,491],bs4:21,bs:[415,499],bs_online_vi:[124,415,425,426,496],bs_online_vx:[124,415,425,426,496],bs_online_vz:[124,415,425,426,496],bs_online_vz_l:426,bsdata:[130,415,426,444,517],bsx:[130,415,426,444,458,517,552],bsx_vs_lblock:458,bsy:[130,415,426,444,458,517,552],bsy_vs_lblock:458,bsz:[130,415,426,444,458,517,552],bsz_vs_lblock:458,btag:[2,28,60,90,167,400,415,416,425,426,428,445,470,501],btag_:[1,498],btag_cut:428,btag_inefficiencysf_:498,btag_info:[426,428],btag_jettrk:417,btag_quantile_:498,btag_sf_:[1,498],btagcalib2017:400,btaggerop:[124,423,425,496,498,551],btaggingbenchmarksrelease21:400,btaggingcalibrationdatainterfac:470,btaggingcontain:415,btaggingefficiencytool:[2,50,151,400,470],btaggingselectiontool:[2,28,60,151,179,296,400,428,470,501,544],btaggingutil:[176,177,425,426],btaginfo:425,btagoppoint:[125,250,389,396,425,498,556],btagoppointclass:[115,389],btuan:56,bu:10,bug:[10,13,24,68,244,389,398,411,557],bugfix:411,bugno:244,build:[19,20,22,31,56,85,93,240,351,415,418,431,491],buildhltbjet:[415,488],buildhltjet:[415,488],buildmetsum:431,built:[416,431,491,563],bunch:[57,401],bunchgroupset:401,button:10,bvtx:[18,84,417,464,542,543],bxx:458,byaveragemu:[18,77,417],byeta:[18,77,417],bypass:[3,61],c1:[56,436],c2:[122,413,436,485],c:[2,14,21,41,56,57,60,101,112,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,400,401,405,406,408,411,414,416,422,424,425,426,428,430,436,437,439,443,444,445,447,451,452,454,455,456,460,463,465,489,521,533],c_str:[56,400,401,407,411,413,414,416,417,418,419,420,424,426,428,436,438,439,443,444,445,446,447,448,451,453,454,456,460,462,465,484,489,491,498,505,520,545,549,562],cach:444,calcllr:[425,426],calcul:[3,12,23,28,29,44,56,61,66,90,91,104,400,401,407,408,425,428,431,438,439,442,529,546],calib:523,calibarea:[25,88,424],calibconfigafii:1,calibconfigdata:1,calibconfigfullsim:1,calibelectronscdv:406,calibelectronssc:406,calibjetssc:[25,424,497],calibmod:437,calibmuonscdv:437,calibmuonssc:437,calibphotonscdv:447,calibphotonssc:447,calibr:[0,2,10,11,12,18,23,25,28,34,35,38,43,46,47,56,57,60,64,66,88,90,96,97,99,102,105,106,147,400,406,424,425,428,430,431,437,439,442,447,452,469,490,497,510,523,529,563],calibratedjetcharg:425,calibrationmod:[34,96,437],calibrationreleas:439,calibsequ:[1,56,424],calibtauscdv:452,calibtaussc:452,calibtoolnam:447,call:[10,12,14,17,19,20,21,27,31,33,37,41,56,57,66,67,70,85,86,89,93,95,98,101,103,116,339,399,400,401,404,405,406,408,411,413,414,415,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,463,465,468,489,564],calo:[11,29,38,91,99,406,413,426,442,529],calo_eta:407,calocaltopoclust:[54,111,412,540],caloclust:[13,17,18,68,70,74,78,118,402,403,406,407,408,411,412,413,416,417,433,434,447,451,473,474,484,489],calocluster_:412,calocluster_eta:[119,407,412,477],calocluster_phi:412,calocluster_pt:412,caloclustercontain:[17,70,163,213,225,226,241,403,404,412,416,462,473,474,489],calocorrectionmodel:422,calojet_tlv:442,calojetcorr_tlv:442,calorimet:[38,99,431,442,515],calorimt:442,calosampl:413,calotag:417,caloweight:442,campa:3,campaign:[3,61,401,452],campgain:401,can:[1,2,3,10,11,13,14,18,20,21,22,23,25,31,33,35,38,56,57,60,61,64,68,77,78,80,85,88,93,95,97,99,116,400,401,406,408,411,414,416,418,419,422,424,425,428,431,437,439,443,445,446,447,451,452,454,455,456,460,462,463,468,470,471,475,476,478,482,487,489,491,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],cancel:425,candid:[223,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388],cannot:[5,10,26,28,36,42,51,56,59,90,116,399,400,406,409,424,426,428,431,437,440,447,449,452,491,564],cap:426,capit:418,care:[10,33,41,56,57,95,101],carlo:[56,86],carri:1,castdoubl:494,caststr:400,categori:[1,23],caterina:[414,487],caus:[10,439,533],caution:[35,97,425],cbk:401,cc:[18,77,406,408],ccl:[403,404,474],ccl_end:403,ccl_itr:403,ccle:403,ccleta:403,cclphi:403,cd:[10,21,22,56,401,416,418,462],cdi:[1,2,60,400,425],cdi_test_2023:[2,60,470],cdv:[33,95,406,411,424,437,443,447,451,452,456],cell:[13,68,411,426],center:[407,438],cento:57,centos7:57,central:[56,428],centralmc15productionlist:401,centroidr:[124,425,426,496],cern:[1,10,13,14,19,39,41,55,56,68,100,101,113,223,232,235,240,253,264,268,270,283,293,339,400,401,405,406,411,414,415,416,418,422,424,425,431,434,437,439,440,443,445,447,452,454,456,465,470,471,487,489,491,497,503,523,549],cerr:[56,417,490,520],certain:[19,339],certifi:21,cest:419,cfgmgr:10,ch:[1,10,13,14,19,39,41,55,56,68,100,101,113,223,232,235,240,253,264,268,270,283,293,339,400,401,405,406,411,414,415,416,418,422,424,425,431,434,437,439,440,443,445,447,452,454,456,465,470,471,487,489,491,497,503,523,549],chad:426,chain:[3,13,23,28,39,49,56,61,68,90,100,112,401,407,411,414,425,428,438,443,453,456,463,471,488,489,533],chain_decis:[411,428,443,456],chain_idx:[411,428,443,456],chainfeatur:414,chaingroup:414,chanc:[20,85],chang:[1,2,14,20,21,22,23,28,29,30,35,56,60,90,91,92,97,401,406,408,411,417,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],changeinput:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547],changelog:22,charact:[19,346,419],chardet:21,charg:[18,77,119,124,128,135,407,417,425,426,438,453,458,477,496,498,499,509,528],chargedfract:[124,425,426,496],chargedfractiondecor:425,chargedpfopv:[18,77,417,425,496,498],charm:425,check:[1,3,13,14,19,28,39,56,57,61,90,100,116,324,348,399,400,401,406,408,411,415,418,419,428,431,437,439,442,443,444,445,447,451,452,454,456,462,463,465,491,529,549,564],checkout:[10,22,56],checkoutasgtag:56,checkstor:491,checktoolstor:[116,408,422,439,469,564],chf:426,chfpv:426,chi2:[53,110,458,460],chi2detail:[458,461],chi2ndof:458,chi2ndof_l:458,chi2ndofcut_max:[53,110],chi2ndofvseta:458,chi2ndofvspt:458,chi2prob:[458,460],chi2prob_:458,chi2prob_l:458,chi2prob_max:460,chi2prob_ss:458,chi2probmax:[53,110],child:464,child_barcod:[140,464,543],child_pdgid:[140,464,543],child_statu:[140,464,543],children:[18,84,417,542,543],chisquar:[138,457,458,460,537],choic:[10,13,41,68,101,437],choos:[3,21,28,56,61,90,401,411,418,462,540],chosen:[1,12,66,86,407,408,428,438,439],ci:563,cint:[56,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547],cl:[17,70,416,489],cl_itr:416,classdef:[38,87,114,469,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,515,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547],classfastjet_1_1filt:491,classic:428,classif:453,classifiedcharg:456,classifiedconvers:456,classifiedfak:456,classifiedisol:456,classifierparticleorigin:[55,113,464,465],classifierparticletyp:[55,113,464,465],classimp:[116,150,151,152,155,156,157,159,161,162,165,172,173,175,178,179,182,183,186,187,188,190,192,193,194,196,198,201,202,203,205,206,207,210,211,213,214,216,219,389,399,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,556,564],classnam:[10,14,86,116,399,421,469,494,564],clean:[3,7,18,21,25,28,56,57,61,77,88,90,223,401,404,417,424,425,426,428,435,442,459,462,471,481,496,498,499,525],clean_pass:[1,424],clean_passloosebad:[124,425,426,496],clean_passloosebadllp:[124,425,496],clean_passloosebadtrigg:[124,425,496],clean_passloosebadtriggerugli:[124,425,496],clean_passloosebadugli:[1,124,425,426,496],clean_passtightbad:[124,425,426,496],clean_passtightbadugli:[124,425,426,496],cleanedupisol:422,cleanevent_:428,cleaning_cut:428,cleanjet:[28,56,90,424,428],cleanlight:[18,77,417,425],cleanlightllp:[18,77],cleanllp:[417,425],cleanpar:1,cleantrig:[18,77,417,425],clear:[17,70,118,120,121,123,125,126,127,129,132,134,136,137,139,141,401,402,407,411,412,413,416,417,418,425,426,428,429,433,436,438,443,448,453,456,457,460,462,464,466,473,479,484,486,498,502,505,511,520,524,530,534,542,545,551],clearclust:[17,70,416,489],clearclustersus:[17,70,416,489],clearelectron:[17,70,416,489],clearelectronsus:[17,70,416,489],clearev:[17,70,416,489],cleareventus:[17,70,416,489],clearfatjet:[17,70,416,489],clearfatjetsus:[17,70,416,489],clearjet:[17,70,416,489],clearjetsus:[17,70,416,489],clearjettrigg:[17,70,416,489],clearl1jet:[17,70,416,489],clearmet:[17,70,416,489],clearmetus:[17,70,416,489],clearmuon:[17,70,416,489],clearmuonsus:[17,70,416,489],clearphoton:[17,70,416,489],clearphotonsus:[17,70,416,489],cleartau:[17,70,416,489],cleartausus:[17,70,416,489],cleartrack:[17,70,416,489],cleartracksus:[17,70,416,489],cleartrigg:[17,70,416,489],cleartriggerus:[17,70,416,489],cleartruth:[17,70,416,489],cleartruthfatjet:[17,70,416,489],cleartruthfatjetsus:[17,70,416,489],cleartruthus:[17,70,416,489],cleartruthvertic:[17,70,416,489],clearvertic:[17,70,416,489],click:10,client:56,cling:56,clone:[10,22,56],close:[400,406,408,411,417,418,422,425,431,436,437,439,443,444,445,447,452,454,456,468,490,491],closebyisocorrect:422,closest:[407,438,442],closest_muon:442,clostest:442,clu:[118,412,431,473],clust:431,cluster:[17,29,70,91,118,131,145,220,225,271,389,396,402,403,411,412,413,416,418,426,431,447,451,462,473,489,491,556,557],cluster_et:447,cluster_eta:447,clusterclass:[115,389],clustercontain:[17,70,144,145,220,224,241,242,272,389,396,416,489,553,556,557],clustercontainerclass:[115,389],clusterhist:[0,6,20,144,145,220,227,244,389,404,475,556,557],clusterhistsalgo:[0,20,116,144,145,181,220,221,226,243,389,430,556,557,564],clusterhistsalgoclass:[115,389],clusterinfoswitch:[18,75,118,242,389,392,417,473,490,556],clusterinfoswitchclass:[115,389],clusternam:[17,70,416,489],clustersequ:[169,418],clustersuffix:462,cmake:57,cmakelist:22,cmt:56,co:[10,442,461,509],code:[10,14,18,22,23,57,76,401,406,408,411,422,424,425,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,468],code_or_nbyt:416,collect:[1,3,10,17,20,23,25,28,61,70,88,90,400,401,406,408,411,413,415,421,422,424,428,431,437,439,442,443,445,447,451,452,454,455,456,460,462,463,465,468,488,494,502],collectionnam:416,collectiontre:56,colllect:86,com:[10,18,19,22,56,73,321,346,436,491],comb:[415,426,428],combend:415,combin:[1,2,12,18,34,35,38,41,47,60,66,81,96,97,99,101,106,112,415,417,442,471,515,531],combination_const_iter:415,combinator:[35,41,97,101,112,480],combinedtrackparticl:443,combjet_tlv:442,combjetcorr_m:442,combjetcorr_pt:442,combo:[17,70],combx:[124,425,496],come:[1,14,20,23,41,56,85,86,101,400,408,411,428,439,443,451,454,455,456,463,465,494],comma:[1,3,13,19,28,35,39,61,68,90,97,100,112,116,333,400,401,411,418,428,436,443,451,456,460,533,564],command:[14,21,56,57],comment:[56,439],commit:10,commmon:[116,564],common:[1,3,10,19,61,116,338,401,563,564],commun:[21,563],comp:[25,88,499],compar:[21,415,417,419,424],comparison:10,compat:[14,53,56,110,116,399,411,417,418,426,447,460,523,529,564],compil:[10,56,57,563],complain:[10,116,483,516,564],complet:[21,57,401,447],completecbc:401,complex:[116,564],compon:[408,426,439,454],compont:442,composit:[25,88],comput:22,concaten:20,concept:10,cond:488,condit:[401,465],cone_s:[467,546],coneflavourlabel:400,conetruthlabelid:[124,425,426,496],conf:[43,49,102,108,447,523,533],config:[1,3,14,22,23,25,29,56,57,61,88,91,375,401,417,424,447,497,503,533,549,562],config_multijetalgo:14,configdetail:417,configdir:[25,88,424],configfil:[401,424,447],configfilepath:447,confighandl:414,confignameafii:56,confignamedata:56,confignamefullsim:56,configpath:456,configprefix:431,configsofttrkfil:431,configstr:[18,71,72,74,75,76,77,78,79,80,81,82,83,84,417,490],configtool:[10,42,65,401,414,446,521],configu:56,configur:[1,2,3,10,12,13,14,18,21,23,24,25,41,44,60,61,66,68,76,88,101,104,112,375,400,401,404,406,408,411,414,415,416,418,421,424,428,431,435,437,439,443,446,447,452,454,455,456,459,463,470,475,476,478,482,483,487,488,489,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,541,544,547,549,562,563],configvec:454,connect:[23,56,401,402,406,407,408,411,413,414,415,422,424,425,428,431,437,438,439,443,445,447,448,451,452,453,454,455,456,460,464,468],connectbranch:[19,121,127,132,141,243,389,393,407,412,413,425,429,433,438,448,453,457,464,466,484,491,498,505,520,545,556],conserv:[10,33,95],consid:[1,3,21,25,29,41,57,61,88,91,101,112,399,411,418,424,428,443,445,451,454,456],consist:[41,101,501],const_cast:[411,443],const_iter:[403,415,419,431,455,458,460,490],constaccessor:[17,70,132,399,407,411,412,413,416,418,424,425,426,428,438,439,442,443,445,447,453,455,457,489,491,498,520],constcont:[18,148,490],constdatavector:[13,19,33,39,44,49,68,95,100,104,108,155,157,159,172,173,175,179,186,188,190,194,196,198,203,205,207,210,211,213,216,242,243,314,404,406,408,411,415,421,422,424,428,431,435,437,439,443,445,447,451,452,454,455,456,459,460,462,465,483,490,491,516,527,533],constdv:[18,148,490],constit:[413,425],constit_pseudojet:418,constitu:[17,18,38,70,77,99,413,417,418,425,426,428,485,486,498],constituent_:[122,413,425,485],constituent_eta:[122,413,425,485],constituent_phi:[122,413,425,485],constituent_pt:[122,413,425,485],constituental:[17,18,70,77,417,485,486],constituentpseudojet:418,constituentweight:[122,413,425,485],constraint:57,construct:10,constructor:[0,1,10,14,18,58,76,416,419,431,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547],constscal:[425,498],constscaleeta:[18,77,417,425],constscalem:425,constscalept:425,consvec:[413,425],cont:[19,314,329,348,436,491,561],cont_new:491,cont_t:[86,494],contact:[41,56,101],contain:[1,2,10,11,12,13,16,17,18,19,20,21,22,23,25,28,33,34,35,38,39,41,43,44,46,47,49,53,55,56,57,60,64,66,68,69,70,77,83,85,86,88,90,95,96,97,99,100,101,102,104,105,106,110,112,113,116,314,324,339,348,351,399,400,401,406,408,411,414,415,416,418,422,424,428,431,436,437,439,443,445,446,447,451,452,454,455,456,460,462,463,465,468,469,480,488,491,510,521,529,532,533,540,564],container:14,container_names_syst:[406,437,447,452],containerfeatur:[414,415],containernam:[19,314,351,491],containertyp:[18,242,389,392,490,556],containertypeenum:[115,389],content:[10,18,23,33,76,95,116,401,407,438,468,477,479,509,511,564],context:[21,142,143,548,549],continu:[7,10,19,56,333,400,406,408,409,411,412,413,415,416,417,418,423,424,425,428,431,439,440,442,443,445,446,447,451,454,456,460,462,465,467,468,470,496,498],contnam:468,contradictori:399,control:[1,3,10,18,61,76,474,481,489,493,499,506,513,525,535,540,546],conveni:[20,31,85,93,431],convent:[10,56],convers:[54,111,489],convert:[400,408,409,418,426,440,446,449,471],coordin:[407,411,438,443],cope:[437,452],copi:[1,2,10,11,12,13,18,19,25,33,35,41,47,56,60,64,66,68,73,88,95,97,101,106,314,339,351,406,424,436,437,445,446,447,452,460,468,491],core:[3,61,401,412],coreflag:412,coremet:431,coretrack:456,cori:57,corr:426,correct:[0,10,11,12,13,14,20,21,22,23,25,31,35,38,39,64,66,68,85,88,93,97,99,100,253,400,401,406,408,417,422,424,425,428,431,437,439,442,447,452,454,563],correctdata_cb:437,correctdata_idm:437,corrected_actualinteractionspercross:[401,412],corrected_averageinteractionspercross:[401,412],corrected_jet:442,corrected_jet_p4:442,correctedactualmu:412,correctedandscaledactualmu:412,correctedandscaledaveragemu:412,correctedandscaledavgmu:[401,412],correctedandscaledmu:[401,412],correctedaveragemu:412,correctedavgmu:[401,412],correctedfatjets_tlv:[38,99,413,442],correctedmu:[401,412],correctedscaled_actualinteractionspercross:[401,412],correctedscaled_averageinteractionspercross:[401,412],correctedvector:442,correctioncod:[152,188,203,400,401,406,408,422,424,428,431,437,439,447,452,454],correctleakag:406,correctli:[10,21,22,33,41,95,101,112,401,431,432],corrector:[14,18,147,490],correctvtx10:426,correctvtx10_raw:426,correctvtx1:426,correctvtx1_raw:426,correl:[12,66],correlationmodel:408,correspond:[1,13,86,400,401,408,411,425,436,438,439,443,446,453,454,455,462],correspondingli:20,corrjvf:426,corrupt:401,cosh:[420,442,447],cosmic:[39,100,443],cosmic_cut:443,could:[33,41,57,95,101,112,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,399,400,401,406,408,411,412,422,424,425,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,465,468,489,490,549],couldn:399,count:[28,41,53,55,56,90,101,110,113,116,400,401,411,418,426,428,443,451,456,458,465,471,501,544,564],counter:[41,101,401,445],counternam:520,countpass:[13,39,44,49,68,100,104,108,411,443,451,456,483,516,527,533],countprimaryvertic:[19,243,389,393,412,418,491,556],cours:56,cout:[56,409,412,413,415,420,425,426,429,433,434,440,444,449,457,464,491,520],cover:21,cp:[2,3,10,11,12,13,14,19,23,25,28,29,34,35,39,41,43,44,46,47,101,116,235,264,268,275,279,333,341,389,400,401,406,408,411,418,422,424,428,431,437,439,443,447,451,452,454,463,470,471,478,480,483,491,495,497,501,503,510,512,516,523,527,529,531,556,564],cp_muoncalibtool_tool:437,cpp:[17,21,70,112,116,564],cptr:[414,415,488],cquark:426,crack:[13,44,68,104,411,451],crash:[10,24,431,451,501,533],creat:[1,2,3,11,12,13,18,19,20,21,22,23,25,31,33,35,41,47,56,57,60,61,64,66,68,76,77,85,86,88,93,95,97,101,106,116,314,401,406,408,411,414,415,418,419,422,424,428,431,432,436,437,439,443,445,447,451,452,454,455,456,460,462,463,465,468,489,564],createselectedcontain:56,createsvc:10,createtre:[54,111,462,540],creation:563,creator:540,criteria:400,criterion:1,cross:[7,10,401],crosssect:[86,494],cs:418,cst:431,ctype:[244,492],cumul:1,current:[1,10,13,17,18,22,38,39,44,56,68,70,76,99,100,104,116,401,564],currentcontext:422,currentweight:56,custom:[13,39,41,68,100,101,428],customoperatingpoint:417,cut:[0,1,3,10,13,23,25,28,38,39,44,53,55,56,58,61,68,88,90,99,100,104,110,113,223,400,401,406,408,411,412,416,417,418,422,424,425,428,431,437,439,443,445,446,447,451,452,454,455,456,460,463,465,468,470,471,486,491,501,533],cutbasedtoolsmap:411,cutbasedwp:411,cutbookkeep:[33,95,152,260,401,436,508],cutbookkeeperauxcontain:[33,260,436,508],cutbookkeepercontain:[33,152,260,401,436,508],cutbookkeepersaux:436,cutbookkep:401,cutdecis:411,cutdecisional:411,cutdr:442,cutflow:[3,13,41,61,101,116,401,411,428,443,445,451,455,456,460,465,469,471,483,501,516,518,527,533,538,544,564],cutflow_electrons_1:[401,411,445],cutflow_electrons_2:[401,411],cutflow_jets_1:[401,428,445],cutflow_muons_1:[401,443,445],cutflow_muons_2:[401,443],cutflow_photons_1:[401,445,451],cutflow_taus_1:[401,445,456],cutflow_taus_2:[401,456],cutflow_trks_1:401,cutflow_truths_1:[401,465],cutflow_weight:[401,411,428,443,451,456,460,465],cutlevel:[422,424,425,460],cutontrigg:56,cutprofiles_22072015:[28,90,501],cutsmetmak:[182,431],cvmf:[56,57],cxx:[10,13,39,56,68,100,144,221,222,223,225,226,227,228,230,231,232,233,234,235,236,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,262,263,264,265,266,267,268,269,270,273,275,276,277,278,279,281,282,283,284,285,286,287,288,290,291,292,293,294,296,297,298,299,302,303,304,305,306,307,308,309,310,311,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,489,491,557],cxxabi:[243,491],cxxdirectori:[220,389],cxxfile:[220,389],cycl:401,d0:[39,53,100,110,138,407,411,425,426,438,443,457,458,461,537],d0_:458,d0_cut:[411,443],d0_l:458,d0_max:[53,110],d0_sign:461,d0_signific:[407,411,438,443],d0_ss:458,d0_vl:458,d0_wrtpv:461,d0err:[426,458],d0err_wrtpv:461,d0errvseta:458,d0errvsipt:458,d0errvsphi:458,d0sig:[407,411,426,438,443,458,461],d0sig_cut:[411,443],d0sig_sign:461,d0sig_signed_pdf:461,d0sig_wrtpv:461,d0sigacc:[407,438],d0sigdecor:[411,443],d0signific:[411,443],d0sigsign:461,d0sigvspt:458,d0val:426,d0vspt:458,d2:[122,413,485],d3pdreader:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],d:[10,14,56,57,412,436,443,444],d_:[13,68],dandoi:[223,253,270,424,445,489,497],daod:[3,13,43,61,68,102,116,401,411,564],daod_phi:[116,411,428,443,463,564],daod_susy10:14,dash:57,data12_8tev:57,data15_13tev:[56,401],data15_comm:10,data:[1,3,12,13,22,25,33,34,38,57,61,66,68,88,95,96,99,116,400,401,406,408,411,413,416,424,425,437,439,444,447,454,468,471,564],databas:416,datakei:[130,444,517],datamodel_detail:415,datascout:401,dataset:[19,56,57,317,338,401],datatyp:447,datavector:[157,159,175,188,190,198,203,205,233,277,406,408,415,424,425,437,439,447,452,454,481,491,525],date:[10,21,56],davi:[414,487],daw:23,dc14:[407,438,477,479,509,511],deactiv:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],dead:[13,53,68,110,411,458],deadhvcell_cut:411,deadhvtool:411,deal:[10,33,95,116,413,564],dealt:10,dear:489,debug:[0,3,10,17,19,42,54,56,58,61,65,70,111,116,243,324,333,348,389,393,399,401,405,406,408,411,415,416,418,421,446,447,458,461,462,471,489,491,494,521,540,556,564],debugtool:[9,116,144,145,181,220,221,242,243,389,430,556,557,564],debugtoolclass:[115,389],dec_baselin:10,dec_correctedfatjets_tlv:442,dec_disabledtrigg:401,dec_isbtag:400,dec_isbtagor:400,dec_ispassedbit:401,dec_ispassedbitsnam:401,dec_muonsintrackjet:442,dec_passedtrigg:401,dec_quantil:400,dec_sfbtag:400,dec_sffjvt:428,dec_sfjvt:428,dec_triggerprescal:401,dec_triggerprescaleslumi:401,dec_weight:400,decai:[38,99],decayvtx:464,decid:[56,57,411,424,428,443,456],decis:[1,2,3,10,13,25,28,39,41,43,56,60,61,68,88,90,100,101,102,116,399,400,401,411,414,416,424,425,428,438,443,445,451,453,471,564],declar:[1,10,14,17,70,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,401,404,408,415,435,439,454,459,483,516],decod:491,decom:431,decor:[1,2,12,13,19,25,28,29,34,38,39,41,43,44,53,55,60,66,68,87,88,90,91,96,99,100,101,104,110,112,113,339,400,401,408,411,415,424,425,428,431,439,442,443,445,446,447,451,454,455,456,460,463,465,521,523,533],decorateselectedobject:56,decorr:460,decorrelationmodel:[406,447],decorwp:[411,443,451],decreas:[116,564],dedic:[23,426],deem:[116,564],deep:[19,33,95,314,351,436,460,468],deepcopi:1,deepcopyantikt4jet:[33,95],deepcopymuon:[33,95],defaul:[28,53,55,90,110,113],default_best_dr:455,defaultdecorwp:446,defaultvalu:[17,70,132,489,520],defin:[10,13,18,20,21,28,29,39,49,55,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,147,148,149,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,408,411,414,439,454,464,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,557,558,559,560,561,562,564],definingparameterscovmatrix:[138,457,537],definingparameterscovmatrixvec:[458,461],definit:[19,25,88,302,303,304,305,307,308,309,310,312,313,338,339,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,418,425,446,557],del:10,delet:[10,14,20,21,56,85,404,406,407,408,409,411,412,413,414,415,416,420,421,422,425,426,428,429,431,433,434,435,436,438,440,442,443,445,446,447,448,449,451,453,454,456,457,459,460,462,464,466,498,520,528,530,545],delim:400,delimit:[33,95],delta:[133,448,522],deltar:[1,415,423,425,426,442,461,467],demangl:491,demangled_nam:491,demonstr:[10,19,314],densiti:412,depend:[7,14,21,23,33,34,56,95,96,116,400,401,564],deprec:[19,56,116,321,399,417,460,491,564],depric:520,deriv:[3,18,24,28,44,61,90,104,389,401,406,408,411,442,443,456,533,556],derivationnam:24,describ:[1,3,41,56,61,101],descript:[20,31,56,57,85,93,557],desicion:460,design:10,desir:[56,416],destin:[17,70,132,489,520],destroi:14,destructor:[20,21,85,419],deta:[455,461],detach:22,detail:[1,17,20,21,23,25,41,50,70,85,88,101,401,416,420,425,426,458,467,498,499,557,563],detailstr:[17,20,21,31,57,70,85,93,118,120,121,123,125,127,129,132,134,136,137,139,141,402,403,407,409,412,413,416,419,420,425,426,433,434,438,440,448,449,453,457,458,461,464,466,467,473,474,479,481,484,486,489,492,493,498,499,505,506,511,513,520,524,525,530,534,535,539,542,545,546],detdescrvers:10,detect:10,detector:[28,90,401,407,425,438,498],detectoreta:[18,77,417,425,428],determin:[1,2,3,18,19,33,60,61,76,95,116,338,400,401,418,442,443,471,520,564],deteta:[28,90,425,428],deteta_max:[28,90],deteta_min:[28,90],dev:[25,88,401],develop:[23,56,401,563],devhelp:21,devmod:424,df:401,dfcommoncrackvetoclean:411,dfcommonelectron:411,dfcommonelectronsisem:411,dfcommonelectronslh:411,dfcommonelectronslhloos:411,dfcommonelectronslhmedium:411,dfcommonelectronslhtight:411,dfcommonjets_eventclean_loosebad:[401,412],dfcommonjets_eventclean_tightbad:412,dfcommonjets_fjvt:[425,428],dfcommonjets_isbadbatman:401,dfcommonphotonsisemloos:447,dfcommonphotonsisemmedium:447,dfcommonphotonsisemtight:447,di:[13,35,68,97,411,428,443,456],dictionari:[41,56,57,101,112,491],did:[10,411,428,443,456,465],didn:[411,424,425,428,443,456],diel_trig:411,dielectron_trigmatch_pair:411,dielectron_trigmatch_pair_map:411,dielectrontrigmatchpairmap:411,dielectrontrigmatchpairmapdecor:411,diff:10,differ:[1,3,10,14,19,20,31,33,34,38,61,85,93,95,96,99,116,149,400,401,406,408,411,413,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,462,468,564],differenti:[116,564],dijet:[7,28,90,428,471],dijet_trig:428,dijet_trigmatch_pair:428,dijet_trigmatch_pair_map:428,dijettrigmatchpairmap:428,dijettrigmatchpairmapdecor:428,dilepton:[411,443,456],dimu_trig:443,dimuon:[39,100,533],dimuon_trigmatch_pair:443,dimuon_trigmatch_pair_map:443,dimuontrigmatchpairmap:443,dimuontrigmatchpairmapdecor:443,dip12:426,dip13:426,dip23:426,dipexcl12:426,direct:[11,14,56,57,64],directdriv:56,directli:[1,20,21,23,85,86,116,317,439,468,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],directori:[5,21,22,26,36,42,51,56,57,59,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,389,462,540],dirti:56,disabl:[1,39,100,400,416],disabledtrigg:[401,416],disagre:[116,564],discard:[56,406,447],discrimin:456,discuss:10,disk:[56,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],disklistloc:56,displai:21,distanc:[3,61,401,411,443],distemptybcid:[401,412],distlastunpairedbcid:[401,412],distnextunpairedbcid:[401,412],distribut:[116,399,400,401,404,405,406,408,410,411,414,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],ditau_trig:456,ditau_trigmatch_pair:456,ditau_trigmatch_pair_map:456,ditautrigmatchpairmap:456,ditautrigmatchpairmapdecor:456,divid:425,dl1d:425,dl1dv00:[124,400,425,496],dl1dv00_continu:[124,423,425,496],dl1dv00_fixedcutbeff_60:[124,423,425,496,498],dl1dv00_fixedcutbeff_70:[124,423,425,496,498],dl1dv00_fixedcutbeff_77:[124,423,425,496,498],dl1dv00_fixedcutbeff_85:[124,423,425,496,498],dl1dv00_pb:[124,425,496],dl1dv00_pc:[124,425,496],dl1dv00_pu:[124,425,496],dl1dv01:[124,400,418,425,496],dl1dv01_continu:[124,423,425,496],dl1dv01_fixedcutbeff_60:[124,423,425,496,498],dl1dv01_fixedcutbeff_70:[124,423,425,496,498],dl1dv01_fixedcutbeff_77:[124,423,425,496,498],dl1dv01_fixedcutbeff_85:[124,423,425,496,498],dl1dv01_pb:[124,425,496],dl1dv01_pc:[124,425,496],dl1dv01_pu:[124,425,496],dl1r:[2,28,60,90,124,400,425,470,496,501],dl1r_continu:[124,423,425,496],dl1r_fixedcutbeff_60:[124,423,425,496,498],dl1r_fixedcutbeff_70:[124,423,425,496,498],dl1r_fixedcutbeff_77:[124,423,425,496,498],dl1r_fixedcutbeff_85:[124,423,425,496,498],dl1r_pb:[124,425,496],dl1r_pc:[124,425,496],dl1r_pu:[124,425,496],do2stationshighpt:437,doc:[10,454],docker:563,document:[1,10,14,23,25,50,56,57,389,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,556,563],docutil:21,doe:[1,3,10,20,21,24,28,56,57,61,85,90,116,401,406,408,411,418,419,425,428,439,442,443,447,451,454,456,491,501,538,544,564],doelectron:445,doeleeleor:445,doesn:[10,21,401,406,408,411,422,424,428,431,436,437,439,443,445,446,447,451,452,454,455,456,460,468],dofatjet:445,doglioni:[414,487],dojet:445,dojvf:56,dolrt:417,dolumiprescal:401,domain_error:425,domuon:445,don:[2,7,10,17,21,23,28,60,70,90,401,418,425,446,470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547],done:[1,10,23,28,57,90,400,401,406,408,411,422,424,425,428,431,436,437,439,442,443,445,447,451,452,454,455,456,460,463,465,468,470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547],donomin:[2,60,400,470],dont:400,dopflow:431,dophoton:445,dopileupreweight:56,dostuff:14,dot:10,dotau:445,dotfil:57,doubl:[3,10,12,13,19,20,28,29,31,39,56,66,68,85,90,91,93,100,121,124,243,326,389,393,400,401,408,411,412,415,418,419,425,426,428,431,433,439,442,443,447,454,471,483,484,491,492,494,496,498,501,503,516,556],double_t:[20,31,85,93,419,426,492],doubt:21,dougli:424,down:[10,23,411,418,425,428,443,445,451,456],download:56,downstream:[1,3,11,13,14,23,25,41,43,61,64,68,88,101,102,112,401,411,443,451,456,510,529],downward:[53,110],doxyfil:21,doxygen:[5,26,36,42,51,59,491,563],doxygenclass:[5,26,36,42,51,59],doxygenfunct:[302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388],dphi:[19,243,389,393,418,455,461,491,556],dq2:56,dr:[38,99,426,428,442,455,456,461,467],draw:[20,31,56,85,93],dress:[18,84,417,542,543],drflightdir:426,driven:56,driver:[56,57],drop:401,drscoringtool:[13,28,39,49,483,501,516,533,541],drtojet:426,dsid:[2,3,57,60,61,400,401,418,470],dsid_int:401,dsidtogener:[2,60,470],dslist:[317,418,491],dsttomatlai:[425,426],due:[10,24,33,95,401,418,424,428],dummi:[14,56,415,501],dummy1:425,dummysf:423,dummyvaraibletokeepexampl:[87,495],dump:[1,10,23,33,95,436],duplic:[3,28,61,90,399,400,401,411,428,436,442,443,451,455,456,462,465,491],duplicates_tre:[3,61,471],dxaod:[11,13,64,68,401],dxaodeventscbk:401,dynamic_cast:[399,401,407,409,411,413,418,425,426,436,438,440,443,448,449,453,457,464],dz0:467,dz0befor:467,e277:[133,448,522],e2:413,e3668_s2576_s2132_r6630_r6264:10,e3:[20,31,85,93,413],e4049_s2608_r6765_r6282_p2411_tag_10_v1_output_xaod:14,e:[0,1,2,3,4,8,10,14,18,19,21,22,23,25,28,34,35,43,45,46,47,55,56,60,61,66,78,88,90,96,97,102,105,106,113,339,401,403,406,407,408,411,412,413,418,420,422,423,424,425,426,428,431,437,438,439,442,443,444,445,447,451,452,454,455,456,460,463,468,471,491,493,520],e_:420,e_dress:[140,464,543],e_vs_eta:403,e_vs_phi:403,each:[1,11,12,13,17,18,21,23,25,33,39,41,44,56,57,64,66,68,70,76,88,95,100,101,104,112,116,401,406,408,411,416,422,424,425,426,428,431,437,438,439,443,445,447,451,452,453,454,455,456,460,462,468,489,564],earlier:[28,56,90,416],easi:[21,57],easier:[10,21,57,426],easiest:436,easili:[1,56],ecf1:[122,413,485],ecf2:[122,413,485],ecf3:[122,413,485],echo:[21,56],echotyp:491,ecosystem:10,edm:[23,56,400,401,405,406,408,411,414,416,422,424,428,436,437,439,443,445,447,451,452,454,455,456,463,465,470,480,483,495,501,516,518,521,532,533,538,544],edu:56,eff:[426,439,454,494],eff_:408,eff_data:408,eff_mc:408,effcalib:[2,60,400,470],effect:[14,116,564],effic:400,effici:[0,1,2,10,12,14,28,60,66,90,400,408,411,417,428,439,443,447,454,480,512,531,563],efficiecni:419,efficiencyb:[2,60],efficiencybcalibr:400,efficiencyccalibr:400,efficiencycorrectiontyp:454,efficiencylightcalibr:400,efficiencytcalibr:400,effmc:439,effnam:[408,439],effsf:[18,72,79,80,81,417,448,522,524],effvectrig:408,efhisto:415,efhistoprmvtx:[415,488],efjet:[415,488],efracsvx:426,eg:[10,19,50,351],egamma:[13,68,411,446,451],egammaanalysisinterfac:[235,275,483,523],egammacalibrationandsmearingtool:[11,43,64,198,230,406,447,478,523],egammadef:[162,198,202,411,447,451],egammaev:446,egammaidentificationrun2:13,egammaidqu:[417,446],egammaparamet:[407,411,447,451],egammapid:[417,446,447],egammapiddef:[168,198,273,417,446,447,521],egammatruthxaodhelp:491,egammavariablecorrect:[198,447],egammaxaodhelp:[198,202,447,451],ei:399,eigenvectorreductionb:400,eigenvectorreductionc:400,eigenvectorreductionlight:400,einsampl:413,einsampleful:413,either:[1,11,12,13,14,64,66,68,451],el:[2,3,6,9,10,11,12,13,14,16,17,20,23,25,27,28,29,32,33,34,35,37,38,39,41,43,44,46,47,48,49,52,53,54,55,56,60,61,62,63,64,66,67,68,69,70,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,120,389,400,401,404,405,406,408,410,411,413,414,415,416,419,421,422,424,426,427,428,431,432,433,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,461,462,463,465,468,469,470,471,475,476,478,479,480,482,483,487,488,489,491,492,494,495,497,499,500,501,503,504,507,508,510,512,514,515,516,518,523,526,527,529,531,532,533,536,538,539,540,541,544,547,549,556,564],el_itr:[408,411,416],el_par:424,el_return_check:[300,389,548,556],el_syst_cont_nam:445,ele_syst:406,elec:[17,70,120,407,409,416,479,489],elecnam:[17,70,416,489],elecont:431,elecpt:409,electron:[0,11,12,13,17,18,20,29,35,41,58,64,65,66,68,70,72,91,97,101,120,131,145,157,159,173,196,220,231,233,271,273,389,396,406,407,408,409,411,416,417,422,431,436,445,446,451,468,479,480,481,483,489,495,521,531,556,557,563],electronauxcontain:[159,187,408,436],electroncalibr:[11,29,91,116,144,145,181,220,221,242,243,389,430,556,557,564],electroncalibrator_syst:[11,41,64,101,478],electroncalibratorclass:[115,389],electronclass:[115,389],electroncontain:[11,12,13,17,41,64,66,68,70,101,144,145,157,159,161,162,173,182,187,196,220,229,232,233,235,241,242,247,270,272,273,389,396,406,408,410,411,416,422,431,436,445,462,480,481,483,489,495,518,521,556,557],electroncontainerclass:[115,389],electroncutbasedpidmanag:[13,42,273,389,411,446,483,521,556],electroncutbasedpidmanagerclass:[115,389],electronefficiencycorrect:[232,480],electronefficiencycorrectiontool_effsf_:408,electronefficiencycorrectiontool_effsf_iso_:408,electronefficiencycorrectiontool_effsf_pid_:408,electronefficiencycorrectiontool_effsf_trig_:408,electronefficiencycorrectiontool_effsf_trigmceff_:408,electronefficiencycorrector:[12,116,144,145,181,220,221,242,243,389,430,556,557,564],electronefficiencycorrectorclass:[115,389],electronhist:[20,144,145,161,220,229,236,243,245,389,410,556,557],electronhistsalgo:[20,86,144,145,181,220,233,243,246,389,430,556,557],electronhistsalgoclass:[115,389],electronidloos:417,electronidloose1:417,electronidloosehlt:417,electronidloosepp:417,electronidmedium1:417,electronidmedium:417,electronidmediumhlt:417,electronidmediumpp:417,electronidmedum:417,electronidtight1:417,electronidtight:417,electronidtighthlt:417,electronidtightpp:417,electroninfoswitch:[18,75,120,242,389,392,409,417,479,481,490,556],electroninfoswitchtempl:[115,389],electronlhpidmanag:[13,42,370,411,446,483,521],electronlikelihoodlooseofflineconfig2016_smooth:523,electronphotonfourmomentumcorrect:[50,198,230,447,478],electronphotonid:446,electronphotonselectortool:[43,50,102,162,168,198,235,273,411,417,446,447,521,523],electronphotonvariablecorrectiontool:[43,198,447,523],electronpt:409,electronselector:[12,13,18,41,66,101,116,144,145,147,181,220,221,242,243,273,389,430,489,490,556,557,564],electronselector_syst:[13,41,68,101,483],electronselectorclass:[115,389],electronselectordict:[41,101],electronwp:[411,422],eleeffcorr_isosyst:[12,66,480],eleeffcorr_pidsyst:[12,66,480],eleeffcorr_recosyst:[12,66,480],eleeffcorr_trigsyst:[12,66,480],eleeleort:445,eleid:456,eleidlevel:[454,531],eleidnon:456,eleidrnnloos:[454,456],eleidrnnmedium:[454,456],eleidrnntight:[454,456],eleidwp:456,elejetort:445,element:[11,13,19,25,39,56,64,68,88,100,331,411,442,443,445,446,451,454,455,456,463],elementlink:[411,413,418,424,425,426,442,443,445,491],eleolr:531,eleolrelectron:[18,81],elephi:433,elernn:456,elernn_wp_map:456,elernnloos:456,elernnmedium:456,elernnscor:[135,453,456,528],elernnscoreacc:453,elernntight:456,elernnwp:456,elesumet:433,elevarl:431,elevart:431,eleveto:417,elimin:56,elisoeff_sf_syst_:[407,408],eloss:442,elossi:[442,509],elossx:[442,509],elossz:[442,509],elphvariablenominalcorrect:447,elpideff_sf_syst_:[407,408],elrecoeff_sf_syst_:408,elrecoeff_sf_syst_reconstruct:407,els:[10,56,116,301,389,399,400,401,406,407,408,409,411,412,413,414,415,416,417,418,419,424,425,426,428,429,431,436,437,438,439,440,442,443,444,445,446,447,451,452,453,454,455,456,460,462,463,464,465,466,468,469,489,491,494,498,502,505,520,549,556,564],elsc_itr:406,elsuffix:462,elsyst:[41,101,445,518],elsystnam:462,eltrigeff_sf_syst_:[407,408],eltrigmceff_syst_:[407,408],em:[412,425,426],emac:489,email:[14,491,563],emb1:[413,426],emb2:[413,426],emb3:[413,426],emb:[116,564],eme1:[413,426],eme2:[413,426],eme3:[413,426],emf:[425,426],emfrac:[122,124,413,425,426,485,496],empti:[3,10,11,13,18,19,25,28,33,39,41,61,64,68,72,79,88,90,100,101,112,116,339,399,400,401,404,406,407,408,409,411,413,414,416,418,421,424,425,428,431,435,436,437,438,439,440,442,443,445,447,451,452,454,455,456,459,460,462,463,465,489,491,494,501,505,520,533,564],empty_str:[406,408,437,439,447,452,454],emscalem:425,emscalept:425,emtopo:[3,61,428],emtopojet:428,en:1,enabl:[3,18,19,20,21,25,28,29,33,39,56,57,61,72,78,79,81,88,90,91,95,100,324,348,431],enablefailur:431,encod:[41,101],encourag:10,end:[17,20,23,56,70,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,399,401,403,406,407,411,413,414,415,417,418,419,423,424,425,426,428,429,431,436,437,438,442,443,444,445,447,448,451,452,453,454,455,458,460,462,467,490,491,494,502],endcap:426,endcond:488,endif:[416,428,430,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],endl:[56,400,409,412,413,415,417,420,425,426,429,433,434,440,444,449,457,464,490,491,520],endmsg:[418,491],endrst:21,energi:[11,18,56,64,77,417,420,425,426,430,442,496,498,499,520],energy_:420,energyfract:426,energylight:[18,77,417],energyloss:[18,79,128,417,438,442,509],energylosssigma:[128,438,509],energylosstyp:[128,438,509],energypersampl:[425,426],enforc:428,enough:[20,57],ensur:[54,111,116,424,564],enter:[21,419],entir:[21,56,57,418,468],entri:[14,18,56,77,401,419,439,454],enumer:[18,19,38,41,99,101,124,130,147,148,149],enummap:[417,490],enumpars:[18,242,389,392,411,417,443,446,490,556],enumparserclass:[115,389],environ:[14,22,56,57],eof:400,ep:56,epersamp:[425,426],epersampv:426,equal:[446,462],equival:[3,10,57,61,418],eras:[401,417,424,428,454,491],eratio:[133,448,522],eror:[306,311,321,369,373,375,381,383,387],err:458,error:[2,3,10,14,21,53,56,60,61,110,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,400,401,406,408,412,414,415,416,418,422,424,428,437,439,444,446,447,452,458,488,491],errorcod:408,errorontagweightfailur:400,errorst:[401,412],es2017_r21_v1:[43,102,523],esampl:413,esmodel:[406,447],especi:[3,61],establish:399,et8x8:429,et:[28,90,411,420,428,429,451,493,502],et_:420,et_m:420,et_m_:420,et_max:[28,90],et_min:[28,90],et_s_:420,eta1:[48,107,455,532],eta2:[48,107,455,532],eta:[13,28,38,39,44,53,55,68,90,99,100,104,110,113,400,403,411,412,413,415,416,418,420,423,424,425,426,428,429,431,442,443,445,451,455,456,458,460,461,465,486,493,498,499,502,520],eta_:[56,420],eta_and_quality_cut:443,eta_bs_online_vz_0_1:426,eta_bs_online_vz_1_1p5:426,eta_bs_online_vz_1p5_2:426,eta_cut:[411,428,451,465],eta_dress:[55,113,140,464,465,543],eta_dressed_max:[55,113],eta_dressed_min:[55,113],eta_max:[28,39,44,53,55,90,100,104,110,113],eta_min:[28,53,90,110],eta_vl:458,eta_vs_phi:403,etab:[407,411,447,451],etaj:425,etajes_jm:424,etajesscalem:425,etajesscalept:425,etamaxjvf:56,etapair:428,etaphi:426,etaphimap:[18,77,417],etc:[20,23,56,401],etcetera:20,etcone20:[119,417,477],etcone30:417,etcone40:417,etmax_cut:428,etmin_cut:428,etmiss:[25,88,424],eval:57,evalu:[28,90,418,422,424,428,447],even:[2,21,60,116,411,428,443,456,564],event:[0,10,13,17,18,19,23,28,39,41,45,54,56,57,61,68,70,74,83,86,90,100,101,111,121,223,243,319,324,329,348,389,393,400,401,405,406,408,411,412,413,415,416,418,422,424,425,426,428,430,431,437,439,443,445,447,451,452,454,455,456,460,462,463,465,468,471,483,484,489,491,527,540,556,561,563],event_systnam:462,eventbookkeepercollect:10,eventclean:[18,74,412,417],eventclean_loosebad:412,eventclean_tightbad:412,eventdetailstr:56,eventflag:412,eventformat:10,eventformatsvc:10,eventinfo:[2,3,17,25,33,35,47,60,61,70,88,95,97,106,116,130,144,145,150,152,155,157,159,162,165,172,179,182,186,188,190,194,198,202,203,205,206,207,210,213,214,216,220,222,233,241,242,243,245,251,265,269,275,287,389,396,399,400,401,404,405,406,408,409,411,414,415,416,420,421,422,426,428,431,435,436,437,439,440,443,444,447,449,451,452,454,455,456,458,459,460,461,462,463,465,469,470,481,489,490,493,494,497,499,512,513,517,523,525,531,535,539,556,557,564],eventinfoclass:[115,389],eventinfoswitch:[18,76,121,242,389,392,417,484,490,556],eventinfoswitchclass:[115,389],eventloop:[10,20,31,56,85,93,151,152,155,156,157,159,161,162,165,172,173,175,178,179,182,183,186,187,188,190,192,193,194,196,198,201,202,203,205,206,207,210,211,213,214,216,219,221,244,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,469,492],eventloopgrid:56,eventnumb:[10,56,400,401,406,412,447],eventpass:[411,443,451,456],eventpassthissyst:[411,443,451,456],eventselector:10,eventshap:[163,412],eventtyp:[399,416,428,436,444,460],eventtypebitmask:399,eventu:[406,408,437,439,447,452,454],eventweight:[20,21,31,85,93,403,404,409,420,426,434,435,436,440,449,458,459,461,467,474,481,493,494,499,506,513,525,535,539,546],ever:[3,21,61,411,443,451,456],everi:[1,10,18,53,83,110,401,406,408,411,416,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,468],everyon:[10,116,564],everyth:[10,14,56,57,401,406,408,411,416,417,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],everytim:21,evnum:56,evt_list:10,evtgen:418,evtmax:10,evtshap:412,evtxcollect:415,exact:[18,56,72,74,75,76,77,78,79,80,82,83,84],exactli:[17,18,28,70,76,90,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],exampl:[1,2,10,18,19,20,21,22,23,31,41,56,60,72,75,77,79,80,81,85,93,101,112,116,314,324,348,351,399,413,418,425,491,564],example_metmaker_metsystematicstool:431,exampleclass:10,except:[10,18,20,78,116,167,176,399,416,425,445,564],execut:[1,2,3,6,9,10,11,12,13,14,16,20,21,25,27,28,29,31,32,33,34,35,37,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,67,68,69,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,400,401,403,404,405,406,408,409,410,411,413,414,415,420,421,422,424,426,427,428,431,432,434,435,436,437,439,440,441,442,443,445,447,449,450,451,452,454,455,456,458,459,460,461,462,463,465,467,468,470,471,473,474,475,476,478,479,480,481,482,483,486,487,488,492,493,494,495,497,499,500,501,503,504,506,507,508,510,511,512,513,514,515,516,518,523,524,525,526,527,529,530,531,532,533,534,535,536,538,539,540,541,542,544,546,547],executedecor:[48,107,455,532],executeefficiencycorrect:[2,60,400,470],executematch:[112,463,541],executeor:[41,101,445,518],executeselect:[13,28,39,44,49,55,68,90,100,104,108,113,411,428,443,451,456,465,483,501,516,527,533,544],executesf:[12,35,47,66,97,106,408,439,454,480,512,531],executesystemat:[25,424,497],executetrackcollect:[53,110,460,538],executetracksinjet:[53,110,460,538],exhal:21,exist:[18,20,25,34,56,76,85,96,116,400,408,411,418,419,424,428,431,436,439,442,443,454,456,462,483,516,549,564],exit:[56,401,424,445,462],exot:14,exp:[142,143,548],expand:[414,487],expandpathnam:[56,400],expect:[18,20,21,53,77,85,110,116,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,401,564],expectblay:411,expectblayerhit:411,expectinnermostpixellayerhit:[138,457,537],expectnexttoinnermostpixellayerhit:[138,457,537],expert:[2,60,401],explain:[10,13],explicit:[3,61,437],explicitli:[10,19,339,411,417,428,443],exploit:446,expos:21,express:[1,3,61,401],extend:[20,21,85,426],extendedpileupreweight:401,extens:[41,101,401],extern:[10,405,428,465,470,471,478,480,483,495,497,501,504,510,512,516,518,523,529,531,533,538,544],extra:[10,22,57,401,411,443,451,471],extra_libs_180822:57,extra_opt:57,extract:[13,16,18,28,39,49,69,76,112,401,417],extraopt:57,extrapol:443,f1:[133,448,451,522],f:[10,14,407,412,433,437,438,444,452,456],f_c:425,f_grid:56,f_input:56,fab:[411,413,415,416,418,424,425,426,428,431,442,443,447,451,458,460,461,465],facet:57,facini:[223,253,400,419,424,489],fact:[10,12,57,66],factor:[1,2,12,18,60,66,72,79,81,400,407,417,426,428,430,438,439,447,453,477,479,509,511,530],fail:[1,28,39,56,90,100,400,401,406,408,411,413,415,424,428,437,439,443,445,447,451,452,454,456,460,462],failkei:[428,460],failtrackfilt:456,failur:[10,19,348,399,400,401,404,406,408,409,411,414,415,418,421,422,424,426,428,431,432,435,436,437,439,440,443,445,447,449,451,452,454,455,456,459,460,462,463,465,468,491,549],fairli:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],fake:[3,61],fall:400,fallback:[2,60],fals:[1,2,3,9,11,12,13,14,16,17,18,24,25,28,29,33,34,35,38,39,41,42,43,44,46,47,49,53,54,55,56,57,60,61,63,64,65,66,68,70,76,87,88,90,91,95,96,97,99,100,101,102,104,105,106,108,110,111,113,116,118,120,121,123,125,126,129,132,134,136,399,400,401,408,411,412,413,415,416,417,418,420,424,425,428,433,434,439,443,445,447,451,454,456,458,462,465,467,468,469,470,471,473,476,478,479,480,483,484,486,487,488,489,490,491,495,497,498,501,502,503,508,510,511,512,515,516,518,520,521,523,524,527,529,530,531,533,538,540,544,549,564],familiar:[56,57],faq:563,fast:[406,447,452,454],fastdip:[124,425,496],fastdips20211215_pb:425,fastdips20211215_pc:425,fastdips20211215_pu:425,fastdips_pb:[124,425,496],fastdips_pc:[124,425,496],fastdips_pu:[124,425,496],faster:22,fastjet:[19,169,243,326,389,393,418,491,556],fastsim:[116,564],fat:[17,38,70,99,413,416,442,462,489],fatjet:[17,70,123,131,145,220,238,248,271,389,396,413,416,442,462,486,489,556,557],fatjet_itr:[17,70,416,489],fatjet_par:413,fatjetclass:[115,389],fatjetcollectionnam:[17,70,416,489],fatjetcontain:[17,70,144,145,220,237,241,242,243,250,272,389,396,416,462,489,556,557],fatjetcontainerclass:[115,389],fatjetnam:[17,70,416,489],fatjetpar:413,fatjetparentlink:413,fatjetsuffix:462,fatjetsus:[17,70],fatjetsystnam:462,favor:[41,101,401],fax:56,fc:415,fcal0:426,fcal1:[413,426],fcal2:426,fcal:426,fcharg:[124,425,496],fchighptcaloonli:[13,68,483],fcloos:[13,68,483],fcloose_fixedrad:[39,100,516],fcontain:414,fctight:[13,68,483],fctight_fixedrad:[39,100,516],fctighttrackonly_fixedrad:[39,100,516],fcut:[19,326,334,350,418,491],featur:[1,10,16,57,69,414,415,487,488,533],featurecontain:415,federico:[283,437,452,456],feel:[7,14,21],fellow:14,feta:431,fetch:[10,413],fetur:415,few:[10,25,56,57,88,400,428],fex:462,fi:56,field:57,figur:[10,21,33,56,95,436],file1:57,file2:57,file:[1,3,12,14,17,19,20,21,22,23,25,28,31,33,54,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,147,148,149,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,397,550,551,552,553,554,555,558,559,560,561,562,563],file_xaod:436,filecf:401,filedpl:401,fileexecut:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547],filemd:[400,401,406,408,424,428,431,437,439,452,454],filemetadata:[152,221,399,401,469],filemetadatatool:[33,260,436,508],filenam:[3,61,401],filepath:56,filestat_t:549,filesumw:401,fill:[1,11,13,17,20,23,28,31,39,41,44,53,55,56,64,68,70,85,86,90,93,100,101,104,110,113,400,401,403,406,407,408,409,411,416,419,420,422,424,425,426,428,431,433,434,436,437,438,439,440,443,445,446,447,449,451,452,453,454,455,456,457,458,460,461,462,463,464,465,467,468,470,471,474,475,478,480,481,482,489,493,494,495,498,499,500,501,503,506,507,510,512,513,514,516,518,525,526,529,531,532,533,535,536,538,540,544,546,547,551],fillclean:426,fillclust:[17,70,118,402,416,462,473,489],fillclustersus:[17,70,416,489],fillelectron:[17,70,120,407,416,462,479,489],fillelectronsus:[17,70,416,489],fillepersamplingclust:413,fillev:[17,70,121,412,416,462,484,489],filleventus:[17,70,416,489],fillfatjet:[17,70,123,413,416,462,486,489],fillfatjetsus:[17,70,416,489],fillhist:[20,85,419,492],filljet:[17,70,125,413,416,425,462,489,498],filljetsus:[17,70,416,489],filljettrigg:[17,70,416,462,489],filljettriggerus:[17,70,489],fillkinemat:420,filllegacyl1jet:[17,70,126,416,429,462,489,502],fillmet:[17,70,127,416,433,462,489,505],fillmetus:[17,70,416,489],fillmuon:[17,70,129,416,438,462,489,511],fillmuonsus:[17,70,416,489],fillobjectcutflow:[41,101,445,518],fillparticl:[132,402,407,413,425,438,448,453,457,464,520],fillphase1l1jet:[17,70,126,462,489,502],fillphoton:[17,70,134,416,448,462,489,524],fillphotonsus:[17,70,416,489],fillprofil:[20,85,419,492],filltau:[17,70,136,416,453,462,489,530],filltausus:[17,70,416,489],filltrack:[17,70,137,416,457,462,489,534],filltracksus:[17,70,416,489],filltrigg:[17,70,416,462,489],filltriggerus:[17,70,416,489],filltruth:[17,70,139,416,462,464,489,542],filltruthfatjet:[17,70,416,462,489],filltruthfatjetsus:[17,70,416,489],filltruthus:[17,70,416,489],filltruthvertic:[17,70,141,416,466,489,545],fillvertic:[17,70,141,416,462,466,489,545],filter:[57,169,418,462],filtereffici:[86,494],filterseq:10,final_clu:[433,434],final_trk:[433,434],finalclu:[431,433,434],finalclusoversqrtht:433,finalclusoversqrtsumet:433,finalclusphi:433,finalcluspi:433,finalcluspx:433,finalclusrho:433,finalclussigdirect:433,finalclussignific:433,finalclussumet:433,finalclusvarl:433,finalclusvart:433,finaltrk:[431,433,434],finaltrkoversqrtht:433,finaltrkoversqrtsumet:433,finaltrkphi:433,finaltrkpi:433,finaltrkpx:433,finaltrkrho:433,finaltrksigdirect:433,finaltrksignific:433,finaltrksumet:433,finaltrkvarl:433,finaltrkvart:433,find:[5,10,18,26,36,42,50,51,56,59,76,375,399,400,401,406,407,411,413,415,417,418,419,423,424,425,428,431,433,434,438,439,442,443,444,445,446,447,448,451,453,454,455,456,458,462,467,468,469,490,494,549],find_first_of:[401,417,436],find_packag:56,findbestmatchdr:[48,107,455,532],findbin:[401,411,428,443,445,451,456,460,465],findhist:[20,85,419,492],fine:[428,432,445,456,463],finish:[401,406,408,411,422,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,468],finishwritingto:[436,468],fire:[3,61,401,416],first:[1,3,10,21,22,30,33,56,57,61,92,399,400,401,404,405,406,407,408,411,413,414,415,418,422,424,425,426,428,431,432,435,436,437,438,439,443,445,446,447,451,452,453,454,455,456,459,460,463,465,468,469,563],firstfil:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547],firstitem:415,firstli:[408,439,454],fit:[10,418,425],fitpar:[18,82,417,457],fitter:[425,498],fix:[1,10,13,56,68,116,400,411,457,470,483,516,564],fixedcutbeff_30:[1,428],fixedcutbeff_50:[1,428],fixedcutbeff_60:[1,400,428,470],fixedcutbeff_65:400,fixedcutbeff_70:[1,2,28,60,90,400,428,470,501],fixedcutbeff_77:[1,400,428,470],fixedcutbeff_80:[1,428],fixedcutbeff_85:[1,400,428,470],fixedcutbeff_90:[1,400,428],fixedcutloos:[44,104,527],fixedcutpflowloos:[39,100,516],fixedcutpflowtight:[39,100,516],fixedcuttight:[44,104,527],fixedcuttightcaloonli:[44,104,527],fixedeffpt:[1,28,90,425,501],fixm:[425,468],fizisist:[10,56],fjvt:[28,29,90,91,417,425,428],fjvteff_sf:428,fjvteff_sf_loos:425,fjvteff_sf_medium:425,fjvteff_sf_tight:425,fjvtefficiencytool:[28,90,428],fjvtpass_loos:425,fjvtpass_medium:425,fjvtpass_tight:425,fjvtselectiontool:428,fjvtsf:428,fjvtsf_loos:425,fjvtsf_medium:425,fjvtsf_tight:425,flag:[1,2,3,13,16,18,19,20,24,25,28,39,44,57,60,61,68,76,88,90,100,104,116,352,399,411,417,418,419,426,428,443,445,451,456,490,491,492,564],flagselect:[19,332,339,491],flat:[1,499],flatbeff_30:1,flatbeff_40:1,flatbeff_50:1,flatbeff_60:1,flatbeff_70:1,flatbeff_77:1,flatbeff_85:1,flatcutbeff_30:428,flatcutbeff_40:428,flatcutbeff_50:428,flatcutbeff_60:428,flatcutbeff_70:428,flatcutbeff_77:428,flatcutbeff_85:428,flavlabel:400,flavor:[1,425,499],flavortag:[18,77,417,425],flavortaghlt:[18,77,417,425],flavortagtla:[18,77,417,425],flavour:[25,88,399,400,401,406,408,431,447,452,454],flavtag:[496,498],flesh:57,flexibl:[1,20,21,116,564],flip:[34,96],floataccessor:[225,241,276,389,473,489,524,556],flow:[29,91,445],flush:[54,111],flv:400,flvtagcutdefinitionsfilenam:[400,428],fly:[44,104],fmd:[399,401],fn:400,folder:[21,22,56],foldernam:418,folk:10,follow:[1,3,7,10,11,12,13,14,18,21,33,41,56,57,61,64,66,68,75,76,95,101,112,401,408,424,425,436,439,443,445,454,471,563],foo:57,forc:[1,18,34,41,78,96,101,116,399,437,564],forcedatatyp:[408,447],forget:21,fork:10,form:[20,57,85,411,428,443,456,491],format:[18,21,25,30,33,56,57,77,88,92,95,401],former:[7,465],forth:57,forward:[10,20,28,56,90,426,428,483,516],found:[10,19,56,57,346,400,401,407,415,418,419,425,438,442,453,455,465,468,491,549,562],found_non_dummy_si:[19,243,389,393,445,491,556],four:[1,38,99,447],fourvec:425,foward:426,foxwolfram0:426,foxwolfram1:426,foxwolfram2:426,foxwolfram3:426,foxwolfram4:426,fr:491,fracsamplingmax:[124,425,426,496],fracsamplingmaxindex:[124,425,426,496],fracsampmax:[425,426],fracsampmaxidx:425,fraction:426,frame:[407,438],framework:[24,50,56,401,563],frattari:422,free:[7,14,21,491],freedom:439,frequent:14,from:[1,2,3,5,10,11,12,13,14,16,18,19,20,21,22,23,25,26,28,29,31,33,35,36,38,39,41,42,43,44,47,49,51,54,56,57,59,60,61,64,66,68,69,73,76,81,83,85,86,88,90,91,93,95,97,99,101,102,104,106,111,112,116,324,333,338,348,351,399,400,401,406,408,411,412,413,414,415,416,417,418,422,424,425,428,431,436,437,439,442,443,445,447,451,452,454,455,456,460,463,465,468,470,471,475,476,478,480,482,483,487,488,489,491,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,564],fs:[3,61,116,401,564],fstat:549,fsuccess:[301,549],ftag:418,ftaganalysisinterfac:[222,253,470,501],ftf:415,ftfcollect:415,ftk:415,ftkrefit:415,ftkvtx:415,fuck:491,fudg:447,full:[1,7,12,13,19,22,23,25,38,56,66,88,99,339,399,418,424,431,447,480,488,491,563],full_scan_chain:439,fulli:57,fullnam:[421,494],fullrootfilenam:444,fullsim:[25,88,116,408,424,447,564],fun:23,funcnam:491,further:[10,411,443],furthermor:1,futur:21,g:[2,3,7,10,12,14,19,22,23,25,34,35,43,46,47,55,56,60,61,66,88,96,97,102,105,106,113,339,401,406,408,411,418,419,422,424,426,428,431,437,439,443,444,445,447,451,452,454,455,456,460,463,468,471],gabriel:[223,253,400,424,489],gamma:[0,4,45,433],gammaphi:433,gammasumet:433,gap:[1,426],gaudi:[422,491],gaudisequenc:10,gb:56,gcc49:22,gcc:491,gen:400,gener:[10,12,14,19,20,22,23,41,50,56,57,66,85,101,223,338,339,400,411,424,426,428,443,452,456,491],geometri:[10,34,39,96,100],geomodelsvc:10,get:[0,1,2,10,13,14,19,20,21,28,35,39,49,56,60,90,97,333,399,400,401,406,408,411,414,415,418,422,424,428,431,432,437,439,442,443,444,445,447,451,452,454,455,456,459,460,462,463,465,468,470,471,475,478,480,482,487,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,540,544,547,563,564],get_working_point:[18,76,417,490],getaddress:[116,469,564],getalgorithmtyp:418,getallwp:[42,65,521],getallwptool:[42,65,521],getassociatedobject:[413,425,442],getattribut:[400,413,425,426,428],getbincont:401,getbranch:[399,401,413,520,545],getbtag:[425,426],getchaingroup:[401,414,415],getclosebyisocorrect:422,getcombin:415,getcombinedweight:401,getconfig:56,getconstitu:[413,425],getcontain:490,getcorrectedactualinteractionspercross:401,getcorrectedaverageinteractionspercross:401,getcutresult:[411,443,451],getd0sign:[461,539],getdataweight:401,getdens:412,getdirectori:462,getdr:[48,107,455,532],getefficiencyscalefactor:[400,408,428,439,447,454],getefficiencyscalefactorerror:447,getemfrac:[413,486],getentri:[400,401,405,406,408,411,418,424,428,437,439,443,444,445,447,451,452,454,455,456,460,465],getentrystatu:56,geteventstream:10,getflavorlabel:[2,60,400,470],gethbbcorrectedvector:[38,99,442,515],getinefficiencyscalefactor:[400,428],getinst:447,getint:425,getiso:[467,546],getlbdata:[444,517],getlin:[400,401,411,417,418,428,436,439,443,451,456,460,462,463,465,490],getlink:[19,243,389,393,413,425,491,556],getlistofbranch:418,getlistofsystemat:[19,243,389,393,400,406,408,418,424,428,431,437,439,447,452,454,491,556],getlistoftrigg:[401,414,415],getmcindex:[2,60,400,470],getmcshowertyp:[19,243,389,393,400,418,491,556],getmetoversqrtht:431,getmetoversqrtsumet:431,getmuoncorrectedjetfourmom:[38,99,442,515],getnam:[116,416,418,419,564],getnbinsx:401,getonlinebsinfo:[130,415,426,444,517],getoperatingpointnam:411,getoutputfil:[400,401,406,408,411,424,428,431,436,437,439,443,445,451,452,454,456,460,462,465,468],getpathinfo:549,getprescal:401,getprimaryvertex:[19,243,389,393,411,415,418,443,459,460,462,491,556],getprimaryvertexloc:[19,243,389,393,416,418,428,462,466,491,556],getprimaryvertexz:[19,243,389,393,418,458,461,491,556],getqual:443,getquantil:400,getrho:431,getrun:444,getscalefactor:400,getselectedwp:[42,65,411,446,521],getsigdirect:431,getsignific:431,getsizeparamet:418,gettaggerweight:400,getter:[0,15],gettermvarl:431,gettermvart:431,gettriggereffici:439,gettriggerscalefactor:439,gettrigobject:[415,488],gettruthparticl:452,getvalidwp:[42,65,411,521],getvalidwptool:[42,65,411,521],getvarl:431,getvart:431,getweight:401,getxaxi:[401,411,418,419,428,443,445,451,456,460,465],getyaxi:419,getyear:439,getz0sign:[461,539],getzaxi:419,gev:[2,20,28,31,54,56,60,85,90,93,111,403,406,408,412,420,426,428,437,439,447,452,454,458,489],gf:[400,428],gfex:462,gfexjetroicontain:[254,462,502],ghost:[25,88,418,424,426],ghostantikt2trackjet:[18,77],ghostarea:[122,413,425,485],ghostbhadronsfinalcount:[425,426],ghostbhadronsfinalpt:[425,426],ghostbhadronsinitialcount:[425,426],ghostbhadronsinitialpt:[425,426],ghostbquarksfinalcount:[425,426],ghostbquarksfinalpt:[425,426],ghostchadronsfinalcount:[425,426],ghostchadronsfinalpt:[425,426],ghostchadronsinitialcount:[425,426],ghostchadronsinitialpt:[425,426],ghostcquarksfinalcount:[425,426],ghostcquarksfinalpt:[425,426],ghosthbosonscount:413,ghostmuonsegmentcount:[124,425,426,496],ghostparton:425,ghosttausfinalcount:[425,426],ghosttausfinalpt:[425,426],ghosttquarksfinalcount:413,ghosttrack:[418,425],ghosttrack_:425,ghosttrack_d0:425,ghosttrack_eta:425,ghosttrack_npixelhit:425,ghosttrack_npixelsharedhit:425,ghosttrack_npixelsplithit:425,ghosttrack_nscthit:425,ghosttrack_ntrthit:425,ghosttrack_phi:425,ghosttrack_pt:425,ghosttrack_qoverp:425,ghosttrack_z0:425,ghosttrackassfrac:425,ghosttrackassociationfract:425,ghosttrackcount:[413,425,426],ghosttrackpt:425,ghosttrackpv:418,ghosttrackpvacc:418,ghosttruthassfrac:425,ghosttruthassociationfract:[124,425,426,496],ghosttruthassociationlink:[413,425],ghosttruthparticlecount:426,ghosttruthpt:426,ghostvr30rmax4rmin02trackjet:[18,38,77,99,515],ghostwbosonscount:413,ghostzbosonscount:413,gibberish:491,giordon:[10,23,491],gist:56,git:[10,22,56],github:[7,10,19,21,22,23,56,321,491,563],gitlab:[1,55,113,401,439],give:[1,14,56,401,411,428,431,443,445,451,455,456,463,494],given:[1,2,10,18,20,21,22,23,25,31,38,41,56,57,60,77,85,86,88,93,101,116,411,424,428,431,439,443,456,564],glfn:56,global:[57,408,416,430,439],gluon:425,gn120220509:[400,425],gn120220509_continu:[124,423,425,496],gn120220509_fixedcutbeff_60:[124,423,425,496,498],gn120220509_fixedcutbeff_70:[124,423,425,496,498],gn120220509_fixedcutbeff_77:[124,423,425,496,498],gn120220509_fixedcutbeff_85:[124,423,425,496,498],gn1:[124,425,496],gn1_pb:[124,425,496],gn1_pc:[124,425,496],gn1_pu:[124,425,496],gn2:[418,425],gn2v00legacywp:[124,400,425,496],gn2v00legacywp_fixedcutbeff_60:[124,423,425,496,498],gn2v00legacywp_fixedcutbeff_70:[124,423,425,496,498],gn2v00legacywp_fixedcutbeff_77:[124,423,425,496,498],gn2v00legacywp_fixedcutbeff_85:[124,423,425,496,498],gn2v00legacywp_pb:[124,425,496],gn2v00legacywp_pc:[124,425,496],gn2v00legacywp_pu:[124,425,496],gn2v00newaliaswp:[124,400,425,496],gn2v00newaliaswp_fixedcutbeff_60:[124,423,425,496,498],gn2v00newaliaswp_fixedcutbeff_70:[124,423,425,496,498],gn2v00newaliaswp_fixedcutbeff_77:[124,423,425,496,498],gn2v00newaliaswp_fixedcutbeff_85:[124,423,425,496,498],gn2v00newaliaswp_pb:[124,425,496],gn2v00newaliaswp_pc:[124,425,496],gn2v00newaliaswp_pu:[124,425,496],gn2v01:[124,400,418,425,496],gn2v01_continu:[124,423,425,496],gn2v01_fixedcutbeff_65:[124,423,425,496,498],gn2v01_fixedcutbeff_70:[124,423,425,496,498],gn2v01_fixedcutbeff_77:[124,423,425,496,498],gn2v01_fixedcutbeff_85:[124,423,425,496,498],gn2v01_fixedcutbeff_90:[124,423,425,496,498],gn2v01_pb:[124,425,496],gn2v01_pc:[124,425,496],gn2v01_ptau:[124,425,496],gn2v01_pu:[124,425,496],go:[10,19,21,23,56,314,351,401,406,408,411,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,468],goal:[57,116,564],gonna:10,good:[10,20,21,56,85,400,411,428,443,456],goodjetsaux:468,goodrunlist:23,goodrunslist:[152,401],goodrunslistselectiontool:[3,152,401,471],goodrunslistvec:401,googl:21,got:[411,426,443,455,456,457,464],gotcha:10,gov:[1,413,425,446],grab:[10,21,22,401,411,414,415,416,418,428,443,456,463],gracefulli:401,grade:426,gradient:[13,68,483],greater:467,green:10,grep:14,grid:[14,56,400],grid_samples_exot1_data:14,gridfilt:418,gridfilter_default:418,gridnam:[400,418],grl:[3,23,56,61,223,401,471],grlexclus:401,groomedfatjet:430,groot:56,group:[1,7,14,20,21,23,33,34,85,95,96,401,425,501],gsc:[25,88,415,424,425],gscdepth:[25,88,424],gscjet:415,gscscalem:425,gscscalept:425,gstark:[14,491],gsystem:[56,301,400,549],gtt:14,guarante:[21,116,418,564],guglielmo:422,guidelin:21,h:[1,10,18,34,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,169,170,171,172,173,174,175,176,177,178,179,180,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,370,375,389,397,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,550,551,552,553,554,555,557,558,559,560,561,562],h_charg:426,h_dz0befor:[467,546],h_ip3d:426,h_isotrk_max_pt:[467,546],h_isotrk_max_pt_l:[467,546],h_isotrk_pt:[467,546],h_isotrk_pt_l:[467,546],h_jetpt:[20,31,56,85,93],h_nisotrk:[467,546],h_nisotrks10gev:[467,546],h_nisotrks15gev:[467,546],h_nisotrks1gev:[467,546],h_nisotrks20gev:[467,546],h_nisotrks25gev:[467,546],h_nisotrks2gev:[467,546],h_nisotrks30gev:[467,546],h_nisotrks5gev:[467,546],h_nisotrks_l:[467,546],h_ntrk:[467,546],h_ntrks10gev:[467,546],h_ntrks15gev:[467,546],h_ntrks1gev:[467,546],h_ntrks20gev:[467,546],h_ntrks25gev:[467,546],h_ntrks2gev:[467,546],h_ntrks30gev:[467,546],h_ntrks5gev:[467,546],h_ntrks_l:[467,546],h_pt_miss:[467,546],h_pt_miss_i:[467,546],h_pt_miss_iso:[467,546],h_pt_miss_iso_i:[467,546],h_pt_miss_iso_l:[467,546],h_pt_miss_iso_x:[467,546],h_pt_miss_iso_x_l:[467,546],h_pt_miss_iso_y_l:[467,546],h_pt_miss_l:[467,546],h_pt_miss_x:[467,546],h_pt_miss_x_l:[467,546],h_pt_miss_y_l:[467,546],h_sv0:426,h_sv1:426,h_trk_max_pt:[467,546],h_trk_max_pt_l:[467,546],h_trk_pt:[467,546],h_trk_pt_l:[467,546],h_trkiso:[467,546],h_trkisoal:[467,546],h_type:[467,546],ha:[1,3,10,13,14,23,24,41,56,57,61,101,112,116,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,401,406,408,411,418,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,468,469,564],had:401,hadconeexclextendedtruthlabel:425,hadconeexcltruthlabel:425,haddummi:415,haddummypv:[415,425,426],hadron:[425,426],hadronconeexclextendedtruthlabelid:[124,425,496],hadronconeexcltruthlabelid:[28,90,124,400,425,426,428,496],half:1,hand:1,handl:[1,3,10,14,20,23,41,61,101,112,116,399,401,418,424,436,462,469,497,564],handler:56,happen:[14,56,399,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],happi:10,hard:[7,10,28,90,428,466],hardcod:[23,439],hardest:21,harmon:[1,3,61],harmonis:[41,101,445],has_exact:[18,19,76,243,389,393,417,418,490,491,556],has_match:[18,76,417,490],hasdecayvtx:464,hasn:[408,428,439],hassl:23,haswel:57,have:[7,10,12,13,18,19,21,22,23,24,28,33,34,56,57,66,68,72,76,90,95,96,116,351,399,400,401,405,406,408,411,414,415,416,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,465,468,489,491,564],haven:21,haystack:[19,346,418,491],head:[10,22],header:[1,3,10,21,25,56,57,61,88,411,417,443],heavili:10,hec0:426,hec1:426,hec2:426,hec3:426,hec:426,hecf:[425,426],hecfrac:[124,425,426,496],hecq:[425,426],hecqual:[124,425,426,496],hello:57,help:[21,23,33,56,57,95,489,540,563],helper:[0,3,17,58,70,419,431,497],helperclass:[17,18,19,31,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,93,118,120,121,123,125,126,127,129,134,136,137,139,144,145,147,148,151,156,157,159,162,172,173,179,182,187,188,190,193,194,196,198,203,205,206,207,213,216,220,225,231,236,238,241,243,245,246,250,251,254,257,258,263,272,273,276,282,286,294,297,389,393,400,405,406,408,409,411,416,420,421,422,426,428,431,434,436,437,439,440,442,443,445,446,447,449,452,454,455,456,462,465,473,479,481,484,486,489,491,493,494,498,499,502,505,506,511,513,520,521,524,525,530,534,542,545,556,557,563],helperclassesclass:[115,389],helperfunct:[19,144,145,149,150,151,152,155,156,157,159,160,161,162,163,164,165,167,172,173,175,176,178,179,181,182,186,187,188,190,192,193,194,196,198,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,219,220,238,242,246,250,254,272,273,286,294,297,317,389,399,400,401,404,405,406,408,409,410,411,412,413,414,415,416,421,422,424,425,427,428,430,431,435,436,437,439,441,442,443,445,447,449,450,451,452,454,455,456,457,458,459,460,461,462,463,464,465,466,468,486,494,498,502,520,521,534,542,545,550,556,557,563],helperfunctionsstruct:[115,389],helptre:462,helptreebas:[1,3,10,17,54,61,111,144,145,220,225,231,236,238,242,243,250,254,257,263,276,282,286,292,294,297,389,433,462,540,554,556,557],helptreebaseclass:[115,389],henc:14,here:[1,3,10,14,20,21,22,23,28,31,33,41,56,61,85,90,93,95,101,112,116,399,400,401,404,406,408,411,414,415,416,417,418,422,424,425,426,428,431,437,439,443,445,447,451,452,454,455,456,459,460,463,468,470,475,476,478,482,491,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],herwig721:400,herwig7:[2,19,60,338,400],herwig7p1:[19,149,400,418,491],herwig7p2:[19,149,400,418,491],herwig:[19,338,400,418],hf:7,hfile:[220,389],hh:[7,169,243,418,491],hidden:23,hierarchi:563,higest:426,highest:[3,61,426],highestjvfvtx:426,highpt:[437,443],hiloos:[53,110],hist:[1,20,31,85,93,401,411,418,419,428,443,445,451,456,461,465,492],hist_t:[86,494],histfin:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,116,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547,564],histgram:13,histiniti:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,116,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547,564],histmap_t:[20,85,419,492],histnam:[19,20,85,341,418,419,491,492],histogram:[0,1,13,18,21,23,31,41,56,76,85,86,93,101,244,401,403,404,406,408,411,419,422,424,428,431,434,435,437,439,440,443,445,447,451,452,454,455,456,458,459,460,461,462,463,467,468,471,474,481,493,499,506,513,525,535,539,540,546,563],histogrammanag:[0,21,31,93,144,145,220,226,245,258,287,291,298,389,397,403,420,426,434,458,461,467,474,481,493,499,506,513,525,535,539,546,556,557],histogrammanagerclass:[115,389],histoprmvtx:415,histpoint:419,hit:[53,110,407,438,458,460,477,479,509,511],hitcount:[458,461],hitight:[53,110],hive:422,hlt:[0,3,13,15,25,28,39,49,61,68,88,90,100,112,116,240,401,411,414,415,424,428,443,456,487,488,499,501,533,564],hlt_:[3,61,401],hlt_btag:415,hlt_g120_loos:112,hlt_g140_loos:112,hlt_idvertex_f:[25,88,497],hlt_j20_pf_ftf_l1ht190:401,hlt_j20_pf_ftf_l1j100:401,hlt_j:56,hlt_jet:415,hlt_mu26_imedium:[35,97,512],hlt_mu8nol1:439,hlt_noalg_j:56,hlt_noalg_x:56,hlt_primvertexftk:415,hlt_track:415,hlt_xaod__jetcontain:1,hlt_xaod__jetcontainer_:[16,69],hlt_xe:56,hltbjetfex:415,hltbjettrack:415,hltbjettracks_vtx:[415,425,426,428],hltbjettracks_vtx_bkg:[415,425,426],hltbtag:[415,425,426,428],hltbtagdecor:415,hltjet:[414,415],hltjetgett:[16,116,144,145,181,220,221,243,389,430,556,557,564],hltjetgetterclass:[115,389],hltjetroibuild:[144,145,181,220,389,430,557],hltjetsaux:[414,415],hltnav_summary_aodslim:[116,564],hltnav_summary_daodslim:[116,469,564],hltprescalekei:[401,416],hltpskei:[401,416],hltsummari:401,hltvtxcomp:[18,77,417],hold:[1,10,18,20,25,57,76,85,88,416,442,481,493,494,499,506,513,525,540],hole:[53,110,458],home:[22,56,57],hope:7,host:[22,56],hostnam:57,how:[10,20,28,33,56,57,90,95,116,462,563,564],howev:[21,33,34,95,96,411,418,428,443,456],howtocleanjets2017:[401,471],howtocleanjetsr21:411,hpp:[150,399],hsbarcod:466,hsg2:[41,101],hsg8:7,hstruthvertex:466,html:[1,21,491,549],htmlhelp:21,htop:7,http:[1,10,13,18,19,22,39,55,56,68,73,100,113,321,346,400,401,411,413,416,418,422,425,431,436,437,439,443,446,452,454,470,471,491,503,523,549],huge:[3,61,401],human:56,hv:[13,68,411,426],hypot:426,i:[1,10,21,23,25,28,33,41,57,88,90,95,101,112,400,401,407,411,412,416,417,418,424,425,426,428,429,436,437,438,439,443,444,451,456,462,465,491,493,502,520,563],i_etapair:428,i_jet:428,iasgdeadhvcellremovaltool:[13,235,483],iasgphotonefficiencycorrectiontool:[43,275,523],iasgselectiontool:[28,253,501],ibl:425,ibtaggingefficiencytool:[2,222,470],ibtaggingselectiontool:[2,28,222,253,470,501],ichild:464,icpjetuncertaintiestool:[25,249,424,497],id:[44,57,104,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,408,411,417,424,425,443,447,451,498,523],idea:[41,101,112],ident:[428,454],identif:[1,18,81],identifi:[10,14,17,41,70,101,116,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,400,428,436,564],idkei:408,idna:21,idtrig:415,idx:[118,120,123,125,126,129,132,134,136,137,139,401,402,406,407,408,413,417,425,428,429,437,438,439,442,447,448,452,453,454,457,464,473,479,486,498,502,511,520,524,530,534,542],idx_i:[411,428,443,456],idx_j:[411,428,443,456],iel:411,ifdef:[416,430],ifeat:415,ifndef:[428,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],ifstream:400,ignor:[10,56,399,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468],igoodrunslistselectiontool:[3,223,471],ii:563,iindettrackselectiontool:[53,290,538],iisolationcorrectiontool:[43,275,523],iisolationselectiontool:[13,39,235,268,483,516],ijet:[56,455],ijetcalibrationtool:[10,25,249,497],ijetjvteffici:1,ijetmodifi:[253,501],ijetselector:[25,249,424,497],ijettilecorrectiontool:[10,249,497],ijvtefficiencytool:[28,253,501],ileadtrk:467,imag:[22,57,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],images:21,imatchingtool:[13,28,39,49,235,253,268,285,293,411,428,443,456,463,483,501,516,533,541],imatchscoringtool:[13,28,39,49,235,253,268,285,293,483,501,516,533,541],imetmak:[29,255,503],imetsignific:[29,255,503],imetsystematicstool:[29,255,503],immedi:56,impact:[13,68,443],implement:[17,20,21,31,70,85,93,116,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,564],imposs:401,improperli:56,imu:[428,443],imuon:423,imuonefficiencyscalefactor:[35,264,439,512],imuonselectiontool:[39,268,516],imuontriggerscalefactor:[35,264,439,512],imytooltyp:14,in_itr:491,in_kei:436,incas:425,includ:[1,10,12,18,20,21,29,56,66,91,116,317,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,557,564],inclus:[7,454],inclusive_jet:418,inclust:462,incomplet:[401,436],incompletecbc:401,incompletecutbookkeep:[401,436],incompletecutbookkeepersaux:436,incont:[19,323,342,491],incorpor:[20,56],incrack:447,increas:[116,564],incred:57,incur:[24,401],ind:56,inde:[1,10],independ:[19,338],indet:[53,422,425,495,498,538],indettrackingdc14:[411,443],indettrackselectiontool:[53,211,247,250,290,422,425,460,495,498,538],indettrigtrackingxaodcnv_bjet_ftf:415,indettrigtrackingxaodcnv_bjet_ftk:415,indettrigtrackingxaodcnv_bjet_ftkrefit:415,indettrigtrackingxaodcnv_bjet_idtrig:[415,488],index:[1,13,19,21,346,400,401,424,428,446,455,563],indian:[400,428],indic:[25,56,88,401],indici:401,individu:[35,97,454,523],indsshort:56,ineffici:[1,2,60,400,428],inefficiencysf_:498,ineffsf:498,ineffsf_dl1dv00_continu:[124,496],ineffsf_dl1dv01_continu:[124,496],ineffsf_dl1r_continu:[124,496],ineffsf_gn120220509_continu:[124,496],ineffsf_gn2v00legacywp_continu:[124,496],ineffsf_gn2v00newaliaswp_continu:[124,496],ineffsf_gn2v01_continu:[124,496],inelec:462,inelectron:[13,41,68,101,406,411,422,445,483,518],infatjet:462,inflat:564,influenti:[17,70],info:[1,13,19,23,24,28,39,57,68,90,100,116,143,340,401,406,408,409,411,412,414,415,416,418,419,420,426,428,431,433,443,444,446,449,456,462,469,489,491,548,564],infoform:416,inform:[1,3,10,17,18,23,34,39,56,57,61,70,72,74,75,76,77,78,79,80,81,82,83,84,96,100,401,411,415,416,422,426,428,443,462,499,523],infoswitch:[18,74,75,78,82,83,84,242,389,392,417,490,556],infoswitchclass:[115,389],infrastructur:[469,503],inherit:[10,20,21,389,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,556,564],ini:57,init:[56,221,255,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,469,503],initi:[2,3,6,9,11,12,13,14,16,20,21,25,28,29,31,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,56,60,61,62,63,64,66,68,69,71,72,74,75,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,116,400,401,403,404,405,406,408,409,411,414,415,417,420,421,422,424,425,426,428,431,432,434,435,436,437,439,440,442,443,445,446,447,449,451,452,454,455,456,458,459,460,461,462,463,465,467,468,470,471,474,475,476,478,480,481,483,487,488,490,492,493,494,495,497,499,501,503,504,506,507,508,510,512,513,515,516,518,523,525,527,529,531,532,533,535,536,538,539,540,541,544,546,547,564],initialis:[1,14,41,101,401,408,411,422,428,439,443,446,451,454,455,456,463],initializatiton:10,initializeuncertaintiestool:[25,424,497],injet:[2,25,28,41,60,90,101,400,424,428,445,455,460,462,468,470,497,501,518],injetsaux:468,injetsconst:468,inl1jet:462,inlin:[17,18,19,20,31,42,65,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,93,116,118,120,123,126,128,129,131,132,134,136,137,139,141,316,330,353,418,469,491,550,551,552,564],inmetcont:462,inmuon:[39,41,100,101,422,437,443,445,462,516,518],inner_arg:57,innerdetectortrackparticl:443,inout:[19,339],inparticl:[112,463,494,541],inphoton:[41,44,101,104,422,445,447,451,462,518,527],input:[1,7,10,11,12,13,16,18,19,20,25,28,31,33,35,39,41,44,53,55,56,64,66,68,69,76,85,86,88,90,93,95,97,100,101,104,110,112,113,116,339,352,399,400,401,406,408,411,416,417,418,422,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,465,468,480,490,491,494,532,533,564],input_jet:418,inputalgo:56,inputcbkcontain:436,inputcollect:10,inputcontain:[1,56,400,406,408,411,414,424,428,437,439,443,447,451,452,454,455,456,460,463,465],inputcontainerjet:445,inputdq2:14,inputelectron:[12,66,408,480],inputfil:[19,347,399,401,418,491],inputfilepath:56,inputjetcontain:455,inputlist:14,inputmuon:[35,97,439,512],inputprefix:[411,443],inputrucio:14,inputset:418,inputstream:401,inputtau:[47,106,454,531],inputtrack:460,inquiri:7,insert:[401,407,409,411,417,418,419,428,436,438,440,443,444,446,453,456,490],insfstr:439,insid:[10,19,21,22,57,116,314,419,491,564],insitu:[1,424],insituscalem:425,insituscalept:425,inspir:491,instal:[21,563],instanc:[1,10,28,30,90,92,116,399,401,406,408,411,414,415,422,428,431,432,439,443,445,447,451,454,460,462,564],instanti:[13,68,116,445,446,462,564],instead:[2,3,10,22,33,56,60,61,95,401,406,408,411,417,422,424,426,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,468,548,549],institut:10,instruct:[10,22,23,41,101,401],insyst:[19,333,418,491],int32_t:401,int_t:[138,457,534,537],intau:[41,49,101,108,445,452,455,456,462,518,533],intcont:[19,332,339,491],integr:56,intend:[400,428],interact:[56,426],interest:[3,23,61,417,422,442],interfac:[1,10,14,232,235,264,268,283,400,406,408,411,414,415,422,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,465,470,478,480,483,491,497,512,516,523,531],intern:[1,13,17,28,39,41,49,70,101,406,447],internet:491,interpret:400,intial:401,intrack:[460,467,546],intrackparticl:462,intrigjet:462,introduc:[1,29,56,91],introduct:563,intruthfatjet:462,intruthjet:462,intruthpart:[55,113,465,544],intruthparticl:462,invalid:[302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,413],invertic:462,invis:7,involv:20,io:[1,436],iostat:[152,401],iostream:[151,153,156,157,158,159,162,163,164,165,167,173,175,176,179,180,182,184,187,188,189,190,193,194,195,196,198,199,202,203,204,205,206,207,208,211,214,215,216,217,242,400,402,405,406,407,408,411,412,413,414,415,416,422,424,425,428,429,431,433,436,437,438,439,442,443,444,445,447,448,451,452,453,454,455,456,457,460,463,464,465,466,490],ip2_pb:[425,426],ip2_pc:[425,426],ip2_pu:[425,426],ip2d:[124,425,426,496],ip2d_c:[124,425,426,496],ip2d_cu:[124,425,426,496],ip2d_errd0wrtpvoftrack:426,ip2d_flagfromv0oftrack:[124,425,426,496],ip2d_flagfromv0oftracksacc:[425,426],ip2d_gradeoftrack:[124,425,426,496],ip2d_gradeoftracksacc:[425,426],ip2d_pb:[124,425,426,496],ip2d_pc:[124,425,426,496],ip2d_pu:[124,425,426,496],ip2d_sigd0wrtpvoftrack:[124,425,426,496],ip2d_sigd0wrtpvoftracks_l:426,ip2d_sigd0wrtpvoftracksacc:[425,426],ip2d_vald0wrtpvoftrack:[124,425,426,496],ip2d_vald0wrtpvoftracksacc:[425,426],ip2d_weightboftrack:[124,425,426,496],ip2d_weightboftracksacc:[425,426],ip2d_weightcoftrack:[124,425,426,496],ip2d_weightcoftracksacc:[425,426],ip2d_weightuoftrack:[124,425,426,496],ip2d_weightuoftracksacc:[425,426],ip3_pb:[425,426],ip3_pc:[425,426],ip3_pu:[425,426],ip3d:[124,425,426,496,498],ip3d_c:[124,425,426,496],ip3d_cu:[124,425,426,496],ip3d_errd0wrtpvoftrack:426,ip3d_errz0wrtpvoftrack:426,ip3d_flagfromv0oftrack:[124,425,426,496],ip3d_flagfromv0oftracksacc:[425,426],ip3d_gradeoftrack:[124,425,426,496],ip3d_gradeoftracksacc:[425,426],ip3d_loglikelihoodratio:[426,428],ip3d_pb:[124,425,426,496],ip3d_pc:[124,425,426,496],ip3d_pu:[124,425,426,496],ip3d_sigd0wrtpvoftrack:[124,425,426,496],ip3d_sigd0wrtpvoftracks_l:426,ip3d_sigd0wrtpvoftracksacc:[425,426],ip3d_sigz0wrtpvoftrack:[124,425,426,496],ip3d_sigz0wrtpvoftracks_l:426,ip3d_sigz0wrtpvoftracksacc:[425,426],ip3d_vald0wrtpvoftrack:[124,425,426,496],ip3d_vald0wrtpvoftracksacc:[425,426],ip3d_valz0wrtpvoftrack:[124,425,426,496],ip3d_valz0wrtpvoftracksacc:[425,426],ip3d_weightboftrack:[124,425,426,496],ip3d_weightboftracksacc:[425,426],ip3d_weightcoftrack:[124,425,426,496],ip3d_weightcoftracksacc:[425,426],ip3d_weightuoftrack:[124,425,426,496],ip3d_weightuoftracksacc:[425,426],ip:458,ipar:[425,464],iparticl:[18,19,75,118,120,123,125,129,132,134,136,137,139,157,159,175,188,190,198,203,205,272,325,331,402,406,407,408,409,411,413,415,418,420,424,425,426,428,437,438,439,440,443,445,447,448,449,452,453,454,456,457,464,473,479,481,486,491,493,498,499,511,513,520,524,525,530,534,542,550],iparticlecontain:[19,27,37,41,67,86,89,98,101,103,112,157,159,169,172,175,187,188,190,198,203,205,245,247,270,314,406,408,415,418,420,421,424,436,437,439,445,447,452,454,463,493,495,518,541],iparticlehelp:[157,159,175,188,190,198,203,205,247,270,406,408,415,424,437,439,447,452,454,495,518],iparticlehist:[27,37,67,86,89,98,103,144,145,220,233,236,242,244,246,248,251,265,272,277,389,409,421,426,440,449,481,494,499,513,525,557],iparticlehistsalgo:[27,37,67,89,98,103,116,144,145,181,220,221,234,242,243,245,252,266,278,389,410,427,430,441,450,482,500,514,526,556,557,564],iparticlehistsalgoclass:[115,389],iparticleinfoswitch:[18,71,72,76,77,79,80,81,84,242,389,392,417,420,490,493,556],iparticleinfoswitchclass:[115,389],ipdetail:[417,458,461],ipileupreweightingtool:[3,35,47,223,262,471,510,512,531],ipt:458,is_:498,is_bhad:[140,464,543],is_btag:[124,423,496],is_dl1dv00_continu:[124,423,425,496],is_dl1dv00_fixedcutbeff_60:[124,423,425,496],is_dl1dv00_fixedcutbeff_70:[124,423,425,496],is_dl1dv00_fixedcutbeff_77:[124,423,425,496],is_dl1dv00_fixedcutbeff_85:[124,423,425,496],is_dl1dv01_continu:[124,423,425,496],is_dl1dv01_fixedcutbeff_60:[124,423,425,496],is_dl1dv01_fixedcutbeff_70:[124,423,425,496],is_dl1dv01_fixedcutbeff_77:[124,423,425,496],is_dl1dv01_fixedcutbeff_85:[124,423,425,496],is_dl1r_continu:[124,423,425,496],is_dl1r_fixedcutbeff_60:[124,423,425,496],is_dl1r_fixedcutbeff_70:[124,423,425,496],is_dl1r_fixedcutbeff_77:[124,423,425,496],is_dl1r_fixedcutbeff_85:[124,423,425,496],is_gn120220509_continu:[124,423,425,496],is_gn120220509_fixedcutbeff_60:[124,423,425,496],is_gn120220509_fixedcutbeff_70:[124,423,425,496],is_gn120220509_fixedcutbeff_77:[124,423,425,496],is_gn120220509_fixedcutbeff_85:[124,423,425,496],is_gn2v00legacywp_continu:[124,496],is_gn2v00legacywp_fixedcutbeff_60:[124,423,425,496],is_gn2v00legacywp_fixedcutbeff_70:[124,423,425,496],is_gn2v00legacywp_fixedcutbeff_77:[124,423,425,496],is_gn2v00legacywp_fixedcutbeff_85:[124,423,425,496],is_gn2v00newaliaswp_continu:[124,496],is_gn2v00newaliaswp_fixedcutbeff_60:[124,423,425,496],is_gn2v00newaliaswp_fixedcutbeff_70:[124,423,425,496],is_gn2v00newaliaswp_fixedcutbeff_77:[124,423,425,496],is_gn2v00newaliaswp_fixedcutbeff_85:[124,423,425,496],is_gn2v01_continu:[124,423,425,496],is_gn2v01_fixedcutbeff_65:[124,423,425,496],is_gn2v01_fixedcutbeff_70:[124,423,425,496],is_gn2v01_fixedcutbeff_77:[124,423,425,496],is_gn2v01_fixedcutbeff_85:[124,423,425,496],is_gn2v01_fixedcutbeff_90:[124,423,425,496],is_higg:[140,464,543],is_simul:[399,416,428,436,444,460],isaf3:[116,399,401,447,469,564],isafii:431,isalnum:419,isavail:[10,19,243,389,393,399,400,401,404,407,408,409,411,412,413,416,418,424,425,426,428,435,438,439,440,442,443,445,447,451,453,454,455,456,459,462,463,464,465,489,491,494,498,520,556],isavailablemetadata:[19,243,389,393,418,491,556],isbadbatman:401,isbadbatman_event_flag_and_emec:401,isbadloos:426,isbadmedium:426,isbadmuon:443,isbadtight:426,isbaselin:10,isbjet:424,isbottomhadron:464,isbtag:445,iscleanacc:428,iscleandecor:424,iscleaneventdecor:428,isdata:[25,424,497],iselernnloos:[135,453,456,528],iselernnlooseacc:453,iselernnmedium:[135,453,456,528],iselernnmediumacc:453,iselernntight:[135,453,456,528],iselernntightacc:453,isem:[411,446,447],isemloos:417,isemmask:447,isemmedium:417,isempti:401,isemtight:417,iseventflagbitset:401,isfa:399,isfailur:411,isfastsim:[116,399,401,406,408,424,431,447,452,454,469,564],isfileprimaryxaod:[19,243,389,393,418,491,556],isgoodoq:[407,411,451],ish:428,ishigg:464,isiniti:[10,401,411,414,422,424,428,439,443,456],isisocone20acc:448,isisocone40acc:448,isisocone40caloonlyacc:448,isisol:[119,128,407,409,411,438,440,443,451,477,509],isisolated_:[13,39,44,68,100,104,407,409,438,440],isisolated_cone20:[133,448,522],isisolated_cone40:[133,448,522],isisolated_cone40caloonli:[133,448,522],isisolated_fixedcutloos:448,isisolated_fixedcuttight:448,isisolated_fixedcuttightcaloonli:448,isjetrnnsigloos:[135,453,456,528],isjetrnnsiglooseacc:453,isjetrnnsigmedium:[135,453,456,528],isjetrnnsigmediumacc:453,isjetrnnsigtight:[135,453,456,528],isjetrnnsigtightacc:453,isjetrnnsigveryloos:[135,453,456,528],isjetrnnsigverylooseacc:453,isjvth:[28,90,428],isloos:[133,447,448,522],islooseq:443,islooseqdecor:443,islrt:[119,128,407,438,477,479,509],ismatch:[407,411,425,428,438,443,453,456],ismc:[116,130,399,400,401,406,408,416,424,428,431,437,439,442,444,447,452,454,469,494,517,564],ismedium:[133,447,448,522],ismediumq:443,ismediumqdecor:443,isn:[1,10,21],isnomin:[28,90,428,501],isnul:10,iso:[406,407,408,409,411,417,438,439,440,443,448,449,454,467,480,512],iso_cut:[411,443,451],iso_typ:[411,443],iso_wp:439,isoclosebycorr:[116,144,145,220,221,242,243,389,430,556,557,564],isoclosebycorrclass:[115,389],isoclosebycorrectiontool:422,isoclosebycorrtool:422,isoclosebycorrtoolinstanceexist:422,isocon:[18,80,417],isocone20:[18,80],isocone40:[18,80],isodecsuffix:[411,443],isoeff_sf:[119,128,407,438,477,509],isoeff_sysnam:417,isoeffsf:[408,439],isoeffsfinstanceexist:439,isokei:408,isokr20par:426,isokr20perp:426,isol:[11,12,13,18,39,44,64,66,68,72,79,80,100,104,406,407,408,409,411,416,417,422,426,438,439,440,443,448,449,451,477,479,481,483,509,511,513,516,522,524,527,546],isol_:[18,72,79,417],isol_keyword:417,isol_loos:[18,72,79],isol_non:[18,72,79],isol_substr:417,isol_xyz:[18,72,79],isolationclosebycorrectiontool:[247,422,495],isolationcorrect:[230,275,447,478,523],isolationcorrectiontool:[11,43,50,230,406,447,478,523],isolationkinemat:[18,72,79,417],isolationoverlapremov:422,isolationselect:[162,194,202,235,247,268,411,443,451,483,495,516],isolationselectiondecor:422,isolationselectiontool:[13,39,44,50,162,194,202,247,411,422,443,451,483,495,516,527],isolationtyp:[167,168,411,416,417,443],isolclosebycorr:417,isoleffsf:438,isoleffsf_sysnam:416,isolwp:[407,409,438,440],isopars:[411,443],isoseltoolclosebi:422,isoseltoolinstanceexist:422,isosf:407,isotoolnam:451,isotrkdetail:467,isotrkpt:467,isotrkpt_:467,isotrkpt_l:467,isowptyp:[411,443],ispass:[401,415],ispassbit:416,ispassbitsnam:416,ispassedbit:[401,416],ispassedbitsnam:[401,416],ispdcopi:[25,424,497],isphi:[116,399,411,428,443,456,463,469,564],ispunct:419,isr:[7,471],isrun3geo:[437,443],issimul:447,issu:[3,10,13,14,19,33,56,61,95,351,462,563],issuccess:[399,401,416,468,469,491,492],istag:498,istau:456,istauflag:417,istight:[133,447,448,522],istightq:443,istightqdecor:443,istoolalreadyus:[116,408,439,469,564],istrigmatch:[119,124,128,135,407,425,438,453,477,496,509,528],istrigmatcheddecor:463,istrigmatchedmapel:[407,411],istrigmatchedmapelacc:407,istrigmatchedmapeldecor:411,istrigmatchedmapjet:[425,428],istrigmatchedmapjetacc:425,istrigmatchedmapjetdecor:428,istrigmatchedmapmu:[438,443],istrigmatchedmapmuacc:438,istrigmatchedmapmudecor:443,istrigmatchedmaptau:[453,456],istrigmatchedmaptauacc:453,istrigmatchedmaptaudecor:456,istrigmatchedtochain:[119,124,128,135,407,425,438,453,477,496,509,528],istringstream:[400,401,411,417,418,428,436,439,443,451,456,460,462,463,465,490],istruthjetcollect:424,isugli:426,isunpair:401,isuserconfigur:[10,401,411,414,415,428,439,443,454,456,463],isvalid:[413,415,418,424,425,442,445,491],isverylooseq:443,isverylooseqdecor:443,isysset:431,isyst:424,isystematicstool:[222,243,264,283,470,491,512,531],iszombi:401,it_map:455,itau:[455,456],itauefficiencycorrectionstool:[47,283,531],itauselectiontool:[29,47,49,255,283,285,503,531,533],itausmearingtool:[46,281,529],itc:426,item:[21,400,439,462],iteminvec:[489,520],iter:[13,56,68,411,413,425,428,431,443,451,454,456,517],itrigconfigtool:[3,223,414,471],itrigdecisiontool:401,itrigdectool_handl:401,itrigg:401,itrkitr:467,itrkjet:413,its:[10,14,20,33,95,116,414,415,424,491,564],itself:[10,14,23,41,57,101,446],itwp_enum:446,itwp_pars:446,ivalu:490,iweighttool:[223,471],iwork:[20,85,244,419,426,461,492,499,539],j15s5peta21:401,j5:401,j:[0,4,45,405,424,434,440,445,465],jan:419,jcont:415,je:[23,25,88,400],jeff:[223,253,270,424,489,497],jel:411,jer:[25,88,424],jerapplynomin:1,jerfullsi:1,jersmearingtool:[1,50],jeruncertconfig:1,jes_data2017_2016_2015_recommendation_aug2018_rel21:[25,88,497],jes_full2012dataset_afii_january2014:56,jes_full2012dataset_may2014:56,jes_mc15prerecommendation_april2015:56,jes_mc16recommendation_afii_emtopo_april2018_rel21:[25,88,497],jesuncertconfig:1,jesuncertmctyp:1,jet:[0,3,7,8,10,15,17,18,19,20,21,23,25,28,29,31,38,41,48,53,54,56,57,60,61,70,77,85,88,90,91,93,99,101,107,110,111,116,122,123,125,126,131,144,145,165,175,187,196,220,237,240,243,245,250,251,253,254,263,271,284,291,314,324,326,334,335,348,389,393,396,400,401,413,414,415,416,418,420,424,425,426,428,429,430,431,433,436,442,445,455,460,461,462,465,470,471,485,486,487,488,489,491,493,497,498,499,501,502,515,518,532,538,539,540,551,556,557,563,564],jet_def:418,jet_emscalept:56,jet_eta:[56,428],jet_itr:[17,70,400,416,418,424,428,429,460,489,502],jet_jvt:428,jet_p4:418,jet_phi:[56,461],jet_pileupscalept:56,jet_pt:56,jet_syst_cont_nam:445,jet_tim:428,jet_v1:415,jet_width:56,jetalgorithm:[1,19,56,243,326,389,393,418,491,556],jetanalysisinterfac:[1,253,501],jetarea_residual_etajes_gsc:424,jetarea_residual_etajes_gsc_insitu:424,jetarea_residual_etajes_gsc_smear:424,jetarea_residual_origin_etajes_gsc:56,jetattribut:426,jetauthor:[400,428],jetauxcontain:[19,151,165,179,187,219,314,351,400,414,415,428,436,468],jetbtag:[18,77,417,425,496],jetbtag_dl1r_fixedcutbeff_60707785:[18,77],jetbtag_tagger_type_aabb:[18,77],jetcalib:56,jetcalib_antikt4emtopo:56,jetcalibr:[10,25,28,29,56,90,91,116,144,145,181,220,221,243,389,430,556,557,564],jetcalibrationtool:[10,25,50,88,175,424,497],jetcalibrator_syst:[41,101],jetcalibratorclass:[115,389],jetcalibtool:[1,10,25,88,175,249,424,497],jetclass:[115,389],jetclean:401,jetcleancutlevel:1,jetcleaning2016:50,jetcleaningtool:[25,175,424,497],jetcleaningtool_:424,jetcleanugli:1,jetcollect:[1,10,25,88,415,424],jetconstitp4:425,jetconstitscalemomentum:[425,428],jetconstitscalemomentum_eta:[122,413,485],jetconstitscalemomentum_m:[122,413,485],jetconstitscalemomentum_phi:[122,413,485],jetconstitscalemomentum_pt:[122,413,485],jetconstituentfil:[169,418],jetconstituentvector:[167,413,416,425],jetcont:[48,107,431,455,532],jetcontain:[2,17,19,20,21,25,28,31,41,48,60,70,85,90,93,101,107,115,144,145,165,175,178,179,182,187,193,196,206,213,219,220,222,238,241,242,243,247,248,251,253,270,272,284,314,324,326,335,348,351,389,393,396,400,401,413,414,415,416,418,424,427,428,431,436,442,445,455,460,462,468,470,486,489,491,495,497,499,501,518,532,556,557],jetcontainernam:56,jetcontainerstruct:[115,389],jetcorr_tlv:442,jetcpinterfac:[249,497],jetdefinit:[243,418,424,491],jetdeta:461,jetdetailstr:56,jetdphi:461,jetdr:461,jetdr_l:461,jete:426,jetedm:[169,418],jetempt:56,jetemscalemomentum:[425,428],jetemscalemomentum_eta:[122,413,485],jetemscalemomentum_m:[122,413,485],jetemscalemomentum_phi:[122,413,485],jetemscalemomentum_pt:[122,413,485],jetet:428,jeteta:[56,428,461],jetetajesscalemomentum:425,jetetmiss:[1,25,88],jetfeaturecontain:[414,415],jetfitt:426,jetfitter_deltaeta:[124,425,426,496],jetfitter_deltaeta_l:426,jetfitter_deltaphi:[124,425,426,496],jetfitter_deltaphi_l:426,jetfitter_deltar:426,jetfitter_dr_flight:426,jetfitter_energyfract:[124,425,426,496],jetfitter_loglikelihoodratio:426,jetfitter_mass:[124,425,426,496],jetfitter_mass_unco:426,jetfitter_n2tpair:[425,426],jetfitter_n2tpar:[124,425,426,496],jetfitter_nsingletrack:[124,425,426,496],jetfitter_ntracksatvtx:[124,425,426,496],jetfitter_nvtx:[124,425,426,496],jetfitter_pb:[425,426],jetfitter_pc:[425,426],jetfitter_pu:[425,426],jetfitter_significance3d:[124,425,426,496],jetfittercombnn_pb:[425,426],jetfittercombnn_pc:[425,426],jetfittercombnn_pu:[425,426],jetfitterdetail:417,jetfjvt_pass:[28,501],jetfjvt_passed_loos:425,jetfjvt_passed_medium:425,jetfjvt_passed_tight:425,jetforwardjvttool:[179,428],jetfourmom_t:[38,99,425,428,442,515],jetghostarea:[425,468],jetghosttruthpt:426,jetghosttruthpt_vs_resolut:426,jetgscscalemomentum:425,jethist:[0,20,21,31,85,93,144,145,178,220,236,242,245,248,269,291,389,427,557],jethistsalgo:[0,20,57,86,144,145,181,220,221,243,246,251,389,430,556,557],jethistsalgoclass:[115,389],jetid:417,jetid_wp_map:456,jetidlevel:[454,531],jetidnon:[454,456],jetidrnnloos:[454,456],jetidrnnmedium:[454,456],jetidrnntight:[454,456],jetidwp:456,jetinfoswitch:[18,75,123,125,126,242,389,392,417,426,486,490,498,499,502,556],jetinfoswitchclass:[115,389],jetinsituscalemomentum:[38,99,425,515],jetinterfac:[249,253,497,501],jetjmsscalemomentum:[38,99,425,515],jetjvt:[453,455],jetjvt_pass:[28,501],jetjvt_passed_fixedeffpt:425,jetjvt_passed_loos:425,jetjvt_passed_medium:425,jetjvt_passed_tight:425,jetjvt_passed_tightfwd:425,jetjvtacc:[453,455],jetjvtdecor:455,jetjvteffici:10,jetjvtefficiency_fjvtsyst:[28,90,501],jetjvtefficiency_fjvtsyst_fjvt_loos:425,jetjvtefficiency_fjvtsyst_fjvt_medium:425,jetjvtefficiency_fjvtsyst_fjvt_tight:425,jetjvtefficiency_jvtsyst:[28,90,501],jetjvtefficiency_jvtsyst_jvt_fixedeffpt:425,jetjvtefficiency_jvtsyst_jvt_loos:425,jetjvtefficiency_jvtsyst_jvt_medium:425,jetjvtefficiency_jvtsyst_jvt_tight:425,jetjvtefficiency_jvtsyst_jvt_tightfwd:425,jetlabel:426,jetm:428,jetmet:431,jetmomenttool:[179,253,428,501],jetnam:[17,70,416,489,498,551],jetnomuon:423,jetoriginconstitscalemomentum:425,jetp4:[425,428,442],jetphi:[56,428,433],jetpileuplabelingtool:[28,253,428,501],jetpileupscalemomentum:425,jetpileuptag:[28,428,501],jetpt:[20,31,56,85,93,426,428],jetpt_avgmu_00_15:426,jetpt_avgmu_15_25:426,jetpt_avgmu_25:426,jetpt_eta_0_1:426,jetpt_eta_1_2:426,jetpt_eta_1_2p5:426,jetpt_eta_2_2p5:426,jetpt_vs_resolut:426,jetpupt:56,jetrapid:428,jetreclust:[19,243,389,393,418,491,556],jetrejectiondec:431,jetrnnscor:[135,453,456,528],jetrnnscoreacc:453,jetrnnscoresigtran:[135,453,456,528],jetrnnscoresigtransacc:453,jetrnnsigid:456,jetrnnsigloos:[417,456],jetrnnsigmedium:[417,456],jetrnnsigtight:[417,456],jetrnnsigveryloos:[417,456],jetroicontain:[17,70,126,241,254,416,429,462,489,502],jets_calib:56,jets_calib_algo:56,jets_shallowcopi:468,jets_syst:424,jetscalep4:428,jetselect:[29,56,91,431],jetselector:[10,18,28,41,56,101,116,144,145,147,181,220,221,242,243,389,430,490,556,557,564],jetselector_syst:[41,101],jetselectorclass:[115,389],jetselectordict:[41,101],jetselectortool:[50,175,424],jetsuffix:462,jetsumet:433,jetsyst:[41,101,445,518],jetsystnam:462,jettilecorrect:424,jettilecorrectiontool:[10,424,497],jettim:[425,426],jettoclean:424,jettrackselect:425,jettrim:[19,243,389,393,418,491,556],jettrk:433,jettrkphi:433,jettrksumet:433,jettruthlabel:424,jettruthlabelingtool:497,jetuncertainti:[25,88,175,424],jetuncertaintiestool:[1,25,175,424,497],jetunctool:424,jetvarl:431,jetvart:431,jetvec:423,jetvertexcharge_discrimin:425,jetvertexnntagg:[28,253,428,501],jetwidth:[56,453,455],jetwidthacc:[453,455],jetwidthdecor:455,jf_deltaeta:[425,426],jf_deltaphi:[425,426],jf_dr_flight:426,jf_efrc:426,jf_energyfract:[425,426],jf_mass:[425,426],jf_mass_unco:426,jf_n2tpar:[425,426],jf_nsingletrack:[425,426],jf_ntracksatvtx:[425,426],jf_ntrkv:426,jf_nvtx1t:426,jf_nvtxacc:[425,426],jf_pb:[425,426],jf_pc:[425,426],jf_pu:[425,426],jf_scaled_efc:426,jf_significance3d:[425,426],jfex:462,jfexlr:462,jfexlrjetroicontain:[254,462,502],jfexsr:462,jfexsrjetroicontain:[254,462,502],jinja2:21,jira:10,jmsscalem:425,jmsscalept:425,jmu:[428,443],jnnjvtefficiencytool:428,jo:401,job:[1,2,3,6,9,10,11,12,13,14,16,20,25,27,28,29,32,33,34,35,37,38,39,41,43,44,46,47,48,49,52,53,54,55,56,57,60,61,62,63,64,66,67,68,69,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,151,152,155,156,157,159,161,162,165,172,173,175,178,179,182,183,186,187,188,190,192,193,194,196,198,201,202,203,205,206,207,210,211,213,214,216,219,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,515,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,564],jobopt:10,john:[223,240,253,400,405,414,415,434,440,465,487,489],join:418,jsmath:21,json:57,jtau:456,juli:56,junk:[425,498],junkeff:[407,438],junkflt:425,junkint:425,junksf:[407,425,438,453],jussieu:491,just:[10,14,19,21,28,33,56,57,90,95,116,339,400,408,411,417,424,425,428,431,432,439,442,443,445,451,454,455,456,462,463,465,494,564],jvc:[18,77,124,417,425,426,496,498,499],jvf:[28,56,90,425,428],jvf_:426,jvfcorr:425,jvfcut:56,jvfpv:[124,425,426,496],jvt:[1,18,28,29,50,56,77,90,91,124,253,417,425,426,428,455,496],jvt_cut:428,jvteff_sf_:428,jvteff_sf_fixedeffpt:425,jvteff_sf_loos:425,jvteff_sf_medium:425,jvteff_sf_tight:425,jvteff_sf_tightfwd:425,jvtjvfcorr:[124,425,426,496],jvtmanualrecalcul:425,jvtmomentnam:428,jvtpass_fixedeffpt:425,jvtpass_loos:425,jvtpass_medium:425,jvtpass_tight:425,jvtpass_tightfwd:425,jvtrpt:[124,425,426,496],jvtsf:428,jvtsf_fixedeffpt:425,jvtsf_loos:425,jvtsf_medium:425,jvtsf_tight:425,jvtsf_tightfwd:425,k:444,kallax:401,karol:293,kboth:418,kcanrebin:401,keep:[10,13,28,56,90,116,424,428,455,460,501,564],keeper:401,kei:[2,3,10,22,28,55,57,60,61,90,113,411,416,428,436,443,451,455,456,460],kentrychainfileerror:56,kentrychainsetuperror:56,kentrydictionaryerror:56,kentrynotfound:56,kentrynotload:56,kentrynotre:56,kentryvalid:56,kept:[41,56,101],kernel:401,keypair:436,keyword:[17,70,418],kfac:494,kfactor:[86,494],kill:[28,56,90,401],kind:[10,20,21,431],kinemat:[13,17,18,20,38,56,57,68,70,75,77,82,84,85,99,123,411,417,420,424,428,447,451,477,479,486,493,509,511,520],kkrizka:293,klead:418,know:[10,23,33,56,57,95,116,401,408,439,454,564],known:[244,397,400,401,428,462],krizka:293,kt4empfloweventshap:412,kt4emtopoorigineventshap:412,kt4lctopoorigineventshap:412,kt:57,kt_algorithm:[19,334,350,491],ktdr:426,kv:413,l17:10,l1:[3,61,401,416,429,462,489,502],l1_:[3,56,61,401],l1_j:56,l1_mbts_1_1:56,l1_rd0_fill:56,l1_xe:56,l1jet:[17,54,70,111,126,489,502,540],l1jetcontain:[17,70,144,145,220,241,242,243,248,272,389,396,416,489,556,557],l1jetcontainerclass:[115,389],l1pskei:[401,416],l20:491,l328:418,l3d:[425,426],l428:10,l595:10,l700:401,l:[10,56,401,412,444],label:[20,25,28,31,85,88,90,93,400,401,408,415,424,426,428,439],labelsinfl:401,lar:[3,61,401,412,426],larbadhvefrac:[124,425,426,496],larbadhvenergi:426,larbadhvenergyfrac:425,larbadhvncel:[124,425,426,496],larbadhvratio:426,larerror:412,larflag:412,larg:[7,21,25,38,54,88,99,111,413,442,462,491],larger:[38,99,424],larqual:[124,425,426,496],last:[19,20,22,56,348,401,406,408,411,419,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],lastli:10,later:[56,401,411,428,439,442,443,446,451,454,456],latest:[1,22,24,56],latex:21,layer:[13,18,77,411,417,425,426,451,462,498,499],lb0183:10,lb:444,lbdata:[130,269,389,396,444,517,556],lbdataclass:[115,389],lbend:[444,517,552],lbinfo:444,lbit:444,lblock:458,lbstart:[444,517,552],lc:[1,57],lctopo:431,lctopojet:428,ld_library_path:57,lead:[18,28,56,75,90,116,413,420,426,428,467,564],leadcluscenterlambda:425,leadcluspt:425,leadclussecondlambda:425,leadclussecondr:425,leadingclustercenterlambda:[124,425,426,496],leadingclusterpt:[124,425,426,496],leadingclustersecondlambda:[124,425,426,496],leadingclustersecondr:[124,425,426,496],leadingjet:56,leakag:[11,406],learn:23,least:[56,401,407,411,418,425,428,438,443,445,451,453,456,491],leav:[41,101,112,116,400,413,417,425,426,428,443,457,464,564],left:[11,13,25,28,39,56,64,68,88,90,100,112,400,415,437,443,452,455,456,533],leg:[35,97,401],legaci:[429,462],length:[401,418,424,431,439,468],lepton:[41,101,407,411,422,438,443,456,477,479,509,511],less:[53,110,416],let:[10,57,401,404,411,418,428,432,435,443,451,455,456,459,462,463,468],level:[0,1,7,10,19,20,22,25,28,85,88,90,116,324,333,340,348,400,401,408,411,418,419,424,428,431,436,437,439,443,447,456,469,483,491,492,501,518,527,544,564],lgagnon:14,lh:[0,13,19,58,411,418,442,446,491,550],lhc:56,lhdecis:411,lhdecisional:411,lhdecisionloos:447,lhdecisionmedium:447,lhdecisiontight:447,lhelectron:446,lhelectron_llp:446,lhloos:411,lhmedium:[18,72,411],lhtight:411,lhtoolsmap:411,librari:56,life:[19,324,348],light:[28,39,41,44,53,55,90,100,101,104,110,113,400,425,439,533],lightcalibr:[2,60],like:[1,10,14,20,21,22,28,31,33,41,57,85,90,93,95,101,112,116,468,491,564],likeenum:[411,417,446],likelihood:[13,68,411,417],likelihoodenum:[168,273,417,521],likelihoodwp:411,limit:[23,56,401,424],line:[10,19,56,57,348,400,407,438,445,468],linestr:400,link:[1,13,19,38,39,41,57,68,99,100,101,331,406,413,415,416,424,430,437,442,445,447,452,491,563],link_itr:[418,425],link_t:491,linkdef:[144,220,221,222,223,227,228,230,232,234,235,239,240,243,246,249,252,253,255,256,259,260,262,264,266,267,268,270,275,278,279,281,283,284,285,288,290,292,293,296,299,389,557],linkoverlapobject:445,list:[1,3,13,14,16,17,19,20,21,23,25,35,39,41,44,50,56,57,61,68,69,70,88,97,100,101,104,112,116,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,317,333,389,398,557,563,564],listsystemat:400,listtrigchain:[119,124,128,135,407,425,438,453,477,496,509,528],litl:10,littl:[10,22,33,57,95],ll:[10,22,56,462],llp:446,load:[56,57,431,488],load_packag:56,loadpackag:56,loadtre:[399,401,418],local:[10,13,22,33,56,57,95,400,411,491],localconfig:56,localsetupfax:56,localsetuppandacli:56,localvectorptr:[17,70,132,141,489,498,520,545],locat:[25,56,57,88,418,428],log10:425,log:[19,22,56,340,401,425],logic:[10,20,41,101,401,491],login:56,long64_t:[121,412,444,484],longer:[1,10],longitudin:[13,68],look:[1,10,13,14,19,21,23,28,39,41,44,53,55,56,57,68,90,100,101,104,110,112,113,324,348,401,405,406,408,411,418,424,428,437,439,443,445,447,451,452,454,455,456,460,465,468,503,533],lookup:[11,13,17,64,68,70,416],loop:[23,38,56,86,99,400,401,406,407,408,411,414,415,416,418,424,425,426,428,431,437,438,439,442,443,445,447,451,452,453,454,455,456,460,462,463,465,468,491,494],loos:[2,3,13,18,28,35,43,53,60,61,68,72,79,90,97,110,411,417,422,425,443,446,447,451,454,470,483,501,512,523],looseandblay:411,looseandblayerllh:477,loosebad:[1,25,88,424,426,497],loosebadllp:424,loosebadtrigg:424,loosebadugli:[1,424,426],loosebl:[13,411,417,446],looseblay:[12,66],looseeffsf:[133,448,522],looseeffsf_error:[133,448,522],looseelectron:[53,110],loosellp:[411,417,446],loosemuon:[53,110],loosenopix:[411,446],looseprimari:[53,110],looser:446,looserelax:417,looseselectornam:447,loosest:[13,68,411,446],loosetrackonli:[35,97,512],loss:442,lot:[20,21,54,57,111],low:[29,91,406,408,428],lower:[20,31,85,93],lowetconstituentsfrac:[124,425,426,496],lowetfrac:[425,426],lowpt:443,lpthe:491,lrt:[13,35,39,68,97,100,417,438],lsb_releas:14,lsetup:14,luckili:21,lumi:[401,406,408,411,422,424,426,428,431,437,439,443,445,447,451,452,454,455,456,458,460,468],lumib_runn:[18,77,417,426],lumib_runn_bs_den:426,lumib_runn_bs_online_vz:426,lumib_runn_lumib:426,lumib_runn_vtxclass:426,lumib_runn_vtxdiffz0:426,lumiblock:[130,401,412,426,444,458,517],lumicalc:401,lumicalcfil:401,luminos:[18,56,83],lvl1prescalekei:[401,416],lvl:[19,340,418,491],lxml:21,lxplu:14,lxr:[1,413,425,446],lxy:[425,426],m:[10,406,413,420,424,425,426,428,437,442,445,447,456,465,493,520],m_accessornam:[498,551],m_actarea:[426,499],m_activearea4vec_eta:[413,425,486,498],m_activearea4vec_m:[413,425,486,498],m_activearea4vec_phi:[413,425,486,498],m_activearea4vec_pt:[413,425,486,498],m_activearea:[413,425,486,498],m_actualmu:[121,412,426,484,499],m_actualmumax:[3,61,401,471],m_actualmumin:[3,61,401,471],m_addghostmuonstojet:[25,88,424,497],m_addsoftclusterterm:[29,91,431,503],m_allhist:[20,85,419,492],m_alljetcleaningtool_handl:[25,424,497],m_allowcalibrationfallback:[2,60,400,470],m_allowzerosf:[35,97,439,512],m_alltrack:[18,77,416,417,425,490],m_alltrackdetail:[18,77,417,425,490],m_alltrackpvsel:[18,77,417,425,490],m_allwpauxdecor:[42,446,521],m_allwptool:[42,446,521],m_alwaysgettagweight:[2,60,400,470],m_applycoreflagscut:[3,61,401,471],m_applycrackvetoclean:[13,68,411,483],m_applydeadhvcellveto:[13,68,411,483],m_applyeventcleaningcut:[3,61,401,471],m_applyfatjetpresel:[25,88,424,497],m_applygrlcut:[3,57,61,401,471],m_applyisbadbatmanflag:[3,61,401,471],m_applyisolationcorrect:[11,64,406,478],m_applyjetcleaningeventflag:[3,61,401,471],m_applymvatesqualitycheck:[46,105,452,529],m_applyprimaryvertexcut:[3,61,401,471],m_applyrelpt:[41,101,445,518],m_applytriggercut:[3,61,401,471],m_area:[18,77,413,417,425,490],m_asgelectronisemselector_loos:[42,446,521],m_asgelectronisemselector_medium:[42,446,521],m_asgelectronisemselector_tight:[42,446,521],m_asgelectronlikelihoodtool_loos:[446,521],m_asgelectronlikelihoodtool_loosebl:[446,521],m_asgelectronlikelihoodtool_loosellp:[446,521],m_asgelectronlikelihoodtool_medium:[446,521],m_asgelectronlikelihoodtool_mediumllp:[446,521],m_asgelectronlikelihoodtool_tight:[446,521],m_asgelectronlikelihoodtool_tightllp:[446,521],m_asgelectronlikelihoodtool_veryloos:[446,521],m_asgelectronlikelihoodtool_veryloosellp:[446,521],m_asgeleffcorrtool_elsf_iso:[12,408,480],m_asgeleffcorrtool_elsf_pid:[12,408,480],m_asgeleffcorrtool_elsf_reco:[12,408,480],m_asgeleffcorrtool_elsf_trig:[12,408,480],m_asgeleffcorrtool_elsf_trigmceff:[12,408,480],m_author:[407,479],m_autoconfigprw:[3,61,401,471],m_autoflush:[54,111,462,540],m_averagelarqf:[425,498],m_averagemu:[121,412,426,484],m_avgmu:[426,499],m_avgmu_vs_jetpt:[426,499],m_avlarqf:[426,499],m_b_eta_max:[28,90,428,501],m_b_pt_min:[28,90,428,501],m_barcod:[464,542],m_basic:[18,83,416,417,490],m_bchcorrcel:[425,426,498,499],m_bcid:[121,412,484],m_bcidinfo:[18,74,412,417,490],m_bdecay_i:[464,542],m_bdecay_x:[464,542],m_bdecay_z:[464,542],m_beamspotweight:[18,74,121,412,417,484,490],m_bjeteffsftool_handl:[2,400,470],m_bjetselecttool_handl:[2,28,400,428,470,501],m_bosoncount:[18,77,413,417,490],m_bs_online_vi:[415,425,426,498,499],m_bs_online_vx:[415,425,426,498,499],m_bs_online_vz:[415,425,426,498,499],m_bs_online_vz_l:[426,499],m_bsx:[444,458,517,535,552],m_bsx_vs_lblock:[458,535],m_bsy:[444,458,517,535,552],m_bsy_vs_lblock:[458,535],m_bsz:[444,458,517,535,552],m_bsz_vs_lblock:[458,535],m_btag:[425,498],m_btag_jettrk:[77,417,426,490],m_btagwp:[41,101,445,518],m_bvtx:[18,84,417,464,490],m_byaveragemu:[18,77,417,426,490],m_byeta:[18,77,417,426,490],m_c2:[413,486],m_cachedlb:[444,517],m_cachedlbdata:[444,517],m_cachedruninfo:[444,517],m_cachedrunnum:[444,517],m_calcbcidinfo:[3,61,401,471],m_calculatesignific:[29,91,431,503],m_calibconfig:[25,424,497],m_calibconfigafii:[25,88,424,497],m_calibconfigdata:[25,88,424,497],m_calibconfigdir:[25,88,424,497],m_calibconfigfullsim:[25,88,424,497],m_calibgscdepth:[25,88,424,497],m_calibratedmassdecor:[38,442,515],m_calibratedmassdecoratordata:[38,99,442,515],m_calibratedmassdecoratorfullsim:[38,99,442,515],m_calibrationmod:[34,96,437,510],m_calibsequ:[25,88,424,497],m_calobasedisotyp:[13,39,68,100,411,443,483,516],m_caloclu:[18,74,412,417,490],m_calocluster_:[121,412,484],m_calocluster_e_addr:412,m_calocluster_eta:[121,407,412,479,484],m_calocluster_eta_addr:412,m_calocluster_phi:[121,412,484],m_calocluster_phi_addr:412,m_calocluster_pt:[121,412,484],m_calocluster_pt_addr:412,m_caloisoeff:[13,39,68,100,411,443,483,516],m_campaign:[46,105,452,529],m_ccl_e:[403,474],m_ccl_e_vs_eta:[403,474],m_ccl_e_vs_phi:[403,474],m_ccl_eta:[403,474],m_ccl_eta_vs_phi:[403,474],m_ccl_n:[403,474],m_ccl_phi:[403,474],m_centroidr:[425,426,498,499],m_charg:[18,77,407,417,425,426,438,453,479,490,498,499,511,530],m_chargedfract:[425,426,498,499],m_chargedpfopv:[18,77,417,425,490],m_checkduplicatesdata:[3,61,401,471],m_checkduplicatesmc:[3,61,401,471],m_checkstream:[3,61,401,471],m_chf:[426,499],m_chi2ndof:458,m_chi2ndofcut_max:[53,110,460,538],m_chi2prob_max:[53,110,460,538],m_chi2prob_min:[53,110,460,538],m_child_barcod:[464,542],m_child_pdgid:[464,542],m_child_statu:[464,542],m_children:[18,84,417,464,490],m_chisquar:[457,534],m_classnam:[116,399,411,443,451,455,456,469,564],m_clean:[18,77,417,425,426,490],m_clean_passloosebad:[425,426,498,499],m_clean_passloosebadllp:[425,498],m_clean_passloosebadtrigg:[425,498],m_clean_passloosebadtriggerugli:[425,498],m_clean_passloosebadugli:[425,426,498,499],m_clean_passtightbad:[425,426,498,499],m_clean_passtightbadugli:[425,426,498,499],m_cleanev:[28,90,428,501],m_cleanevtleadjet:[28,90,428,501],m_cleanjet:[28,90,428,501],m_cleanlight:[18,77,417,425,490],m_cleanlightllp:[18,77],m_cleanllp:[77,417,425,490],m_cleanpar:[25,88,424,497],m_cleanpowheg:[3,61,401,471],m_cleantrig:[18,77,417,425,490],m_closebycorr:[72,79,407,417,438,490],m_cluster:[17,70,416,489],m_clusterbranch:[54,111,462,540],m_clusterbranchnam:[54,111,462,540],m_clustercontain:[54,111,462,540],m_clustercontainernam:[54,111,462,540],m_clusterdetail:[54,111,462,540],m_clusterdetailstr:[54,111,462,540],m_comb:[426,499],m_combx:[425,498],m_commonprwfilemc20:[3,61,401,471],m_commonprwfilemc20a:[3,61,401,471],m_commonprwfilemc20d:[3,61,401,471],m_commonprwfilemc23a:[3,61,401,471],m_commonprwfilemc23c:[3,61,401,471],m_commonprwfilemc23d:[3,61,401,471],m_coneflavourlabel:[2,60,400,470],m_conetruthlabelid:[425,498],m_configdetail:[18,76,417,490],m_configpath:[49,108,456,533],m_configstr:[18,72,75,76,77,79,80,81,417,490],m_constitu:[18,77,413,417,425,490],m_constituent_:[413,425,486,498],m_constituent_eta:[413,425,486,498],m_constituent_phi:[413,425,486,498],m_constituent_pt:[413,425,486,498],m_constituental:[18,77,413,417,425,490],m_constituentweight:[413,425,486,498],m_constscaleeta:[18,77,417,425,490,498],m_constscalem:[425,498],m_constscalept:[425,498],m_copycutbookkeep:[33,95,436,508],m_copyfilemetadata:[33,95,436,508],m_copyfromstoretoeventkeys_vec:[33,436,508],m_copytriggerinfo:[33,95,436,508],m_coreflag:[121,412,484],m_corenam:[29,91,431,503],m_correctedandscaledavgmu:[121,412,484],m_correctedandscaledmu:[121,412,484],m_correctedavgmu:[121,412,484],m_correctedmu:[121,412,484],m_correlationmodel:[12,66,408,480],m_corrfilenam:[2,28,60,90,400,428,470,501],m_count_events_with_dupl:[28,90,428,501],m_createoutputfil:[33,95,436,508],m_createselectedcontain:[13,28,39,41,44,49,53,55,68,90,100,101,104,108,110,113,411,428,443,445,451,456,460,465,483,501,516,518,527,533,538,544],m_cutbasedoperatingpoint:[13,68,411,483],m_cutflow_al:[3,401,471],m_cutflow_bin:[13,28,39,44,49,53,55,411,428,443,451,456,460,465,483,501,516,527,533,538,544],m_cutflow_cor:[3,401,471],m_cutflow_dupl:[3,401,471],m_cutflow_grl:[3,401,471],m_cutflow_init:[3,401,471],m_cutflow_isbadbatman:[3,401,471],m_cutflow_jetclean:[3,401,471],m_cutflow_lar:[3,401,471],m_cutflow_npv:[3,401,471],m_cutflow_sct:[3,401,471],m_cutflow_til:[3,401,471],m_cutflow_trigg:[3,401,471],m_cutflowhist:[3,13,28,39,44,49,53,55,401,411,428,443,451,456,460,465,471,483,501,516,527,533,538,544],m_cutflowhistw:[3,13,28,39,44,49,53,55,401,411,428,443,451,456,460,465,471,483,501,516,527,533,538,544],m_cutflowstreamnam:[116,401,411,428,443,445,451,456,460,465,469,564],m_cutlevelstr:[53,110,460,538],m_d0:[457,534],m_d0_max:[13,39,53,68,100,110,411,443,460,483,516,538],m_d0oversigmad0_max:[53,110,460,538],m_d0sig_max:[13,39,68,100,411,443,483,516],m_d2:[413,486],m_deadhvtool:[13,411,483],m_debug:[17,20,21,31,42,70,85,93,116,121,127,132,399,409,412,413,416,420,421,425,426,429,433,434,440,446,449,457,464,469,484,489,493,494,505,506,520,521,564],m_decisionnam:[25,424,497],m_decor:[2,28,41,55,60,87,90,101,113,400,428,445,465,470,495,501,518,544],m_decorateselectedobject:[13,28,39,41,44,49,53,55,68,87,90,100,101,104,108,110,113,411,428,443,451,456,460,465,483,495,501,516,518,527,533,538,544],m_decoratewithnomoninputsi:1,m_decoratewithtrack:[1,49,108,456,533],m_decorationnam:[49,108,456,533],m_decorquantil:[2,400,470],m_decorrelationmodel:[11,43,64,102,406,447,478,523],m_decorsf:[2,400,470],m_decorweight:[2,400,470],m_deepcopykei:[33,95,436,508],m_deepcopykeys_vec:[33,436,508],m_definingparameterscovmatrix:[457,534],m_delta:[448,524],m_deltar:[48,107,455,532],m_derivationnam:[3,61,401,471],m_detailstr:[6,20,32,52,57,62,85,86,94,109,404,409,419,420,421,426,434,435,440,449,458,459,466,467,475,492,494,507,536,545],m_detectoreta:[18,77,417,425,490,498],m_deteta_max:[28,90,428,501],m_deteta_min:[28,90,428,501],m_dieltrigchain:[13,68,411,483],m_dieltrigchainslist:[13,411,483],m_dijettrigchain:[28,90,428,501],m_dijettrigchainslist:[28,428,501],m_dimutrigchain:[39,100,443,516],m_dimutrigchainslist:[39,443,516],m_disabledtrigg:[17,70,416,489],m_distemptybcid:[121,412,484],m_distlastunpairedbcid:[121,412,484],m_distnextunpairedbcid:[121,412,484],m_ditautrigchain:[49,108,456,533],m_ditautrigchainslist:[49,456,533],m_dl1dv00:[425,498],m_dl1dv00_pb:[425,498],m_dl1dv00_pc:[425,498],m_dl1dv00_pu:[425,498],m_dl1dv01:[425,498],m_dl1dv01_pb:[425,498],m_dl1dv01_pc:[425,498],m_dl1dv01_pu:[425,498],m_dl1r:[425,498],m_dl1r_pb:[425,498],m_dl1r_pc:[425,498],m_dl1r_pu:[425,498],m_do2stationshighpt:[34,96,437,510],m_doauthorcut:[13,44,68,104,411,451,483,527],m_dobltrackqualitycut:[13,411,483],m_dobtagcut:[28,90,428,501],m_doclean:[25,28,88,90,424,497],m_docutbasedpid:[13,68,411,483],m_docutbasedpidcut:[13,68,411,483],m_doelectroncut:[29,91,431,503],m_doeleeleor:[41,101,445,518],m_dofjvt:[28,90,428,501],m_dofjvtcut:[29,91,431,503],m_dofjvtveto:[28,90,428,501],m_dohltbjet:[415,488],m_dohltbtagcut:[28,90,428,501],m_dohltjet:[415,488],m_doisol:[39,100,443,516],m_doisolmuoneloss:[29,91,503],m_dojettilecorr:[25,88,424,497],m_dojettimingcut:[28,90,428,501],m_dojvf:[28,90,428,501],m_dojvt:[1,28,90,428,501],m_dojvtcut:[29,91,431,503],m_dolhpid:[13,68,411,483],m_dolhpidcut:[13,68,411,483],m_dolrt:[35,39,72,79,97,100,407,417,438,439,443,490,512,516],m_domcclean:[28,90,428,501],m_domodifiedeleid:[13,68,411,483],m_domuoncut:[29,91,431,503],m_domuoneloss:[29,91,503],m_dooqcut:[13,44,68,104,411,451,483,527],m_dopflow:[29,91,431,503],m_dophoton:[87,422,495],m_dophotoncut:[29,91,431,503],m_dopureweight:[3,57,61,401,471],m_dopureweightingsi:[3,61,401,471],m_dorunbyruncutflow:[3,61,401,471],m_dotaucut:[29,91,431,503],m_dotracksinjet:[53,110,460,538],m_dotrigmatch:[13,28,39,49,411,428,443,456,483,501,516,533],m_dotruthjettag:[28,90,428,501],m_dress:[18,84,417,464,490],m_dsidtogener:[2,400,470],m_dsidtogenerator_filenam:[2,60,400,470],m_dupleventnumb:[3,401,471],m_duplicatesstreamnam:[3,61,401,471],m_duplicatestre:[3,401,471],m_duplrunnumb:[3,401,471],m_e277:[448,524],m_e:[420,493,520],m_e_dress:[464,542],m_ecf1:[413,486],m_ecf2:[413,486],m_ecf3:[413,486],m_efficiencycalibr:[2,60,400,470],m_effsf:[18,72,79,80,81,407,416,417,438,448,453,490],m_egammacalibrationandsmearingtool:[11,43,406,447,478,523],m_eigenvectorreductionb:[2,60,400,470],m_eigenvectorreductionc:[2,60,400,470],m_eigenvectorreductionlight:[2,60,400,470],m_el_cutbased_pidmanag:[13,411,483],m_el_cutflow_al:[13,411,483],m_el_cutflow_author_cut:[13,411,483],m_el_cutflow_bl_cut:[13,411,483],m_el_cutflow_d0_cut:[13,411,483],m_el_cutflow_d0sig_cut:[13,411,483],m_el_cutflow_deadhvcell_cut:[13,411,483],m_el_cutflow_eta_cut:[13,411,483],m_el_cutflow_iso_cut:[13,411,483],m_el_cutflow_oq_cut:[13,411,483],m_el_cutflow_or_cut:[41,101,445,518],m_el_cutflow_pid_cut:[13,411,483],m_el_cutflow_ptmax_cut:[13,411,483],m_el_cutflow_ptmin_cut:[13,411,483],m_el_cutflow_z0sintheta_cut:[13,411,483],m_el_cutflowhist_1:[3,13,41,101,401,411,445,471,483,518],m_el_cutflowhist_2:[3,13,401,411,471,483],m_el_iso_wp:[87,422,495],m_el_lh_pidmanag:[13,411,483],m_elcontainernam:[54,111,462,540],m_eldetailstr:[54,111,462,540],m_elec:[17,70,416,489],m_electroncontainernam:[468,547],m_electroncontainernamesstr:[114,468,547],m_eleid:[49,108,456,533],m_elernnscor:[453,530],m_elernnwp:[49,108,456,533],m_elesystemat:[29,91,431,503],m_eleveto:[81,417,453,490],m_elsystsvec:[54,111,462,540],m_eltrigformatch:[17,70,489],m_emb1:[426,499],m_emb2:[426,499],m_emb3:[426,499],m_eme1:[426,499],m_eme2:[426,499],m_eme3:[426,499],m_emf:[426,499],m_emfrac:[413,425,486,498],m_emscalem:[425,498],m_emscalept:[425,498],m_energi:[18,77,417,425,426,490],m_energylight:[18,77,417,425,490],m_energyloss:[18,79,417,438,490,511],m_energylosssigma:[438,511],m_energylosstyp:[438,511],m_energypersampl:[425,498],m_epersamp:426,m_eratio:[448,524],m_errorontagweightfailur:[2,60,400,470],m_esmodel:[11,43,64,102,406,447,478,523],m_et:[420,493],m_et_:[420,493],m_et_m:[420,493],m_et_max:[28,90,428,501],m_et_min:[28,90,428,501],m_eta:[420,493,520],m_eta_bs_online_vz_0_1:[426,499],m_eta_bs_online_vz_1_1p5:[426,499],m_eta_bs_online_vz_1p5_2:[426,499],m_eta_dress:[464,542],m_eta_dressed_max:[55,113,465,544],m_eta_dressed_min:[55,113,465,544],m_eta_max:[13,28,39,44,53,55,68,90,100,104,110,113,411,428,443,451,460,465,483,501,516,527,538,544],m_eta_max_jvf:[28,90,428,501],m_eta_max_jvt:[28,90,428,501],m_eta_min:[28,53,55,90,110,113,428,460,465,501,538,544],m_etajesscalem:[425,498],m_etajesscalept:[425,498],m_etaphi:[426,499],m_etaphimap:[18,77,417,426,490],m_etasigned_max:[53,110,460,538],m_etasigned_min:[53,110,460,538],m_etcone20:524,m_event:[10,17,19,70,116,314,324,348,351,399,400,401,404,405,406,408,411,414,415,416,421,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,465,468,469,489,491,494,564],m_eventclean:[18,74,412,417,490],m_eventclean_loosebad:[121,412,484],m_eventclean_tightbad:[121,412,484],m_eventcount:[3,401,471],m_eventinfo:[17,70,416,489],m_eventinfocontainernam:[116,399,400,401,404,406,408,411,415,422,428,431,435,437,439,443,447,451,452,454,455,456,459,460,462,465,469,494,564],m_eventnumb:[121,412,484],m_evtcontainernam:[54,111,540],m_evtdetailstr:[54,111,462,540],m_evtinfohltnpvdecor:[25,88,424,497],m_expectinnermostpixellayerhit:[457,534],m_expectnexttoinnermostpixellayerhit:[457,534],m_extratriggerselect:[3,61,401,471],m_extratriggerselectionlist:[3,401,471],m_f1:[448,524],m_failauxdecorkei:[28,53,90,110,428,460,501,538],m_failkei:[28,53,428,460,501,538],m_fastdip:[425,498],m_fastdips_pb:[425,498],m_fastdips_pc:[425,498],m_fastdips_pu:[425,498],m_fatjet:[17,70,416,489],m_fatjetbranch:[54,111,462,540],m_fatjetbranchnam:[54,111,462,540],m_fatjetcontain:[54,111,462,540],m_fatjetcontainernam:[38,54,99,111,442,462,515,540],m_fatjetdetail:[54,111,462,540],m_fatjetdetailstr:[54,111,462,540],m_fatjetsystsvec:[54,111,462,540],m_fcal0:[426,499],m_fcal1:[426,499],m_fcal2:[426,499],m_fcharg:[425,498],m_filemetadatatool:[33,436,508],m_fill2d:[458,535],m_fillarea:426,m_fillchi2detail:[458,535],m_filldebug:[458,474,535,546],m_fillhitcount:[458,535],m_fillipdetail:[458,535],m_filliso:426,m_fillisotrkdetail:[467,546],m_fillsubstructur:426,m_filltperror:[458,535],m_filltrk:426,m_filltrkdetail:[467,546],m_filltrkptdetail:[467,546],m_fillvslumi:[458,535],m_fitpar:[18,82,417,457,490],m_fjvt:[77,417,425,490,498],m_fjvtdecornam:[29,91,431,503],m_fjvteff_sf_loos:[425,498],m_fjvteff_sf_medium:[425,498],m_fjvteff_sf_tight:[425,498],m_fjvtpass_loos:[425,498],m_fjvtpass_medium:[425,498],m_fjvtpass_tight:[425,498],m_fjvtusedbefor:[28,90,428,501],m_flavortag:[18,77,417,425,426,490],m_flavortaghlt:[18,77,417,425,426,490],m_flavortagtla:[18,77,417,425,490],m_forcedata:[116,399,469,564],m_forcedatacalib:[34,96,437,510],m_forcefastsim:[116,399,447,469,564],m_forcefullsim:[116,399,469,564],m_forceinsitu:[25,88,424,497],m_forcesmear:[25,88,424,497],m_fracsamplingmax:[425,426,498],m_fracsamplingmaxindex:[425,426,498],m_fracsampmax:[426,499],m_fracsampmaxidx:499,m_fullname_outputsystnamestrig:439,m_gener:[46,105,452,529],m_getjvtsf:[28,90,428,501],m_getscalefactor:[2,60,400,470],m_ghostarea:[413,425,486,498],m_ghostbhadronsfinalcount:[425,498],m_ghostbhadronsfinalpt:[425,498],m_ghostbhadronsinitialcount:[425,498],m_ghostbhadronsinitialpt:[425,498],m_ghostbquarksfinalcount:[425,498],m_ghostbquarksfinalpt:[425,498],m_ghostchadronsfinalcount:[425,498],m_ghostchadronsfinalpt:[425,498],m_ghostchadronsinitialcount:[425,498],m_ghostchadronsinitialpt:[425,498],m_ghostcquarksfinalcount:[425,498],m_ghostcquarksfinalpt:[425,498],m_ghostmuonsegmentcount:[425,426,498,499],m_ghosttausfinalcount:[425,498],m_ghosttausfinalpt:[425,498],m_ghosttrack_:[425,498],m_ghosttrack_d0:[425,498],m_ghosttrack_eta:[425,498],m_ghosttrack_ninnermostpixellayerhit:[425,498],m_ghosttrack_ninnermostpixellayersharedhit:[425,498],m_ghosttrack_ninnermostpixellayersplithit:[425,498],m_ghosttrack_nnexttoinnermostpixellayerhit:[425,498],m_ghosttrack_nnexttoinnermostpixellayersharedhit:[425,498],m_ghosttrack_nnexttoinnermostpixellayersplithit:[425,498],m_ghosttrack_npixelhit:[425,498],m_ghosttrack_npixelsharedhit:[425,498],m_ghosttrack_npixelsplithit:[425,498],m_ghosttrack_nscthit:[425,498],m_ghosttrack_ntrthit:[425,498],m_ghosttrack_phi:[425,498],m_ghosttrack_pt:[425,498],m_ghosttrack_qoverp:[425,498],m_ghosttrack_z0:[425,498],m_ghosttrackassfrac:425,m_ghosttrackcount:[425,498],m_ghosttrackpt:[425,498],m_ghosttruthassociationfract:[425,426,498,499],m_gn1:[425,498],m_gn1_pb:[425,498],m_gn1_pc:[425,498],m_gn1_pu:[425,498],m_gn2v00legacywp:[425,498],m_gn2v00legacywp_pb:[425,498],m_gn2v00legacywp_pc:[425,498],m_gn2v00legacywp_pu:[425,498],m_gn2v00newaliaswp:[425,498],m_gn2v00newaliaswp_pb:[425,498],m_gn2v00newaliaswp_pc:[425,498],m_gn2v00newaliaswp_pu:[425,498],m_gn2v01:[425,498],m_gn2v01_pb:[425,498],m_gn2v01_pc:[425,498],m_gn2v01_ptau:[425,498],m_gn2v01_pu:[425,498],m_grl_handl:[3,401,471],m_grlexcludelist:[3,61,401,471],m_grlxml:[3,57,61,401,471],m_gscscalem:[425,498],m_gscscalept:[425,498],m_hadronconeexclextendedtruthlabelid:[425,498],m_hadronconeexcltruthlabelid:[425,426,498,499],m_havetruthjet:[28,90,428,501],m_hec0:[426,499],m_hec1:[426,499],m_hec2:[426,499],m_hec3:[426,499],m_hecf:[426,499],m_hecfrac:[425,498],m_hecq:[426,499],m_hecqual:[425,498],m_histeventcount:[3,401,471],m_histmap:[20,85,419,492],m_histprefix:[86,421,494],m_histsumw:[3,401,471],m_histtitl:[86,421,494],m_hltavgmudecor:[25,88,424,497],m_hltbtagcutvalu:[28,90,428,501],m_hltbtagtaggernam:[28,90,428,501],m_hltpskei:[17,70,416,489],m_hltsummari:[116,401,469,564],m_hltvertexcontainernam:[25,88,424,497],m_hltvtxcomp:[18,77,417,426,490],m_incontainernam:[1,2,6,10,11,12,13,16,25,28,32,34,35,39,43,44,46,47,48,49,52,53,55,57,60,62,64,66,68,69,86,88,90,94,96,97,100,102,104,105,106,107,108,109,110,112,113,400,404,406,408,411,414,421,424,428,435,437,439,443,447,451,452,454,455,456,459,460,463,465,470,475,478,480,483,487,494,497,501,507,510,512,516,523,527,529,531,532,533,536,538,541,544],m_incontainername_electron:[41,87,101,422,445,495,518],m_incontainername_jet:[41,101,445,518],m_incontainername_muon:[41,87,101,422,445,495,518],m_incontainername_photon:[41,87,101,422,445,495,518],m_incontainername_tau:[41,101,445,518],m_ineffsf:[498,551],m_infoswitch:[31,93,121,127,132,407,409,412,413,416,420,425,426,433,434,438,440,448,449,453,457,464,481,484,493,499,505,506,513,520,525],m_injetcontainernam:[48,53,107,110,455,460,532,538],m_inputalgo:[2,28,38,41,60,86,90,99,101,112,400,421,428,442,445,470,494,501,515],m_inputalgoelectron:[41,87,101,445,495,518],m_inputalgojet:[41,101,445,518],m_inputalgolist:[2,400,470],m_inputalgomuon:[41,101,445,518],m_inputalgophoton:[41,101,445,518],m_inputalgosystnam:[1,11,13,34,39,43,44,46,48,49,64,68,96,100,102,104,105,107,108,411,443,451,455,456,478,483,510,516,523,527,529,532,533],m_inputalgotau:[41,101,445,518],m_inputelectron:[29,91,431,503],m_inputjet:[29,91,431,503],m_inputmuon:[29,91,431,503],m_inputphoton:[29,91,431,503],m_inputsystnameselectron:[12,66,408,480],m_inputsystnamesmuon:[35,97,439,512],m_inputsystnamestau:[47,106,454,531],m_inputtau:[29,91,431,503],m_insituscalem:[425,498],m_insituscalept:[425,498],m_instanceregistri:[116,399,469,564],m_ip2d:[425,426,498,499],m_ip2d_c:[425,426,498,499],m_ip2d_cu:[425,426,498,499],m_ip2d_errd0wrtpvoftrack:[426,499],m_ip2d_flagfromv0oftrack:[425,426,498,499],m_ip2d_gradeoftrack:[425,426,498,499],m_ip2d_pb:[425,426,498,499],m_ip2d_pc:[425,426,498,499],m_ip2d_pu:[425,426,498,499],m_ip2d_sigd0wrtpvoftrack:[425,426,498,499],m_ip2d_sigd0wrtpvoftracks_l:[426,499],m_ip2d_vald0wrtpvoftrack:[425,426,498,499],m_ip2d_weightboftrack:[425,426,498,499],m_ip2d_weightcoftrack:[425,426,498,499],m_ip2d_weightuoftrack:[425,426,498,499],m_ip3d:[425,426,498,499],m_ip3d_c:[425,426,498,499],m_ip3d_cu:[425,426,498,499],m_ip3d_errd0wrtpvoftrack:[426,499],m_ip3d_errz0wrtpvoftrack:[426,499],m_ip3d_flagfromv0oftrack:[425,426,498,499],m_ip3d_gradeoftrack:[425,426,498,499],m_ip3d_pb:[425,426,498,499],m_ip3d_pc:[425,426,498,499],m_ip3d_pu:[425,426,498,499],m_ip3d_sigd0wrtpvoftrack:[425,426,498,499],m_ip3d_sigd0wrtpvoftracks_l:[426,499],m_ip3d_sigz0wrtpvoftrack:[425,426,498,499],m_ip3d_sigz0wrtpvoftracks_l:[426,499],m_ip3d_vald0wrtpvoftrack:[425,426,498,499],m_ip3d_valz0wrtpvoftrack:[425,426,498,499],m_ip3d_weightboftrack:[425,426,498,499],m_ip3d_weightcoftrack:[425,426,498,499],m_ip3d_weightuoftrack:[425,426,498,499],m_ipdetail:[77,417,425,426,490],m_is_bhad:[464,542],m_is_higg:[464,542],m_isaf3:[116,399,469,564],m_iscontinu:[498,551],m_isderiv:401,m_iselernnloos:[453,530],m_iselernnmedium:[453,530],m_iselernntight:[453,530],m_isemjet:[28,428,501],m_isfastsim:[116,399,469,564],m_isisol:[407,409,438,440,479,481,511,513],m_isisolated_cone20:[448,524],m_isisolated_cone40:[448,524],m_isisolated_cone40caloonli:[448,524],m_isjetrnnsigloos:[453,530],m_isjetrnnsigmedium:[453,530],m_isjetrnnsigtight:[453,530],m_isjetrnnsigveryloos:[453,530],m_islcjet:[28,428,501],m_isloos:[448,524],m_islrt:[407,438,479,511],m_ismc:[17,70,116,399,416,469,489,564],m_ismedium:[448,524],m_isoclosebycorr_tool:[422,495],m_isoclosebycorr_tool_nam:[422,495],m_isocon:[18,80,417,448,490],m_isodecsuffix:[13,39,68,100,411,443,483,516],m_isoeff_sf:[407,438,479,511],m_isoeff_sysnam:[79,416,417,490],m_isoeffsf_tool_nam:[12,35,408,439,480,512],m_isokei:[13,39,44,411,443,451,483,516,527],m_isol:[18,72,79,80,407,409,417,438,440,448,449,490],m_isolationcorrectiontool:[11,406,478],m_isolationcorrectiontool_handl:[43,447,523],m_isolationkinemat:[18,72,79,407,417,438,490],m_isolationselectiontool:[13,39,44,411,443,451,483,516,527],m_isolationselectiontool_handl:[13,39,411,443,483,516],m_isolwp:[18,72,79,407,409,416,417,438,440,477,490],m_isoselcloseby_tool:[422,495],m_isoseltoolcloseby_nam:[422,495],m_isowplist:[13,39,44,68,100,104,411,443,451,483,516,527],m_ispassbit:[17,70,416,489],m_ispassbitsnam:[17,70,416,489],m_isrun3:[2,60,400,470],m_isrun3geo:[34,39,96,100,437,443,510,516],m_istag:[425,498,551],m_istight:[448,524],m_istladata:[3,61,401,471],m_istrigmatch:[407,425,438,453,479,498,511,530],m_istrigmatchedtochain:[407,425,438,453,479,498,511,530],m_istruthjetcol:[25,88,424,497],m_isusedbefor:[13,39,49,411,443,455,456,483,516,533],m_jet:[17,70,416,489],m_jet_cutflow_al:[28,428,501],m_jet_cutflow_btag_cut:[28,428,501],m_jet_cutflow_cleaning_cut:[28,428,501],m_jet_cutflow_eta_cut:[28,428,501],m_jet_cutflow_etmax_cut:[28,428,501],m_jet_cutflow_etmin_cut:[28,428,501],m_jet_cutflow_jvt_cut:[28,428,501],m_jet_cutflow_or_cut:[41,101,445,518],m_jet_cutflow_ptmax_cut:[28,428,501],m_jet_cutflow_ptmin_cut:[28,428,501],m_jet_cutflow_timing_cut:[28,428,501],m_jet_cutflowhist_1:[3,28,41,101,401,428,445,471,501,518],m_jetalgo:[10,25,88,424,497],m_jetauthor:[2,28,60,90,400,428,470,501],m_jetbranch:[54,111,462,540],m_jetbranchnam:[54,111,462,540],m_jetbtag:[18,77,417,425,490],m_jetbtagct:[77,417,425,490],m_jetcalibrationtool_handl:[10,25,424,497],m_jetcalibtoolsdev:[25,88,424,497],m_jetcleancutlevel:[25,88,424,497],m_jetcleaningtool_handl:[25,424,497],m_jetcleanugli:[25,88,424,497],m_jetconstitscalemomentum_eta:[413,486],m_jetconstitscalemomentum_m:[413,486],m_jetconstitscalemomentum_phi:[413,486],m_jetconstitscalemomentum_pt:[413,486],m_jetcontain:[54,111,462,540],m_jetcontainernam:[54,111,462,468,540,547],m_jetcontainernamesstr:[114,468,547],m_jetdetail:[54,111,462,540],m_jetdetailstr:[54,111,462,540],m_jetemscalemomentum_eta:[413,486],m_jetemscalemomentum_m:[413,486],m_jetemscalemomentum_phi:[413,486],m_jetemscalemomentum_pt:[413,486],m_jetfitt:[426,499],m_jetfitter_deltaeta:[425,498],m_jetfitter_deltaphi:[425,498],m_jetfitter_energyfract:[425,498],m_jetfitter_mass:[425,498],m_jetfitter_n2tpar:[425,498],m_jetfitter_nsingletrack:[425,498],m_jetfitter_ntracksatvtx:[425,498],m_jetfitter_nvtx:[425,498],m_jetfitter_pb:425,m_jetfitter_pc:425,m_jetfitter_pu:425,m_jetfitter_significance3d:[425,498],m_jetfitterdetail:[77,417,425,426,490],m_jetfjvtefficiencytool:[28,428,501],m_jetfjvtselectiontool:[28,428,501],m_jetghosttruthpt:[426,499],m_jetghosttruthpt_vs_resolut:[426,499],m_jetid:[81,417,453,490],m_jetidwp:[49,108,456,533],m_jetnam:[415,488],m_jetnnjvtefficiencytool:[28,428,501],m_jetnnjvtmomenttool:[28,428,501],m_jetnnjvtselectiontool:[28,428,501],m_jetpileuplabelingtool:[28,428,501],m_jetpt:[20,31,85,93],m_jetpt_avgmu_00_15:[426,499],m_jetpt_avgmu_15_25:[426,499],m_jetpt_avgmu_25:[426,499],m_jetpt_eta_0_1:[426,499],m_jetpt_eta_1_2:[426,499],m_jetpt_eta_1_2p5:[426,499],m_jetpt_eta_2_2p5:[426,499],m_jetpt_vs_resolut:[426,499],m_jetrnnscor:[453,530],m_jetrnnscoresigtran:[453,530],m_jetscale4select:[28,90,428,501],m_jetscaletyp:[28,90,428,501],m_jetsystemat:[29,91,431,503],m_jetsystsvec:[54,111,462,540],m_jettilecorrectiontool_handl:[424,497],m_jettim:[426,499],m_jettiming_max:[28,90,428,501],m_jettruthlabelingtool_handl:[424,497],m_jetuncertaintiestool_handl:[25,424,497],m_jetvertexcharge_discrimin:[425,498],m_jf_deltaeta:[426,499],m_jf_deltaeta_l:[426,499],m_jf_deltaphi:[426,499],m_jf_deltaphi_l:[426,499],m_jf_deltar:[426,499],m_jf_dr_flight:[426,499],m_jf_energyfract:[426,499],m_jf_mass:[426,499],m_jf_mass_unco:[426,499],m_jf_n2tpar:[426,499],m_jf_nsingletrack:[426,499],m_jf_ntracksatvtx:[426,499],m_jf_nvtx:[426,499],m_jf_pb:[426,499],m_jf_pc:[426,499],m_jf_pu:[426,499],m_jf_scaled_efc:[426,499],m_jf_significance3d:[426,499],m_jmsscalem:[425,498],m_jmsscalept:[425,498],m_jvc:[18,77,417,425,426,490,499],m_jvf:[425,498],m_jvfcut:[28,90,428,501],m_jvfpv:[425,426,498,499],m_jvt:[18,77,417,425,426,490,498,499],m_jvt_tool_handl:10,m_jvtcut:[28,90,428,501],m_jvteff_sf_fixedeffpt:[425,498],m_jvteff_sf_loos:[425,498],m_jvteff_sf_medium:[425,498],m_jvteff_sf_tight:[425,498],m_jvteff_sf_tightfwd:[425,498],m_jvtjvfcorr:[425,426,498,499],m_jvtpass_fixedeffpt:[425,498],m_jvtpass_loos:[425,498],m_jvtpass_medium:[425,498],m_jvtpass_tight:[425,498],m_jvtpass_tightfwd:[425,498],m_jvtrpt:[425,426,498,499],m_jvtusedbefor:[28,90,428,501],m_kinemat:[18,75,77,82,84,407,417,420,438,453,490,493,520],m_ktdr:426,m_l1jet:[17,70,416,489],m_l1jet_et:[429,502],m_l1jet_eta:[429,502],m_l1jet_phi:[429,502],m_l1jetbranch:[54,111,462,540],m_l1jetbranchnam:[54,111,462,540],m_l1jetcontain:[54,111,462,540],m_l1jetcontainernam:[54,111,462,540],m_l1pskei:[17,70,416,489],m_larbadhvefrac:[426,499],m_larbadhvenergyfrac:[425,498],m_larbadhvncel:[425,426,498,499],m_larerror:[121,412,484],m_larflag:[121,412,484],m_larqmean:[426,499],m_larqual:[425,426,498,499],m_layer:[18,77,417,425,426,490],m_lbend:[444,517,552],m_lblock:[458,535],m_lbstart:[444,517,552],m_leadingclustercenterlambda:[425,426,498,499],m_leadingclusterpt:[425,426,498,499],m_leadingclustersecondlambda:[425,426,498,499],m_leadingclustersecondr:[425,426,498,499],m_lepfavwp:[41,101,445,518],m_lhoperatingpoint:[13,68,411,483],m_linkoverlapobject:[41,101,445,518],m_listtrigchain:[407,425,438,453,479,498,511,530],m_looseeffsf:[448,524],m_looseeffsf_error:[448,524],m_looseidconfigpath:[43,102,447,523],m_lowetconstituentsfrac:[425,426,498],m_lowetfrac:[426,499],m_lumib_runn:[18,77,417,426,490,499],m_lumib_runn_bs_den:[426,499],m_lumib_runn_bs_online_vz:[426,499],m_lumib_runn_lumib:[426,499],m_lumib_runn_vtxclass:[426,499],m_lumib_runn_vtxdiffz0:[426,499],m_lumiblock:[121,412,426,444,484],m_lumicalcfilenam:[3,61,401,471],m_m:[420,493,520],m_mapnam:[29,91,431,503],m_markcleanev:[28,90,428,501],m_mass_max:[28,55,90,113,428,465,501,544],m_mass_min:[28,55,90,113,428,465,501,544],m_masterkei:[17,70,416,489],m_match_tool:451,m_mc:[121,132,407,412,413,425,438,444,448,453,484,498,520,551],m_mcandpseudodata:[25,88,424,497],m_mccampaign:[3,61,401,471],m_mccampaignmd:[3,471],m_mcchannelnumb:[121,412,484],m_mccleaningcut:[28,90,428,501],m_mceventnumb:[121,412,484],m_mceventweight:[121,412,484],m_mcindex:[2,400,470],m_mclbdata:[444,517],m_md_finalnev:[3,401,471],m_md_finalsumw:[3,401,471],m_md_finalsumwsquar:[3,401,471],m_md_initialnev:[3,401,471],m_md_initialsumw:[3,401,471],m_md_initialsumwsquar:[3,401,471],m_measenergyloss:[438,511],m_measenergylosssigma:[438,511],m_mediumeffsf:[448,524],m_mediumeffsf_error:[448,524],m_mediumidconfigpath:[43,102,447,523],m_menukei:[18,83,416,417,490],m_merged_electron:[13,68,411,483],m_merged_muon:[39,100,443,516],m_messageprint:[432,504],m_messageprinteroverlai:[432,504],m_met:[17,70,416,489],m_metadatastreamnam:[3,61,401,471],m_metclu:[18,78,417,433,490],m_metcontainernam:[54,111,462,540],m_metdetailstr:[54,111,462,540],m_metel:[127,433,505],m_metelephi:[127,433,505],m_metelesumet:[127,433,505],m_metfinalclu:[31,127,433,434,505,506],m_metfinalclusoversqrtht:[127,433,505],m_metfinalclusoversqrtsumet:[127,433,505],m_metfinalclusphi:[31,127,433,434,505,506],m_metfinalcluspi:[31,127,433,434,505,506],m_metfinalcluspx:[31,127,433,434,505,506],m_metfinalclusrho:[127,433,505],m_metfinalclussigdirect:[127,433,505],m_metfinalclussignific:[127,433,505],m_metfinalclussumet:[31,127,433,434,505,506],m_metfinalclusvarl:[127,433,505],m_metfinalclusvart:[127,433,505],m_metfinaltrk:[31,127,433,434,505,506],m_metfinaltrkoversqrtht:[127,433,505],m_metfinaltrkoversqrtsumet:[127,433,505],m_metfinaltrkphi:[31,127,433,434,505,506],m_metfinaltrkpi:[31,127,433,434,505,506],m_metfinaltrkpx:[31,127,433,434,505,506],m_metfinaltrkrho:[127,433,505],m_metfinaltrksigdirect:[127,433,505],m_metfinaltrksignific:[127,433,505],m_metfinaltrksumet:[31,127,433,434,505,506],m_metfinaltrkvarl:[127,433,505],m_metfinaltrkvart:[127,433,505],m_metgamma:[127,433,505],m_metgammaphi:[127,433,505],m_metgammasumet:[127,433,505],m_metjet:[127,433,505],m_metjetphi:[127,433,505],m_metjetsumet:[127,433,505],m_metjettrk:[127,433,505],m_metjettrkphi:[127,433,505],m_metjettrksumet:[127,433,505],m_metmaker_handl:[29,431,503],m_metmuon:[127,433,505],m_metmuonsphi:[127,433,505],m_metmuonssumet:[127,433,505],m_metreferencecontainernam:[54,111,462,540],m_metreferencedetailstr:[54,111,462,540],m_metsignificance_handl:[29,431,503],m_metsoftclu:[127,433,505],m_metsoftclusphi:[127,433,505],m_metsoftclussumet:[127,433,505],m_metsofttrk:[127,433,505],m_metsofttrkphi:[127,433,505],m_metsofttrksumet:[127,433,505],m_metsyst_handl:[29,431,503],m_metsystsvec:[54,111,462,540],m_mettau:[127,433,505],m_mettauphi:[127,433,505],m_mettausumet:[127,433,505],m_mettrk:[18,78,417,433,490],m_metworkingpoint:[29,91,431,503],m_mindeltar:[13,39,68,100,411,443,483,516],m_minisowpcut:[13,39,44,68,100,104,411,443,451,483,516,527],m_minpt:[2,60,400,470],m_minptdaod:[49,108,456,533],m_msg:[20,85,419,492],m_msglevel:[116,469,564],m_mu_cutflow_al:[39,443,516],m_mu_cutflow_cosmic_cut:[39,443,516],m_mu_cutflow_d0_cut:[39,443,516],m_mu_cutflow_d0sig_cut:[39,443,516],m_mu_cutflow_eta_and_quaility_cut:[39,443,516],m_mu_cutflow_iso_cut:[39,443,516],m_mu_cutflow_or_cut:[41,101,445,518],m_mu_cutflow_ptmax_cut:[39,443,516],m_mu_cutflow_ptmin_cut:[39,443,516],m_mu_cutflow_ptnan_check:[39,443,516],m_mu_cutflow_type_cut:[39,443,516],m_mu_cutflow_z0sintheta_cut:[39,443,516],m_mu_cutflowhist_1:[3,39,41,101,401,443,445,471,516,518],m_mu_cutflowhist_2:[3,39,401,443,471,516],m_mu_iso_wp:[87,422,495],m_mucontainernam:[54,111,462,540],m_mudetailstr:[54,111,462,540],m_muisosf_tool:[35,439,512],m_muon:[17,70,416,489],m_muoncalibrationtool_handl:[34,437,510],m_muoncontainernam:[38,99,442,468,515,547],m_muoncontainernamesstr:[114,468,547],m_muoncorrect:[18,77,413,417,490],m_muoncorrected_eta:[413,486],m_muoncorrected_m:[413,486],m_muoncorrected_phi:[413,486],m_muoncorrected_pt:[413,486],m_muondrmax:[38,99,442,515],m_muonetamax:[38,99,442,515],m_muonisoeff_sf_sysnam:[17,70,416,489],m_muonptmin:[38,99,442,515],m_muonqual:[39,443,516],m_muonqualitystr:[39,100,443,516],m_muonrecoeff_sf_sysnam:[17,70,416,489],m_muonselectiontool_handl:[39,443,516],m_muonsystemat:[29,91,431,503],m_muontrigeff_sf_sysnam:[17,70,416,489],m_muonttvaeff_sf_sysnam:[17,70,416,489],m_muontyp:[443,516],m_murecosf_tool:[35,439,512],m_musystsvec:[54,111,462,540],m_mutrigleg:[35,97,439,512],m_mutrigsf_tool:[35,439,512],m_muttvasf_tool:[35,439,512],m_muttvasf_tool_handl:439,m_mytool_handl:14,m_n90const:[426,499],m_n90constitu:[425,498],m_n:[132,402,413,448,520],m_n_isloos:[448,524],m_n_ismedium:[448,524],m_n_istight:[448,524],m_n_trk_sigd0cut:[426,499],m_name:[14,20,21,31,57,85,93,116,127,132,141,399,403,404,405,406,407,409,411,414,415,419,420,421,424,425,426,428,431,433,434,435,437,438,440,443,447,448,449,451,452,453,455,456,458,459,460,461,462,465,466,467,468,469,492,494,505,520,545,564],m_nbl_min:[53,110,460,538],m_nbothinnermostlayershits_min:[53,110,460,538],m_nchargedparticl:[413,486],m_nchildren:[464,542],m_ncluster:[413,486],m_ne:[420,493],m_neflowisol20:[407,438,479,511],m_neflowisol20_closebycorr:[438,511],m_negative:[425,498],m_nege:[426,499],m_net:[420,493],m_net_:[420,493],m_net_m:[420,493],m_neta:[420,493],m_nhboson:[413,486],m_ninnermostpixel_min:[53,110,460,538],m_nip2dtrack:[425,426,498,499],m_nip3dtrack:[425,426,498,499],m_nleadisotrackpt:[467,546],m_nleadtrackpt:[467,546],m_nm:[420,493],m_nnexttoinnermostpixel_min:[53,110,460,538],m_nnjvt:[18,77,417,425,490,498],m_nnjvtpass:[425,498],m_nodatainfo:[18,74,412,417,490],m_noextra:[18,78,417,490],m_nojvtveto:[28,90,428,501],m_nominaltre:[17,70,416,489],m_nominaltreenam:[17,70,416,489],m_nomultipl:[18,75,77,82,84,417,490,520],m_nparent:[464,542],m_nphi:[420,493],m_npixelhits_min:[53,110,460,538],m_npixelhitsphysical_min:[53,110,460,538],m_npixelsharedhits_max:[53,110,460,538],m_npixholes_max:[53,110,460,538],m_npt:[420,493],m_npt_:[420,493],m_npt_l:[420,493],m_npt_m:[420,493],m_npv:[121,412,484],m_nrapid:[420,493],m_nscthits_min:[53,110,460,538],m_nscthitsphysical_min:[53,110,460,538],m_nsctholes_max:[53,110,460,538],m_nsctsharedhits_max:[53,110,460,538],m_nsi_min:[53,110,460,538],m_nsiholes_max:[53,110,460,538],m_nsiphysical_min:[53,110,460,538],m_nsisharedhits_max:[53,110,460,538],m_nsisharedmodules_max:[53,110,460,538],m_ntoprocess:[13,28,39,44,49,53,55,68,90,100,104,108,110,113,411,428,443,451,456,460,465,483,501,516,527,533,538,544],m_ntquark:[413,486],m_ntrack:[413,486],m_ntrimsubjet:[18,77,413,417,486,490],m_ntrk:[426,453,499,530],m_number:[18,82,417,457,490],m_numberdof:[457,534],m_numberofinnermostpixellayerhit:[457,534],m_numberofnexttoinnermostpixellayerhit:[457,534],m_numberofphiholelay:[457,534],m_numberofphilay:[457,534],m_numberofpixeldeadsensor:[457,534],m_numberofpixelhit:[457,534],m_numberofpixelhol:[457,534],m_numberofpixelsharedhit:[457,534],m_numberofprecisionholelay:[457,534],m_numberofprecisionlay:[457,534],m_numberofsctdeadsensor:[457,534],m_numberofscthit:[457,534],m_numberofscthol:[457,534],m_numberofsctsharedhit:[457,534],m_numberoftrthit:[457,534],m_numberoftrtoutli:[457,534],m_numconstitu:[413,425,426,486,498,499],m_numev:[11,12,13,25,28,29,34,35,39,41,44,46,47,48,49,53,55,101,406,408,411,424,428,431,437,439,443,445,451,452,454,456,460,465,468,478,480,483,497,501,503,510,512,516,518,527,529,531,532,533,538,544,547],m_numeventpass:[13,28,39,41,44,49,53,55,101,411,428,443,451,456,460,465,483,501,516,518,527,533,538,544],m_numlead:[18,75,417,420,490,493],m_numobject:[11,12,13,25,28,34,35,39,41,44,46,47,48,49,53,55,101,406,408,411,424,428,437,439,443,445,451,452,454,456,460,465,478,480,483,497,501,510,512,516,518,527,529,531,532,533,538,544],m_numobjectpass:[13,28,39,41,44,49,53,55,101,411,428,443,451,456,460,465,483,501,516,518,527,533,538,544],m_numtrkpt1000:[425,498],m_numtrkpt1000pv:[425,426,498,499],m_numtrkpt500:[425,498],m_numtrkpt500pv:[425,426,498,499],m_nwboson:[413,486],m_nzboson:[413,486],m_offline_vtx_decor:415,m_onlineb:[18,77,417,426,490],m_onlinebstool:[18,77,415,417,426,488,490,499],m_ootfracclusters10:[425,426,498,499],m_ootfracclusters5:[425,426,498,499],m_op:[425,498,551],m_operatingpt:[2,28,60,90,400,428,470,501],m_operatingptcdi:[2,60,400,470],m_oq:[407,479],m_orbjetptupperthr:[2,60,400,470],m_origin:[18,55,84,113,417,464,465,490,542,544],m_originconstitscalem:[425,498],m_originconstitscalept:[425,498],m_originopt:[55,113,465,544],m_ortoolbox:[41,101,445,518],m_outauxcontainernam:[11,13,34,39,43,44,46,48,49,100,107,108,406,411,437,443,447,451,452,456,478,483,510,516,523,527,529,532,533],m_outauxcontainername_electron:[41,101,445,518],m_outauxcontainername_jet:[41,101,445,518],m_outauxcontainername_muon:[41,101,445,518],m_outauxcontainername_photon:[41,101,445,518],m_outauxcontainername_tau:[41,101,445,518],m_outcontainernam:[1,11,13,16,25,28,34,39,43,44,46,48,49,53,55,64,68,69,88,90,96,100,102,104,105,107,108,110,112,113,406,411,414,415,424,428,437,443,447,451,452,456,460,465,478,483,487,488,497,501,510,516,523,527,529,532,533,538,544],m_outcontainername_electron:[41,101,445,518],m_outcontainername_jet:[41,101,445,518],m_outcontainername_muon:[41,87,101,445,495,518],m_outcontainername_photon:[41,87,101,445,495,518],m_outcontainername_tau:[41,101,445,518],m_outhistdir:[54,111,462,540],m_outputalgo:[25,28,41,88,90,101,112,424,428,497,501],m_outputalgosystnam:[11,13,29,34,39,41,43,44,46,48,49,64,68,91,96,100,101,102,104,105,107,108,406,411,431,437,443,445,447,451,452,456,478,483,503,510,516,518,523,527,529,532,533],m_outputcbk:[33,436,508],m_outputcbkcontain:[33,436,508],m_outputcbkcontainer_aux:[33,436,508],m_outputcontain:[29,91,431,503],m_outputfilenam:[33,95,436,508],m_outputfjvtpass:[28,428,501],m_outputincbkcontain:[33,436,508],m_outputincbkcontainer_aux:[33,436,508],m_outputjvtpass:[28,428,501],m_outputlabel:[114,468,547],m_outputsystnam:[2,47,60,106,400,454,470,531],m_outputsystnamesfjvt:[28,90,428,501],m_outputsystnamesiso:[12,35,66,97,408,439,480,512],m_outputsystnamesjvt:[28,90,428,501],m_outputsystnamespid:[12,66,408,480],m_outputsystnamesreco:[12,35,66,97,408,439,480,512],m_outputsystnamestrig:[12,35,66,97,408,439,480,512],m_outputsystnamestrigbas:[35,439,512],m_outputsystnamesttva:[35,97,439,512],m_outscauxcontainernam:[11,34,43,46,406,437,447,452,478,510,523,529],m_outsccontainernam:[11,34,43,46,406,437,447,452,478,510,523,529],m_overrideanalysisfil:[25,88,424,497],m_overridecalibarea:[25,88,424,497],m_overridecalibreleas:[35,97,439,512],m_overridemapfilepath:[12,66,408,480],m_overridemapfilepathtrig:[12,66,408,480],m_overridephotoncalibmap:[43,102,447,523],m_overrideuncertcalibarea:[25,88,424,497],m_overrideuncertpath:[25,88,424,497],m_owntdtandtct:[16,414,487],m_p_min:[53,110,460,538],m_paramenergyloss:[438,511],m_paramenergylosssigmaminu:[438,511],m_paramenergylosssigmaplu:[438,511],m_parent:[18,84,417,464,490],m_parent_barcod:[464,542],m_parent_pdgid:[464,542],m_parent_statu:[464,542],m_particl:[132,520],m_particletyp:[18,84,417,464,490,542],m_partontruthlabelid:[425,426,498,499],m_pass_max:[13,28,39,44,49,53,55,68,90,100,104,108,110,113,411,428,443,451,456,460,465,483,501,516,527,533,538,544],m_pass_min:[13,28,39,44,49,53,55,68,90,100,104,108,110,113,411,428,443,451,456,460,465,483,501,516,527,533,538,544],m_passauxdecorkei:[28,53,90,110,428,460,501,538],m_passedtrigg:[17,70,416,489],m_passeleolr:[453,530],m_passhlt:[17,70,416,489],m_passidcut:[438,511],m_passkei:[28,53,428,460,501,538],m_passl1:[17,70,416,489],m_passor:[18,72,77,79,407,417,425,438,479,490,498,511],m_passsel:[18,72,77,79,407,417,425,438,479,490,498,511],m_passtrigbit:[18,83,416,417,490],m_passtrigg:[18,83,416,417,490],m_pdf1:[412,484],m_pdf2:[412,484],m_pdfid1:[121,412,484],m_pdfid2:[121,412,484],m_pdgid1:[121,412,484],m_pdgid2:[121,412,484],m_pdgid:[464,542],m_pdgidonli:[18,84,417,464,490],m_periodconfig:[3,61,401,471],m_persindex:457,m_perskei:457,m_ph_cutflow_al:[44,451,527],m_ph_cutflow_author_cut:[44,451,527],m_ph_cutflow_eta_cut:[44,451,527],m_ph_cutflow_iso_cut:[44,451,527],m_ph_cutflow_oq_cut:[44,451,527],m_ph_cutflow_or_cut:[41,101,445,518],m_ph_cutflow_pid_cut:[44,451,527],m_ph_cutflow_ptmax_cut:[44,451,527],m_ph_cutflow_ptmin_cut:[44,451,527],m_ph_cutflowhist_1:[3,41,44,101,401,445,451,471,518,527],m_phi:[420,457,493,520,534],m_phi_dress:[464,542],m_phosystemat:[29,91,431,503],m_photon:[17,70,416,489],m_photoncontainernam:[54,111,462,540],m_photondetailstr:[54,111,462,540],m_photonidcut:[44,104,451,527],m_photonlooseefftool_handl:[43,447,523],m_photonlooseisemselector:[43,447,523],m_photonmediumefftool_handl:[43,447,523],m_photonmediumisemselector:[43,447,523],m_photonsystsvec:[54,111,462,540],m_photontightefftool_handl:[43,447,523],m_photontightisemselector:[43,447,523],m_photonvarcorrectiontool:[43,447,523],m_pid:[18,72,80,407,409,417,448,479,481,490],m_pideff_sf:[407,479],m_pideffsf_tool_nam:[12,408,480],m_pidsfwp:[18,72,407,417,490],m_pidwp:[18,72,407,409,417,477,490],m_pileup:[18,74,412,416,417,490],m_pileup_tool_handl:[3,35,47,401,439,454,471,512,531],m_pileupscalem:[425,498],m_pileupscalept:[425,498],m_pileupsi:[18,74,412,417,490],m_plot:[6,32,52,404,421,435,459,475,494,507,536],m_prefix:[420,493],m_presampler:[426,499],m_presamplerb:[426,499],m_prescal:[18,83,416,417,490],m_prescaleslumi:[18,83,416,417,490],m_printbranchlist:[3,61,401,471],m_printstor:[9,63,405,476],m_promptlepton:[72,79,407,417,438,490],m_promptleptoninput_dl1mu:[407,438,479,511],m_promptleptoninput_drlj:[407,438,479,511],m_promptleptoninput_ip2:[407,438,479,511],m_promptleptoninput_ip3:[407,438,479,511],m_promptleptoninput_lepjetptfrac:[407,438,479,511],m_promptleptoninput_ptfrac:[407,438,479,511],m_promptleptoninput_ptrel:[407,438,479,511],m_promptleptoninput_rnnip:[407,438,479,511],m_promptleptoninput_sv1_jf_ntrkv:[407,438,479,511],m_promptleptoninput_trackjetntrack:[407,438,479,511],m_promptleptoniso:[407,438,479,511],m_promptleptonveto:[407,438,479,511],m_prwactualmu2016fil:[3,61,401,471],m_prwactualmu2017fil:[3,61,401,471],m_prwactualmu2018fil:[3,61,401,471],m_prwactualmu2022fil:[3,61,401,471],m_prwactualmu2023fil:[3,61,401,471],m_prwfilenam:[3,61,401,471],m_pseudodata:[25,88,424,497],m_pseudodatajertool_handl:[25,424,497],m_pt:[420,493,520],m_pt_:[420,493],m_pt_dress:[464,542],m_pt_dressed_min:[55,113,465,544],m_pt_l:[420,493],m_pt_m:[420,493],m_pt_max:[13,28,39,44,53,55,68,90,100,104,110,113,411,428,443,451,460,465,483,501,516,527,538,544],m_pt_max_jvf:[28,90,428,501],m_pt_max_jvt:[28,90,428,501],m_pt_min:[13,28,39,44,53,55,68,90,100,104,110,113,411,428,443,451,460,465,483,501,516,527,538,544],m_pt_nancheck:[39,100,443,516],m_ptcone20:[409,440,448,449,481,511,513,524,525],m_ptcone20_nonprompt_all_maxweightttva_pt1000:[438,511],m_ptcone20_nonprompt_all_maxweightttva_pt500:[438,511],m_ptcone20_nonprompt_all_maxweightttvaloosecone_pt1000:[407,479],m_ptcone20_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:[407,479],m_ptcone20_nonprompt_all_maxweightttvaloosecone_pt500:[407,479],m_ptcone20_rel:[409,440,481,513],m_ptcone30:[409,440,448,449,481,511,513,524,525],m_ptcone30_rel:[409,440,481,513],m_ptcone40:[409,440,448,449,481,511,513,524,525],m_ptcone40_rel:[409,440,481,513],m_ptvarcone20:[409,440,448,449,481,511,513,524,525],m_ptvarcone20_rel:[409,440,481,513],m_ptvarcone30:[409,440,448,449,481,511,513,524,525],m_ptvarcone30_nonprompt_all_maxweightttva_pt1000:[438,511],m_ptvarcone30_nonprompt_all_maxweightttva_pt1000_closebycorr:[438,511],m_ptvarcone30_nonprompt_all_maxweightttva_pt500:[438,511],m_ptvarcone30_nonprompt_all_maxweightttva_pt500_closebycorr:[438,511],m_ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt1000:[407,479],m_ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:[407,479],m_ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt500:[407,479],m_ptvarcone30_rel:[409,440,481,513],m_ptvarcone40:[409,440,448,449,481,511,513,524,525],m_ptvarcone40_rel:[409,440,481,513],m_puriti:[18,80,417,448,490],m_pv_valid_vs_lblock:[458,535],m_pvlocat:[28,428,501],m_pvntrack:[3,57,61,401,471],m_pvz_vs_lblock:[458,535],m_px:[420,493],m_py:[420,493],m_pz:[420,493],m_q:[121,412,484],m_qoverp:[457,534],m_qualiti:[18,72,79,409,417,438,440,490,511,513],m_radhad1:[448,524],m_radhad:[448,524],m_rand_lumiblock_nr:[121,412,484],m_rand_run_nr:[121,412,484],m_randomrunnumb:[43,102,447,523],m_rapid:[18,77,417,420,425,490,493,498],m_rapidity_max:[28,55,90,113,428,465,501,544],m_rapidity_min:[28,55,90,113,428,465,501,544],m_readhlttrack:[415,488],m_readhltvtx:[415,488],m_readidflagsfromderiv:[13,43,68,102,411,447,483,523],m_readoqfromderiv:[44,104,451,527],m_rebuildusingtracksinjet:[29,91,431,503],m_recalculatejvtscor:[1,28,90,428,501],m_recalibratehltjet:[25,88,424,497],m_recoeff_sf:[407,438,479,511],m_recoeff_sysnam:[79,416,417,490],m_recoeffsf_tool_nam:[12,35,408,439,480,512],m_recommendationtag:[46,47,105,106,452,454,529,531],m_recoparam:[18,72,79,407,417,490],m_recowp:[18,79,416,417,438,440,490],m_refel:[18,78,417,433,490],m_refgamma:[18,78,417,433,490],m_refjet:[18,78,417,433,490],m_refjettrk:[18,78,417,433,490],m_refmuon:[18,78,417,433,490],m_reftau:[18,78,417,433,490],m_regist:[399,469,564],m_removecosmicmuon:[39,100,443,516],m_removedupl:[28,90,428,501],m_removeeventbadmuon:[39,100,443,516],m_requirehltvtx:[28,90,428,501],m_requirenohltvtx:[28,90,428,501],m_resolut:[18,77,417,426,490],m_reta:[448,524],m_retrievepv:[54,111,462,540],m_reweightsherpa22:[3,61,401,471],m_reweightsherpa22_tool_handl:[401,471],m_rhoem:[121,412,484],m_rhoempflow:[121,412,484],m_rholc:[121,412,484],m_rphi:[448,524],m_runallsyst:[2,400,470],m_runbyrun_aftercut:[3,401,471],m_runbyrun_beforecut:[3,401,471],m_runlist:[444,517],m_runnomin:[29,91,431,503],m_runnr_vs_evtnr:[3,401,471],m_runnumb:[121,412,426,444,484],m_runsyst:[25,424,497],m_samplingmax:426,m_saveallcleandecis:[25,88,424,497],m_scale:[18,77,412,413,417,425,484,490],m_scoretool:[13,28,39,49,411,428,443,456,463,483,501,516,533,541],m_scterror:[121,412,484],m_sctflag:[121,412,484],m_selectedwp:[42,446,521],m_setaf3:[3,46,61,105,116,399,469,471,529,564],m_setafii:[1,3,46,61,105,116,399,469,471,529,564],m_setf:[3,61,471],m_setmapindex:[2,60,400,470],m_sf:[425,498,551],m_sffilefjvt:[28,90,428,501],m_sffilejvt:[28,90,428,501],m_sffjvtname:[18,77,417,425,490],m_sfftagfix:[18,77],m_sfftagflt:[18,77],m_sfftaghyb:[18,77],m_sfjvtname:[18,77,417,425,490],m_shallowcopykei:[33,95,436,508],m_shallowcopykeys_vec:[33,436,508],m_shapeem:[18,74,412,417,490],m_shapeempflow:[18,74,412,417,490],m_shapelc:[18,74,412,417,490],m_sigclu:[18,78,417,433,490],m_sigmad0_max:[53,110,460,538],m_sigmaz0_max:[53,110,460,538],m_sigmaz0sintheta_max:[53,110,460,538],m_significancesofttermreso:[29,91,431,503],m_significancetreatpujet:[29,91,431,503],m_sigresolutionclu:[18,78,417,433,490],m_sigresolutiontrk:[18,78,417,433,490],m_sigtrk:[18,78,417,433,490],m_simplecopykei:[33,95,436,508],m_simplecopykeys_vec:[33,436,508],m_singleeltrigchain:[13,68,411,483],m_singleeltrigchainslist:[13,411,483],m_singlejettrigchain:[28,90,428,501],m_singlejettrigchainslist:[28,428,501],m_singlemutrigchain:[39,100,443,516],m_singlemutrigchainslist:[39,443,516],m_singlemutriggermap:[35,439,512],m_singletautrigchain:[49,108,456,533],m_singletautrigchainslist:[49,456,533],m_skiptruthmatchcheck:[46,105,452,529],m_softclu:[18,78,417,433,490],m_softtrk:[18,78,417,433,490],m_sort:[11,25,28,34,43,46,64,88,90,96,102,105,406,424,428,437,447,452,478,497,501,510,523,529],m_sortl1jet:[54,111,462,540],m_sourcewidth:[30,92,432,504],m_split12:[413,486],m_split23:[413,486],m_split34:[413,486],m_statu:[464,542],m_store:[17,19,70,116,314,324,348,351,399,400,401,404,405,406,408,411,414,415,416,421,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,465,468,469,489,491,494,564],m_storecopykei:[33,95,436,508],m_storepasshlt:[3,61,401,471],m_storepassl1:[3,61,401,471],m_storeprescaleweight:[3,61,401,471],m_storesyst:[121,412,484],m_storesystsf:[132,520],m_storetrigdecis:[3,61,401,471],m_storetrigkei:[3,61,401,471],m_substructur:[18,77,413,417,426,490],m_suffix:520,m_sumptchargedpfopt500pv:[425,498],m_sumpttrkpt1000:[425,498],m_sumpttrkpt1000pv:[425,426,498,499],m_sumpttrkpt500:[425,498],m_sumpttrkpt500pv:[425,426,498,499],m_sv0:[425,426,498,499],m_sv0_efracsvx:[425,426,498,499],m_sv0_massvx:[425,426,498,499],m_sv0_n2tpair:[425,426,498,499],m_sv0_ngtinsvx:[425,426,498,499],m_sv0_normdist:[425,426,498,499],m_sv1:[425,426,498,499],m_sv1_c:[425,426,498,499],m_sv1_cu:[425,426,498,499],m_sv1_distmatlai:[425,426,498,499],m_sv1_dr:[425,426,498,499],m_sv1_efracsvx:[425,426,498,499],m_sv1_l3d:[425,426,498,499],m_sv1_lxy:[425,426,498,499],m_sv1_massvx:[425,426,498,499],m_sv1_n2tpair:[425,426,498,499],m_sv1_ngtinsvx:[425,426,498,499],m_sv1_normdist:[425,426,498,499],m_sv1_pb:[425,426,498,499],m_sv1_pc:[425,426,498,499],m_sv1_pu:[425,426,498,499],m_sv1_sig3d:[425,426,498,499],m_sv1ip3d:[425,498],m_sv_scaled_efc:[426,499],m_svdetail:[77,417,425,426,490],m_syslist:[29,431,503],m_sysnamesforparcont:1,m_systconfigprefix:[29,91,431,503],m_systconfigsofttrkfil:[29,91,431,503],m_systematicsstrategi:[2,60,400,470],m_systlist:[2,11,25,34,43,46,47,400,406,424,437,447,452,454,470,478,497,510,523,529,531],m_systlistfjvt:[28,428,501],m_systlistiso:[12,35,408,439,480,512],m_systlistjvt:[28,428,501],m_systlistpid:[12,408,480],m_systlistreco:[12,35,408,439,454,480,512],m_systlisttrig:[12,35,408,439,480,512],m_systlistttva:[35,439,512],m_systnam:[2,11,13,29,34,43,47,60,64,68,91,96,102,106,112,116,400,406,424,431,437,447,452,454,463,469,470,503,510,523,531,541,564],m_systnamefjvt:[28,90,428,501],m_systnameiso:[12,35,66,97,408,439,480,512],m_systnamejvt:[28,90,428,501],m_systnamepid:[12,66,408,480],m_systnamereco:[12,35,66,97,408,439,480,512],m_systnametrig:[12,35,66,97,408,439,480,512],m_systnamettva:[35,97,439,512],m_systval:[29,34,43,47,91,96,102,106,116,400,406,424,431,437,447,452,454,469,503,510,523,531,564],m_systvalfjvt:[28,90,428,501],m_systvaliso:[12,35,66,97,408,439,480,512],m_systvaljvt:[28,90,428,501],m_systvalpid:[12,66,408,480],m_systvalreco:[12,35,66,97,408,439,480,512],m_systvaltrig:[12,35,66,97,408,439,480,512],m_systvalttva:[35,97,439,512],m_systvalvector:[116,399,424,469,564],m_systvalvectorstr:[116,399,469,564],m_tagdecisiononli:[2,60,400,470],m_taggernam:[2,19,28,60,90,338,400,418,428,470,491,501],m_tau1:[426,499],m_tau1_wta:[413,426,486,499],m_tau21:[426,499],m_tau21_wta:[413,426,486,499],m_tau2:[426,499],m_tau2_wta:[413,426,486,499],m_tau32:[426,499],m_tau32_wta:[413,426,486,499],m_tau3:[426,499],m_tau3_wta:[413,426,486,499],m_tau:[17,70,416,489],m_tau_cutflow_al:[49,456,533],m_tau_cutflow_or_cut:[41,101,445,518],m_tau_cutflow_select:[49,456,533],m_tau_cutflowhist_1:[3,41,49,101,401,445,456,471,518,533],m_tau_cutflowhist_2:[3,49,401,456,471,533],m_tau_matchedjetjvt:[453,530],m_tau_matchedjetwidth:[453,530],m_tau_tracks_eta:[453,530],m_tau_tracks_failtrackfilt:[453,530],m_tau_tracks_isclcharg:[453,530],m_tau_tracks_isclconv:[453,530],m_tau_tracks_isclfak:[453,530],m_tau_tracks_iscliso:[453,530],m_tau_tracks_iscor:[453,530],m_tau_tracks_iswid:[453,530],m_tau_tracks_passtrksel:[453,530],m_tau_tracks_phi:[453,530],m_tau_tracks_pt:[453,530],m_taucontainernam:[54,111,462,540],m_taudetailstr:[54,111,462,540],m_taueff_sf:[453,530],m_taueffcorrtool_handl:[47,454,531],m_taueffwp:[81,417,453,490],m_tauseltool_handl:[29,47,49,431,456,503,531,533],m_tausmearingtool_handl:[46,452,529],m_tausystemat:[29,91,431,503],m_tausystsvec:[54,111,462,540],m_tautrigeff_sf:[453,530],m_theta:[457,534],m_tighteffsf:[448,524],m_tighteffsf_error:[448,524],m_tightidconfigpath:[43,102,447,523],m_tilebar0:[426,499],m_tilebar1:[426,499],m_tilebar2:[426,499],m_tileerror:[121,412,484],m_tileext0:[426,499],m_tileext1:[426,499],m_tileext2:[426,499],m_tileflag:[121,412,484],m_tilegap1:[426,499],m_tilegap2:[426,499],m_tilegap3:[426,499],m_time:[18,77,417,425,490,498],m_timestamp:[121,412,484],m_timestampnsoffset:[121,412,484],m_titl:[420,493],m_titleprefix:[426,499],m_toolalreadyus:[116,469,564],m_topoetcone20:[407,409,438,440,448,449,479,481,511,513,524,525],m_topoetcone20_closebycorr:[407,438,479,511],m_topoetcone20_rel:[409,440,481,513],m_topoetcone30:[409,440,448,449,481,511,513,524,525],m_topoetcone30_rel:[409,440,481,513],m_topoetcone40:[409,440,448,449,481,511,513,524,525],m_topoetcone40_rel:[409,440,481,513],m_track:[17,70,416,489],m_track_decor:[415,460],m_trackal:[18,77,81,417,425,426,453,490],m_trackbasedisotyp:[13,39,68,100,411,443,483,516],m_trackhitcont:[18,72,79,81,407,417,438,490],m_trackisoeff:[13,39,68,100,411,443,483,516],m_trackjetcontainernam:[38,99,442,515],m_trackjetetacut:[123,413,486],m_trackjetetamax:[38,99,442,515],m_trackjetlinknam:[38,99,442,515],m_trackjetnam:[18,77,413,417,490],m_trackjetnconst:[38,99,442,515],m_trackjetptcut:[123,413,486],m_trackjetptmin:[38,99,442,515],m_tracknam:[77,417,426,490],m_trackparam:[18,72,79,81,407,417,438,490],m_trackparticlescontainernam:[54,111,462,540],m_trackparticlesdetailstr:[54,111,462,540],m_trackpv:[18,77,416,417,425,426,490],m_trackselection_tool:[422,495],m_trackselectiontool_nam:[422,495],m_tracksinjet:[18,77,417,426,490,499],m_trackwidthpt1000:[425,498],m_trackwidthpt1000pv:[425,426,498,499],m_trackwidthpt500:[425,498],m_trackwidthpt500pv:[425,426,498,499],m_tree:[17,54,70,111,416,462,489,540],m_treestreamnam:[54,111,462,540],m_trigchain:[112,463,541],m_trigchainslist:[463,541],m_trigconftool:[16,17,70,414,416,487,489],m_trigconftool_handl:[3,10,401,471],m_trigdectool:[17,70,414,416,487,489],m_trigdectool_handl:[3,10,13,16,28,39,49,401,411,414,415,428,443,456,463,471,483,487,488,501,516,533,541],m_trigdectool_nam:10,m_trigdetailstr:[54,111,462,540],m_trigeff_sf:[407,438,479,511],m_trigeff_sysnam:[79,416,417,490],m_trigeffsf_tool_nam:[12,35,408,439,480,512],m_trigelectronmatchtool_handl:[13,411,483],m_trigger:[18,72,77,79,80,81,407,417,425,438,448,453,490],m_triggerlist:[1,16,69,414,487],m_triggernam:[47,106,454,531],m_triggerprescal:[17,70,416,489],m_triggerprescaleslumi:[17,70,416,489],m_triggerselect:[3,17,61,70,401,471,489],m_triggerunprescalelist:[3,401,471],m_triginfoswitch:[17,70,416,489],m_triginputprefix:[13,39,68,100,411,443,483,516],m_trigitem:[415,488],m_trigitemafterveto:415,m_trigitemveto:[415,488],m_trigjetbranch:[54,111,462,540],m_trigjetbranchnam:[54,111,462,540],m_trigjetcontain:[54,111,462,540],m_trigjetcontainernam:[54,111,462,540],m_trigjetdetail:[54,111,462,540],m_trigjetdetailstr:[54,111,462,540],m_trigjetmatchtool_handl:[28,428,501],m_trigmatch:[448,524],m_trigmatchtool_handl:[463,541],m_trigmceff:[407,438,479,511],m_trigmceff_tool_nam:[12,408,480],m_trigmetadatatool:[436,508],m_trigmuonmatchtool_handl:[39,443,516],m_trigtaumatchtool_handl:[49,456,533],m_trigwp:[18,72,79,81,407,416,417,438,453,490],m_trk3_d0sig:[426,499],m_trk3_z0sig:[426,499],m_trk_charg:[458,535],m_trk_chi2ndof:[458,535],m_trk_chi2ndof_l:[458,535],m_trk_chi2prob:[458,535],m_trk_chi2prob_:[458,535],m_trk_chi2prob_l:[458,535],m_trk_chi2prob_ss:[458,535],m_trk_cutflowhist_1:[3,401,471],m_trk_d0:[458,461,535,539],m_trk_d0_:[458,535],m_trk_d0_l:[458,535],m_trk_d0_ss:[458,535],m_trk_d0_vl:[458,535],m_trk_d0_vs_trk_p:[458,535],m_trk_d0_vs_trk_p_l:[458,535],m_trk_d0err:[458,535],m_trk_d0sig:[458,461,535,539],m_trk_d0sigpdf:[461,539],m_trk_eta:[458,535],m_trk_eta_vl:[458,535],m_trk_eta_vs_trk_p:[458,535],m_trk_eta_vs_trk_p_l:[458,535],m_trk_eta_vs_trk_phi:[458,535],m_trk_jetdeta:[461,539],m_trk_jetdphi:[461,539],m_trk_jetdr:[461,539],m_trk_jetdr_l:[461,539],m_trk_mc_barcod:[458,535],m_trk_mc_barcode_:[458,535],m_trk_mc_prob:[458,535],m_trk_n:[458,535],m_trk_n_l:[458,535],m_trk_nbl:[458,535],m_trk_npix:[458,535],m_trk_npixdead:535,m_trk_npixhol:[458,535],m_trk_nsct:[458,535],m_trk_nsi:[458,535],m_trk_nsianddead:[458,535],m_trk_nsidead:[458,535],m_trk_ntrt:[458,535],m_trk_ntrtdead:[458,535],m_trk_ntrthole:[458,535],m_trk_p:[458,535],m_trk_p_l:[458,535],m_trk_phi:[458,535],m_trk_phi_vs_trk_p:[458,535],m_trk_phi_vs_trk_p_l:[458,535],m_trk_phierr:[458,535],m_trk_phimanybin:[458,535],m_trk_pt:[458,535],m_trk_pt_l:[458,535],m_trk_pt_ss:[458,535],m_trk_qoperr:[458,535],m_trk_thetaerr:[458,535],m_trk_vz:[458,535],m_trk_vz_vs_lblock:[458,535],m_trk_z0:[458,535],m_trk_z0_:[458,535],m_trk_z0_atlas_m:[458,535],m_trk_z0_atlas_vs_lblock:[458,535],m_trk_z0_l:[458,535],m_trk_z0_m:[458,535],m_trk_z0_m_raw:458,m_trk_z0_raw_m:[458,535],m_trk_z0_raw_vs_lblock:[458,535],m_trk_z0_sign:[461,539],m_trk_z0_vl:[458,535],m_trk_z0_vs_lblock:[458,535],m_trk_z0_vs_trk_p:[458,535],m_trk_z0_vs_trk_p_l:[458,535],m_trk_z0err:[458,535],m_trk_z0sig:[458,535],m_trk_z0sig_sign:[461,539],m_trk_z0sig_signed_pdf:[461,539],m_trk_z0sigsint:[458,535],m_trk_z0sigsint_sign:[461,539],m_trk_z0sint:[458,535],m_trk_z0sint_l:[458,535],m_trk_z0sint_sign:[461,539],m_trk_z0sint_vs_trk_p:[458,535],m_trk_z0sint_vs_trk_p_l:[458,535],m_trk_z0sintd0:[461,539],m_trkcharg:[407,438,479,511],m_trkd0:[407,438,479,511],m_trkd0sig:[407,438,479,511],m_trkjet:[413,486],m_trkjetsidx:[413,486],m_trkname:[415,488],m_trknblayerhit:[407,438,479,511],m_trkninnermostpixlayhit:[407,438,479,511],m_trknpixhit:[407,438,479,511],m_trknpixhol:[407,438,479,511],m_trknscthit:[407,438,479,511],m_trknscthole:[407,438,479,511],m_trknsihit:[407,438,479,511],m_trkntrthit:[407,438,479,511],m_trkntrthole:[407,438,479,511],m_trkphi0:[407,438,479,511],m_trkpixdedx:[407,438,479,511],m_trkplot:[461,539],m_trkqoverp:[407,438,479,511],m_trkseltool:[425,498],m_trkseltool_handl:[53,460,538],m_trksum_ntrk:[426,499],m_trksum_spt:[426,499],m_trksum_vabseta:[426,499],m_trksum_vpt:[426,499],m_trktheta:[407,438,479,511],m_trkz0:[407,438,479,511],m_trkz0sintheta:[407,438,479,511],m_truth:[17,18,70,74,77,412,413,416,417,425,426,489,490],m_truth_:[425,498],m_truth_cutflow_al:[55,465,544],m_truth_cutflow_eta_cut:[55,465,544],m_truth_cutflow_ptmax_cut:[55,465,544],m_truth_cutflow_ptmin_cut:[55,465,544],m_truth_cutflowhist_1:[3,55,401,465,471,544],m_truth_eta:[413,425,426,486,498],m_truth_fatjet:[17,70,416,489],m_truth_m:[413,486],m_truth_partondr:[425,498],m_truth_partonpt:[425,498],m_truth_pdgid:[425,498],m_truth_phi:[413,425,426,486,498],m_truth_pt:[413,425,486,498],m_truth_pt_l:426,m_truth_pt_m:426,m_truth_vertic:[17,70,416,489],m_truthbosoncontainernam:[25,88,424,497],m_truthcount:[425,426,498,499],m_truthcount_bhadfin:[426,499],m_truthcount_bhadinit:[426,499],m_truthcount_bqfin:[426,499],m_truthcount_chadfin:[426,499],m_truthcount_chadinit:[426,499],m_truthcount_cqfin:[426,499],m_truthcount_tausfin:[426,499],m_truthdetail:[18,77,417,425,426,490],m_truthdr_b:[426,499],m_truthdr_c:[426,499],m_truthdr_t:[426,499],m_trutheta:499,m_truthfatjetbranchnam:[54,111,462,540],m_truthfatjetcontainernam:[54,111,462,540],m_truthfatjetdetailstr:[54,111,462,540],m_truthjetbranch:[54,111,462,540],m_truthjetbranchnam:[54,111,462,540],m_truthjetcontain:[28,54,90,111,428,462,501,540],m_truthjetcontainernam:[54,111,462,540],m_truthjetdetailstr:[54,111,462,540],m_truthlabel:[28,90,428,501],m_truthlabeldeltar_b:[425,498],m_truthlabeldeltar_c:[425,498],m_truthlabeldeltar_t:[425,498],m_truthlabelid:[426,499],m_truthlabelnam:[25,88,424,497],m_truthlevelonli:[3,57,61,401,471],m_truthparticlecontainernam:[25,88,424,497],m_truthparticlesbranch:[54,111,462,540],m_truthparticlesbranchnam:[54,111,462,540],m_truthparticlescontain:[54,111,462,540],m_truthparticlescontainernam:[54,111,462,540],m_truthparticlesdetailstr:[54,111,462,540],m_truthphi:499,m_truthpt:[425,426,499],m_truthpt_bhadfin:[426,499],m_truthpt_bhadinit:[426,499],m_truthpt_bqfin:[426,499],m_truthpt_chadfin:[426,499],m_truthpt_chadinit:[426,499],m_truthpt_cqfin:[426,499],m_truthpt_l:499,m_truthpt_m:499,m_truthpt_tausfin:[426,499],m_truthtopquarkcontainernam:[25,88,424,497],m_truthvertexcontainernam:[17,70,489],m_ttvaeff_sf:[438,511],m_ttvaeff_sysnam:[79,416,417,490],m_ttvaeffsf_tool_nam:[35,439,512],m_type:[18,55,84,113,417,464,465,490,544],m_typeopt:[55,113,465,544],m_uncertconfig:[25,88,424,497],m_uncertmctyp:[25,88,424,497],m_ungrtrk500:[413,486],m_unit:[17,54,70,111,121,127,132,407,412,413,416,425,429,433,438,448,462,464,484,489,502,505,520,540],m_useaf3:[43,102,447,523],m_useafii:[43,102,447,523],m_useboostedlepton:[41,101,445,518],m_usecommonprwfil:[3,61,401,471],m_usecontinu:[2,60,400,470],m_usecutflow:[13,28,39,41,44,49,53,55,68,90,100,101,104,108,110,113,411,428,443,445,451,456,460,465,483,501,516,518,527,533,538,544],m_usedevelopmentfil:[2,60,400,470],m_useelectron:[41,101,445,518],m_usehadronconeexcl:[28,90,428,501],m_uselargertruthlabelingtool:[25,88,424,497],m_usemass:520,m_usemetadata:[3,14,61,401,471],m_usemuon:[41,101,445,518],m_useperelectrontriggersf:[12,66,408,480],m_usepermuontriggersf:[35,97,439,512],m_usephoton:[41,101,445,518],m_userun3navig:[116,401,411,443,469,564],m_useselect:[41,101,445,518],m_usetau:[41,101,445,518],m_useth:[18,75,82,417,490,520],m_usetruth3:[25,88,424,497],m_validwp:[42,446,521],m_validwptool:[42,446,521],m_vectorcopykei:[33,95,436,508],m_vectorcopykeys_vec:[33,436,508],m_verbos:[116,399,469,564],m_vertex:[18,82,417,457,490],m_vertex_i:[466,545],m_vertex_x:[466,545],m_vertex_z:[466,545],m_vertexbranch:[54,111,462,540],m_vertexbranchnam:[54,111,462,540],m_vertexcontain:[54,111,462,540],m_vertexcontainernam:[17,57,70,116,401,411,415,416,428,443,459,460,462,469,489,564],m_vertexdetail:[54,111,462,540],m_vertexdetailstr:[54,111,462,540],m_vertexlink:[457,534],m_vertexlink_persindex:[457,534],m_vertexlink_perskei:[457,534],m_vertic:[17,70,416,489],m_vetocrack:[13,44,68,104,411,451,483,527],m_voronia:426,m_voroniapi:426,m_voroniapx:426,m_voroniapz:426,m_voronoiarea:[413,425,486,498],m_vsactualmu:[18,77,417,426,490],m_vslumiblock:[18,77,417,426,490],m_vtag:[18,77,417,490],m_vtx_decor:[415,460],m_vtx_decoration_bkg:415,m_vtx_haddummypv:415,m_vtx_offlin:425,m_vtx_offline_x0:[425,426,498,499],m_vtx_offline_y0:[425,426,498,499],m_vtx_offline_z0:[425,426,498,499],m_vtx_offline_z0_:[426,499],m_vtx_offline_z:426,m_vtx_onlin:425,m_vtx_online_bkg_x0:[425,498],m_vtx_online_bkg_y0:[425,498],m_vtx_online_bkg_z0:[425,498],m_vtx_online_x0:[425,426,498,499],m_vtx_online_x0_raw:[426,499],m_vtx_online_x0_vs_vtx_online_z0:[426,499],m_vtx_online_y0:[425,426,498,499],m_vtx_online_y0_raw:[426,499],m_vtx_online_y0_vs_vtx_online_z0:[426,499],m_vtx_online_z0:[425,426,498,499],m_vtx_online_z0_:[426,499],m_vtx_online_z0_raw:[426,499],m_vtx_online_z:426,m_vtxbkgdiffz0:[426,499],m_vtxbkgdiffz0_:[426,499],m_vtxbkgdiffz0_m:[426,499],m_vtxclass:[426,499],m_vtxclass_vs_jetpt:[426,499],m_vtxclass_vs_lblock:[426,499],m_vtxdiffx0:[426,499],m_vtxdiffx0_l:[426,499],m_vtxdiffx0_vs_lblock:[426,499],m_vtxdiffy0:[426,499],m_vtxdiffy0_l:[426,499],m_vtxdiffy0_vs_lblock:[426,499],m_vtxdiffz0:[426,499],m_vtxdiffz0_:[426,499],m_vtxdiffz0_m:[426,499],m_vtxdiffz0_s_vs_vtx_offline_z0:[426,499],m_vtxdiffz0_s_vs_vtxdiffx0:[426,499],m_vtxdiffz0_s_vs_vtxdiffy0:[426,499],m_vtxdiffz0_vs_lblock:[426,499],m_vtxdiffz0_vs_vtx_offline_z0:[426,499],m_vtxeff10_nodummy_vs_lblock:[426,499],m_vtxeff10_raw_vs_lblock:[426,499],m_vtxeff10_vs_lblock:[426,499],m_vtxeff1_nodummy_vs_lblock:[426,499],m_vtxeff1_raw_vs_lblock:[426,499],m_vtxeff1_vs_lblock:[426,499],m_vtxhaddummi:[425,498],m_vtxname:[415,488],m_vtxofflinevalid:[426,499],m_vtxonlinevalid:[425,426,498,499],m_vz:[457,534],m_w1:[448,524],m_weight_pileup:[121,412,484],m_weight_pileup_down:[121,412,484],m_weight_pileup_up:[121,412,484],m_weightnumeventpass:[13,28,39,41,44,49,55,101,411,428,443,451,456,465,483,501,516,518,527,533,544],m_weightssi:[18,74,412,417,490],m_weta2:[448,524],m_width:[425,426,498,499],m_workingpointeleolrhadtau:[47,106,531],m_workingpointfjvt:[28,90,428,501],m_workingpointiso:[12,35,66,97,408,439,480,512],m_workingpointjvt:[1,28,90,428,501],m_workingpointpid:[12,66,408,480],m_workingpointreco:[12,35,47,66,97,106,408,439,480,512,531],m_workingpointtaueleid:[47,106,454,531],m_workingpointtaujetid:[47,106,454,531],m_workingpointtrig:[12,66,408,480],m_workingpointttva:[35,97,439,512],m_writesysttometadata:[2,11,12,25,28,29,34,35,46,47,60,64,66,88,90,91,96,97,105,106,400,406,408,424,428,431,437,439,452,454,470,478,480,497,501,503,510,512,529,531],m_wtot:[448,524],m_x1:[121,412,484],m_x2:[121,412,484],m_xahtaujetmatch:[81,417,453,490],m_xf1:[121,412,484],m_xf2:[121,412,484],m_z0:[457,534],m_z0_max:[53,110,460,538],m_z0oversigmaz0_max:[53,110,460,538],m_z0sint_max:[53,110,460,538],m_z0sintheta_max:[13,39,68,100,411,443,483,516],m_z0sinthetaoversigmaz0sintheta_max:[53,110,460,538],mac:21,machin:[14,56],macro:[10,20,56,57,85],made:[1,10,20,21,23,57,116,401,403,406,420,428,437,447,452,458,467,564],madgraphpythia8_:400,madgraphpythia8evtgen_:400,magic:491,mai:[1,3,10,21,56,61,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,468,533],mail:21,main:[10,20,21,22,85,116,401,406,408,411,419,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,564],mainli:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],maintain:417,major:[18,76],make:[10,11,13,14,17,19,20,21,22,23,24,33,39,41,56,57,64,68,70,85,95,100,101,314,324,339,348,351,399,400,401,406,408,411,415,416,418,424,425,426,428,431,436,437,439,443,445,447,451,452,454,456,460,462,465,473,474,479,481,486,491,493,499,501,506,511,513,524,525,530,534,535,539,542,546,563],make_pair:[401,411,417,426,428,443,444,446,456],make_skeleton:56,make_systematics_vector:[400,418],make_uniqu:[400,406,408,411,424,428,431,437,439,443,445,447,451,452,454,456],makedeepcopi:[19,243,351,389,393,436,491,556],makefil:[21,22,56],makemcindexmap:[2,60,400,470],makeprivatestor:415,maker:[0,40],makeslimmedtre:56,makesubsetcont:[19,243,389,393,406,437,445,447,452,491,556],man:491,manag:[0,1,10,13,20,21,33,57,58,95,116,244,483,564],mani:[1,10,57,116,416,419,564],manual:[400,401,424],map:[2,12,17,20,22,35,54,60,66,70,77,85,111,116,119,128,135,190,205,206,207,241,242,269,399,400,407,409,411,416,418,419,425,426,428,431,438,439,440,443,446,447,453,454,455,456,469,470,477,479,481,489,490,494,499,509,511,512,513,517,521,523,528,530,540,564],mapfilepath:[408,447],marco:[19,41,101,223,232,235,253,264,268,270,339,406,424,437,445,447,456,489,491],mark:[28,90,428],markupsaf:21,mass:[28,38,55,90,99,113,420,428,442,465,520],mass_:420,mass_max:[28,55,90,113],mass_min:[28,90],massuncorr:426,master:[1,3,61],masterkei:[401,416],mastertool:445,match:[1,3,10,13,18,28,38,39,41,55,57,61,68,72,74,75,76,77,78,79,80,82,83,84,90,99,100,101,112,113,293,407,411,415,418,425,426,428,438,442,443,451,453,455,456,463,483,489,501,516,533],match_map:455,match_map_si:455,matched_muon:442,matchedjet:[124,496],matchedjetjvt:[135,453,528],matchedjetwidth:[135,453,528],matchedmuon:[124,423,496],matchedmuonvec:423,matchedtrack:[415,426],matchfromcompositetool:[162,179,194,207,214,411,428,443,456,463],matchingtool:[162,179,194,207,293,411,428,443,456,463],matchtrackjetstomuon:[38,99,442,515],math:[1,20,31,85,93,154,177,209,212,218,403,426,458,461,467],matter:[411,428,443,451,454,455,456,463,465],max:[28,53,90,110,411,443,451],maxabseta:460,maxchisqperndf:460,maxcycl:[401,436],maxd0:460,maxd0oversigmad0:460,maxdr:442,maxeta:[428,443],maxev:401,maxim:[411,428,443,451,456,460,465],maximum:[3,13,28,38,39,44,53,55,61,68,90,99,100,104,110,113,401,533],maxnpixelhol:460,maxnpixelsharedhit:460,maxnscthol:460,maxnsctsharedhit:460,maxnsihol:460,maxnsisharedhit:460,maxnsisharedmodul:460,maxsigmad0:460,maxsigmaz0:460,maxsigmaz0sintheta:460,maxz0:460,maxz0oversigmaz0:460,maxz0sintheta:460,maxz0sinthetaoversigmaz0sintheta:460,mayb:[10,431,462],mc15:13,mc15_13tev:10,mc15_20150712:[43,102,523],mc16:[3,61],mc16a:[3,61],mc16d:[3,61],mc16e:[3,61],mc20:[1,424],mc20_common:[3,61,471],mc20a:[3,61,401,471],mc20c:401,mc20d:[3,61,401,471],mc20e:[3,61,401,471],mc20f:401,mc21:[1,2,60,424,470],mc23_common:[3,61,471],mc23a:[3,61,401,471],mc23c:[3,61,401,471],mc23d:[3,61,401,471],mc2xx_goodfrommetadata:401,mc2xx_goodfromproperti:401,mc:[1,2,3,10,12,19,25,28,56,60,61,66,88,90,116,118,120,121,123,125,126,129,132,134,136,338,400,401,402,406,407,408,411,412,413,418,424,425,428,429,431,438,439,443,444,447,448,451,453,456,460,465,473,479,484,486,498,502,511,520,524,530,551,564],mc_barcod:458,mc_barcode_:458,mc_prob:458,mccampaign:401,mccampaignlist:401,mccampaignmd:401,mccampaignmd_v2:401,mccampaignp:401,mcchannelnumb:[400,401,412],mceventnumb:412,mceventweight:[56,86,401,404,411,412,428,435,436,443,451,456,459,460,465,494],mcevtweight:[13,28,39,44,49,53,55,68,90,100,104,108,110,113,401,411,428,443,451,456,460,465,483,501,516,527,533,538,544],mcevtweightacc:[401,411,428,443,451,456,465,494],mcevtweightdecor:401,mcindex:400,mcp:439,mcpanalysisguidelinesr22:437,mctruthclassifi:[55,113,465],mctruthclassifierdef:[55,113],mctype:424,md:244,mdinp:401,me:564,mean:[2,10,11,13,56,60,64,68,116,401,406,407,408,411,422,424,428,431,437,438,439,443,445,447,451,452,454,455,456,460,462,468,501,564],meant:[20,23,489],meantim:10,measenergyloss:[128,438,509],measenergylosssigma:[128,438,509],measur:[411,451],medium:[12,18,39,43,66,79,100,411,417,423,425,442,443,446,447,451,454,516,523],mediumeffsf:[133,448,522],mediumeffsf_error:[133,448,522],mediumllh:477,mediumllp:[411,417,446],mediumnopix:[411,446],mediumselectornam:447,meet:10,melbourn:23,member:[2,3,6,9,10,11,12,13,14,16,17,18,20,25,28,29,30,31,32,33,34,35,38,39,41,42,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,70,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,116,119,121,122,123,124,127,128,131,132,133,135,138,140,141,302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,483,516,551,552,564],memori:[1,10,23,33,54,95,111,159,256,404,408,435,459,504],mention:[56,57],menu:[1,35,97,411,416,417,446],menukei:[18,83,417],merg:[10,13,23,39,56,68,100,401,406,408,411,422,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,462,468],mergeabl:10,merlin:[414,487],messag:[14,19,20,30,85,92,340,399,432,469,491],messagecheck:[151,167,169,185,221,243,244,245,273,300,400,416,418,434,469,491,492,493,521,548,549],messageprint:[256,432,504],messageprinteralgo:[0,58,116,144,145,181,220,221,389,430,556,557,564],messageprinteralgoclass:[115,389],messageprinteroverlai:[256,432,504],met:[0,1,3,7,13,17,18,25,31,58,61,68,70,78,88,91,93,127,400,406,411,416,424,428,431,433,434,435,437,447,452,489,503,505,506],met_core_antikt4lctopo:[29,91,503],meta:[33,57,95,401,418],metadata:[1,3,10,11,12,19,25,28,29,33,34,35,46,47,57,61,64,66,88,90,91,95,96,97,105,106,116,337,399,400,401,406,408,418,424,428,431,437,439,452,454,468,471,491,494,508,564],metadata_eventcount:401,metadata_sumw:401,metadataandpropertybad:401,metadataandpropertyconflict:401,metadataandrunconflict:401,metafield:[151,169,246,400,418,494],metaobject:[169,246,418,494],metassoc_antikt4lctopo:[29,91,503],metauxcont:431,metclu:[18,78,417],metconstructor:[29,116,144,145,181,220,221,242,243,389,430,556,557,564],metconstructorclass:[115,389],metcontain:[17,70,144,145,220,241,242,389,396,416,489,556,557],metcontainerclass:[115,389],metelectron:431,metfinalclu:434,metfinalclusphi:434,metfinalcluspi:434,metfinalcluspx:434,metfinalclussumet:434,metfinaltrk:434,metfinaltrkphi:434,metfinaltrkpi:434,metfinaltrkpx:434,metfinaltrksumet:434,methelp:[175,182,424,431],methist:[0,20,21,32,85,144,145,220,242,244,259,389,435,507,556,557],methistsalgo:[0,20,116,144,145,181,220,221,243,258,389,430,556,557,564],methistsalgoclass:[115,389],methistsclass:[115,389],method:[10,56,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],metinfoswitch:[18,31,76,93,127,242,389,392,417,434,490,505,506,556],metinfoswitchclass:[115,389],metinterfac:[255,503],metmak:[29,91,431,503],metmap:431,metmuon:431,metnam:[17,70,416,489],metoversqrtht:[431,433],metoversqrtsumet:[431,433],metphoton:431,metsignific:[29,503],metsuffix:462,metsystematicstool:[29,431,503],metsystnam:462,mettau:431,mettrk:[18,78,417],metutil:[29,91,175,182,424,431,503],mev:[2,13,54,56,60,68,111,426,428,489],mg:[2,60],mgpy8eg_:400,micromet:[407,438],might:[1,10,17,20,21,33,70,85,95,400,406,408,416,431,439,443,453,454,528,530],milesi:[19,41,101,223,232,235,253,264,268,270,339,406,424,437,445,447,456,489,491],min:[223,411,420,442,443,451,493],minbia:[53,110],mincycl:401,mind:[12,66],mindr:423,mindr_muon:423,mini:[0,23,40,426,430],minifcal0:426,minifcal1:426,minifcal2:426,minifcal3:426,minim:[14,23,411,428,443,451,456,460,465,533],minimum:[2,3,13,28,38,39,44,53,55,60,61,68,90,99,100,104,110,113,401,501,533],minixaod:[33,116,144,145,181,220,221,242,243,389,430,556,557,564],minixaodclass:[115,389],minixaodkernel:436,minnbothinnermostlayershit:460,minninnermostlayerhit:460,minnnexttoinnermostlayerhit:460,minnpixelhit:460,minnpixelhitsphys:460,minnscthit:460,minnscthitsphys:460,minnsihit:460,minnsihitsphys:460,minor:57,minp:460,minprob:460,minpt:[400,422,428,460],minutia:56,mirror:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],miscellan:491,miss:[2,10,13,18,28,39,49,56,60,78,399,401,418,421,428,430,439,445,491],missinget:[187,431,433,434,436],missingetassociationhelp:431,missingetassociationmap:[182,431],missingetauxcontain:[182,187,431,436],missingetbas:431,missingetcomposit:[182,431],missingetcontain:[17,31,70,93,127,182,187,241,257,258,416,431,433,434,435,436,462,489,505,506],mkdir:[22,56,418,462],mkvirtualenv:21,mloss:442,mm:[13,18,68,77,458,461],mname:520,mode:[3,25,56,61,88],model:[7,12,66],modif:[437,452],modifi:[10,14,20,34,96,424,468],modifyjet:424,modul:57,momementum:[28,90],moment:[12,66,425,428],momentum:[11,13,25,34,38,64,68,88,96,99,428,442,447],monik:[116,564],monitor:[56,447],mont:[56,86],more:[1,3,10,18,21,22,23,34,50,56,57,61,76,77,96,116,399,401,404,411,416,421,422,428,432,435,439,442,443,456,459,462,564],most:[10,21,23,56,401,406,408,411,414,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],mount:22,move:[1,10,33,95,400,406,408,411,424,426,428,431,437,439,443,445,447,451,452,454,456],mpx:[433,434],mpy:[433,434],msg:[10,19,20,85,116,243,318,324,333,339,348,349,389,393,399,400,401,404,406,408,411,414,415,416,418,419,421,422,424,428,431,435,436,437,439,442,443,445,446,447,451,452,454,455,456,459,460,462,463,465,468,469,491,492,494,556,561,564],msgclusterhist:[154,389,403,474,556],msgelectronhist:[160,389,409,481,556],msgiparticlehist:[420,493],msgjethist:[426,499],msglvl:[399,401,406,408,411,414,415,421,424,428,431,437,439,443,445,447,451,452,454,455,456,462,465,494],msgmuonhist:[440,513],msgphotonhist:[200,389,449,525,556],msgpidmanag:[197,370,389,446,521,556],msgstream:[19,20,30,85,92,170,221,243,333,340,389,393,418,419,469,491,492,556],msgstreammacro:[221,469],msgtrackhist:[209,389,458,535,556],msgtracksinjethist:[212,389,461,539,556],msgvtxhist:[218,389,467,546,556],msmgr:10,mu:[0,3,4,8,25,45,61,88,97,401,426,431,439],mu_itr:[439,443],mu_syst_cont_nam:445,much:[10,14,21,23,54,57,111],muisoeff_sf_syst_iso:[438,439],mujetort:445,mujetoverlaptool:[41,101],multi:7,multijet:[7,401],multijetalgo:14,multilepton:7,multimap:[42,65,411,428,443,446,456,490,521],multipl:[2,12,18,35,47,56,57,60,66,76,97,106,116,399,400,401,403,417,428,458,465,564],multiplestreammanag:10,multipli:[411,443],muon:[17,18,20,25,29,33,34,35,38,39,41,70,79,88,91,95,96,97,99,100,101,124,129,131,145,168,173,187,188,190,196,220,263,265,271,389,396,411,416,417,422,423,424,431,433,436,437,438,439,440,442,443,445,468,489,495,496,511,513,515,516,518,533,556,557,563],muon_d0:443,muon_elossvec:423,muon_isoeff_sf_:416,muon_itr:416,muon_recoeff_sf_:416,muon_tlv:442,muon_trigeff_sf_:416,muon_ttvaeff_sf_sysnam:416,muon_z0_expv:443,muonanalysisinterfac:[264,268,512,516],muonauxcontain:[187,190,436,439],muoncalibr:[29,34,91,116,144,145,181,220,221,242,243,389,430,556,557,564],muoncalibrationandsmearingtool:[34,96,437],muoncalibrationperiodtool:[34,96,437],muoncalibrationtool:[34,510],muoncalibrator_syst:[34,96,510],muoncalibratorclass:[115,389],muoncalibtool:[34,262,510],muonclass:[115,389],muoncont:431,muoncontain:[17,35,39,41,70,97,100,101,124,144,145,173,175,182,187,188,190,192,193,194,196,220,241,242,247,248,261,265,268,270,272,389,396,416,422,423,424,431,436,437,439,441,442,443,445,462,489,495,496,512,513,516,518,556,557],muoncontainerclass:[115,389],muoncorr_tlv:442,muoncorrect:[18,77,417,485,486],muoncorrected_eta:[122,413,485],muoncorrected_m:[122,413,485],muoncorrected_phi:[122,413,485],muoncorrected_pt:[122,413,485],muonefficiencycorrect:[190,264,439],muonefficiencycorrector:[35,116,144,145,181,220,221,242,243,389,430,556,557,564],muonefficiencycorrector_isosyst:[35,97,512],muonefficiencycorrector_isosyst_iso:416,muonefficiencycorrector_recosyst:[35,97,512],muonefficiencycorrector_recosyst_reco:416,muonefficiencycorrector_trigsyst:[35,97,512],muonefficiencycorrector_trigsyst_:416,muonefficiencycorrector_ttvasyst:[35,97,512],muonefficiencycorrector_ttvasyst_ttva:416,muonefficiencycorrectorclass:[115,389],muonefficiencyscalefactor:[190,439,512],muonefficiencyscalefactors_effsf_:439,muonefficiencyscalefactors_effsf_iso_:439,muonefficiencyscalefactors_effsf_reco_:439,muonel:442,muoneloss:509,muonhist:[0,20,144,145,192,220,236,245,261,389,441,557],muonhistsalgo:[0,20,86,144,145,181,220,243,246,265,389,430,556,557],muonhistsalgoclass:[115,389],muonid:439,muonidanalysi:439,muoninfatjetcorrector:[38,116,144,145,181,220,221,242,243,389,430,556,557,564],muoninfatjetcorrectorclass:[115,389],muoninfoswitch:[18,75,129,242,389,392,416,417,440,490,511,513,556],muoninfoswitchclass:[115,389],muoninjetcorrect:[124,423,496],muonmomentumcorrect:[34,96,262,510],muonnam:[17,70,416,489],muonpt:440,muonqual:439,muonqualityset:443,muons_in_jet:442,muons_presel:[33,95],muons_reconstructed_as_jets_in_p:411,muons_syst:437,muonsegcount:425,muonselectiontool:[39,50,193,194,442,443,516],muonselector:[18,39,116,144,145,147,181,220,221,242,243,389,430,490,556,557,564],muonselector_syst:[39,100,516],muonselectorclass:[115,389],muonselectortool:[34,96,193,194,268,442,443],muonsintrackjet:442,muonspectrometerpt:[34,96],muonspectrometertrackparticl:443,muonsphi:433,muonssumet:433,muonstandalon:417,muontriggerscalefactor:[190,439,512],muontriggerscalefactors_effsf_trig_reco:439,muontruthtyp:10,muontyp:[417,443],muonvarl:431,muonvart:431,muonvec:423,muonwp:[422,443],muqual:443,muqualitypars:443,murecoeff_sf_syst_reco:[438,439],musc_itr:437,must:[1,3,10,12,14,19,33,41,56,61,66,86,95,101,339,401,406,411,414,415,424,428,437,439,443,445,447,451,452,454,456,462,463],musuffix:462,musyst:[41,101,445,518],musystnam:462,mutabl:[20,85,492],mutrigeff_sf_syst_:[438,439],mutrigmceff_syst_:[438,439],muttvaeff_sf_syst_:439,muttvaeff_sf_syst_ttva:438,mutypepars:443,mv2c10:415,mv:[10,56],mva:529,mvatesqualitycheck:452,mvb:426,mvx_discrimin:415,my:[10,21],myaccessor:491,myalgo:14,myalgorithm:10,mybaseeventsel:57,myboxtext:56,mybranch:10,mybtag:425,mycut:[411,443],mycutbasedtool:411,mycutbasedwp:411,myelectron:411,myfilt:10,myhist:[471,475,478,480,482,494,500,501,503,507,510,512,514,516,523,526,529,531,532,533,536,544,547],myjet:428,mylhtool:411,mylhwp:411,mymarkertext:56,mymuon:443,mynam:10,mynclust:413,mysampleshowertyp:400,mysinglemuoncont:439,mytau:456,mytext:56,mytoolnam:14,mytoolnewnam:14,mytooltyp:14,mytre:[56,471,475,478,480,482,494,500,501,503,507,510,512,514,516,523,526,529,531,532,533,536,544,547],n90:426,n90cell:426,n90const:[425,426],n90constitu:[124,425,426,496],n:[10,13,19,23,28,39,44,53,55,56,68,90,100,104,110,113,346,400,401,403,411,418,420,425,428,443,445,447,448,456,491,520,533],n_:426,n_trk_d0cut:426,n_trk_sigd0cut:426,nacceptedev:401,nachman:491,name:[1,2,3,10,11,12,13,14,16,17,18,19,20,21,23,24,25,27,28,29,30,31,33,34,35,37,38,39,41,43,44,46,47,53,55,56,57,60,61,64,66,67,68,69,70,72,77,79,81,85,86,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,110,112,113,116,118,120,121,123,125,126,127,129,132,134,136,137,139,141,243,302,303,304,305,306,307,308,309,310,311,312,313,314,317,319,321,324,327,329,331,333,338,339,348,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,393,399,400,401,402,403,406,407,408,409,410,411,413,416,417,418,419,420,421,424,425,426,427,428,429,431,433,434,437,438,439,440,441,443,445,446,447,448,449,450,451,452,453,454,455,456,457,458,461,462,463,464,466,467,469,471,473,474,479,481,482,484,486,488,491,492,493,494,498,499,500,502,505,506,510,511,513,514,520,524,525,526,529,530,532,533,534,535,539,540,542,545,546,556,561,564],namespac:[18,19,57,115,116,402,403,407,409,412,413,417,420,423,425,426,429,430,433,438,440,444,446,448,449,453,457,458,461,464,466,467,469,472,473,477,479,483,484,485,486,487,489,490,491,493,496,498,502,505,509,511,512,516,517,519,520,522,523,524,527,528,530,534,537,542,543,545,557,564],nan:[39,100,443],nasti:[24,401],navig:[21,116,411,443,564],navigationformat:401,nb:[14,401,406,407,408,411,428,438,439,443,456,462],nbl:[53,110,458,460],nbl_min:[53,110],nblayer:460,nblayerhit:[407,411,438],nblayeroutli:411,nc_grid_filt:56,nc_outputsamplenam:56,nc_tree:56,nchargedparticl:[122,413,485],nchildren:[140,464,543],nclu:402,ncluster:[122,413,485],ncontain:415,nd:420,ndof:[53,110,458,460],nearest:[3,61],neat:10,necessari:[10,18,21,56,76,86,414,416],necessarili:401,need:[1,10,11,12,13,14,17,19,20,21,22,23,25,28,33,34,39,41,56,57,64,66,68,70,85,88,90,95,96,100,101,112,116,314,399,400,401,404,405,406,408,410,411,414,416,418,421,422,424,425,426,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,453,454,455,456,459,460,462,463,465,468,470,471,475,476,478,480,482,483,487,488,489,491,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,528,529,530,531,532,533,536,538,540,544,547,563,564],needl:[19,346,418,491],neflowisol20:[119,128,407,417,438,477,509],neflowisol20_closebycorr:[128,438,509],neg:[2,28,54,60,90,111,426,428],negative:[124,425,426,496],nege:[425,426],nentri:444,nerc:57,nest:[302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,556],nestedclass:430,nevent:[56,401],never:[10,19,348],newfeatur:10,newfil:10,newhltbjet:415,newhltjet:415,newli:20,newmet:431,newpoolrootstream:10,newreffin:[29,91,503],newvec:423,next:[10,19,21,22,23,56,57,348,400,401,411,443,446,451],ngtinsvx:426,nhboson:[122,413,485],nhit:458,nhitsvseta:458,nibl:[53,110],nimlpixhit:425,nimlpixsharedhit:425,nimlpixsplithit:425,ninnermostpixlayhit:[407,438],nip2dtrack:[124,425,426,496],nip3dtrack:[124,425,426,496],nisotracks10gev:467,nisotracks15gev:467,nisotracks1gev:467,nisotracks20gev:467,nisotracks25gev:467,nisotracks2gev:467,nisotracks30gev:467,nisotracks5gev:467,nisotrk:467,nisotrks_l:467,njet:56,nlead:[18,75,417],nleading4:[18,75],nleadingparticl:493,nlo:[56,400],nmuon:442,nnimlpixhit:425,nnimlpixsharedhit:425,nnimlpixsplithit:425,nnjvt:[1,18,28,77,90,417,425,428,498],nnjvtefficiencytool:[28,90,428],nnjvtmomenttool:428,nnjvtpass:425,nnjvtselectiontool:428,nobj:[411,428,443,451,456,460,465],nodatainfo:[18,74,417],node:[57,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547],noel:23,noextra:[18,78,417],nomcontainernotfound:445,nomenclatur:411,nometadatabutpropertyok:401,nomin:[1,11,12,13,17,19,23,25,35,41,47,64,66,68,70,86,88,97,101,106,333,400,401,406,408,411,418,424,428,431,437,439,443,445,447,451,452,454,455,456,462,463,465,480,489,512,518,531],nominaltreenam:[17,70,416,489],nomultipl:[18,75,77,82,84,417],non:[10,21,25,28,33,88,90,95,417,428,445,464,471,491],none:[18,23,44,56,57,72,79,104,124,407,409,417,424,425,438,440,442,451,453,454,462,496,498,527,551],nooption:[34,96,437,510],nopix:446,nopresel:57,noptr:[302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388],normal:[3,28,57,61,90,491],normalis:401,normalizedtypeinfonam:[243,491],notcorrectdata_cb:437,notcorrectdata_idm:437,note:[1,10,18,21,23,33,41,57,72,95,101,116,401,418,424,428,431,456,462,564],noth:56,notic:[10,18,24,81],now:[1,21,56,400,401,406,408,411,414,428,431,437,439,443,447,452,454,456,483,516],np:[2,60],nparent:[140,464,543],npart:493,npass:[411,428,443,451,456,460,465],npassmax:[443,456],npassmin:[443,456],nph:448,npix:[53,110,458],npixdead:458,npixhit:[407,425,438],npixhol:[53,110,407,438,458],npixholes_max:[53,110],npixsharedhit:425,npixsplithit:425,npo:[399,400,401,406,411,415,417,418,424,428,439,443,446,447,454,458,462,467,490],npv:[25,56,88,401,412,418],npvkei:424,nr:[223,428],nrunbin:426,nsct:[53,110,458],nsctdead:458,nscthit:[407,425,438,458],nscthole:[53,110,407,438],nsctholes_max:[53,110],nselectedelectron:411,nselectedjet:428,nselectedmuon:443,nselectedtau:456,nsi:[53,110,458],nsi_min:[53,110],nsianddead:458,nsidead:458,nsingletrack:426,nth:[19,346,546],ntquark:[122,413,485],ntrack:[19,122,322,343,413,418,453,485,491],ntrackforprimaryvertex:56,ntrackparticl:[418,467],ntracks10gev:467,ntracks15gev:467,ntracks1gev:467,ntracks20gev:467,ntracks25gev:467,ntracks2gev:467,ntracks30gev:467,ntracks5gev:467,ntracksatvtx:426,ntrimsubjet:[18,77,122,413,417,485],ntrk1000:425,ntrk500:425,ntrk:[135,426,453,467,528],ntrks_l:467,ntrksall:467,ntrt:458,ntrtdead:458,ntrthit:[407,425,438],ntrthole:[407,438,458],ntupl:563,ntuplesvc:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],nullptr:[3,6,11,12,13,16,17,19,28,32,33,39,41,43,44,49,52,53,55,70,101,116,121,124,314,399,400,401,404,406,408,411,412,413,414,415,416,418,422,424,425,428,431,435,436,437,439,442,443,444,445,446,447,451,452,454,455,456,459,460,462,463,465,466,468,469,471,475,478,480,483,484,487,489,491,494,496,501,504,507,508,516,518,523,527,533,536,538,544,564],nullvar:418,num:426,number:[3,10,13,18,20,23,28,31,38,39,41,44,53,54,55,56,61,68,75,80,82,85,90,93,99,100,101,104,110,111,113,116,400,401,405,406,408,411,416,417,418,424,425,426,428,431,437,439,443,445,447,451,452,454,455,456,457,460,462,465,467,520,533,564],numberdof:[138,457,458,460,537],numberofblayerhit:[407,411,438,458,460],numberofblayeroutli:411,numberofinnermostpixellayerhit:[138,407,425,438,457,537],numberofinnermostpixellayersharedhit:425,numberofinnermostpixellayersplithit:425,numberofnexttoinnermostpixellayerhit:[138,425,457,537],numberofnexttoinnermostpixellayersharedhit:425,numberofnexttoinnermostpixellayersplithit:425,numberofphiholelay:[138,457,537],numberofphilay:[138,457,537],numberofpixeldeadsensor:[138,457,458,537],numberofpixelhit:[138,407,425,438,457,458,537],numberofpixelhol:[138,407,438,457,458,537],numberofpixelsharedhit:[138,425,457,537],numberofpixelsplithit:425,numberofprecisionholelay:[138,457,537],numberofprecisionlay:[138,457,537],numberofsctdeadsensor:[138,457,458,537],numberofscthit:[138,407,425,438,457,458,537],numberofscthol:[138,407,438,457,537],numberofsctsharedhit:[138,457,537],numberoftrtdeadstraw:458,numberoftrthit:[138,407,425,438,457,458,537],numberoftrthol:[407,438,458],numberoftrtoutli:[138,457,537],numconstitu:[122,413,425,426,442,485],numinst:[116,399,411,432,443,455,456,469,564],numparticl:[420,493],numtow:426,numtrkpt1000:[425,426,468],numtrkpt1000pv:[124,425,426,496],numtrkpt500:[413,425,426,468],numtrkpt500pv:[124,425,426,496],nutshel:[11,12,13,64,66,68],nwboson:[122,413,485],nzboson:[122,413,485],o:[28,41,90,101,112,407,412,424,438],obj:456,obj_itr:445,objcont:[41,101,445,518],object:[0,1,2,3,10,13,17,19,20,23,25,28,30,33,39,41,44,53,55,56,57,60,61,68,70,85,86,87,88,90,92,100,101,104,110,112,113,116,240,270,293,314,324,331,333,339,340,348,351,401,406,407,408,411,415,422,424,428,431,436,437,438,439,443,445,447,451,452,453,454,455,456,460,463,465,468,471,477,479,483,488,491,501,509,511,516,518,527,530,533,544,563,564],objetc:[41,101],objlinkacc:445,obtain:[23,56,400,408,428,439,454],obviou:57,obvious:436,occur:[13,19,346,401,416],occurr:[19,56,346],off:[1,3,18,19,20,24,61,76,85,351,400,401,416,430,462,471],offici:[14,400,425],offlin:[43,102,523],offline_pvx:[415,425,426],offline_vertic:415,offline_vtx:[415,425,426],offset:426,oh:491,ok:[400,406,416,428,431,437,439,447,452,454],old:[56,426],old_dr:455,oldfil:10,olr:[1,41,101],onc:[10,17,56,70,401,406,408,411,418,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],one:[1,3,10,12,14,18,19,21,23,25,33,53,56,57,61,66,77,88,95,110,324,339,348,399,400,401,406,407,408,411,414,415,417,418,424,425,428,431,432,437,438,439,443,445,446,447,451,452,453,454,455,456,462,463,465,491,494,533],ones:[1,10,12,66,400,433,434],onlear:433,onli:[1,2,3,10,11,12,13,14,17,18,19,20,21,23,25,28,29,30,31,33,35,38,41,47,56,57,60,61,64,66,68,70,78,85,86,88,90,91,92,93,95,97,99,101,106,324,348,399,400,401,406,408,411,416,417,418,421,422,424,425,428,431,436,437,439,442,443,445,446,447,451,452,454,455,456,460,462,465,466,468,470,483,490,516,521],onlin:415,online_pvx:[425,426,428],online_pvx_bkg:[425,426],online_x0_raw:426,online_y0_raw:426,online_z0_raw:426,onlineb:[18,77,417],onlinebeamspottool:[115,144,145,220,236,251,389,396,415,426,488,499,556,557],onlinebeamspottoolstruct:[115,389],onlinebsinfo:444,onlinebstool:[18,77,417],onlinebstoolinfo:426,onto:1,ootfraccells10:426,ootfraccells5:426,ootfracclus10:425,ootfracclus5:425,ootfracclusters10:[124,425,426,496],ootfracclusters5:[124,425,426,496],ooverrid:[17,70],op:[1,124,423,496],open:[21,56,400,401,404,405,406,408,411,414,415,422,424,428,431,432,435,436,437,439,443,445,447,451,452,454,455,456,459,460,463,465,468],oper:[1,2,10,13,19,56,60,68,132,400,411,418,428,470,491,520,550],operatingpoint:[400,428],opok:400,opt:22,optbatchsharedfilesystem:57,optbatchwait:57,optcachelearnentri:56,optcaches:56,optgridmemori:56,optgridmergeoutput:14,optgridnfilesperjob:[14,56],optgridoutputsamplenam:14,option:[1,3,10,17,18,19,20,23,31,33,41,56,57,61,70,72,79,85,93,95,101,339,399,415,417,419,428,431,452,470,471,489,492,520],optmaxev:56,optoffici:14,optremovesubmitdir:56,optslurmextraconfiglin:57,optslurmruntim:57,optslurmwrapperexec:57,optsubmitflag:14,optxaodaccessmod:56,optxaodaccessmode_branch:56,oq:[119,407,451,477],oq_cut:[411,451],or_cut:445,oralgo_syst:[41,101,518],ordecor:445,order:[1,10,19,20,34,57,96,348,406,424,437,443,446,447,452,491],orflag:445,org:21,orig:[19,345,418,491],origin:[1,10,11,13,18,33,55,64,68,84,95,113,140,401,406,407,417,418,424,428,437,438,439,447,452,464,465,542,543],originalelectron:411,originalelectronlink:411,originalindex:418,originalmuon:443,originalmuonlink:443,originconstit:425,originconstitscalem:425,originconstitscalept:425,originindex:426,originvec:465,orutil:[41,101,445,518],other:[1,2,3,7,10,12,20,21,30,33,35,47,53,56,57,60,61,66,85,92,95,97,106,110,116,400,401,411,414,416,424,430,473,474,479,481,483,486,487,489,493,499,506,511,513,516,524,525,530,534,535,539,542,546,564],otherwis:[1,13,21,54,68,111,116,400,401,411,428,431,432,443,445,462,491,564],ouput:462,our:[10,20,21,22,33,56,85,95,116,401,436,468,564],out:[3,10,14,17,18,21,33,41,56,57,61,70,76,95,101,112,116,400,425,436,439,468,489,563,564],out_kei:436,out_minixaod:[33,95,508],out_xaod:436,outcom:[116,564],outcont:[19,332,339,491],outcontainernam:[28,55,90,113,406,424,428,437,447,452,465,501,544],outdat:[7,401],outerdr:445,outforcflow:401,outfordupl:401,outformetadata:401,outfortre:462,outofvalidityrang:[400,408,428,437,452],output:[0,1,5,10,11,13,14,16,17,18,19,21,25,26,28,33,36,39,41,42,44,51,53,55,56,57,59,64,68,69,70,72,79,81,88,90,95,100,101,104,110,113,314,324,339,348,351,400,401,403,404,406,408,411,418,419,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,458,459,460,461,462,463,465,467,468,469,471,480,488,489,512,532,533,540,563],outputadd:[401,436,462,468],outputalgo:[1,56],outputcontain:[1,56],outputha:[401,462],outputlabel:468,outputlevel:[10,400,401,408,411,414,424,428,436,437,443,447,456],outputnam:56,outputpassvalu:445,outputstream:[152,183,187,213,219,401,432,436,462,468],outputstreamathenapool:10,outputtag:56,outputtrack:460,outscauxcontainernam:[406,424,437,447,452],outsccontainernam:[406,424,437,447,452],outsfstr:439,outsid:[10,13,44,68,104,424,428],outsystlist:418,outtre:[56,462],over:[10,13,21,22,23,33,56,57,68,86,95,116,400,406,407,408,411,415,416,418,424,425,426,428,431,436,437,438,439,442,443,447,451,452,453,454,455,456,463,491,494,540,564],overhead:10,overlai:[28,90,428],overlap:[0,2,12,19,35,45,47,60,66,97,101,106,270,339,415,442,445],overlapacc:445,overlapflag:[41,101,445,518],overlapobj:445,overlapobject:445,overlapremov:[41,116,144,145,181,220,221,242,243,389,430,556,557,564],overlapremovalinit:[247,270,495,518],overlapremovaltool:[247,270,445,495,518],overlapremoverclass:[115,389],overlapremoverdict:[41,101],overload:[20,21,31,85,93,473,474,479,481,486,491,493,499,506,511,513,524,525,530,534,535,539,542,546],overrid:[3,12,17,25,28,61,66,70,88,90,116,399,401,408,424,439,447,564],own:[3,10,16,17,20,21,61,70,116,564],p1:10,p2:10,p3:10,p4:[131,409,415,418,420,423,425,426,428,440,442,461,467,493,509,519,520],p4usedinjetcharg:425,p9495:57,p:[29,39,53,57,91,100,110,443,458,491],p_:[3,20,31,61,85,93,420,426,458],p_btag_info:415,p_l:458,p_min:[53,110],p_mv2c10:415,p_new:491,packag:[1,7,10,22,25,41,56,57,88,101,112,232,235,264,268,283,400,401,404,405,406,408,411,414,416,422,424,428,435,436,437,439,443,445,447,452,454,455,456,459,465,468,483,521,563],package_dep:56,page:[50,56,397,563],pai:1,pair:[3,25,33,48,77,95,107,401,406,407,409,411,413,417,419,424,425,426,428,436,437,438,440,443,446,447,452,453,455,456,471,490,497,508,532],panda:14,panic:401,parallel:[407,438],paramenergyloss:[128,438,509],paramenergylosssigmaminu:[128,438,509],paramenergylosssigmaplu:[128,438,509],paramet:[1,3,10,13,17,18,19,20,25,27,31,37,41,61,67,68,70,72,74,75,76,77,78,79,80,82,83,84,85,86,88,89,93,98,101,103,116,302,303,304,305,307,308,309,310,312,313,314,317,324,333,338,339,348,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,400,401,407,428,438,442,443,477,479,501,509,511,564],paramt:[13,68],parent:[1,18,25,33,84,88,95,146,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,413,417,424,436,442,464,542,543],parent_barcod:[140,464,543],parent_pdgid:[140,464,543],parent_statu:[140,464,543],parentel:442,parenthesi:[302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388],parentjet:442,pars:[18,21,35,76,97,116,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,400,401,411,418,428,436,443,451,456,460,490,564],parse_arg:57,parseenum:[73,411,443,446,490],parser:[18,57,73,417],parsesystvalvector:[116,399,424,469,564],part:[10,21,56,401,411,428,443,456],parta:[19,325,418,491],partb:[19,325,418,491],partial:[18,75,76,77,80],particl:[0,19,25,58,86,88,117,118,119,120,122,123,124,125,128,129,132,133,134,135,136,137,138,139,140,145,220,224,229,237,248,261,272,274,280,289,295,331,389,396,402,407,409,413,416,420,425,426,438,440,448,449,453,457,462,463,464,465,472,473,477,479,481,485,486,491,493,496,498,499,509,511,513,520,522,524,525,528,530,534,537,542,543,556,557],particle_itr:420,particlecontain:[118,120,123,125,126,129,134,136,137,139,145,220,225,231,238,242,243,245,250,254,263,271,276,282,286,294,389,396,402,407,413,425,429,438,448,453,457,464,473,479,486,493,498,502,511,524,530,534,542,556,557],particlecontainerclass:[115,389],particledatatyp:447,particlehist:[421,494],particlejettool:[253,497,501],particlepidmanag:[65,144,145,220,235,242,243,369,370,389,411,483,557],particletempl:[115,389],particletyp:[18,84,417],particular:[20,50,56],particularli:[56,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],partil:[18,75],partonlabel:425,partontruthlabelid:[124,424,425,426,428,496],partp4:[420,493],pass:[1,2,10,12,13,17,18,19,20,23,28,35,39,41,44,47,53,55,57,60,66,68,70,78,90,97,100,101,104,106,110,113,116,339,348,400,401,403,411,415,416,417,425,428,431,439,443,451,454,456,458,460,461,465,467,491,494,529,533,546,564],passani:416,passcrackvetoclean:411,passcut:[13,28,39,44,49,53,55,68,90,100,104,108,110,113,411,428,443,451,456,460,465,483,501,516,527,533,538,544],passcuts2:443,passedfjvt:428,passedjvt:428,passedtrigg:[401,416],passeleolr:[135,453,456,528],passeleolracc:453,passesor:445,passeventclean:428,passfjvt:[29,91,503],passhlt:[401,416],passidcut:[128,438,443,509],passkei:[428,460],passl1:[401,416],passmcclean:428,passmin:56,passon:428,passor:[18,41,72,77,79,87,101,119,124,128,407,417,425,438,445,477,479,495,496,498,509,511,518],passoverlap:415,passprimaryvertexselect:[19,243,389,393,401,418,491,556],passrunlb:401,passsel:[13,18,19,28,39,41,44,49,53,55,68,72,77,79,90,100,101,104,108,110,113,119,124,128,339,407,411,417,425,428,438,443,445,451,456,460,465,477,479,496,498,501,509,511,518,533,544],passseldecor:[411,428,443,451,456,465],passselect:431,passselid:411,passthisid:411,passthrough:401,passtrigbit:[18,83,417],passtrigg:[18,83,417],passtrkselector:456,patcor:[198,253,411,443,447,456,501],patcoreenum:[198,447],path:[3,20,22,25,56,61,85,88,144,145,146,424,469,523,533],pathelp:[483,516],pathresolv:[151,195,221,400,444,469],pathresolverfindcalibdirectori:424,pathresolverfindcalibfil:[400,401,444],pathresolverfinddatafil:456,patient:56,patinterfac:[152,179,182,188,203,216,222,223,230,232,243,249,255,264,275,283,401,405,428,431,437,452,465,470,471,478,480,491,497,503,512,523,531],pattern:[18,57,72,74,75,76,77,78,79,80,81,82,83,84,401],pb:[425,426],pbook:56,pc:[425,426],pcre:[18,76],pdf1:412,pdf2:412,pdf:56,pdfid1:412,pdfid2:412,pdfinfoparamet:412,pdgid1:412,pdgid2:412,pdgid:[140,425,464,543],pdgidonli:[18,84,417],peek:399,peopl:[10,21],per:[17,35,57,70,97,400,406,407,408,411,424,428,437,438,439,443,447,451,452,453,454,456,460,465,477,479,480,509,511,530],perform:[3,7,11,12,13,28,34,39,41,56,61,64,66,68,90,96,100,101,112,223,270,401,411,424,428,431,443,445,456,489,533],perhap:[21,413],perige:[407,438],period:[3,61,406,411,437,443,445,447,451,452,456],periodallyear_detstatu:[56,57],permit:10,persist:[33,95],person:10,pflow:[13,29,68,91,411,503],ph:[17,70,134,416,431,489,524],ph_:[406,447],ph_itr:[416,451],phase1:502,phase:462,phh7eg:418,phi0:[407,438],phi1:[19,48,107,320,418,455,491,532],phi2:[19,48,107,320,418,455,491,532],phi:[138,403,412,413,415,418,420,423,425,426,428,429,433,434,442,445,455,456,457,458,461,493,499,502,509,520,537],phi_:420,phi_dress:[140,464,543],phi_muon:509,phierr:458,philosophi:23,phimanybin:458,phlooseacc:448,phmediumacc:448,phocont:431,photon:[17,18,29,41,43,44,70,80,91,101,104,112,131,134,145,173,187,196,198,220,271,276,389,396,406,416,422,431,436,445,447,448,449,451,489,494,495,518,523,524,525,527,556,557],photon_syst_cont_nam:445,photonauxcontain:[187,436],photoncalibr:[29,43,91,116,144,145,181,220,221,242,243,389,430,451,556,557,564],photoncalibrator_syst:[43,102,112,523],photoncalibratorclass:[115,389],photonclass:[115,389],photoncontain:[17,41,44,70,101,104,144,145,173,182,187,196,198,201,213,220,241,242,247,270,272,274,277,279,389,396,416,422,431,436,445,447,450,451,462,489,495,518,525,527,555,556,557],photoncontainerclass:[115,389],photonefficiencyrun2:523,photonhist:[144,145,201,220,243,245,389,450,556,557],photonhistsalgo:[86,144,145,181,220,243,246,277,389,430,556,557],photonhistsalgoclass:[115,389],photonid_:451,photonid_loos:[447,448],photonid_loose_effsf:[447,448],photonid_loose_effsf_error:[447,448],photonid_medium:[447,448],photonid_medium_effsf:[447,448],photonid_medium_effsf_error:[447,448],photonid_tight:[447,448],photonid_tight_effsf:[447,448],photonid_tight_effsf_error:[447,448],photonid_x:451,photonidkeynam:451,photoninfoswitch:[18,75,134,242,389,392,417,449,490,524,525,556],photoninfoswitchclass:[115,389],photonisemlooseselectorcutdef:[43,102,523],photonisemmediumselectorcutdef:[43,102,523],photonisemtightselectorcutdef:[43,102,523],photonloos:447,photonlooseeffsf:447,photonlooseeffsferror:447,photonmedium:447,photonmediumeffsf:447,photonmediumeffsferror:447,photonnam:[17,70,416,489],photons_syst:447,photonselector:[18,44,112,116,144,145,147,181,220,221,243,389,430,490,556,557,564],photonselector_out:112,photonselector_syst:[44,104,112,527],photonselectorclass:[115,389],photonselectordict:112,photonsuffix:462,photonsystnam:462,photontight:447,photontighteffsf:447,photontighteffsferror:447,photonvarcorrectiontool:447,photonvarl:431,photonvart:431,photonwp:451,phpy8eg_ct10_:400,phsc_itr:447,phsyst:[41,101,445,518],phtightacc:448,phy:14,physic:[23,41,101,112,270,293,415],physics_l1calo:10,physics_main:56,physicsanalysi:[1,10,55,113,401,439,454,491],physlit:[3,61,471],pi:[403,420,426,455,458],pick:[1,3,10,23,61,401],pid:[0,12,13,18,43,58,66,68,72,80,102,119,407,408,409,411,417,448,477,479,481,483,522,524,527],pid_:417,pid_cut:[411,451],pid_keyword:417,pid_lhmedium:[18,72],pid_substr:417,pid_xyz:[18,72],pideff_sf:[119,407,477],pideffsf:408,pidmanag:[197,389,446,556],pidsf:407,pidsf_:417,pidsf_keyword:417,pidsf_mediumllh:[18,72],pidsf_substr:417,pidsf_xyz:[18,72],piec:[21,425],pile:[3,18,61,83,401,428],pileup:[3,7,18,28,29,35,47,56,61,74,90,91,401,412,417,425,426,428,471,484,512,531],pileup_:401,pileuplabelingtool:428,pileupreweight:[3,61,152,264,283,401,471,512,531],pileupreweightingtool:[3,35,47,50,152,264,283,401,454,471,512,531],pileupscalem:425,pileupscalept:425,pileupsi:[18,74,417],pileupweight:[401,412],pileupweight_down:[401,412],pileupweight_up:[401,412],pip:21,pix:[425,458],pixdedx:[407,438],pixel:[53,110,425],pixeldedx:[407,438],pj:418,place:[10,56],plan:10,plane:[407,438],player:10,pleas:[1,7,10,33,41,95,101,400,401,411,417,418,424,451,491,548,549,563],plot:[1,18,20,23,76,85,86,403,409,420,421,426,430,449,458,462,467,499],plotter:56,plu:[23,116,564],plug:[116,564],pm:[116,564],pmg_truthjetcontain:401,pmgsherpa22vjetsweighttool:[401,471],pmgtool:[401,471],png:56,pnum:420,po:[401,417,418,436,439],point:[1,2,10,12,13,18,19,21,22,29,33,41,60,66,68,72,76,77,79,81,91,95,101,116,314,400,407,408,411,417,422,428,438,454,455,456,470,531,533,564],pointer:[14,17,19,20,33,41,70,85,101,302,303,304,305,307,308,309,310,312,313,314,348,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,401,406,411,414,424,437,443,447,451,452,456,462,468,488],pointless:[20,31,85,93],pool:10,poor:[39,100,443],popul:419,posibl:401,posit:[19,346,407,411,438,439,443,451,454],possibl:[10,23,57,116,465,564],post:[56,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],postexecut:[2,3,6,9,11,12,13,16,25,28,29,32,33,34,35,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,68,69,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,113,114,400,401,404,405,406,408,411,414,415,421,422,424,428,431,432,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,465,468,470,471,475,476,478,480,483,487,488,494,495,497,501,503,504,507,508,510,512,515,516,518,523,527,529,531,532,533,536,538,540,544,547],potenti:[57,401],pow:413,power:[10,19,314],powheg:[3,61,401],powhegpythia8_:400,powhegpythia8eg_:400,powhegpythia8evtgen_:400,powhegpythia8evtgen_ct10_:400,powhegpythia:529,practic:[10,56],pragma:[416,430],pre:[20,21,41,85,101,418,425,426],precach:56,preceed:57,preclud:462,precompil:22,predefin:20,prefer:[7,10],prefix:[1,13,16,17,39,68,69,70,86,100,420,426,440,489,493,499,513],preliminari:[56,425],prep:499,prepar:[406,411,419,437,443,447,451,452,456],prepend:[10,14,428],preprend:10,prerec:529,presampler:426,presamplerb:426,prescal:[3,18,61,83,417],prescaleslumi:[18,83,417],prescript:[10,41,101],preselect:[411,443,451,455,456],presenc:422,present:[38,56,99],preserv:[14,439,454],presum:491,pretti:57,prevent:[14,425],previou:[14,19,33,57,95,351,401,415,416,431,455],previous:[10,41,101,401,408,411,414,415,428,439,443,454,456,463],previousjet:415,primari:[3,61,401,415,418,443,459,460,466,471,489,491],primarili:57,primarytrackparticl:[437,438,443],primaryvertex:[13,17,39,68,70,100,116,120,129,407,411,416,418,438,443,462,479,483,489,511,516,564],primaryvertic:[17,56,57,70,116,469,489,564],primaryverticescontainernam:424,primit:418,primvertexftk:415,primvertexftkraw:415,primvertexftkrefit:415,principl:439,print:[3,10,56,61,400,401,405,406,408,411,414,415,424,428,431,437,439,443,445,447,451,452,454,455,456,465,471],printenv:14,printingtriggerchaingroup:401,printsmartslimmingbranchlist:401,prior:21,priorit:401,privat:[2,3,6,10,11,12,13,14,16,20,25,28,29,31,32,33,34,35,38,39,42,43,44,46,47,48,49,52,53,55,116,424,469,470,471,474,475,478,479,480,481,483,486,487,488,492,493,494,495,497,498,499,501,502,503,504,506,507,508,510,511,512,513,515,516,517,520,521,523,524,525,527,529,530,531,532,533,534,535,536,538,539,541,542,544,545,546,547,564],privileg:14,privtx:418,pro14:57,pro18:56,prob:[53,110,458,460],probabl:[10,17,30,56,57,70,92,425],problem:[33,95,406,408,415,439,447,454,462,468],problemat:401,proce:[406,424,437,447,452],procedur:[56,428,445],process:[2,3,10,11,12,13,21,25,35,41,47,60,64,66,68,88,97,101,106,400,401,406,408,411,417,418,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,465,468,494,540],prod:461,produc:[0,1,20,21,33,34,43,46,56,57,95,96,102,105,510,529,563],product:[14,23],profil:[3,21,61],program:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,557],programm:56,progress:56,project:[5,26,36,42,51,57,59],projectdir:57,prompt:[407,438,477,479,509,511],promptlepton:417,promptleptoninput_dl1mu:[119,128,407,438,477,509],promptleptoninput_drlj:[119,128,407,438,477,509],promptleptoninput_ip2:[119,128,407,438,477,509],promptleptoninput_ip3:[119,128,407,438,477,509],promptleptoninput_lepjetptfrac:[119,128,407,438,477,509],promptleptoninput_ptfrac:[119,128,407,438,477,509],promptleptoninput_ptrel:[119,128,407,438,477,509],promptleptoninput_rnnip:[119,128,407,438,477,509],promptleptoninput_sv1_jf_ntrkv:[119,128,407,438,477,509],promptleptoninput_trackjetntrack:[119,128,407,438,477,509],promptleptoniso:[119,128,407,438,477,509],promptleptonveto:[119,128,407,438,477,509],proofana:563,propag:[25,88,414],properli:[10,23,56,401,445],properti:[10,14,18,24,25,34,57,76,88,96,401,424],protect:[3,17,18,20,31,41,54,61,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,87,93,101,111,116,118,120,123,129,132,134,136,137,139,401,469,470,471,473,474,475,478,479,480,481,482,486,489,490,492,493,494,495,499,500,501,503,506,507,510,511,512,513,514,516,518,520,524,525,526,529,530,531,532,533,534,535,536,538,539,540,542,544,546,547,564],protocol:56,proton:426,prove:56,provid:[1,2,10,17,18,19,20,21,23,25,31,50,56,60,70,76,85,88,93,116,324,340,348,413,424,425,564],proxi:56,prun:14,prundriv:56,prune:[10,418],prw:[3,61,401,439,454,471],prw_datasf:401,prwconfigfil:401,prwfile:401,pseudo:424,pseudocontinu:[2,60],pseudodata:[25,88,424],pseudodatajertool:[25,497],pseudojet:[169,418],pseudorapidit:416,pt1:[28,90,428],pt2:[28,90,428],pt:[1,2,20,28,31,38,39,44,53,55,56,60,85,90,93,99,100,104,110,113,400,406,408,409,411,412,413,415,416,418,420,423,424,425,426,428,431,437,439,440,442,443,445,447,451,452,454,456,458,460,465,467,486,491,493,520,533,546],pt_:420,pt_dress:[55,113,140,464,465,543],pt_dressed_min:[55,113],pt_iso_vec:467,pt_l:[420,458],pt_l_:420,pt_m:420,pt_m_:420,pt_max:[28,39,44,53,55,90,100,104,110,113,460],pt_min:[28,39,44,55,90,100,104,113],pt_miss:467,pt_miss_i:467,pt_miss_iso:467,pt_miss_iso_i:467,pt_miss_iso_l:467,pt_miss_iso_x:467,pt_miss_iso_x_l:467,pt_miss_iso_y_l:467,pt_miss_l:467,pt_miss_x:467,pt_miss_x_l:467,pt_miss_y_l:467,pt_s_:420,pt_sort:[19,243,389,393,491,556],pt_sortenum:[115,389],pt_ss:458,pt_vec:467,ptau:425,ptavg:428,ptcone20:[119,128,133,409,417,440,448,449,467,477,509,522],ptcone20_nonprompt_all_maxweightttva_pt1000:[128,417,438,509],ptcone20_nonprompt_all_maxweightttva_pt500:[128,417,438,509],ptcone20_nonprompt_all_maxweightttvaloosecone_pt1000:[119,407,417,477],ptcone20_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:[119,407,477],ptcone20_nonprompt_all_maxweightttvaloosecone_pt500:[119,407,417,477],ptcone20_rel:[409,440],ptcone20al:467,ptcone30:[119,128,133,409,417,440,448,449,477,509,522],ptcone30_rel:[409,440],ptcone40:[119,128,133,409,417,440,448,449,477,509,522],ptcone40_rel:[409,440],ptcone50:417,ptitl:420,ptmax_cut:[411,428,443,451,465],ptmaxjvf:56,ptmin:56,ptmin_cut:[411,428,443,451,465],ptnan_check:443,pttruth:426,ptusedinjetcharg:425,ptvarcone20:[13,68,119,128,133,409,417,440,448,449,477,483,509,522],ptvarcone20_rel:[409,440],ptvarcone30:[39,100,119,128,133,409,417,440,448,449,477,509,516,522],ptvarcone30_nonprompt_all_maxweightttva_pt1000:[128,417,438,509],ptvarcone30_nonprompt_all_maxweightttva_pt1000_closebycorr:[128,438,509],ptvarcone30_nonprompt_all_maxweightttva_pt500:[128,417,438,509],ptvarcone30_nonprompt_all_maxweightttva_pt500_closebycorr:[128,438,509],ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt1000:[119,407,417,477],ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt1000_closebycorr:[119,407,477],ptvarcone30_nonprompt_all_maxweightttvaloosecone_pt500:[119,407,417,477],ptvarcone30_rel:[409,440],ptvarcone40:[119,128,133,409,417,440,448,449,477,509,522],ptvarcone40_rel:[409,440],pu:[401,425,426,471],pub:21,publicli:56,pull:[10,19,22,56,321,491],punch:7,puriti:[18,80,417,448,522,524],purpos:[56,57,451],push:[10,20,21,415,424,425,428],push_back:[399,400,401,406,407,408,411,412,413,414,415,417,418,419,420,424,425,426,428,429,431,436,437,438,439,442,443,444,445,447,448,451,452,453,454,456,457,460,462,463,464,465,466,467,489,491,498,502,520],put:[1,10,19,20,22,23,31,56,85,93,314,401,406,408,411,419,422,424,428,431,437,439,442,443,445,447,451,452,454,455,456,460,463,468,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547],pv:[17,70,125,223,411,415,416,418,425,426,428,443,489,498],pv_valid_vs_lblock:458,pv_z:443,pvloc:[20,21,85,426],pvlocat:[17,70,123,125,413,416,418,425,466,486,489,498],pvsofttrk:[431,433],pvx:[19,53,110,315,411,418,426,443,458,459,460,461,491,535,538,539],pvx_z:418,pvz:458,pvz_vs_lblock:458,pwd:56,pwpy8eg_ct10_:400,px:[418,420,467],py8:[400,418],py8eg:[19,338,418],py8eg_:400,py8evtgen:418,py:[10,14,21,22,56,418,420,467,563],pycomp:10,pyevtfilt:10,pygment:21,pypars:21,pyroot:491,pythia8:[2,19,60,149,338,400,418,491],pythia8_517:[19,149,400,418,491],pythia8_:400,pythia8b_:400,pythia8eg_:400,pythia8evtgen517:418,pythia8evtgen:[19,338,418],pythia8evtgen_:400,pythia8evtgen_a14nnpdf23lo_jetjet_jz3w:10,pythia:[19,338,400,401,418],python:[10,23,41,56,57,101,112,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547],pytz:21,pyyaml:21,pz:[418,420],q:[39,56,100,412,438,443,458],qcd:56,qo:57,qoperr:458,qoverp:[138,407,425,438,457,458,537],qthelp:21,qualifi:[302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388],qualiti:[13,18,38,39,44,68,79,99,100,104,128,401,407,411,417,423,425,426,438,440,442,443,447,451,501,509,511,513],quantil:[2,60,400,498],quantile_:498,quantiti:[1,546],quark:[25,88,425],queri:[116,564],question:[7,14,19,21,57,346,411,428,439,443,451,456,491],quick:56,quickli:10,r10truthlabel_r21consolid:[25,88,497],r21:[12,66,563],r22:[1,12,66,424,563],r22_prerec:[29,91,503],r22triggeranalysi:[411,443],r2:10,r3matchingtool:[411,443],r6818_p2358:56,r:[21,25,28,38,56,57,88,90,99,407,413,424,438,442,462,465,491],r_:426,rad:458,radhad1:[133,448,522],radhad:[133,448,522],radiu:[19,326,334,350,418,491],rais:445,rand_lumiblock_nr:412,rand_run_nr:412,random:[190,205,401,439,454],randomlumiblocknumb:[401,412],randomrunnumb:[401,412,439,447],rang:[56,400,408,425,426],rapid:[18,28,55,56,77,90,113,124,417,420,425,428,465,493,496,498],rapidity_:420,rapidity_max:[28,55,90,113],rapidity_min:[28,55,90,113],rare:[20,21,56,85,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],rather:[13,20,21,23,43,44,68,85,102,104,116,523,564],ration:21,raw:[406,447,458],rawconstitu:413,rc:56,rc_alg:[19,326,418,491],rc_jet:418,rc_jet_subjet:418,rc_t_jet:418,rcsetup:56,rcu:399,rcu_throw_msg:[399,418],rd:420,re:[2,10,14,17,19,21,25,28,57,60,70,88,90,314,351,418,424,428,432,436,462],reach:[19,348,399],read:[10,11,12,13,23,25,43,44,56,64,66,68,88,102,104,400,401,406,408,411,422,424,428,431,437,439,443,444,445,447,451,452,454,455,456,463,468,471,488],readabl:10,readathenapool:10,reader:56,readfil:[444,517],readfilelist:56,readhandlekei:424,readi:[10,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],readm:454,readstat:[152,401],readthedoc:[1,21],realli:[10,21,56,411,424,428,443,456,462],reason:[20,54,111,116,400,428,491,564],rebas:10,rebuild:[29,91,406,424,431,437,447,452],rebuildjetmet:431,rebuildmet:431,rebuildtrackmet:431,rec:425,recal:57,recalcul:[1,13,43,68,102,428],recent:22,recexcond:10,reclust:[413,418,491],reclusteredjet:[33,95],reco:[407,408,416,438,439,454,462,477,479,512,531],reco_:417,reco_keyword:417,reco_medium:[18,79],reco_substr:417,reco_xyz:[18,79],recoeff_sf:[119,128,407,438,477,509],recoeff_sysnam:417,recoeffsf:[408,438,439],recoeffsf_sysnam:416,recoeffsfinstanceexist:439,recogn:400,recojetcontain:428,recokei:408,recommend:[1,2,3,10,12,13,25,35,39,53,56,60,61,66,68,88,97,100,110,400,406,411,418,424,428,437,445,447,451,452,523,529],recommendations_for_full_2015_an:523,recommendationtag:[452,454],recommended_selection_mc15:[49,108,533],recommendedsystemat:[400,406,408,424,428,431,437,439,447,452,454],recommendedtool:445,recompil:56,reconstruct:[7,12,28,66,90,112,270,293,408,428,430,431,446],recoparam:[18,79,417],record:[19,20,21,31,33,57,85,93,95,351,399,400,401,404,406,408,411,414,415,419,421,424,426,428,431,435,436,437,439,443,445,447,451,452,454,456,459,460,461,465,468,491,492,494,499,539],recordmeta:436,recordoutput:[19,243,389,393,436,491,556],recp:[480,512],recsyst:[400,406,418,424,431,437,447,452,454],recsystsfjvt:428,recsystsiso:[408,439],recsystsjvt:428,recsystspid:408,recsystsreco:[408,439],recsyststrig:[408,439],recsyststtva:439,reduct:411,ref:10,ref_el:433,ref_gamma:433,ref_jet:433,ref_jet_trk:433,ref_muon:433,ref_soft_clu:433,ref_soft_trk:433,ref_tau:433,refel:[18,78,417,431,433],refer:[10,21,56,116,401,407,411,415,438,443,563,564],referencemet:462,refgamma:[18,78,417,431,433],refjet:[18,78,417,431,433],refjettrk:[18,78,417,431,433],reflect:446,refmuon:[18,78,417],reftau:[18,78,417,431,433],refus:56,regardless:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],regex:[3,61],region:[1,13,44,68,104,401],regist:[57,116,399,564],registerinst:[116,399,469,564],registri:[10,14,116,564],regular:1,reject:[13,28,39,44,68,90,100,104,400,408,439,443,454,456,462],rel22:[400,425],rel:481,relat:[2,12,35,47,60,66,97,106,416,428,563],relationship:[389,556],releas:[1,22,35,56,57,97,418,439],relev:[10,13,417,428],remain:[411,443,451,456,462],remak:23,remapbrokenlink:[411,443],rememb:[14,116,406,407,408,424,437,438,439,447,452,454,564],rememeb:[411,443,445,451,455,456,463],remot:10,remov:[0,2,10,12,19,28,35,39,45,47,60,66,90,97,100,101,106,270,314,401,406,408,411,417,422,424,428,431,436,437,439,442,443,445,447,451,452,454,455,456,460,463,468,483,491,516],removal_of_electron_photon_clust:13,remove_dupl:[19,243,389,393,491,556],removeoverlap:445,render:21,rep:10,repeat:[18,56,80],replac:[10,18,19,72,79,81,336,418,439,491],replaceal:418,replacestr:[19,243,389,393,418,491,556],repo:[10,21,56,491],report:[10,56,401,424],repositori:10,repres:22,represent:[116,564],request:[1,3,10,17,21,23,57,61,70,400,401,406,408,411,417,418,422,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,465,468],requir:[1,3,10,13,18,21,22,28,39,44,53,55,61,68,72,75,77,79,80,81,90,100,104,110,113,404,411,412,418,421,424,428,431,435,439,443,451,456,459,460,465],requiredecis:401,requisit:56,rerout:471,reserv:[406,424,426,437,447,452],reset:[10,401,406,408,411,422,424,428,431,432,437,439,443,445,447,451,452,454,455,456,460,468],resetobjselectionflag:431,resiz:[445,520],resolut:[18,29,56,77,91,407,417,426,438,499],resolv:[21,302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,469],respect:[1,431],rest:57,restart:401,restructuredtext:21,result:[56,116,419,428,431,463,564],result_cod:428,reta:[133,448,451,522],retreiv:10,retrev:399,retri:56,retriev:[1,2,3,10,11,12,13,18,19,28,33,56,60,61,64,66,68,83,90,95,243,314,321,333,389,393,399,400,401,404,406,407,408,411,412,413,414,415,416,422,424,425,428,431,435,436,437,438,439,442,443,445,447,451,452,453,454,455,456,459,460,462,463,465,468,491,494,556,561,564],retrievemetainput:[399,401,436],return_check:[300,389,548,556],return_check_config:549,returncheck:[142,143,146,220,389,557],returncheckconfig:[146,220,375,389,557,562],reweight:[3,18,61,83,401,471],rf:10,rh:[19,418,442,491,550],rhad1:448,rhad:448,rho:[431,433],rhoem:412,rhoempflow:412,rholc:412,ride:426,right:[10,20,21,31,85,93,401,418],rm:[10,22],rmvirtualenv:21,rnn:417,rnnelescor:456,rnnjetscor:456,rnnjetscoresigtran:456,roi:[415,429],root5:56,root6:56,root:[2,3,10,14,20,22,28,31,56,57,60,61,85,90,93,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,470,471,483,489,491,495,501,516,518,521,533,538,544,549,557],rootcor:56,rootcorebin:[56,57],rootcoredir:56,rootcoreutil:[150,242,399,490],rootfil:[220,389],rootfilenam:[444,517],roottalk02:549,roottalk:549,roughli:10,row:[429,502],rphi:[133,448,522],rst:[116,454,564],rtd:21,run2:[12,66,411,443],run3:[2,34,39,60,96,100,411,443],run:[1,2,3,7,10,11,12,13,14,20,21,22,23,25,28,29,33,34,35,47,56,60,61,64,66,68,88,90,91,95,96,97,106,116,400,401,406,408,411,418,421,424,426,428,431,437,439,443,444,445,451,452,454,455,456,462,463,465,471,494,563,564],runbin:426,runbyrun_cutflow_aftercut:401,runbyrun_cutflow_beforecut:401,runii:[407,438],runinfo:[444,517],runnum:401,runnumb:[130,401,412,426,444,517],runnumberforcutflow:401,runnumstr:401,runtim:[24,533],runtime_error:416,runtolbdatamap:517,runtolbdatamapitr:[444,517],s:[1,7,10,12,13,14,17,20,21,31,41,57,66,68,70,85,93,101,112,399,400,401,404,405,406,408,411,413,414,416,417,418,419,422,424,425,428,431,432,435,436,437,438,439,443,444,445,446,447,451,452,453,454,455,456,458,459,460,462,463,465,468,469,470,471,478,480,483,489,491,495,497,501,503,504,510,512,516,518,520,521,523,529,531,532,533,538,544,564],s_alg:[19,334,350,418,491],safe:443,safefil:[17,70,132,407,413,425,438,448,453,457,489,520],safesfvecfil:[132,407,438,453,520],safest:10,safeti:[408,445],safevecfil:[17,70,132,425,453,489,520],sagara17:422,sai:[21,57,407,425,438,453],said:1,salam:491,same:[1,10,12,14,20,21,23,28,56,66,90,116,401,406,408,411,415,424,428,431,437,439,443,447,452,454,455,456,462,502,540,564],samehistsoutdir:56,sampl:[1,2,3,10,19,38,56,60,61,86,116,317,338,400,401,406,408,411,418,424,426,428,431,437,439,443,454,463,471,563,564],sample_nam:[19,338,418,491],samplegrid:[169,317,418],samplehand:317,samplehandl:[56,86,151,169,243,246,317,400,418,491,494],samplenam:400,samplerhandl:317,sampleshowertyp:400,samplingmax:426,saniti:401,satisfi:[401,411],save:[1,3,11,12,13,25,28,38,56,57,61,64,66,68,88,90,99,112,400,401,406,411,412,416,424,428,436,437,439,443,445,447,451,452,454,456,471,520,540],saveallcleandecis:[1,56],sbatch:57,sc:[34,43,46,96,102,105,406,428,437,447,452],scale:[1,2,12,18,28,56,60,66,72,77,79,81,90,400,406,407,412,417,425,428,430,438,439,447,453,477,479,485,486,498,509,511,530],scalefactorfilenam:400,scan:[56,116,424,564],scandir:56,scandq2:56,scantikt4emtopojet:[33,95],scatter:[28,90,428,466],scenario:[41,101,116,564],scheme:[2,18,19,38,41,60,76,99,101,338,442,515],scint:426,scmuon:[33,95],score:[28,90,425,428],scoringtool:[411,428,443,456,463],scratch:[20,564],script:[14,21,23,56,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],sct:[53,110,401,412,425,458],scterror:412,sctflag:412,scutti:[283,437,452,456],search:[1,7,10,18,19,22,57,76,324,336,338,346,348,418,491,563],second:[10,21,23,25,56,57,88,400,406,407,411,413,416,419,421,424,425,426,428,436,437,438,439,444,446,447,452,453,455,462,468,469,490],section:[7,57],sed:56,see:[1,3,10,13,17,18,19,23,33,34,39,50,56,57,61,68,70,76,95,96,100,244,321,351,400,401,411,419,428,436,443,446,451,455,456,462,471,491,563],seed:[401,406,447],seedjet:1,seem:[22,56,399,425,491],segfault:10,segmenttag:417,select:[0,2,3,13,18,19,23,28,39,41,44,49,53,55,56,60,61,68,83,87,90,100,101,104,108,110,113,253,339,400,401,411,418,422,424,425,426,428,442,443,445,446,447,451,455,456,460,465,521,531,533,544,563],selectacc:445,selected_jet:[19,314],selected_label:445,selectedelectron:[13,68,411,445,483],selectedjet:[19,314,428,445],selectedmuon:[39,100,443,445,516],selectedphoton:[44,104,445,451,527],selectedtau:[49,108,445,456,533],selectedtrack:460,selectedtrackhold:418,selectedtruthpart:465,selectedwp:446,selectedwp_enum:446,selectedwp_pars:446,selectflag:[41,101,445,518],selector:[1,12,18,23,34,39,56,66,96,100,116,147,401,411,428,430,443,445,446,447,451,455,456,465,490,491,501,564],selector_nam:[42,65,446,521],selectorptfractionmin:418,selecttrackjet:[413,486],self:[57,400,428],send:[470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547],sens:[17,70,431],sensit:[29,91],sensor:[53,110],sep:419,separ:[1,2,3,13,14,17,18,19,22,28,35,39,55,56,57,60,61,68,70,77,90,97,100,112,113,116,333,345,401,406,408,411,418,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,491,533,564],seper:401,sequenc:[1,10,25,56,88,418,424,425],seri:[56,116,564],serializinghtml:21,server:56,servic:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],servicemgr:10,set:[1,3,10,13,14,18,19,20,22,23,24,25,28,29,30,33,34,39,41,42,49,54,56,57,61,65,68,76,77,85,86,88,90,91,92,95,96,101,111,116,324,333,348,399,400,401,406,408,411,414,416,418,419,422,424,425,428,431,432,436,437,439,443,445,446,447,451,452,454,455,456,460,462,463,468,470,471,475,476,478,482,490,491,494,495,500,501,503,507,510,512,514,516,518,521,523,526,529,531,532,533,536,538,540,544,547,564],setafii:1,setatlasstyl:56,setautoflush:462,setauxitemlist:468,setbincont:[411,428,443,451,456,465],setbinlabel:[401,418],setbit:401,setbool:57,setbranch:[17,70,118,120,121,123,125,126,127,129,132,134,136,137,139,141,402,407,412,413,416,425,429,433,438,448,453,457,464,466,473,479,484,486,489,498,502,505,511,520,524,530,534,542,545,551],setbranchaddress:[402,407,438,444,448,453,484,491,505,520,545],setbranchstatu:[402,407,438,448,453,484,491,505,520,545],setcanextend:401,setconfig:56,setcount:[41,101,445,518],setcutflowhist:[41,101,445,518],setcycl:436,setdecor:[42,65,411,446,521],setdirectori:[416,462],setdoubl:[56,57],setfil:425,setinteg:57,setlabel:[20,419,492],setlevel:[406,408,419,446,447],setmapindex:400,setmetastr:56,setnam:[56,399,436],setoriginalobjectlink:[406,424,437,447,452],setproperti:[10,14,400,401,406,408,411,414,422,424,425,428,431,436,437,439,443,445,446,447,451,452,454,456,460,463],setptetaphi:[413,418,423,425,520],setptetaphim:[426,520],setrandomse:[406,447],setruninfo:[444,517],setshallowio:[33,95,468],setstor:[414,415,431,436,491],setstr:[56,57,418],setsyst:56,settitl:[56,419],settoolnam:[116,469,564],settre:[118,120,121,123,125,126,127,129,132,134,136,137,139,141,402,407,412,413,425,429,433,438,448,453,457,464,466,473,479,484,486,498,502,505,511,520,524,530,534,542,545,551],settypeandnam:[411,428],setup:[10,22,41,101,416,424,425,445],setupatla:[14,22,56],setupjob:[2,3,6,9,11,12,13,16,25,27,28,29,32,33,34,35,37,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,67,68,69,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,515,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547],setupwp:[42,65,411,446,521],setw:[400,425],setxtitl:56,setytitl:56,sever:[1,3,18,61,77,317,400,408,425,431],sf:[1,2,12,28,35,60,66,90,97,400,408,418,425,428,439,447,454,480,498,501,512,531],sf_:498,sf_btag:[124,423,496],sf_dl1dv00_continu:[124,423,425,496],sf_dl1dv00_fixedcutbeff_60:[124,423,425,496],sf_dl1dv00_fixedcutbeff_70:[124,423,425,496],sf_dl1dv00_fixedcutbeff_77:[124,423,425,496],sf_dl1dv00_fixedcutbeff_85:[124,423,425,496],sf_dl1dv01_continu:[124,423,425,496],sf_dl1dv01_fixedcutbeff_60:[124,423,425,496],sf_dl1dv01_fixedcutbeff_70:[124,423,425,496],sf_dl1dv01_fixedcutbeff_77:[124,423,425,496],sf_dl1dv01_fixedcutbeff_85:[124,423,425,496],sf_dl1r_continu:[124,423,425,496],sf_dl1r_fixedcutbeff_60:[124,423,425,496],sf_dl1r_fixedcutbeff_70:[124,423,425,496],sf_dl1r_fixedcutbeff_77:[124,423,425,496],sf_dl1r_fixedcutbeff_85:[124,423,425,496],sf_gn120220509_continu:[124,423,425,496],sf_gn120220509_fixedcutbeff_60:[124,423,425,496],sf_gn120220509_fixedcutbeff_70:[124,423,425,496],sf_gn120220509_fixedcutbeff_77:[124,423,425,496],sf_gn120220509_fixedcutbeff_85:[124,423,425,496],sf_gn2v00legacywp_continu:[124,496],sf_gn2v00legacywp_fixedcutbeff_60:[124,423,425,496],sf_gn2v00legacywp_fixedcutbeff_70:[124,423,425,496],sf_gn2v00legacywp_fixedcutbeff_77:[124,423,425,496],sf_gn2v00legacywp_fixedcutbeff_85:[124,423,425,496],sf_gn2v00newaliaswp_continu:[124,496],sf_gn2v00newaliaswp_fixedcutbeff_60:[124,423,425,496],sf_gn2v00newaliaswp_fixedcutbeff_70:[124,423,425,496],sf_gn2v00newaliaswp_fixedcutbeff_77:[124,423,425,496],sf_gn2v00newaliaswp_fixedcutbeff_85:[124,423,425,496],sf_gn2v01_continu:[124,423,425,496],sf_gn2v01_fixedcutbeff_65:[124,423,425,496],sf_gn2v01_fixedcutbeff_70:[124,423,425,496],sf_gn2v01_fixedcutbeff_77:[124,423,425,496],sf_gn2v01_fixedcutbeff_85:[124,423,425,496],sf_gn2v01_fixedcutbeff_90:[124,423,425,496],sf_string:439,sfeigen:[2,60,470],sfeleidelectron:454,sffile:428,sffjvt:[18,77,417],sfftagfix607785:1,sfftagfix:[1,18,77],sfftagflt:[1,18,77],sfftaghyb:[18,77],sfjetidhadtau:454,sfjvt:[18,77,417],sfjvtmedium:[18,77],sfname:[408,428,439,454],sfrecohadtau:454,sftriggerhadtau:454,sfvec:454,sfvec_sysnam:454,sfvecfjvt:428,sfveciso:[408,439],sfvecjvt:428,sfvecpid:408,sfvecreco:[408,439],sfvecreco_sysnam:439,sfvectrig:[408,439],sfvecttva:439,sg:[10,13,17,28,39,41,44,53,55,68,70,90,100,101,104,110,113,132,399,400,401,406,407,408,409,411,412,413,415,416,418,424,425,426,428,431,437,438,439,440,442,443,445,447,448,451,452,453,454,455,456,457,460,463,465,473,489,491,494,498,520,524,533,553,554,555],sh:[21,22,56,317,400,418,491,494],sh_2210:[400,418],sh_2211:[400,418],sh_2212:418,sh_2213:418,sh_2214:418,sh_2215:418,sh_2216:418,sh_221_:418,sh_22:400,sh_2:418,sh_:418,sh_blank:418,shallow:[1,2,11,12,25,33,35,47,60,64,66,88,95,97,106,406,424,436,437,447,452,468],shallowauxcontain:[25,406,424,437,447,452,497],shallowcopi:[157,173,175,179,182,187,188,194,196,198,203,207,216,219,249,406,415,422,424,428,431,436,437,443,445,447,452,455,456,465,468,497],shallowcopyaux:424,shallowcopycontain:[406,424,437,447,452],shallowio:[33,95],shapeem:[18,74,412,417,484],shapeempflow:[18,74,412,417],shapelc:[18,74,412,417],share:[53,57,110,401,425,428,564],shared_ptr:439,shell:[21,56],sherpa21:[19,338],sherpa2210:[19,149,400,418,491],sherpa2212:[19,149,400,418,491],sherpa2214:[19,149,400,418,491],sherpa221:[19,149,400,418,491],sherpa22:[2,19,60,338,400],sherpa:[3,19,61,338,400,401,418,529],sherpa_221_:418,sherpa_221_nnpdf30nnlo:400,sherpa_ct:[19,338],sherpa_nnpdf30nnlo:400,sherpa_unknown:[19,149,400,418,491],sherpa_v2_2_0_v_jets_njet_reweig:401,shifter:57,shini:10,ship:23,shlex:57,shop:[19,324,348],shoudl:[428,465],should:[1,2,3,10,12,17,18,19,20,21,30,31,33,34,35,41,47,56,57,60,61,66,70,72,76,79,81,85,92,93,95,96,97,101,106,116,314,348,399,400,401,411,416,424,425,428,439,443,445,451,456,462,468,470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547,564],show:[10,20,21,56,85,473,474,479,481,486,493,499,506,511,513,524,525,530,534,535,539,542,546],shower:[2,19,60,149,338,400,418],showershapevalu:451,showertyp:[19,243,338,389,393,400,418,491,556],showertypenamespac:[115,389],side:10,sig:426,sigclu:[18,78,417],sigd0wrtpvoftrack:426,sigdirect:[431,433],sigma:[19,116,333,418,564],sign:[401,426,458,461],sign_d0:461,sign_prod:461,signal:431,signaljet:56,signaljets_algo:56,signedd0:461,signific:[13,29,39,53,68,91,100,110,411,426,431,433,443,458,461,503],significance3d:[425,426],significantli:22,signz0:461,sigresolutionclu:[18,78,417],sigresolutiontrk:[18,78,417],sigtrk:[18,78,417],sigz0wrtpvoftrack:426,silicon:[53,110],siliconassociatedforwardmuon:417,sim:[25,38,88,99,399,406,447,452,454],sim_flav:408,simflavour:399,similar:[1,57,401,406,408,411,418,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],simpl:[19,33,56,95,324,348,400,408,436],simplemuon:[38,99,442,515],simpli:[1,14,21,57],simplifi:[41,101,116,564],simul:[3,61,399,401,406,408,431,447,452,454],simulationflavour:[3,61,399,401],simultan:431,sin:[13,39,53,68,100,110,411,418,425,442,443,458,461,509],sinc:[10,21,56,399,401,404,406,408,411,416,418,422,424,425,428,431,437,439,443,445,446,447,451,452,454,455,456,459,460,462,468],singl:[10,13,18,21,23,28,35,39,56,68,76,90,97,100,116,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,465,468,471,533,564],singleel_trig:411,singlejet_trig:428,singlemu_trig:443,singletau_trig:456,singleton:10,sint:[458,461],situ:424,situat:14,six:21,size2:415,size:[23,56,132,400,401,403,406,407,408,411,415,416,417,418,420,423,424,425,426,428,429,436,437,438,439,442,443,444,445,446,447,451,452,454,455,456,458,462,465,467,468,488,493,502,520],size_t:[19,346,401,417,418,439,491],size_typ:[424,439],skeleton:56,skim:[13,56,401],skip:[3,13,61,68,400,401,408,411,428,431,442,443,446,456,462],skipev:[401,411,428,443,451,456,460,465],skiptruthmatchcheck:452,slash:[14,20,419],slc6:[22,563],slc7:563,slight:10,slightli:21,slim:[56,486],slimmint:486,slow:10,slurm:57,sm:7,small:[462,491],smaller:10,smallest:401,smarter:10,smear:[1,406,424,437,447,452,529],snowballstemm:21,so:[1,10,14,17,20,21,22,31,33,34,56,57,70,85,93,95,96,116,401,406,408,411,414,416,418,419,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,564],soft:[29,91,431,433,434],softclu:[18,78,417,431,433],softclusmet:431,softclusphi:433,softclussumet:433,softtermreso:431,softtrk:[18,78,417,433],softtrkmet:431,softtrkphi:433,softtrksumet:433,softvarl:431,softvart:431,softwar:[10,14,56],softwaretutorialxaodanalysisinroot:503,sole:[401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468],solut:21,some:[1,3,10,14,18,19,22,23,24,56,57,61,76,116,338,400,401,407,408,416,418,438,439,454,462,489,491,499,533,564],someon:20,someth:[21,23,57,116,417,468,564],sometim:10,somewher:468,soon:[23,56],sort:[1,11,25,28,56,57,64,88,90,126,406,413,418,424,426,428,429,437,442,447,452,467,491,502,510,523,529],sort_by_pt:418,sort_container_pt:[19,243,389,393,491,556],sort_pt:[19,243,389,393,406,413,418,424,428,437,447,452,491,556],sorted_by_pt:418,sortedcont:491,sortl1jet:[17,70,416,489],soupsiev:21,sourc:[1,10,14,19,21,56,346,413,425,431,446,563],space:[1,17,33,57,70,95,401,418,425,490],spamnot_cern:422,special:[10,437],specif:[3,18,21,25,33,34,57,61,76,88,95,96,116,401,412,471,564],specifi:[1,2,10,17,19,20,33,56,57,60,70,85,95,314,339,400,425,428,455,456,468,533],speed:56,spheric:426,sphinx:21,sphinxcontrib:21,spill:426,spin:57,spit:[116,564],split12:[122,413,485],split23:[122,413,485],split34:[122,413,485],split:[18,33,57,76,95,400,401,411,415,418,425,428,436,443,451,456,460,490],splitjet:415,splitopt:418,splitstr:[19,243,389,393,418,468,491,556],splitv:418,spot:484,sqrt:[56,442,455,458,461,467],squar:401,src:[13,22,39,68,100],ss:[399,400,401,411,417,418,428,436,439,443,451,460,462,463,465,467,469,490,491],ss_cluster_contain:462,ss_cluster_detail:462,ss_cluster_nam:462,ss_diel_trig:411,ss_dijet_trig:428,ss_dimu_trig:443,ss_ditau_trig:456,ss_fat_contain:462,ss_fat_detail:462,ss_fat_nam:462,ss_l1_contain:462,ss_l1_name:462,ss_or:445,ss_reco_contain:462,ss_reco_nam:462,ss_singleel_trig:411,ss_singlejet_trig:428,ss_singlemu_trig:443,ss_singletau_trig:456,ss_trig_contain:462,ss_trig_detail:462,ss_trig_nam:462,ss_truth_contain:462,ss_truth_nam:462,ss_truthparticlescontain:462,ss_truthparticlesnam:462,ss_vertex_contain:462,ss_vertex_detail:462,ss_vertex_nam:462,ss_wpname:425,ssh:[10,14,22,56],sstream:[156,160,162,167,171,173,177,179,185,187,191,196,200,202,211,214,216,242,405,409,411,416,420,422,426,428,434,436,440,445,449,451,460,463,465,490],st:420,stack:[33,95],stackoverflow:[18,19,73,346,436,491],stage:[401,411,428,443,456],stai:56,standard:[7,18,20,21,23,76,85,116,400,424,463,470,471,475,476,478,480,482,483,487,488,491,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,564],stark:[10,23,419,491],start:[14,19,21,22,23,56,348,401,411,424,428,431,443,462,563],stat:[57,401],state:[7,17,22,70,412,428],static_cast:[399,401,402,407,408,409,411,413,425,426,431,438,439,440,443,445,446,448,449,451,453,454,455,456,457,464,469,493,494,502],station:437,statist:57,statu:[10,18,28,72,79,90,140,400,408,416,425,428,431,437,439,452,454,464,491,543],statuscod:[2,3,6,9,10,11,12,13,14,16,19,20,21,25,27,28,29,31,32,33,34,35,37,38,39,41,42,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,65,66,67,68,69,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,151,155,156,157,159,161,162,165,167,172,173,175,178,179,182,186,187,188,190,192,194,196,198,201,202,203,205,206,207,210,213,214,216,219,221,243,244,273,314,329,332,337,339,348,351,399,400,401,403,404,405,406,408,409,410,411,414,415,416,418,420,421,422,424,426,427,428,431,432,434,435,436,437,439,440,441,442,443,445,446,447,449,450,451,452,454,455,456,458,459,460,461,462,463,465,467,468,469,470,471,474,475,476,478,480,481,482,483,487,488,491,492,493,494,495,497,499,500,501,503,504,506,507,508,510,512,513,514,515,516,518,521,523,525,526,527,529,531,532,533,535,536,538,539,540,541,544,546,547,549,558,559,560,561,564],statuseff:408,std:[2,3,6,11,12,13,14,16,17,18,19,20,21,25,27,28,29,31,32,33,34,35,37,38,39,41,42,43,44,46,47,48,49,52,53,54,55,56,60,61,62,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,116,118,119,120,121,122,123,124,125,126,127,128,129,132,133,134,135,136,137,138,139,140,141,243,314,317,326,327,328,330,331,333,334,336,338,341,344,345,346,351,352,389,393,399,400,401,402,403,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,423,424,425,426,427,428,429,431,433,434,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,460,461,462,463,464,465,466,467,469,470,471,473,474,475,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,551,553,554,555,556,558,559,560,561,564],step:[10,13,22,23,25,56,88,401,424,425,442],still:[1,56,401,424,454],stoi:[401,465],stolen:491,stop:[19,56,324,348,414,424],store:[1,3,10,13,17,19,20,54,56,57,70,85,111,116,243,319,324,329,331,348,389,393,400,401,406,408,411,414,415,416,418,425,428,431,437,439,443,445,447,451,452,454,456,462,465,468,489,491,540,556,561,564],storeg:[10,442,491],storepassani:56,storepasshlt:56,storepassl1:56,storesyst:[121,412,484],storesystsf:[120,129,132,136,407,438,453,479,511,520,530],storetrigdecis:56,storetrigkei:56,str:[399,416,420,425,428,436,445,460,467,469,491],straight:[11,13,57,64,68],strcmp:416,stream:[20,85,401,411,425,428,436,443,445,451,456,469,471],streamabl:10,streamaod:[401,418],streamdaod_llp1:399,streamdaod_phi:399,streamdaod_physlit:399,streamtag:[3,61,401],streamxaod:10,string:[1,2,3,6,11,12,13,14,16,17,18,19,20,21,23,25,27,28,29,31,32,33,34,35,37,38,39,41,42,43,44,46,47,48,49,52,53,54,55,56,60,61,62,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,116,118,119,120,121,122,123,124,125,126,127,128,129,132,133,134,135,136,137,139,141,150,221,225,231,236,238,243,250,254,257,263,272,273,276,282,286,294,297,314,317,327,328,330,331,333,336,338,341,346,351,352,389,393,399,400,401,402,403,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,424,425,426,427,428,429,431,433,434,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,460,461,462,463,464,465,466,467,469,470,471,473,474,475,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,505,506,507,508,509,510,511,512,513,514,515,516,517,518,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,538,539,540,541,542,544,545,546,551,556,558,559,560,561,564],string_po:[19,243,389,393,418,491,556],stringstream:[399,400,416,417,420,425,445,467,469,491],strip:[418,443],struct:[18,19,74,75,76,78,81,82,83,84,125,130,243,250,269,393,396,418,491,498,517],stuck:10,studi:[7,419],stuff:[23,401,490],stupid:439,style:[25,56,88,411,443],sub:57,subclass:[18,20,21,75,76,85,86,116,131,473,474,479,481,486,493,499,506,511,513,524,525,530,534,535,539,542,546,564],subdirectori:[56,557],subject:418,subjet:[17,19,70,336,413,418,491],subjetdetailstr:[17,70,123,413,416,486,489],submiss:[14,57,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,470,471,475,478,480,482,494,495,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547],submit:[10,14,56],submitdir:[10,56],submitonli:56,subscrib:7,subsequ:[41,101,112],subset:[19,339,411,418,428,443,451,456,460,465,491],substr:[401,417,424,436,439,446],substructur:[17,18,20,56,70,77,85,417,426,485,486,499],subtract:7,succe:[18,76],succeed:401,succesfulli:[400,401,406,408,411,424,428,431,436,437,439,443,445,447,451,452,454,455,456,460,463,465],success:[19,20,31,85,93,348,399,400,401,403,404,405,406,408,409,410,411,414,415,418,420,421,422,424,426,427,428,431,432,434,435,436,437,439,440,441,442,443,445,446,447,449,450,451,452,454,455,456,458,459,460,461,462,463,465,467,468,469,491,492,493,494],successfulli:[400,408,414,428,439,454],suffici:10,suffix:[10,17,38,70,99,123,132,413,416,431,486,489,520],suggest:[14,21,563],suitabl:401,sum:[3,38,61,99,401,426],sum_:426,sum_pt:426,sum_pt_dr:426,sumet:[433,434],summaris:452,summaryvalu:[407,411,425,438,458,460],sumofeventweight:401,sumofeventweightssquar:401,sumofweight:401,sumofweightssquar:401,sumpt1000:425,sumpt500:425,sumptchargedpfo500:425,sumptchargedpfopt500:425,sumptchargedpfopt500pv:[124,425,496],sumpttrkpt1000:[425,426],sumpttrkpt1000pv:[124,425,426,496],sumpttrkpt500:[425,426],sumpttrkpt500pv:[124,425,426,496],sumungrtrk500:413,sumw2:[20,419,492],sumw:[401,471],superse:422,suppli:[20,462],support:[1,17,18,19,21,56,57,70,72,76,79,149,400,418],suppos:401,suppressinputdepend:428,suppressoutputdepend:428,sure:[10,13,21,22,24,33,39,56,68,95,100,399,401,411,418,424,425,428,443,451,456,460,465,563],susi:7,susyobjdef:10,susyobjdef_xaod:[10,401],susyphi:[10,401],susytool:[3,10,61,401],susytoolstest:10,sv0:[124,425,426,496],sv0_efracsvx:[124,425,426,496],sv0_efracsvxacc:[425,426],sv0_masssvx:[425,426],sv0_masssvxacc:[425,426],sv0_massvx:[124,425,426,496],sv0_n2tpair:[124,425,426,496],sv0_n2tpairacc:[425,426],sv0_ngtinsvx:[124,425,426,496],sv0_ngtinsvxacc:[425,426],sv0_normdist:[124,425,426,496],sv0_normdistacc:[425,426],sv0_significance3d:426,sv0_significance3dacc:426,sv1:[124,425,426,496],sv1_c:[124,425,426,496],sv1_cu:[124,425,426,496],sv1_distmatlai:[124,425,426,496],sv1_dr:[124,425,426,496],sv1_efracsvx:[124,425,426,496],sv1_efracsvxacc:[425,426],sv1_efrc:426,sv1_l3d:[124,425,426,496],sv1_loglikelihoodratio:[426,428],sv1_lxy:[124,425,426,496],sv1_masssvx:[425,426],sv1_masssvxacc:[425,426],sv1_massvx:[124,425,426,496],sv1_n2tpair:[124,425,426,496],sv1_n2tpairacc:[425,426],sv1_ngtinsvx:[124,425,426,496],sv1_ngtinsvxacc:[425,426],sv1_normdist:[124,425,426,496],sv1_normdistacc:[425,426],sv1_ntkv:426,sv1_pb:[124,425,426,496],sv1_pc:[124,425,426,496],sv1_pu:[124,425,426,496],sv1_sig3d:[124,425,426,496],sv1ip3d:[124,425,426,496],sv1plusip3d_discrimin:425,sv:[425,498],sv_scaled_efc:426,svcmgr:10,svdetail:417,svnweb:[10,13,39,68,100,418,431,454,491],sw:[7,23,56],sy:[400,406,407,408,424,428,431,437,438,439,452,453,454,477,479,491,509,511,530],synonym:10,syntax:[18,76],sys_list:[19,330,491],syselectronsnam:431,sysjetsnam:431,syslist:[424,431],syslistitr:431,sysmuonsnam:431,sysnam:400,sysname_fjvteff_sf:428,sysname_jvteff_sf:428,sysphotonsnam:431,syst:[19,28,90,341,400,401,406,408,411,418,424,428,431,437,439,443,445,447,451,452,454,455,456,462,463,491],syst_it:[400,406,408,424,428,431,437,439,447,452,454],syst_typ:[41,101,445,518],systausnam:431,systelectronsnam:406,system:[22,407,418,438],systemat:[1,2,10,11,12,13,19,23,25,27,28,29,33,34,35,37,38,41,43,46,47,54,60,64,66,67,68,86,88,89,90,91,95,96,97,98,99,101,102,103,105,106,111,112,116,333,400,406,408,411,418,421,424,428,431,437,439,442,443,445,447,451,452,454,455,456,462,463,470,478,480,483,494,497,503,510,512,523,529,531,540,564],systematiccod:[405,431,439],systematicregistri:[179,216,222,230,232,243,249,255,264,275,283,405,428,447,465,470,478,480,491,497,503,512,523,531],systematicset:[2,11,12,19,25,28,29,34,35,43,46,47,222,230,232,243,249,264,275,283,333,341,400,401,406,408,418,424,428,431,437,439,447,452,454,470,478,480,491,497,501,503,510,512,523,529,531],systematicsstrategi:400,systematicsutil:[222,230,232,243,264,275,283,470,478,480,491,512,523,531],systematicvari:[179,182,216,222,230,232,243,249,264,275,283,400,401,405,418,428,431,465,470,478,480,491,497,512,523,531],systjetsnam:424,systmuonsnam:437,systnam:[19,56,333,400,408,411,418,428,431,439,442,443,445,451,454,455,456,462,463,491,494],systnames_el:445,systnames_jet:445,systnames_mu:445,systnames_photon:445,systnames_ptr:[400,408,439,454],systnames_tau:445,systnameslist:418,systphotonsnam:447,systreg:447,systset:431,systtausnam:452,systtyp:[41,101,445,518],systval:[19,56,333,399,418,424,491],sysvariationnam:[400,454],sysvariationnamesfjvt:428,sysvariationnamesiso:[408,439],sysvariationnamesjvt:428,sysvariationnamespid:408,sysvariationnamesreco:[408,439],sysvariationnamestrig:[408,439],sysvariationnamestrigmceff:408,sysvariationnamesttva:439,sysvec:[41,101,445,518],sysvecout:[41,101,445,518],t1:[19,243,314,351,389,393,491,556],t2:[19,243,314,351,389,393,491,556],t3:[19,314,491],t3data3:56,t:[1,2,3,7,10,17,18,19,20,21,23,28,31,33,56,60,61,70,73,78,85,90,93,95,116,126,132,141,243,319,321,324,328,331,339,344,389,393,399,400,401,406,408,411,415,417,418,420,422,424,425,426,428,431,436,437,439,442,443,445,446,447,451,452,454,455,456,458,460,463,465,468,469,470,471,475,478,480,482,489,490,491,494,495,498,500,501,502,503,507,510,512,514,516,518,520,526,529,531,532,533,536,538,544,545,547,556,561,564],t_br:[19,121,127,132,141,327,484,491,505,520,545],t_cont:436,t_infoswitch:[132,493,520],t_jet:418,t_particl:[132,493,520],t_pjet:418,t_tree:56,ta:[38,99,442],tab:21,tabl:[18,20,21,76],taccept:[411,443,456],tack:417,tad:415,tag:[1,2,25,41,56,57,60,88,101,400,425,442,470,499,501,529],taggabl:[2,60],tagger:[18,77,400,417,425,498,551],taggernam:[400,428],taggerok:400,taggerweight:400,taginfo:10,tagvalu:428,tagweight:[2,60,400],tail:426,tajet_tlv:442,tajetcorr_m:442,tajetcorr_pt:442,tajetcorr_tlv:442,take:[1,10,18,20,21,35,38,56,57,76,97,99,400,411,417,431,443,480,491],takeitemsfrominput:10,taken:[20,21,33,41,85,86,95,101,112,116,411,424,437,452,564],talk:10,task:[41,57,101,400],tattempt:491,tau1:426,tau1_wta:[122,413,426,485],tau21:426,tau21_wta:[122,413,426,485],tau2:426,tau2_wta:[122,413,426,485],tau32:426,tau32_wta:[122,413,426,485],tau3:426,tau3_wta:[122,413,426,485],tau:[0,4,8,17,18,29,41,45,56,70,81,91,101,106,108,131,136,145,220,271,282,389,396,416,417,425,426,431,433,445,452,453,454,455,456,489,518,529,530,531,533,556,557,563],tau_:426,tau_itr:[416,454,455,456],tau_syst_cont_nam:445,tauanalysistool:[29,46,47,49,50,207,255,281,283,285,452,454,456,503,529,531,533],taucalibr:[29,46,91,116,144,145,181,220,221,242,243,389,430,556,557,564],taucalibrator_syst:[46,105,529],taucalibratorclass:[115,389],tauclass:[115,389],tauconf:[49,108,533],taucont:[48,107,431,455,532],taucontain:[17,70,144,145,220,241,242,272,280,389,396,416,489,556,557],taucontainerclass:[115,389],taudef:[168,417],taueff:[18,81,453,454],taueff_:417,taueff_eleolrelectronelernnloose_tauidmedium:[18,81],taueff_keyword:417,taueff_sf:[135,453,528],taueff_sf_syst:454,taueff_sf_syst_:453,taueff_substr:417,taueff_xyz:[18,81],tauefficiencycorrect:283,tauefficiencycorrectionstool:[47,283,454,531],tauefficiencycorrector:[47,116,144,145,181,220,221,242,243,389,430,556,557,564],tauefficiencycorrector_syst:[47,106,531],tauefficiencycorrectorclass:[115,389],tauefficiencyscalefactor:454,tauefficientycorrector:1,taueffsf:[453,454],tauhelp:452,tauid:[18,81,454,531],tauidloos:417,tauidmedium:417,tauidtight:417,tauidveryloos:417,tauinfoswitch:[18,75,136,242,389,392,417,490,530,556],tauinfoswitchclass:[115,389],taujet:[1,17,48,49,70,107,108,136,187,196,203,205,284,285,416,436,445,452,453,454,455,456,489,530,532,533],taujetauxcontain:[187,205,436,454],taujetcontain:[17,41,47,48,49,70,101,106,107,108,182,187,196,203,205,206,207,241,247,270,282,284,285,416,431,436,445,452,454,455,456,462,489,495,518,530,531,532,533],taujetmatch:[48,116,144,145,181,220,221,242,243,389,430,556,557,564],taujetmatching_syst:[48,107,532],taujetmatchingclass:[115,389],taujetmatchingtool:455,taujetparamet:[417,456],taunam:[17,70,416,489],tauoverlappingelectronllhdecor:533,tauphi:433,taurecommendationsr22:452,taus_syst:452,tausc_itr:452,tauselectiontool:[29,47,49,207,456,503,531,533],tauselector:[49,116,144,145,181,220,221,242,243,389,430,556,557,564],tauselector_syst:[49,108,533],tauselectorclass:[115,389],tauselectortool:456,tausmearingtool:[46,452,529],tausuffix:462,tausumet:433,tausyst:[41,101,445,518],tausystnam:462,tautrack:[285,456,533],tautracketa:456,tautracketaacc:453,tautrackfailtrackfilt:456,tautrackfailtrackfilteracc:453,tautrackisclcharg:456,tautrackisclchargedacc:453,tautrackisclconv:456,tautrackisclconvacc:453,tautrackisclfak:456,tautrackisclfakeacc:453,tautrackiscliso:456,tautrackisclisoacc:453,tautrackiscor:456,tautrackiscoreacc:453,tautrackiswid:456,tautrackiswideacc:453,tautrackpasstrksel:456,tautrackpasstrkselacc:453,tautrackphi:456,tautrackphiacc:453,tautrackpt:456,tautrackptacc:453,tautrigeff_sf:[135,453,528],tauvarl:431,tauvart:431,tauxaodhelp:[203,452],taweight:442,tbranch:[243,418,491],tcanva:56,tclonesarrai:56,tct:16,tdirectori:[20,56,85,419,462],tdirectoryfil:20,tdt:[3,10,16,61,69,414,487],te:529,team:56,tefhistoprmvtx:415,tefjet:415,telectronisemselector:446,telectronlikelihoodtool:446,tell:[20,21,57,431,462,468],temp:439,tempal:86,templa:10,templat:[10,17,18,19,57,70,86,116,118,120,121,123,125,126,127,129,134,136,137,139,141,242,243,272,389,392,393,396,417,428,469,484,488,489,490,491,493,494,498,502,505,520,545,556,564],temporari:[417,462],tempti:415,tenv:[23,56,182,431],term:[29,91,431,433,434],test:[14,20,31,56,57,85,93,411,415,426,428,431,443,456,529],test_handl:10,test_multialgo:10,testf:401,testmatchingtoolalg:[13,39,68,100],testpid:431,teta:442,tev:[10,56,447],tevalu:401,tevent:[1,11,12,13,17,19,25,33,54,64,66,68,70,88,95,111,116,121,221,241,242,243,244,255,351,389,393,401,406,412,416,422,424,436,437,445,447,452,460,462,469,484,489,490,491,492,503,540,556,558,559,561,564],text:[18,21,23,78],tf:445,tfile:[17,19,54,56,70,111,152,156,162,179,194,195,202,207,211,214,216,241,243,341,347,400,401,405,406,408,411,416,418,424,428,431,436,437,439,443,444,445,451,452,454,456,460,462,463,465,468,489,491,540],tfound:491,tgrapherror:56,tgscjet:415,th1:[20,85,244,401,419,471,475,478,480,482,492,494,500,501,503,507,510,512,514,516,523,526,529,531,532,533,536,544,547],th1d:[3,13,28,39,41,44,49,53,55,101,223,235,243,247,253,268,270,279,285,290,293,296,401,411,418,428,443,445,451,456,460,465,471,483,491,495,501,516,518,527,533,538,541,544],th1f:[20,31,56,85,93,244,419,474,481,492,493,499,506,513,525,535,539,546],th2:419,th2f:[20,31,85,93,244,419,458,474,492,499,535,539],th3:419,th3f:[20,31,85,93,244,419,492],th:[19,346,420],tha:1,than:[1,3,10,13,14,21,34,43,44,61,68,96,102,104,116,411,416,425,428,432,442,443,446,456,462,523,564],thank:[7,491],theapp:10,thei:[2,7,10,18,20,60,72,79,81,116,401,406,408,411,422,424,428,431,437,439,443,445,446,447,451,452,454,455,456,460,468,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],them:[1,7,20,23,116,401,408,418,425,564],theme:21,themselv:[1,18,23,57,72,79,81],thepad:56,theta:[13,39,53,68,100,110,138,407,411,418,425,438,442,443,457,458,461,509,537],theta_muon:509,thetaerr:458,thi:[1,2,3,10,11,12,13,14,17,18,19,20,21,22,23,25,28,29,30,31,33,34,35,39,41,43,44,46,47,49,50,53,56,57,60,61,64,66,68,70,77,85,88,90,92,93,95,96,97,100,101,102,104,105,106,112,116,240,314,324,339,348,351,399,400,401,403,404,405,406,407,408,410,411,414,415,416,417,418,419,420,421,422,424,425,427,428,431,432,435,436,437,438,439,441,443,445,446,447,450,451,452,453,454,455,456,457,458,459,460,462,463,465,467,468,469,470,471,475,476,478,480,482,483,487,488,489,491,493,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,527,529,531,532,533,536,538,540,541,544,547,551,552,563,564],thier:[240,415],thin:533,thing:[10,20,21,22,23,56,57,401,416,462,501],think:[14,20,33,85,95,400,428],third:23,this_jetcleaningtool_handl:424,this_mv2c10:415,this_pt:467,this_qual:443,this_truthlabel:[424,428],thisclust:416,thisdr:423,thiselec:416,thisfatjet:416,thisfil:444,thishlttrk:415,thisjet:416,thisl1jet:[416,489],thislbdata:444,thislbinfo:444,thismet:416,thismuon:[416,423],thispair:401,thisphoton:416,thisruninfo:444,thissyst:[25,424,497],thistau:416,thistrack:416,thistrk:467,thistrkjet:413,thistruth:416,thistruthfatjet:416,thistruthvertex:416,thisvertex:416,thlt_primvertexftk:415,those:[1,20,21,33,56,95],though:56,thought:10,thread:[41,101],three:[20,56,57,415],threshold:[2,3,13,39,60,61,68,100,533],through:[7,10,18,21,41,56,76,101,112,564],throwmsg:[150,242,399,490],thrown:[116,416,564],thrustmaj:426,thrustmin:426,thu:416,tier3:10,tier:56,tight:[12,43,66,411,417,425,431,443,446,447,451,454,523],tightbad:[1,424,426],tightbadugli:[1,424,426],tighteffsf:[133,448,522],tighteffsf_error:[133,448,522],tighter:[446,501],tightfwd:425,tightllh:477,tightllp:[411,417,446],tightnopix:[411,446],tightprimari:[53,110],tightselectornam:447,tile:[3,25,61,88,401,412,424,426],tilebar0:426,tilebar1:426,tilebar2:426,tileerror:412,tileext0:426,tileext1:426,tileext2:426,tileflag:412,tilegap1:426,tilegap2:426,tilegap3:426,tilegap:[25,88],tim:426,time:[10,18,21,23,25,28,54,56,77,88,90,111,116,124,401,406,408,411,417,422,424,425,426,428,431,437,439,443,445,447,451,452,454,455,456,460,468,469,470,471,475,478,480,482,494,495,496,500,501,503,507,510,512,514,516,518,526,529,531,532,533,536,538,544,547,564],timestamp:412,timestampnsoffset:412,timing_cut:428,titl:[20,31,85,86,93,419,420,492,493],titleprefix:[426,440,499,513],tla:[3,61,401,471],tlook:491,tlorentzvector:[19,38,99,122,124,128,131,206,225,231,238,250,254,263,271,272,276,282,286,294,297,326,334,350,413,418,420,423,426,442,455,473,479,485,486,491,493,496,498,502,509,511,515,519,520,524,530,534,542,545,550],tlv:442,tm:442,tm_jetnam:415,tm_trigitem:415,tm_trigitemveto:415,tm_trkname:415,tm_vtxname:415,tmath:[53,110,403,420,425,426,428,455,458,460],tmp:[419,428],tmp_iso_si:416,tmp_lumicalcfilenam:401,tmp_mccampaign:401,tmp_name:418,tmp_prwfilenam:401,tmp_reco_si:416,tmp_trig_si:416,tmp_ttva_si:416,tmpconfigstr:417,tmpset:401,tmuoncorrectionschem:442,tname:491,tnot:491,to_str:401,to_upp:399,tobjarrai:[162,179,194,202,207,211,214,216,243,411,418,428,443,451,456,460,463,465,491],tobject:[116,273,521,564],tobjstr:[162,179,194,202,207,211,214,216,411,428,443,451,456,460,463,465],todo:[401,416,447,462],togeth:[1,41,101],toggl:529,token:[13,18,28,39,49,76,112,400,401,411,417,418,428,436,439,443,451,460,462,465,490],too:[54,111,428,447,457],tool:[0,1,2,3,11,12,13,14,18,19,23,25,28,33,34,35,39,41,43,47,56,58,60,61,64,66,68,83,88,90,96,97,100,101,102,106,112,116,145,152,169,232,235,264,268,283,333,339,400,401,405,406,408,411,414,415,418,422,424,425,428,430,431,437,439,443,445,446,447,451,452,454,456,460,463,465,469,470,471,478,480,483,491,495,497,501,503,504,510,512,516,518,521,523,527,529,531,533,538,541,544,548,549,557,563,564],tool_nam:[19,116,332,339,446,469,491,564],tool_properti:401,toolbox:[41,101,247,270,495,518],toolhandl:[10,414,439,454],toolnam:[18,19,242,243,389,392,393,400,406,408,422,437,439,445,447,452,454,490,491,556],toolnamenamespac:[115,389],toolsfil:[220,389],toolstor:[10,116,221,401,406,408,411,414,415,422,428,439,443,447,451,456,463,469,564],toolsvc:[10,401],top:[10,20,22,25,85,88,418],topanalysi:491,topo:1,topoclust:[13,68,411],topoetcone20:[13,39,68,100,119,128,133,407,409,417,438,440,448,449,477,483,509,516,522],topoetcone20_closebycorr:[119,128,407,438,477,509],topoetcone20_rel:[409,440],topoetcone30:[119,128,133,409,417,440,448,449,477,509,522],topoetcone30_rel:[409,440],topoetcone40:[119,128,133,409,417,440,448,449,477,509,522],topoetcone40_rel:[409,440],topphi:491,tosav:418,total:[13,401],totalineff:408,totalineffsc:408,totalmetnam:431,touch:56,toupper:418,tp:[411,443,458,464],tpad:56,tperror:[458,461],tphi:442,tprimvertexftk:415,tprimvertexftkraw:415,tprimvertexftkrefit:415,tprofil:[20,31,85,93,244,419,458,492,499,535],trac:[10,13,39,68,100,418,431,454,491],track:[0,1,3,10,13,17,18,29,38,45,56,61,70,77,78,82,91,99,110,116,137,223,406,407,408,411,413,415,416,418,422,425,426,431,433,434,438,439,442,443,453,456,457,459,460,461,467,477,479,486,488,489,499,509,511,533,534,535,546,564],track_itr:416,trackal:[18,77,417,425,426,496,498,499],trackassist:[38,99,442,515],trackcontain:[17,70,144,145,220,241,242,243,272,289,389,396,416,489,556,557],trackcontainerclass:[115,389],trackcount:468,tracketa:[453,456],trackfailtrackfilt:[453,456],trackhist:[0,20,52,144,145,220,243,244,288,291,389,459,461,536,539,556,557],trackhistsalgo:[0,20,116,144,145,181,220,221,243,287,389,430,556,557,564],trackhistsalgoclass:[115,389],trackhitcont:[18,72,79,417],trackinfoswitch:[18,76,137,242,389,392,417,490,534,556],trackinfoswitchclass:[115,389],trackinghelp:[411,443],trackingprimit:418,trackisclcharg:[453,456],trackisclconv:[453,456],trackisclfak:[453,456],trackiscliso:[453,456],trackiscor:[453,456],trackiswid:[453,456],trackjet:[413,442,486],trackjetnam:[18,77,413,417],trackjetname_ghostantikt2trackjet_ghostvr30rmax4rmin02trackjet:[18,77],tracklink:[418,425],trackmf:426,trackmfindex:426,tracknam:[17,70,416,489],trackparam:[1,18,72,79,417],trackpart:[17,70,131,137,145,220,271,286,389,396,416,457,489,534,556,557],trackpartclass:[115,389],trackparticl:[10,17,53,70,110,137,167,208,212,218,286,298,406,407,411,415,416,418,425,426,438,443,457,458,460,461,467,489,534,535,538,539,546],trackparticle_etamax:416,trackparticle_ptmin:416,trackparticlecontain:[17,70,241,287,290,298,415,416,426,458,459,460,462,467,489,535,538,546],trackparticlelink:426,trackparticleselectiontool:422,trackparticlexaodhelp:[162,194,411,443],trackpasstrksel:[453,456],trackphi:[453,456],trackpt:[453,456],trackpv:[18,77,417,425,426,496,498,499],tracks_eta:[135,453,528],tracks_failtrackfilt:[135,453,528],tracks_isclcharg:[135,453,528],tracks_isclconv:[135,453,528],tracks_isclfak:[135,453,528],tracks_iscliso:[135,453,528],tracks_iscor:[135,453,528],tracks_iswid:[135,453,528],tracks_passtrksel:[135,453,528],tracks_phi:[135,453,528],tracks_pt:[135,453,528],tracksal:[425,498],trackselectiontool:[53,422,538],trackselector:[53,116,144,145,181,220,221,243,389,430,556,557,564],trackselectorclass:[115,389],trackseltoolinstanceexist:422,tracksinjet:[18,77,417,460],tracksinjet_:417,tracksinjethist:[144,145,220,243,244,251,287,389,426,499,556,557],tracksoftterm:[29,91,503],tracksummaryaccessors_v1:[167,416],trackwidthpt1000:[425,426],trackwidthpt1000p:426,trackwidthpt1000pv:[124,425,426,496],trackwidthpt500:[425,426],trackwidthpt500p:426,trackwidthpt500pv:[124,425,426,496],trandom:56,transform:425,transvers:[11,13,25,64,68,88,407,438],treat:[25,88,116,424,564],treatpujet:431,tree:[0,1,3,10,18,19,21,23,40,56,61,70,76,111,118,120,121,123,125,126,127,129,132,134,136,137,139,141,327,399,401,402,406,407,408,411,412,413,416,418,422,424,425,428,429,430,431,433,437,438,439,443,444,445,447,448,451,452,453,454,455,456,457,460,462,463,464,466,468,471,473,475,478,479,480,482,484,486,489,491,494,498,500,501,502,503,505,507,510,511,512,514,516,520,523,524,526,529,530,531,532,533,534,536,540,542,544,545,547,551],treealgo:[1,54,56,116,144,145,181,220,221,241,242,243,389,430,556,557,564],treealgoclass:[115,389],treefil:462,treenam:462,tretriev:491,tri:[10,19,116,324,348,413,564],trick:439,trickier:10,trickiest:[33,95],trig:[3,13,16,17,28,39,49,70,239,241,293,389,401,407,408,411,414,415,416,428,438,439,443,453,456,462,463,471,480,483,487,488,489,501,512,516,533,541,556],trig_:417,trig_eleolrelectronelernnmedium_tauidloose_trigmytriggermenu:[18,81],trig_it:439,trig_keyword:417,trig_substr:417,trig_xyz:[18,72,79,81],triganalysi:[13,39,68,100],trigchain:[401,407,415,438],trigcol:488,trigcomposit:401,trigconf:[3,16,17,70,239,241,389,414,416,471,487,489,556],trigconfinterfac:[223,471],trigconfkei:436,trigconfxaod:[152,165,167,194,401,414,415,416,443],trigdecisionkei:[10,401,414],trigdecisiontool:[1,3,13,16,17,18,28,39,49,70,83,162,165,167,223,235,253,268,285,293,401,411,414,415,416,428,443,456,463,471,483,487,488,489,501,516,533,541],trigdectool:[10,411,414,415,428,443,456,463],trigdef:[401,415],trigdetailstr:56,trigeff:407,trigeff_sf:[119,128,407,438,477,509],trigeff_sysnam:417,trigeffsf:[408,438,453],trigeffsf_sysnam:416,trigeffsfinstanceexist:439,trigger:[1,3,7,12,13,16,18,28,33,35,39,49,56,61,66,68,69,72,77,79,80,81,83,90,95,97,100,112,116,293,401,407,408,411,414,415,416,417,425,428,438,439,443,448,453,454,456,462,463,471,477,479,480,483,488,489,496,498,501,509,511,516,522,524,528,530,531,533,564],trigger_list:414,triggerchaingroup:[401,415],triggerchaingroupafterveto:415,triggerdataeff:439,triggerdecisiontool:50,triggereffsf:439,triggerel:401,triggerexpress:401,triggerinfoswitch:[17,18,70,76,242,389,392,416,417,489,490,556],triggerinfoswitchclass:[115,389],triggerkei:408,triggermatchingtool:[13,39,68,100,112,162,179,194,207,214,235,253,268,285,293,411,428,443,456,463,483,501,516,533,541],triggermceff:439,triggermenu:33,triggermenumetadatatool:[436,508],triggernam:454,triggerprescal:[401,416],triggerprescaleslumi:[401,416],triggersafterveto:415,triggersus:[401,415],triggersusedafterveto:415,trigjet:[54,111,414,540],trigmatch:[116,133,144,145,181,220,221,243,389,430,448,522,556,557,564],trigmatcherclass:[115,389],trigmatcherdict:112,trigmatchingtool:463,trigmceff:[119,128,407,408,438,477,509],trignam:401,trigpart:401,trigprescal:416,trigprescaleslumi:416,trigr3matchingtool:[411,443],trigsf:407,trijet:428,trilepton:[411,443,456],trim:[413,418,424,491],trimmer:418,trip:10,trivial:[19,21,314],trk3_d0sig:426,trk3_z0sig:426,trk:[17,70,407,415,426,438,456,458,460,461,467,489,539,546],trk_:426,trk_d0_vs_trk_p:458,trk_d0_vs_trk_p_l:458,trk_d0_z0:426,trk_end:[458,460],trk_eta:461,trk_eta_vs_trk_p:458,trk_eta_vs_trk_p_l:458,trk_eta_vs_trk_phi:458,trk_itr:[458,460,467],trk_n:458,trk_n_l:458,trk_phi:461,trk_phi_vs_trk_p:458,trk_phi_vs_trk_p_l:458,trk_pt_cone20:467,trk_z0_vs_trk_p:458,trk_z0_vs_trk_p_l:458,trk_z0_wrtpv:461,trk_z0sint_vs_trk_p:458,trk_z0sint_vs_trk_p_l:458,trkcharg:[119,128,407,438,477,509],trkcollect:415,trkd0:[119,128,407,438,477,509],trkd0sig:[119,128,407,438,477,509],trkdebug:458,trkdetail:467,trketa:458,trkindex:426,trkinjet:460,trkiter:426,trkjet:[122,413,485],trkjetnam:413,trkjetsidx:413,trkjetsidx_:413,trknblayerhit:[119,128,407,438,477,509],trkninnermostpixlayhit:[119,128,407,438,477,509],trknpixhit:[119,128,407,438,477,509],trknpixhol:[119,128,407,438,477,509],trknscthit:[119,128,407,438,477,509],trknscthole:[119,128,407,438,477,509],trknsihit:[119,128,407,438,477,509],trkntrthit:[119,128,407,438,477,509],trkntrthole:[119,128,407,438,477,509],trkok:426,trkp:458,trkphi0:[119,128,407,438,477,509],trkphi:458,trkpixdedx:[119,128,407,438,477,509],trkpt:[458,467],trkpt_:467,trkpt_l:467,trkptdetail:467,trkptr:426,trkqoverp:[119,128,407,438,477,509],trksok:426,trksum_ntrk:426,trksum_spt:426,trksum_vabseta:426,trksum_veta:426,trksum_vpt:426,trktheta:[119,128,407,438,477,509],trkwidth1000:425,trkwidth500:425,trkz0:[119,128,407,438,477,509],trkz0sintheta:[119,128,407,438,477,509],troot:56,trt:[425,458],trunk:[10,13,39,68,100,418,431,446,454,491],trust:400,truth3:[25,88],truth:[0,3,17,18,25,28,45,56,61,70,74,77,84,88,90,139,401,412,416,417,424,425,426,428,455,462,464,465,484,485,486,489,496,498,499,542],truth_:425,truth_detail:[18,77,417,425],truth_eta:[413,425,426],truth_fatjet:[17,54,70,111,416,489,540],truth_fatjet_itr:[17,70,416,489],truth_itr:[416,465],truth_m:413,truth_p4:[122,124,413,425,426,485,496],truth_partondr:425,truth_partonpt:425,truth_pdgid:425,truth_phi:[413,425,426],truth_pt:[413,425],truth_pt_l:426,truth_pt_m:426,truth_vertex:[17,70,489],truthbosoncontainernam:424,truthbosonswithdecayparticl:[25,88,497],truthclassifi:[55,113],truthcontain:[17,70,144,145,220,241,242,243,272,295,389,396,416,489,556,557],truthcontainerclass:[115,389],truthcount:[124,425,426,496],truthev:412,trutheventcontain:[163,164,176,412,413,425,464],truthfatjet:[17,70,489],truthfatjet_hboson:413,truthfatjet_tquark:413,truthfatjet_wboson:413,truthfatjet_zboson:413,truthfatjetnam:[17,70,416,489],truthinfoswitch:[18,75,139,242,389,392,417,490,542,556],truthinfoswitchenum:[115,389],truthjet:[54,111,413,425,428,540],truthjetcontain:[401,428],truthlabeldeltar_b:[124,425,426,496],truthlabeldeltar_c:[124,425,426,496],truthlabeldeltar_t:[124,425,426,496],truthlabelid:[424,426,428],truthlabelnam:424,truthlevelonli:56,truthmf:426,truthmfindex:426,truthnam:[17,70,416,489],truthpart:[17,55,70,113,131,139,145,220,271,294,389,396,416,464,465,489,542,544,556,557],truthpartclass:[115,389],truthparticl:[17,25,55,70,88,113,139,215,294,296,416,425,464,465,489,497,542,544],truthparticle_etamax:416,truthparticle_ptmin:416,truthparticlecontain:[17,55,70,113,193,216,241,296,416,442,462,465,489,544],truthparticlecontainernam:424,truthparton:425,truthpt:[425,426],truthselector:[55,116,144,145,181,220,221,242,243,389,430,556,557,564],truthselectorclass:[115,389],truthtopquarkcontainernam:424,truthtopquarkwithdecayparticl:[25,88,497],truthtruthfatjet:416,truthtyp:10,truthvertex:[215,464,466],truthvertexcontain:[17,70,141,297,416,466,489,545],truthvertexnam:[17,70,416,489],truthvertic:[17,70,141,416,466,489,545],tsplitjet:415,tst:431,tstore:[1,11,12,13,17,19,23,25,28,33,54,64,66,68,70,88,90,95,111,116,221,241,242,243,255,314,351,389,393,401,405,406,408,411,416,422,424,428,436,437,439,443,445,447,451,452,454,455,456,460,462,463,465,469,489,490,491,503,540,556,559,561,564],tstring:[19,114,242,345,401,418,468,490,491,547],tsystem:[152,175,182,195,401,424,431,444],tt:7,ttaweight:442,tth:7,ttree:[0,1,3,17,19,23,54,56,70,111,118,120,121,123,125,126,127,129,132,134,136,137,139,141,152,195,225,231,236,238,241,243,250,254,257,263,272,276,282,286,292,294,297,327,337,399,401,402,407,412,413,416,418,425,429,433,438,444,448,453,457,462,464,466,471,473,479,484,486,489,491,498,502,505,511,520,524,530,534,540,542,545,551],ttreecach:56,ttreeformula:[152,401],ttreeread:56,ttreereaderarrai:56,ttreereadervalu:56,ttva:[35,97,439,480,512],ttvaeff_sf:[128,438,509],ttvaeff_sysnam:417,ttvaeffsf:439,ttvaeffsf_sysnam:416,ttvasfinstanceexist:439,tuan:7,tune23:447,tupl:[162,194,411,443],turn:[1,3,18,20,29,35,41,61,76,86,91,97,101,400,401,416,417,462],tusejmsscal:442,tutori:563,twice:424,twiki:[13,34,50,96,400,401,411,422,424,425,437,443,452,470,471,503,523],two:[1,10,18,33,56,57,76,81,95,116,414,415,564],txprimvx:415,txt:[2,14,21,22,56,60,470],type:[1,2,10,14,18,19,20,25,28,38,39,41,55,56,57,127,149,302,303,304,305,307,308,309,310,312,313,314,324,331,338,339,348,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,389,399,400,411,413,417,418,425,431,436,443,445,447,451,455,456,464,465,467,471,491,505,542,543,551,552,556,564],type_cut:443,type_nam:[19,243,389,393,491,556],typeandnam:[10,400,401,411,414,415,428,439,443,454,456,463],typedef:[20,85,411,428,443,456,473,489,491,492,517,524,557],typeid:491,typeinfo:[156,162,179,187,193,194,202,206,207,211,214,216,243,405,411,428,436,442,443,451,455,456,460,463,465,491],typenam:[17,18,19,70,73,116,121,126,127,132,141,314,319,323,324,327,328,329,332,339,342,344,348,351,469,484,489,490,491,498,502,505,520,545,564],typevec:465,typic:[14,41,101,112,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],typo:[10,21],u:[10,17,70,132,489,520],uc:56,ucatla:[10,19,22,56,321,491],uchicago:[10,23,56],uct3:[10,56],ugli:[1,25,88,424,439],uint16_t:401,uint32_t:[3,121,399,401,412,426,442,451,455,456,458,471,484],uint64_t:[3,471],uint8_t:[407,411,425,438,458,460],uint:[77,118,120,123,125,126,129,132,134,136,137,139,402,407,413,417,425,429,438,448,453,457,464,467,473,479,486,490,498,502,511,520,524,530,534,542],uint_t:[138,457,534,537],un:[1,425],unabl:[302,303,304,305,306,307,308,309,310,311,312,313,321,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,413],uncailbr:[437,452],uncalibr:412,uncalibratedjetcharg:425,uncertain:424,uncertainti:[25,88,424,425,529],uncertcalibjetscdv:424,uncertcalibjetssc:424,uncheck:431,uncpath:424,unctoolhandl:[25,424,497],under:[20,57,85,116,411,443,451,456,564],underli:10,underscor:[18,77],understand:[2,57,60],unexpect:[399,419,425],unfortun:14,ungroom:442,ungrtrk500:[122,413,485],uniqu:[1,10,17,70,116,400,416,491,564],unique_ptr:[408,418,439,454,504],unit:[2,17,54,60,70,111,118,120,121,123,125,126,127,129,132,134,136,137,139,402,407,412,413,416,425,426,429,433,438,448,453,457,462,464,473,479,484,486,489,498,502,505,511,520,524,530,534,540,542],univeristi:23,unknown:[18,19,25,88,148,149,400,411,413,418,442,443,445,454,456,464,490,491],unknownstream:401,unless:[3,61,401,411,412],unlik:[41,101],unnamedalgorithm:[116,469,564],unnecessari:1,unordered_map:[20,48,85,107,122,455,485,486,492,532],unpair:[3,61,401],unpresc:401,unprescal:471,unrecogn:424,unregist:[116,564],unregisterinst:[116,399,469,564],unsign:[2,17,19,30,55,60,70,92,113,128,140,346,400,401,406,408,411,412,413,415,416,418,423,424,425,426,428,436,437,438,439,443,444,446,447,452,454,456,457,462,464,465,467,470,486,489,491,493,504,509,511,542,543,544,546],unslim:[116,564],unsupport:445,until:[1,415,424,483,516],unus:[116,469,564],unwant:454,unweight:[3,61],unzip:56,up:[3,10,18,19,20,22,23,33,56,57,61,76,83,85,95,116,324,348,401,404,406,408,411,418,422,424,428,431,432,435,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,468,473,474,479,481,486,493,499,506,511,513,524,525,530,534,535,539,542,546,564],updat:[13,21,39,56,68,100,401,417,425,436,439,483,516,563],updated_desc:1,updateentri:[132,520],updateparticl:[118,120,123,125,126,129,132,134,136,137,139,402,407,413,425,429,438,448,453,457,464,473,479,486,498,502,511,520,524,530,534,542],upon:56,upper:[2,20,31,60,85,93],upstream:[2,10,11,12,13,34,35,41,43,46,47,60,64,66,68,96,97,101,102,105,106,112,408,411,428,431,439,443,445,451,454,455,456,463],url:[10,22],urllib3:21,us:[0,1,2,3,10,11,12,13,14,17,18,19,20,21,22,23,25,28,29,31,33,35,38,39,41,44,53,54,55,56,57,60,61,64,66,68,70,72,76,78,79,81,83,85,86,88,90,91,93,95,97,99,100,101,104,110,111,112,113,116,293,333,338,400,401,402,403,404,406,407,408,409,411,412,413,416,417,418,419,420,422,423,424,425,426,428,429,431,433,434,435,437,438,439,440,442,443,444,445,446,447,448,449,451,452,453,454,455,456,457,458,459,460,461,462,464,465,466,467,468,469,473,474,479,480,481,486,491,493,499,501,503,506,511,512,513,523,524,525,529,530,531,533,534,535,539,540,542,546,548,549,563,564],usag:[19,23,41,57,101,112,324,348,411,443,446,451,456,491],usatla:[1,413,425,446],useaverageddecor:422,useclustermatch:445,usecutflow:56,usedevelopmentfil:400,usefastsim:[406,447,452,454],usehlteventshap:424,usejmsscal:[38,99,442,515],uselrt:[439,443],usemass:[132,520],usemetadata:[24,56],usenpvfromeventinfo:424,useperiodconfig:401,user:[1,2,13,14,20,21,23,31,33,38,41,56,57,60,68,85,93,95,99,101,112,116,400,401,406,408,411,416,417,422,424,428,431,437,439,443,445,446,447,451,452,454,455,456,460,468,489,501,564],userdefin:[13,39,68,100,411,443],usernam:56,useth:[18,75,82,417,520],usetruth3:424,usexaod:[19,328,400,401,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,459,460,462,463,465,468,491],usr:21,usual:[10,18,19,20,21,25,31,76,85,88,93,324,348,443],usuali:[19,338],util:[0,10,23,116,431,491,563,564],v0:14,v1:[3,10,56,61,471],v2:[3,10,61,471],v3:10,v61:57,v63:56,v9:10,v:[10,17,22,70,132,400,428,489,520],vald0wrtpvoftrack:426,valid:[56,400,401,408,413,415,418,425,428,431,442,446,458,470],validforj:424,valu:[2,10,12,13,17,18,19,20,28,38,41,55,56,60,66,68,70,73,85,90,99,101,113,116,124,130,147,148,149,333,399,400,401,404,406,408,411,417,419,421,422,424,425,428,431,435,437,439,443,445,446,447,451,452,454,455,456,459,460,463,465,468,490,492,521,564],valuei:[20,85,419,492],valuex:[20,85,419,492],valuez:[20,85,419,492],valz0wrtpvoftrack:426,vanilla:[22,422],var_bs_online_vi:415,var_bs_online_vx:415,var_bs_online_vz:415,varcorrectiontool:447,varcorrectiontoolnam:447,vari:[2,11,12,13,23,34,35,43,46,47,60,64,66,68,96,97,102,105,106,408,428,431,439,445,454,510,529],variabl:[1,10,11,13,18,19,20,21,22,28,31,39,44,49,56,57,75,76,85,93,104,121,127,132,141,327,401,406,408,411,415,416,422,424,425,426,428,431,437,439,443,445,447,451,452,454,455,456,460,462,463,468,470,471,475,476,478,480,482,483,484,487,488,491,494,495,500,501,503,505,507,510,512,514,516,518,520,523,526,529,531,532,533,536,538,540,541,544,545,547,557,564],variancemet:431,variat:[1,11,25,64,88,400,406,424,437,445,447,452],variou:[18,20,21,31,41,76,85,93,101,408,469],varl:[431,433],varnam:[17,70,132,141,489,498,520,545],vart:[431,433],vbf:7,ve:[10,22,116,418,564],vec:[19,344,429,491,502],vec_eloss:[128,423,509],vecoutcontainernam:[25,406,411,424,428,431,437,443,445,447,451,452,456,497],vecstringgrl:401,vectd0:426,vectd0signi:426,vector:[1,2,3,11,12,13,17,18,19,20,23,25,28,29,33,34,35,38,39,41,43,44,46,47,49,53,54,56,60,64,66,68,70,72,76,77,79,80,81,85,88,90,91,95,96,97,99,101,102,105,106,111,112,116,119,121,122,124,128,132,133,135,138,140,141,165,225,231,238,250,254,263,269,272,276,282,286,294,297,326,327,330,333,334,341,344,345,400,401,402,406,407,408,411,412,413,414,415,416,417,418,420,423,424,425,426,428,429,431,434,436,437,438,439,440,442,443,444,445,447,448,451,452,453,454,455,456,457,460,462,463,464,465,466,467,469,470,471,473,477,478,479,480,483,484,485,486,489,490,491,492,493,494,496,497,498,501,502,503,508,509,510,511,512,515,516,517,518,520,522,523,524,527,528,529,530,531,533,534,537,538,540,541,542,543,545,546,547,551,553,554,555,564],vectornam:436,vectz0:426,vectz0signi:426,venvwrapp:21,verbatim:[116,564],verbos:[19,56,324,348,399,401,406,408,411,414,415,424,428,431,437,439,443,445,446,447,451,452,454,455,456,465],veri:[3,10,19,21,56,61,314,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],version:[1,10,20,21,22,56,85,400,418,462,473,474,479,481,486,493,499,506,511,513,524,525,530,534,535,539,542,546],vertex:[3,13,17,18,19,25,39,53,54,61,68,70,82,88,100,110,111,120,125,129,141,235,268,287,298,315,316,349,401,407,411,415,416,417,418,425,426,428,438,439,443,457,458,459,460,461,462,466,467,471,479,483,489,491,498,499,511,516,535,538,539,540,545,546],vertexcontain:[17,19,56,70,121,144,145,152,162,194,210,213,220,236,241,242,243,279,290,298,322,335,343,389,393,396,401,411,412,415,416,418,428,443,459,460,462,467,484,489,491,527,538,546,556,557],vertexcontainerclass:[115,389],vertexlink:[138,457,537],vertexlink_persindex:[138,457,537],vertexlink_perskei:[138,457,537],vertexnam:[17,70,416,489],vertextyp:[415,418,467],vertic:[17,19,70,121,141,335,401,411,412,416,418,428,443,459,460,462,466,484,488,489,491,545],vertici:[415,425],veryloos:[411,417,443,446],veryloosellp:[411,417,446],veryloosenopix:[411,446],verytight:417,veto:[13,68,401,411,428,451],via:[1,10,11,12,13,14,19,23,33,41,64,66,68,95,101,112,314,401,414,424],view:[13,22,33,56,68,95,400,401,411,422,425,437,439,443,452,470,503,523],view_el:[13,28,39,41,44,53,55,68,90,100,101,104,110,113,406,411,424,428,431,437,439,443,445,447,451,452,456,460,465,491,533],viewauth:[400,401,411,443,471],vim:10,virtual:[2,3,6,9,10,11,12,13,16,17,20,25,27,28,29,31,32,33,34,35,37,38,39,41,43,44,46,47,48,49,52,53,54,55,60,61,62,63,64,66,67,68,69,70,71,72,75,77,79,80,81,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,118,120,123,125,126,129,131,132,134,136,137,139,141,470,471,473,475,476,478,479,480,481,482,483,486,487,488,489,490,492,493,494,495,497,498,499,500,501,502,503,504,506,507,508,509,510,511,512,513,514,515,516,518,519,520,523,524,525,526,527,529,530,531,532,533,534,536,537,538,539,540,541,542,543,544,545,547],virtualenvwrapp:21,vom:56,voronia:426,voroniapi:426,voroniapx:426,voroniapz:426,voronoi:7,voronoiarea:[122,413,425,426,485],voronoiareapx:426,vs:[401,406,425,426,447,458,563],vsactualmu:[18,77,417],vslumiblock:[18,77,417,458,461],vtag:[18,77,417,485],vtx:[415,426,428,464,467,546],vtx_bkg_diff_z0:426,vtx_bkg_diff_z0_:426,vtx_bkg_diff_z0_m:426,vtx_diff_x0:426,vtx_diff_x0_l:426,vtx_diff_y0:426,vtx_diff_y0_l:426,vtx_diff_z0:426,vtx_diff_z0_:426,vtx_diff_z0_m:426,vtx_itr:[415,418,467],vtx_offline_valid:426,vtx_offline_x0:[124,425,426,496],vtx_offline_y0:[124,425,426,496],vtx_offline_z0:[124,425,426,496],vtx_offline_z0_:426,vtx_online_bkg_x0:[124,425,496],vtx_online_bkg_y0:[124,425,496],vtx_online_bkg_z0:[124,425,426,496],vtx_online_valid:426,vtx_online_x0:[124,425,426,496],vtx_online_x0_raw:426,vtx_online_x0_vs_vtx_online_z0:426,vtx_online_y0:[124,425,426,496],vtx_online_y0_raw:426,vtx_online_y0_vs_vtx_online_z0:426,vtx_online_z0:[124,425,426,496],vtx_online_z0_:426,vtx_online_z0_raw:426,vtxbkgdiffz0:426,vtxclass:426,vtxclass_vs_jetpt:426,vtxclass_vs_lblock:426,vtxclassint:426,vtxcollect:415,vtxdiffx0:426,vtxdiffx0_vs_lblock:426,vtxdiffy0:426,vtxdiffy0_vs_lblock:426,vtxdiffz0:426,vtxdiffz0_raw:426,vtxdiffz0_s_vs_vtx_offline_z0:426,vtxdiffz0_s_vs_vtxdiffx0:426,vtxdiffz0_s_vs_vtxdiffy0:426,vtxdiffz0_vs_lblock:426,vtxdiffz0_vs_vtx_offline_z0:426,vtxeff10_nodummy_vs_lblock:426,vtxeff10_raw_vs_lblock:426,vtxeff10_vs_lblock:426,vtxeff1_nodummy_vs_lblock:426,vtxeff1_raw_vs_lblock:426,vtxeff1_vs_lblock:426,vtxhaddummi:[124,425,426,496],vtxhist:[0,20,144,145,220,244,389,556,557],vtxonlinevalid:[124,425,496],vtxtype:415,vx:[407,415,438],vxtype:418,vy:[407,415,438],vz:[138,407,411,415,418,425,438,443,457,458,461,537],vz_vs_lblock:458,w1:448,w:[7,13,28,39,68,90,100,112,400,406,407,408,411,424,425,428,437,438,439,443,446,447,451,452,453,454,456,465,477,479,509,511,521,530,533],w_:426,wa:[10,28,33,57,90,95,400,401,417,418,421,432,442,447,462,564],wai:[3,19,21,23,33,41,61,95,101,112,314,399,462,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547],wait:56,want:[1,3,10,13,17,19,20,21,22,25,28,29,33,39,56,57,61,68,70,85,88,90,91,95,100,112,333,401,406,408,411,422,424,425,428,431,437,439,443,445,447,451,452,454,455,456,460,462,468,533],warn:[2,57,60,116,401,413,416,417,418,424,425,520,548,549,564],wasn:[116,564],wast:425,we:[2,7,10,14,18,19,20,21,22,23,33,41,53,56,57,60,76,85,95,101,110,116,351,399,400,401,405,406,408,411,413,414,416,418,422,424,428,431,432,436,437,439,443,445,446,447,451,452,454,455,456,460,462,465,468,488,563,564],webpag:23,weight:[2,3,13,20,28,38,39,41,44,53,55,56,60,61,85,86,90,99,100,101,104,110,113,400,401,408,411,419,428,439,443,451,454,456,460,465,484,492,533],weight_pileup:412,weight_pileup_down:412,weight_pileup_up:412,weight_prescal:401,weight_sherpa22:401,weight_sherpa22decor:401,weightb:426,weightc:426,weightssi:[18,74,417],weightu:426,welcom:563,well:[20,21,23,33,56,57,95,436,468],went:[428,456,463],were:[10,21,417,462,465],weta2:[133,448,522],what:[10,18,20,21,23,31,33,56,76,85,93,95,116,405,406,408,411,418,424,425,428,436,437,439,443,445,447,451,452,454,455,456,462,463,465,490,564],when:[1,2,3,10,11,13,14,18,19,20,21,23,25,28,33,38,41,56,57,60,61,64,68,76,86,88,90,95,99,101,112,116,302,303,304,305,307,308,309,310,312,313,339,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,374,376,377,378,379,380,382,384,385,386,388,400,401,406,408,411,418,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,483,489,516,564],where:[1,3,10,11,13,19,21,23,33,34,41,50,56,57,61,64,68,86,95,96,101,112,351,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,462,463,468,489],wherea:10,whether:[18,20,25,33,56,76,88,95,116,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,471,520,540,564],which:[1,2,3,7,10,11,12,13,14,17,18,19,20,21,22,23,28,35,38,39,41,44,47,56,57,60,61,64,66,68,70,72,76,79,80,85,86,90,97,99,100,101,104,106,112,116,317,339,346,400,401,406,407,408,411,416,417,422,424,425,428,431,437,438,439,443,445,447,451,452,454,455,456,460,462,463,465,468,471,474,481,489,493,499,506,513,525,533,535,540,546,564],who:[10,563],whose:[16,69],why:[10,411,428,443,456,462,501,538,544],widetrack:456,width:[1,30,92,124,425,426,455,496],wiki:[56,563],window:56,wip3d:428,wish:[10,20,21,41,57,101],within:[10,20,53,56,57,85,110,116,442,564],without:[1,10,14,16,18,19,21,23,38,56,57,69,72,79,99,116,351,424,431,468,564],wk:[19,20,31,85,93,324,348,399,400,401,404,405,406,408,411,414,415,419,421,422,424,426,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,461,462,463,465,468,492,494,499,539],wll:[116,564],won:[401,406,408,411,417,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468,564],wonder:10,word:[23,454],work:[1,2,7,10,12,18,21,22,24,29,33,34,41,56,57,60,66,72,76,77,79,81,91,95,96,101,112,116,400,401,406,408,411,417,422,424,428,431,437,439,443,445,446,447,451,452,454,455,456,460,463,468,531,533,564],workdir:22,worker:[20,31,85,93,116,151,152,155,156,157,159,161,162,165,172,173,175,178,179,182,183,186,187,188,190,192,193,194,196,198,201,202,203,205,206,207,210,211,213,214,216,219,221,399,400,401,403,404,405,406,408,410,411,414,415,421,422,424,427,428,431,432,435,436,437,439,441,442,443,445,447,450,451,452,454,455,456,458,459,460,461,462,463,465,467,468,469,470,471,475,476,478,480,482,483,487,488,494,495,497,500,501,503,504,507,508,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],workflow:[21,41,101,112,563],workingpoint:[428,439,446],workingpointtaueleid:454,workingpointtaujetid:454,workon:21,workspac:21,world:57,worri:56,would:[1,14,20,34,57,96,425,428,533],wp:[13,18,28,39,42,44,65,68,72,79,90,100,104,408,411,417,425,428,437,439,443,446,451,498,521,551],wp_enum:446,wp_itr:[411,443,451],wp_parser:446,wpparsestr:446,wrap:[1,21,57],wrapper:[21,23,25,41,88,101,112,430,470,471,475,476,478,480,483,487,494,495,497,500,501,504,507,508,510,512,516,518,523,527,529,531,532,533,536,538,540,541,544,547],write:[3,10,11,12,17,21,25,28,29,33,34,35,46,47,56,57,61,64,66,70,88,90,91,95,96,97,105,106,116,400,401,406,408,411,416,418,424,428,431,437,439,443,451,452,454,455,456,462,468,489,564],writer:[115,116,144,145,181,220,221,243,389,430,556,557,564],writesystematicslisthist:[19,243,389,393,400,406,408,418,424,428,431,437,439,452,454,491,556],writesystnam:[12,35,47,66,97,106,408,439,454,480,512,531],writeto:[17,70,416,436,468,489],written:[2,11,13,14,17,25,28,33,55,57,60,64,68,70,88,90,95,113,401,406,408,411,416,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,468],wrong:[10,428],wrote:468,wrt:[1,407,425,438,461],wsv1:428,wta:426,wtag_medium:[122,485],wtag_tight:[122,485],wtot:[133,448,522],wtots1:448,www:491,wz:401,x1:412,x2:412,x331_m1423:10,x86_64:22,x:[13,20,28,31,39,56,68,85,90,93,100,116,401,425,426,428,442,458,461,464,466,483,516,564],x_1:[20,31,85,93],x_2:[20,31,85,93],xah:[0,1,2,3,5,6,7,9,11,12,13,16,17,21,22,23,25,26,28,29,30,32,33,34,35,36,38,39,41,42,43,44,46,47,48,49,51,52,53,54,55,56,57,58,59,60,61,62,63,64,66,68,69,70,86,87,88,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,122,123,124,125,126,128,129,130,131,133,134,135,136,137,138,139,140,150,221,224,225,229,231,236,237,238,243,248,250,254,257,261,263,269,271,272,274,276,280,282,286,289,294,295,297,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388,389,399,400,401,402,404,405,406,407,408,409,411,412,413,414,415,416,418,420,421,422,423,424,425,426,428,429,430,431,432,433,435,436,437,438,439,440,442,443,444,445,447,448,451,452,453,454,455,456,457,459,460,462,463,464,465,466,468,469,470,471,472,473,475,476,477,478,479,480,481,483,484,485,486,487,488,489,491,493,494,495,496,497,498,499,501,502,503,504,505,507,508,509,510,511,512,513,515,516,517,518,519,520,522,523,524,527,528,529,530,531,532,533,534,536,537,538,540,541,542,543,544,545,547,556,563],xah_config:[14,41,101,112],xah_run:[14,21,22,563],xah_run_exampl:57,xah_truth:[17,54,70,111,489,540],xahclass:[115,389],xahgit:10,xahtaujetmatch:417,xaod:[0,1,2,3,10,11,12,13,17,19,20,21,23,24,25,28,31,35,38,39,41,42,43,44,47,48,49,53,54,55,56,60,61,64,65,66,68,70,85,88,90,93,95,97,99,100,101,104,106,107,108,110,111,112,113,116,118,120,121,123,125,126,127,129,130,132,134,136,137,139,141,243,314,315,322,325,326,331,335,339,343,351,389,393,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,420,421,422,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,473,474,479,480,481,483,484,486,489,491,493,494,497,498,499,501,502,505,506,508,511,512,513,515,516,517,518,520,521,523,524,525,527,530,531,532,533,534,535,538,539,540,541,542,544,545,546,550,551,556,558,559,561,563,564],xaod_interfac:470,xaod_standalon:428,xaodanahelp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,564],xaodanahelpers_algorithm_h:469,xaodanahelpers_basiceventselection_h:471,xaodanahelpers_bjetefficiencycorrector_h:470,xaodanahelpers_cluster_h:472,xaodanahelpers_clustercontainer_h:473,xaodanahelpers_clusterhists_h:474,xaodanahelpers_clusterhistsalgo_h:475,xaodanahelpers_debugtool_h:476,xaodanahelpers_electron_h:477,xaodanahelpers_electroncalibrator_h:478,xaodanahelpers_electroncontainer_h:479,xaodanahelpers_electronefficiencycorrector_h:480,xaodanahelpers_electronhists_h:481,xaodanahelpers_electronhistsalgo_h:482,xaodanahelpers_electronselector_h:483,xaodanahelpers_eventinfo_h:484,xaodanahelpers_fatjet_h:485,xaodanahelpers_fatjetcontainer_h:486,xaodanahelpers_helperclasses_h:490,xaodanahelpers_helperfunctions_h:491,xaodanahelpers_helptreebase_h:489,xaodanahelpers_histogrammanager_h:492,xaodanahelpers_hltjetgetter_h:487,xaodanahelpers_hltjetroibuilder_h:488,xaodanahelpers_iparticlehists_h:493,xaodanahelpers_iparticlehistsalgo_h:494,xaodanahelpers_isoclosebycorr_h:495,xaodanahelpers_jet_h:496,xaodanahelpers_jetcalibrator_h:497,xaodanahelpers_jetcontainer_h:498,xaodanahelpers_jethists_h:499,xaodanahelpers_jethistsalgo_h:500,xaodanahelpers_jetselector_h:501,xaodanahelpers_l1jetcontainer_h:502,xaodanahelpers_messageprinteralgo_h:504,xaodanahelpers_metconstructor_h:503,xaodanahelpers_metcontainer_h:505,xaodanahelpers_methists_h:506,xaodanahelpers_methistsalgo_h:507,xaodanahelpers_minixaod_h:508,xaodanahelpers_muon_h:509,xaodanahelpers_muoncalibrator_h:510,xaodanahelpers_muoncontainer_h:511,xaodanahelpers_muonefficiencycorrector_h:512,xaodanahelpers_muonhists_h:513,xaodanahelpers_muonhistsalgo_h:514,xaodanahelpers_muoninfatjetcorrector_h:515,xaodanahelpers_muonselector_h:516,xaodanahelpers_onlinebeamspottool_h:517,xaodanahelpers_overlapremover_h:518,xaodanahelpers_particle_h:[477,485,496,509,519,522,528,543],xaodanahelpers_particlecontainer_h:520,xaodanahelpers_particlepidmanager_h:521,xaodanahelpers_photon_h:522,xaodanahelpers_photoncalibrator_h:523,xaodanahelpers_photoncontainer_h:524,xaodanahelpers_photonhists_h:525,xaodanahelpers_photonhistsalgo_h:526,xaodanahelpers_photonselector_h:527,xaodanahelpers_tau_h:528,xaodanahelpers_taucalibrator_h:529,xaodanahelpers_taucontainer_h:530,xaodanahelpers_tauefficiencycorrector_h:531,xaodanahelpers_taujetmatching_h:532,xaodanahelpers_tauselector_h:533,xaodanahelpers_tools_returncheck_h:548,xaodanahelpers_tools_returncheckconfig_h:549,xaodanahelpers_trackcontainer_h:534,xaodanahelpers_trackhists_h:535,xaodanahelpers_trackhistsalgo_h:536,xaodanahelpers_trackpart_h:537,xaodanahelpers_trackselector_h:538,xaodanahelpers_tracksinjethists_h:539,xaodanahelpers_treealgo_h:540,xaodanahelpers_trigmatcher_h:541,xaodanahelpers_truthcontainer_h:542,xaodanahelpers_truthpart_h:543,xaodanahelpers_truthselector_h:544,xaodanahelpers_vertexcontainer_h:545,xaodanahelpers_vtxhists_h:546,xaodanahelpers_writer_h:547,xaodanahelpersdirectori:[220,389],xaodanahelpersfw:[7,23],xaodbas:[157,159,169,172,175,187,188,190,198,203,205,245,247,270,272,406,408,415,418,421,424,436,437,439,447,452,454,493,495,518,520],xaodbtag:[167,176,177,416,425,426],xaodbtaggingeffici:[2,28,60,90,151,179,296,400,428,470,501,544],xaodcaloev:[163,213,225,226,241,412,462,473,474,489],xaodconfigtool:[3,16,17,70,152,165,167,194,401,414,415,416,443,471,487,489],xaodcor:[152,157,173,175,179,182,187,188,194,196,198,203,207,216,219,249,401,406,415,422,424,428,431,436,437,443,445,447,452,455,456,465,468,497],xaodcutflow:[152,260,401,508],xaodegamma:[157,159,161,162,173,182,187,196,198,201,202,213,231,232,233,235,241,247,270,273,276,277,279,406,408,410,411,422,431,436,445,447,450,451,462,479,480,481,483,489,491,495,518,521,524,525,527],xaodev:[19,324,348,399,400,401,404,405,406,408,411,414,415,421,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,465,468],xaodeventinfo:[150,152,155,157,159,162,165,172,179,182,186,188,190,194,198,202,203,205,206,207,210,213,214,216,222,236,241,242,269,275,287,399,401,404,405,406,408,411,414,415,421,428,431,435,437,439,443,447,451,452,454,455,456,459,462,463,465,470,484,489,490,517,523,535],xaodeventshap:[163,412],xaodjet:[151,165,167,175,178,179,182,187,193,196,206,213,219,222,238,241,243,247,250,251,253,270,284,291,400,413,414,415,416,424,425,427,428,431,436,442,445,455,462,468,470,486,489,491,495,498,499,501,518,532,539],xaodmak:[10,33,436,508],xaodmetadata:[152,221,401,469],xaodmetadatacnv:[260,508],xaodmissinget:[182,187,241,257,258,431,436,489,505,506],xaodmuon:[168,173,175,182,187,188,190,192,193,194,196,241,247,263,265,268,270,417,422,424,431,436,437,439,441,442,443,445,489,495,511,513,516,518],xaodobj:[17,70,132,489,520],xaodprimit:[167,168,416,417],xaodrootaccess:[221,241,242,244,255,401,404,435,459,468,469,489,490,492,503],xaodstor:[19,324,348,400,401,404,405,406,408,411,414,415,421,422,424,428,431,435,436,437,439,442,443,445,447,451,452,454,455,456,459,460,462,463,465,468],xaodstream:10,xaodtau:[168,182,187,196,203,205,206,207,241,247,270,282,284,285,417,431,436,445,452,454,455,456,489,495,518,530,532,533],xaodtrack:[152,162,167,194,208,210,212,213,218,235,236,241,243,268,279,286,287,290,297,298,401,411,416,418,443,457,459,461,462,467,483,484,489,491,516,527,534,535,538,545,546],xaodtrigg:[241,254,489,502],xaodtriggercnv:508,xaodtruth:[163,164,176,193,215,216,241,294,296,297,412,413,425,442,464,465,489,542,544,545],xaxi:86,xbin:[20,31,85,93,419,492],xbinarr:419,xbinsarr:[20,31,85,93,492],xf1:412,xf2:412,xhigh:[20,31,85,93,419,492],xlabel:[20,31,85,93,419,492],xlow:[20,31,85,93,419,492],xml:[3,5,21,26,36,42,51,56,57,59,61],xprimvx:415,xrootd:56,xs:494,xtrigdecis:[10,401,414,436],xx:[10,18,22,75],xxx:401,xyabel:[20,31,85,93,492],xyz:[18,72,79,81],y:[20,31,56,85,93,425,426,442,447,458,464,466],y_1:[20,31,85,93],y_2:[20,31,85,93],ybin:[20,31,85,93,419,492],ybinarr:419,ybinsarr:[20,31,85,93,492],ye:[411,443,451,455,456],year:401,yesterdai:10,yet:[21,56,400,408,411,414,428,439,443,447,454,456],yflip12:426,yflip13:426,yhigh:[20,31,85,93,419,492],ylabel:[20,31,85,93,419,492],ylow:[20,31,85,93,419,492],yml:563,you:[7,10,13,14,17,18,19,20,21,22,24,28,29,33,34,39,41,56,57,68,70,78,90,91,95,96,100,101,112,116,314,351,400,401,406,408,411,414,415,417,422,424,425,428,431,437,439,443,445,446,447,451,452,454,455,456,460,462,463,468,491,533,563,564],your:[3,10,17,19,20,21,22,23,33,34,56,57,61,70,95,96,116,244,324,348,400,401,406,408,411,422,424,428,431,437,439,443,445,447,451,452,454,455,456,460,463,468,470,475,476,478,482,494,495,500,501,503,507,510,512,514,516,518,523,526,529,531,532,533,536,538,540,544,547,564],youraccount:10,yourconfignam:57,yourself:[10,56],yy:[10,18,22,77],z0:[39,53,100,110,138,407,411,418,425,426,438,443,457,458,461,467,537],z0_:458,z0_atlas_m:458,z0_atlas_vs_lblock:458,z0_cut:[467,546],z0_l:458,z0_m:458,z0_m_raw:458,z0_max:[53,110],z0_raw_m:458,z0_raw_vs_lblock:458,z0_sign:461,z0_vl:458,z0_vs_lblock:458,z0_wrtpv_sign:461,z0d0:458,z0err:[426,458,461],z0sig:[426,458],z0sig_sign:461,z0sig_signed_pdf:461,z0sigsint:458,z0sigsint_sign:461,z0sin:[53,110],z0sint:458,z0sint_l:458,z0sint_sign:461,z0sintd0:458,z0sintheta:[407,411,438,443],z0sintheta_cut:[411,443],z0sintheta_max:[53,110],z0sinthetaacc:[407,438],z0sinthetadecor:[411,443],z0sintsigned_vs_d0sign:461,z0val:426,z0xsin0:[458,461],z0xsin:[53,110,458,461],z1:436,z2:436,z:[7,20,31,85,93,407,411,418,425,426,436,438,442,443,458,464,466],z_:[13,68],zbin:[20,31,85,93,419,492],zbinarr:419,zbinsarr:[20,31,85,93,492],zero:399,zhigh:[20,31,85,93,419,492],zlabel:[20,31,85,93,419,492],zlow:[20,31,85,93,419,492],zpv:[411,443],ztag_medium:[122,485],ztag_tight:[122,485],zz:[10,18,22,77]},titles:["API Reference","Algorithms","b-jet","Event","Calibrating Objects","ClusterHists","ClusterHistsAlgo","Community","Efficiency Correcting","Debug Tool","Development","\\(e\\)","\\(e\\)","\\(e\\)","xAH FAQ","Getting Objects","HLT Jet Getter","Tree Maker Base Class","Helper Classes","Helper Functions","Histograms","How to Document Code","Installing","Introduction","Common Issues","\\(j\\)","JetHists","JetHistsAlgo","\\(j\\)","MET Constructor","MessagePrinterAlgo","MetHists","MetHistsAlgo","Mini-xAOD","\\(\\mu\\)","\\(\\mu\\)","MuonHists","MuonHistsAlgo","fatjet","\\(\\mu\\)","Producing Outputs","Overlap Removal","Particle PID Manager","\\(\\gamma\\)","\\(\\gamma\\)","Selecting Objects","\\(\\tau\\)","\\(\\tau\\)","\\(\\tau\\)","\\(\\tau\\)","Tools Used","TrackHists","TrackHistsAlgo","Tracks","Tree Maker Algorithm","Truth","Brian Tuan\u2019s Tutorial","xAH_run.py","Utilities","VtxHists","Class BJetEfficiencyCorrector","Class BasicEventSelection","Class ClusterHistsAlgo","Class DebugTool","Class ElectronCalibrator","Class ElectronCutBasedPIDManager","Class ElectronEfficiencyCorrector","Class ElectronHistsAlgo","Class ElectronSelector","Class HLTJetGetter","Class HelpTreeBase","Class ClusterInfoSwitch","Class ElectronInfoSwitch","Template Class EnumParser","Class EventInfoSwitch","Class IParticleInfoSwitch","Class InfoSwitch","Class JetInfoSwitch","Class METInfoSwitch","Class MuonInfoSwitch","Class PhotonInfoSwitch","Class TauInfoSwitch","Class TrackInfoSwitch","Class TriggerInfoSwitch","Class TruthInfoSwitch","Class HistogramManager","Class IParticleHistsAlgo","Class IsoCloseByCorr","Class JetCalibrator","Class JetHistsAlgo","Class JetSelector","Class METConstructor","Class MessagePrinterAlgo","Class MetHists","Class MetHistsAlgo","Class MinixAOD","Class MuonCalibrator","Class MuonEfficiencyCorrector","Class MuonHistsAlgo","Class MuonInFatJetCorrector","Class MuonSelector","Class OverlapRemover","Class PhotonCalibrator","Class PhotonHistsAlgo","Class PhotonSelector","Class TauCalibrator","Class TauEfficiencyCorrector","Class TauJetMatching","Class TauSelector","Class TrackHistsAlgo","Class TrackSelector","Class TreeAlgo","Class TrigMatcher","Class TruthSelector","Class Writer","Class Hierarchy","Class Algorithm","Class Cluster","Class ClusterContainer","Class Electron","Class ElectronContainer","Class EventInfo","Class FatJet","Class FatJetContainer","Class Jet","Class JetContainer","Class L1JetContainer","Class MetContainer","Class Muon","Class MuonContainer","Class OnlineBeamSpotTool","Class Particle","Template Class ParticleContainer","Class Photon","Class PhotonContainer","Class Tau","Class TauContainer","Class TrackContainer","Class TrackPart","Class TruthContainer","Class TruthPart","Class VertexContainer","Define EL_RETURN_CHECK","Define RETURN_CHECK","Directory Root","Directory xAODAnaHelpers","Directory tools","Enum ToolName","Enum ContainerType","Enum ShowerType","File Algorithm.cxx","File BJetEfficiencyCorrector.cxx","File BasicEventSelection.cxx","File ClusterContainer.cxx","File ClusterHists.cxx","File ClusterHistsAlgo.cxx","File DebugTool.cxx","File ElectronCalibrator.cxx","File ElectronContainer.cxx","File ElectronEfficiencyCorrector.cxx","File ElectronHists.cxx","File ElectronHistsAlgo.cxx","File ElectronSelector.cxx","File EventInfo.cxx","File FatJetContainer.cxx","File HLTJetGetter.cxx","File HLTJetRoIBuilder.cxx","File HelpTreeBase.cxx","File HelperClasses.cxx","File HelperFunctions.cxx","File HistogramManager.cxx","File IParticleHists.cxx","File IParticleHistsAlgo.cxx","File IsoCloseByCorr.cxx","File Jet.cxx","File JetCalibrator.cxx","File JetContainer.cxx","File JetHists.cxx","File JetHistsAlgo.cxx","File JetSelector.cxx","File L1JetContainer.cxx","File LinkDef.h","File METConstructor.cxx","File MessagePrinterAlgo.cxx","File MetContainer.cxx","File MetHists.cxx","File MetHistsAlgo.cxx","File MinixAOD.cxx","File MuonCalibrator.cxx","File MuonContainer.cxx","File MuonEfficiencyCorrector.cxx","File MuonHists.cxx","File MuonHistsAlgo.cxx","File MuonInFatJetCorrector.cxx","File MuonSelector.cxx","File OnlineBeamSpotTool.cxx","File OverlapRemover.cxx","File ParticlePIDManager.cxx","File PhotonCalibrator.cxx","File PhotonContainer.cxx","File PhotonHists.cxx","File PhotonHistsAlgo.cxx","File PhotonSelector.cxx","File TauCalibrator.cxx","File TauContainer.cxx","File TauEfficiencyCorrector.cxx","File TauJetMatching.cxx","File TauSelector.cxx","File TrackContainer.cxx","File TrackHists.cxx","File TrackHistsAlgo.cxx","File TrackSelector.cxx","File TracksInJetHists.cxx","File TreeAlgo.cxx","File TrigMatcher.cxx","File TruthContainer.cxx","File TruthSelector.cxx","File VertexContainer.cxx","File VtxHists.cxx","File Writer.cxx","File Hierarchy","File Algorithm.h","File BJetEfficiencyCorrector.h","File BasicEventSelection.h","File Cluster.h","File ClusterContainer.h","File ClusterHists.h","File ClusterHistsAlgo.h","File DebugTool.h","File Electron.h","File ElectronCalibrator.h","File ElectronContainer.h","File ElectronEfficiencyCorrector.h","File ElectronHists.h","File ElectronHistsAlgo.h","File ElectronSelector.h","File EventInfo.h","File FatJet.h","File FatJetContainer.h","File HLTJetGetter.h","File HLTJetRoIBuilder.h","File HelpTreeBase.h","File HelperClasses.h","File HelperFunctions.h","File HistogramManager.h","File IParticleHists.h","File IParticleHistsAlgo.h","File IsoCloseByCorr.h","File Jet.h","File JetCalibrator.h","File JetContainer.h","File JetHists.h","File JetHistsAlgo.h","File JetSelector.h","File L1JetContainer.h","File METConstructor.h","File MessagePrinterAlgo.h","File MetContainer.h","File MetHists.h","File MetHistsAlgo.h","File MinixAOD.h","File Muon.h","File MuonCalibrator.h","File MuonContainer.h","File MuonEfficiencyCorrector.h","File MuonHists.h","File MuonHistsAlgo.h","File MuonInFatJetCorrector.h","File MuonSelector.h","File OnlineBeamSpotTool.h","File OverlapRemover.h","File Particle.h","File ParticleContainer.h","File ParticlePIDManager.h","File Photon.h","File PhotonCalibrator.h","File PhotonContainer.h","File PhotonHists.h","File PhotonHistsAlgo.h","File PhotonSelector.h","File Tau.h","File TauCalibrator.h","File TauContainer.h","File TauEfficiencyCorrector.h","File TauJetMatching.h","File TauSelector.h","File TrackContainer.h","File TrackHists.h","File TrackHistsAlgo.h","File TrackPart.h","File TrackSelector.h","File TracksInJetHists.h","File TreeAlgo.h","File TrigMatcher.h","File TruthContainer.h","File TruthPart.h","File TruthSelector.h","File VertexContainer.h","File VtxHists.h","File Writer.h","File ReturnCheck.h","File ReturnCheckConfig.h","Function ClassImp(xAH::Algorithm)","Function ClassImp(BJetEfficiencyCorrector)","Function ClassImp(BasicEventSelection)","Function ClassImp(ClusterHistsAlgo)","Function ANA_MSG_SOURCE(msgClusterHists, \u201cClusterHists\u201d)","Function ClassImp(DebugTool)","Function ClassImp(ElectronCalibrator)","Function ClassImp(ElectronEfficiencyCorrector)","Function ClassImp(ElectronHistsAlgo)","Function ANA_MSG_SOURCE(msgElectronHists, \u201cElectronHists\u201d)","Function ClassImp(ElectronSelector)","Function ClassImp(HLTJetGetter)","Template Function HelperFunctions::makeDeepCopy","Function HelperFunctions::getPrimaryVertexZ","Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *)","Function xAH::addRucio","Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *, MsgStream&)","Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *)","Function HelperFunctions::dPhi","Template Function HelperFunctions::__attribute__","Function HelperFunctions::passPrimaryVertexSelection","Template Function HelperFunctions::sort_container_pt(const T *)","Template Function HelperFunctions::isAvailable(std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)","Function HelperFunctions::sort_pt","Function HelperFunctions::jetReclustering","Template Function HelperFunctions::connectBranch","Template Function HelperFunctions::type_name","Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *)","Function HelperFunctions::found_non_dummy_sys","Template Function HelperFunctions::getLink","Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, const std::string&, HelperClasses::ToolName)","Function HelperFunctions::getListofSystematics","Function HelperFunctions::jetTrimming(const xAOD::JetContainer *, double, double, fastjet::JetAlgorithm)","Function HelperFunctions::applyPrimaryVertexSelection","Function HelperFunctions::replaceString","Function HelperFunctions::isAvailableMetaData","Function HelperFunctions::getMCShowerType","Template Function HelperFunctions::makeSubsetCont(T1 *&, T2 *&, MsgStream&, const std::string&, HelperClasses::ToolName)","Function HelperFunctions::msg","Function HelperFunctions::writeSystematicsListHist","Template Function HelperFunctions::sort_container_pt(T *)","Function HelperFunctions::countPrimaryVertices","Template Function HelperFunctions::remove_duplicates","Function HelperFunctions::SplitString","Function HelperFunctions::string_pos","Function HelperFunctions::isFilePrimaryxAOD","Template Function HelperFunctions::retrieve(T *&, std::string, xAOD::TEvent *, xAOD::TStore *, MsgStream&)","Function HelperFunctions::getPrimaryVertex(const xAOD::VertexContainer *, MsgStream&)","Function HelperFunctions::jetTrimming(const xAOD::Jet *, double, double, fastjet::JetAlgorithm)","Template Function HelperFunctions::recordOutput","Function HelperFunctions::has_exact","Function HelperFunctions::getPrimaryVertexLocation(const xAOD::VertexContainer *)","Function ClassImp(IParticleHistsAlgo)","Function ClassImp(IsoCloseByCorr)","Function ClassImp(JetCalibrator)","Function ClassImp(JetHistsAlgo)","Function ClassImp(JetSelector)","Function ClassImp(METConstructor)","Function ClassImp(MessagePrinterAlgo)","Function ClassImp(MetHistsAlgo)","Function ClassImp(MinixAOD)","Function ClassImp(MuonCalibrator)","Function ClassImp(MuonEfficiencyCorrector)","Function ClassImp(MuonHistsAlgo)","Function ClassImp(MuonInFatJetCorrector)","Function ClassImp(MuonSelector)","Function ClassImp(OverlapRemover)","Function ANA_MSG_SOURCE(msgPIDManager, \u201cPIDManager\u201d)","Function ANA_MSG_HEADER","Function ClassImp(PhotonCalibrator)","Function ClassImp(PhotonHistsAlgo)","Function ANA_MSG_SOURCE(msgPhotonHists, \u201cPhotonHists\u201d)","Function ClassImp(PhotonSelector)","Function ANA_MSG_ERROR","Function ClassImp(TauCalibrator)","Function ClassImp(TauEfficiencyCorrector)","Function ClassImp(TauJetMatching)","Function ClassImp(TauSelector)","Function ClassImp(TrackHistsAlgo)","Function ANA_MSG_SOURCE(msgTrackHists, \u201cTrackHists\u201d)","Function ClassImp(TrackSelector)","Function ANA_MSG_SOURCE(msgTracksInJetHists, \u201cTracksInJetHists\u201d)","Function ClassImp(TreeAlgo)","Function ClassImp(TrigMatcher)","Function ClassImp(TruthSelector)","Function ANA_MSG_SOURCE(msgVtxHists, \u201cVtxHists\u201d)","Function ClassImp(Writer)","Doxygen API","Namespace CP","Namespace EL","Namespace HelperClasses","Namespace HelperFunctions","Namespace Trig","Namespace TrigConf","Namespace xAH","Bug List","Page Hierarchy","Program Listing for File Algorithm.cxx","Program Listing for File BJetEfficiencyCorrector.cxx","Program Listing for File BasicEventSelection.cxx","Program Listing for File ClusterContainer.cxx","Program Listing for File ClusterHists.cxx","Program Listing for File ClusterHistsAlgo.cxx","Program Listing for File DebugTool.cxx","Program Listing for File ElectronCalibrator.cxx","Program Listing for File ElectronContainer.cxx","Program Listing for File ElectronEfficiencyCorrector.cxx","Program Listing for File ElectronHists.cxx","Program Listing for File ElectronHistsAlgo.cxx","Program Listing for File ElectronSelector.cxx","Program Listing for File EventInfo.cxx","Program Listing for File FatJetContainer.cxx","Program Listing for File HLTJetGetter.cxx","Program Listing for File HLTJetRoIBuilder.cxx","Program Listing for File HelpTreeBase.cxx","Program Listing for File HelperClasses.cxx","Program Listing for File HelperFunctions.cxx","Program Listing for File HistogramManager.cxx","Program Listing for File IParticleHists.cxx","Program Listing for File IParticleHistsAlgo.cxx","Program Listing for File IsoCloseByCorr.cxx","Program Listing for File Jet.cxx","Program Listing for File JetCalibrator.cxx","Program Listing for File JetContainer.cxx","Program Listing for File JetHists.cxx","Program Listing for File JetHistsAlgo.cxx","Program Listing for File JetSelector.cxx","Program Listing for File L1JetContainer.cxx","Program Listing for File LinkDef.h","Program Listing for File METConstructor.cxx","Program Listing for File MessagePrinterAlgo.cxx","Program Listing for File MetContainer.cxx","Program Listing for File MetHists.cxx","Program Listing for File MetHistsAlgo.cxx","Program Listing for File MinixAOD.cxx","Program Listing for File MuonCalibrator.cxx","Program Listing for File MuonContainer.cxx","Program Listing for File MuonEfficiencyCorrector.cxx","Program Listing for File MuonHists.cxx","Program Listing for File MuonHistsAlgo.cxx","Program Listing for File MuonInFatJetCorrector.cxx","Program Listing for File MuonSelector.cxx","Program Listing for File OnlineBeamSpotTool.cxx","Program Listing for File OverlapRemover.cxx","Program Listing for File ParticlePIDManager.cxx","Program Listing for File PhotonCalibrator.cxx","Program Listing for File PhotonContainer.cxx","Program Listing for File PhotonHists.cxx","Program Listing for File PhotonHistsAlgo.cxx","Program Listing for File PhotonSelector.cxx","Program Listing for File TauCalibrator.cxx","Program Listing for File TauContainer.cxx","Program Listing for File TauEfficiencyCorrector.cxx","Program Listing for File TauJetMatching.cxx","Program Listing for File TauSelector.cxx","Program Listing for File TrackContainer.cxx","Program Listing for File TrackHists.cxx","Program Listing for File TrackHistsAlgo.cxx","Program Listing for File TrackSelector.cxx","Program Listing for File TracksInJetHists.cxx","Program Listing for File TreeAlgo.cxx","Program Listing for File TrigMatcher.cxx","Program Listing for File TruthContainer.cxx","Program Listing for File TruthSelector.cxx","Program Listing for File VertexContainer.cxx","Program Listing for File VtxHists.cxx","Program Listing for File Writer.cxx","Program Listing for File Algorithm.h","Program Listing for File BJetEfficiencyCorrector.h","Program Listing for File BasicEventSelection.h","Program Listing for File Cluster.h","Program Listing for File ClusterContainer.h","Program Listing for File ClusterHists.h","Program Listing for File ClusterHistsAlgo.h","Program Listing for File DebugTool.h","Program Listing for File Electron.h","Program Listing for File ElectronCalibrator.h","Program Listing for File ElectronContainer.h","Program Listing for File ElectronEfficiencyCorrector.h","Program Listing for File ElectronHists.h","Program Listing for File ElectronHistsAlgo.h","Program Listing for File ElectronSelector.h","Program Listing for File EventInfo.h","Program Listing for File FatJet.h","Program Listing for File FatJetContainer.h","Program Listing for File HLTJetGetter.h","Program Listing for File HLTJetRoIBuilder.h","Program Listing for File HelpTreeBase.h","Program Listing for File HelperClasses.h","Program Listing for File HelperFunctions.h","Program Listing for File HistogramManager.h","Program Listing for File IParticleHists.h","Program Listing for File IParticleHistsAlgo.h","Program Listing for File IsoCloseByCorr.h","Program Listing for File Jet.h","Program Listing for File JetCalibrator.h","Program Listing for File JetContainer.h","Program Listing for File JetHists.h","Program Listing for File JetHistsAlgo.h","Program Listing for File JetSelector.h","Program Listing for File L1JetContainer.h","Program Listing for File METConstructor.h","Program Listing for File MessagePrinterAlgo.h","Program Listing for File MetContainer.h","Program Listing for File MetHists.h","Program Listing for File MetHistsAlgo.h","Program Listing for File MinixAOD.h","Program Listing for File Muon.h","Program Listing for File MuonCalibrator.h","Program Listing for File MuonContainer.h","Program Listing for File MuonEfficiencyCorrector.h","Program Listing for File MuonHists.h","Program Listing for File MuonHistsAlgo.h","Program Listing for File MuonInFatJetCorrector.h","Program Listing for File MuonSelector.h","Program Listing for File OnlineBeamSpotTool.h","Program Listing for File OverlapRemover.h","Program Listing for File Particle.h","Program Listing for File ParticleContainer.h","Program Listing for File ParticlePIDManager.h","Program Listing for File Photon.h","Program Listing for File PhotonCalibrator.h","Program Listing for File PhotonContainer.h","Program Listing for File PhotonHists.h","Program Listing for File PhotonHistsAlgo.h","Program Listing for File PhotonSelector.h","Program Listing for File Tau.h","Program Listing for File TauCalibrator.h","Program Listing for File TauContainer.h","Program Listing for File TauEfficiencyCorrector.h","Program Listing for File TauJetMatching.h","Program Listing for File TauSelector.h","Program Listing for File TrackContainer.h","Program Listing for File TrackHists.h","Program Listing for File TrackHistsAlgo.h","Program Listing for File TrackPart.h","Program Listing for File TrackSelector.h","Program Listing for File TracksInJetHists.h","Program Listing for File TreeAlgo.h","Program Listing for File TrigMatcher.h","Program Listing for File TruthContainer.h","Program Listing for File TruthPart.h","Program Listing for File TruthSelector.h","Program Listing for File VertexContainer.h","Program Listing for File VtxHists.h","Program Listing for File Writer.h","Program Listing for File ReturnCheck.h","Program Listing for File ReturnCheckConfig.h","Struct pt_sort","Struct JetContainer::btagOpPoint","Struct OnlineBeamSpotTool::LBData","Typedef floatAccessor","Typedef floatAccessor","Typedef floatAccessor","Full API","Full API","Variable HelperFunctions::event","Variable HelperFunctions::store","Variable HelperFunctions::name","Variable HelperFunctions::debug","Variable else","xAODAnaHelpers","xAH::Algorithm"],titleterms:{"2":22,"21":22,"class":[17,18,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,221,222,223,224,225,227,228,229,230,231,232,234,235,236,237,238,239,241,242,243,244,246,247,248,249,250,252,253,254,255,256,257,258,259,260,261,262,263,264,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282,283,284,285,286,288,289,290,292,293,294,295,296,297,299,389,392,393,396,556],"const":[316,318,323,332,334,339,349,350,353],"do":14,"enum":[147,148,149,242,243,389,392,393,556],"function":[19,150,151,152,154,155,156,157,159,160,161,162,165,172,173,175,178,179,182,183,186,187,188,190,192,193,194,196,197,198,200,201,202,203,205,206,207,209,210,211,212,213,214,216,218,219,243,273,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,393,396,556],"new":10,A:57,By:[221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299],For:21,One:21,__attribute__:321,ad:10,addrucio:317,algorithm:[1,10,20,54,56,57,116,150,221,302,399,469,564],ana_msg_error:375,ana_msg_head:370,ana_msg_sourc:[306,311,369,373,381,383,387],api:[0,57,389,556,557],applyprimaryvertexselect:335,author:10,b:2,background:23,base:[17,22,42,60,61,62,63,64,66,67,68,69,71,72,74,75,77,78,79,80,81,82,83,84,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,122,123,124,125,126,128,129,133,134,135,136,137,138,139,140],basiceventselect:[61,152,223,304,401,471],bjetefficiencycorrector:[1,60,151,222,303,400,470],block:21,brian:56,btagoppoint:551,bug:397,calibr:[1,4],chang:10,check:[10,22],classimp:[302,303,304,305,307,308,309,310,312,313,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,374,376,377,378,379,380,382,384,385,386,388],clean:1,cluster:[117,224,472],clustercontain:[118,153,225,402,473],clusterhist:[5,154,226,306,403,474],clusterhistsalgo:[6,62,155,227,305,404,475],clusterinfoswitch:71,cmake:22,code:[21,56,563],comment:21,common:24,commun:7,compil:22,configur:[56,57],connectbranch:327,constructor:29,containertyp:148,content:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,392,393,396,563],correct:8,countprimaryvertic:343,cp:390,creat:10,creation:1,cut:42,cxx:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468],data:[10,56],debug:[9,561],debugtool:[63,156,228,307,405,476],decor:10,defin:[142,143,300,389,556],definit:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301],deriv:[75,76,85,86,116,131],descript:[223,232,235,240,244,253,264,268,270,283,293],detail:[57,223,232,235,240,244,253,264,268,270,283,293],dev:10,develop:10,direct:21,directori:[144,145,146,557],doc:21,docker:22,document:[21,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,147,148,149,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,550,551,552,553,554,555,558,559,560,561,562],doubl:[334,350],doxygen:[21,389],dphi:320,e:[11,12,13,50],effici:8,el:391,el_return_check:142,electron:[1,42,119,229,477],electroncalibr:[1,64,157,230,308,406,478],electroncontain:[120,158,231,407,479],electroncutbasedpidmanag:65,electronefficiencycorrector:[1,66,159,232,309,408,480],electronhist:[1,160,233,311,409,481],electronhistsalgo:[1,67,161,234,310,410,482],electroninfoswitch:72,electronselector:[1,68,162,235,312,411,483],els:[21,562],email:7,enumpars:73,environ:21,event:[1,3,50,558],eventinfo:[121,163,236,412,484],eventinfoswitch:74,everyth:21,exampl:57,exist:10,faq:14,fastjet:[334,350],fatjet:[38,122,237,485],fatjetcontain:[123,164,238,413,486],file:[10,144,145,146,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,389,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,557],floataccessor:[553,554,555],found_non_dummy_si:330,full:[389,556,557],gamma:[43,44,50],gener:21,get:[15,22,57],getlink:331,getlistofsystemat:333,getmcshowertyp:338,getprimaryvertex:[316,349],getprimaryvertexloc:[318,353],getprimaryvertexz:315,getter:16,goodrun:23,h:[181,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,430,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],has_exact:352,help:10,helper:[18,19],helperclass:[1,168,242,332,339,392,417,490],helperfunct:[1,169,243,314,315,316,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,393,418,491,558,559,560,561],helptreebas:[70,167,241,416,489],hierarchi:[115,220,389,398],histogram:20,histogrammanag:[20,85,170,244,419,492],hlt:16,hltjetgett:[1,69,165,239,313,414,487],hltjetroibuild:[166,240,415,488],how:[14,21],i:14,includ:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301],indic:563,info:10,inform:24,infoswitch:76,inherit:[60,61,62,63,64,66,67,68,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,122,123,124,125,126,128,129,131,133,134,135,136,137,138,139,140],initi:10,instal:22,introduct:[23,56,57],iparticlehist:[171,245,420,493],iparticlehistsalgo:[86,172,246,354,421,494],iparticleinfoswitch:75,isavail:[319,324],isavailablemetadata:337,isfileprimaryxaod:347,isoclosebycorr:[87,173,247,355,422,495],issu:24,j:[25,28,50],je:1,jer:1,jet:[1,2,16,50,124,174,248,350,423,496],jetalgorithm:[334,350],jetcalibr:[1,88,175,249,356,424,497],jetcontain:[125,176,250,334,425,498,551],jethist:[1,26,177,251,426,499],jethistsalgo:[1,27,89,178,252,357,427,500],jetinfoswitch:77,jetreclust:326,jetselector:[1,90,179,253,358,428,501],jettrim:[334,350],l1jetcontain:[126,180,254,429,502],latest:563,lbdata:552,level:50,lh:42,line:21,linkdef:[181,430],list:[7,397,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],local:21,lot:10,maintain:56,makedeepcopi:314,maker:[17,54],makesubsetcont:[332,339],manag:42,messageprinteralgo:[30,92,183,256,360,432,504],met:29,metadata:24,metconstructor:[91,182,255,359,431,503],metcontain:[127,184,257,433,505],methist:[31,93,185,258,434,506],methistsalgo:[32,94,186,259,361,435,507],metinfoswitch:78,mini:33,minixaod:[95,187,260,362,436,508],miss:24,msg:340,msgclusterhist:306,msgelectronhist:311,msgphotonhist:373,msgpidmanag:369,msgstream:[318,324,339,348,349],msgtrackhist:381,msgtracksinjethist:383,msgvtxhist:387,mu:[34,35,39,50],muon:[1,128,261,509],muoncalibr:[1,96,188,262,363,437,510],muoncontain:[129,189,263,438,511],muonefficiencycorrector:[1,97,190,264,364,439,512],muonhist:[1,36,191,265,440,513],muonhistsalgo:[1,37,98,192,266,365,441,514],muoninfatjetcorrector:[99,193,267,366,442,515],muoninfoswitch:79,muonselector:[1,100,194,268,367,443,516],name:560,namespac:[168,221,224,225,229,231,235,236,237,238,239,241,242,243,248,250,254,257,261,263,264,268,269,271,272,274,275,276,279,280,282,286,289,294,295,297,389,390,391,392,393,394,395,396,556],nest:[125,130,551,552],ntupl:1,object:[4,15,45],onlinebeamspottool:[130,195,269,444,517,552],out:22,output:40,overlap:41,overlapremov:[101,196,270,368,445,518],packag:[21,23],page:[389,398,557],particl:[42,131,271,519],particlecontain:[132,272,520],particlepidmanag:[197,273,446,521],passprimaryvertexselect:322,photon:[133,274,522],photoncalibr:[102,198,275,371,447,523],photoncontain:[134,199,276,448,524],photonhist:[200,277,373,449,525],photonhistsalgo:[103,201,278,372,450,526],photoninfoswitch:80,photonselector:[104,202,279,374,451,527],pid:42,pidmanag:369,plot:[56,57],produc:40,program:[399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],pt_sort:550,py:57,python:[21,563],qualiti:563,recordoutput:351,refer:[0,57],relat:[1,23],relationship:[60,61,62,63,64,66,67,68,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,122,123,124,125,126,128,129,130,131,133,134,135,136,137,138,139,140,551,552],releas:[10,563],remov:41,remove_dupl:344,renam:10,replacestr:336,retriev:[329,348],return_check:143,returncheck:[300,548],returncheckconfig:[301,549],reus:10,root:[144,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219],rst:21,run:57,s:56,sampl:57,script:57,select:[1,45],set:21,setup:56,showertyp:149,simpl:57,skim:10,slc6:14,slc7:14,sort_container_pt:[323,342],sort_pt:325,sourc:22,specif:22,splitstr:345,start:57,std:[10,319,324,329,332,339,348],store:559,string:[10,319,324,329,332,339,348],string_po:346,struct:[389,550,551,552,556],subdirectori:145,suggest:10,support:563,svn:10,t1:[332,339],t2:[332,339],t:[323,329,342,348],tabl:563,tag:[10,22],tau:[1,46,47,48,49,50,135,280,528],taucalibr:[1,105,203,281,376,452,529],taucontain:[136,204,282,453,530],tauefficiencycorrector:[1,106,205,283,377,454,531],tauinfoswitch:81,taujetmatch:[1,107,206,284,378,455,532],tauselector:[1,108,207,285,379,456,533],templat:[73,132,314,319,321,323,324,327,328,329,331,332,339,342,344,348,351],test:10,tevent:[319,324,329,348],tip:56,tool:[9,10,50,146,300,301],toolnam:[147,332,339],track:53,trackcontain:[137,208,286,457,534],trackhist:[51,209,287,381,458,535],trackhistsalgo:[52,109,210,288,380,459,536],trackinfoswitch:82,trackpart:[138,289,537],trackselector:[110,211,290,382,460,538],tracksinjethist:[212,291,383,461,539],tree:[17,54],treealgo:[111,213,292,384,462,540],trick:56,trig:[10,394],trigconf:395,trigdecisiontool:10,trigger:10,triggerinfoswitch:83,trigmatch:[112,214,293,385,463,541],trust:10,truth:55,truthcontain:[139,215,294,464,542],truthinfoswitch:84,truthpart:[140,295,543],truthselector:[113,216,296,386,465,544],tstore:[319,324,329,348],tstring:10,ttree:40,tuan:56,tutori:[7,56],type:[60,61,62,63,64,66,67,68,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,122,123,124,125,126,128,129,130,131,133,134,135,136,137,138,139,140],type_nam:328,typedef:[225,241,276,389,553,554,555,556],uncertainti:1,up:21,updat:10,us:[7,50],user:10,util:58,variabl:[243,301,389,393,556,558,559,560,561,562],version:563,versu:10,vertexcontain:[141,217,297,316,318,349,353,466,545],virtual:21,vs:14,vtxhist:[59,218,298,387,467,546],what:57,who:7,workflow:10,writer:[114,219,299,388,468,547],writesystematicslisthist:341,x:22,xah:[10,14,302,317,396,564],xah_run:57,xaod:[33,40,316,318,319,324,329,334,348,349,350,353],xaodanahelp:[56,145,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,563],xaoddump:23}}) \ No newline at end of file diff --git a/xAHAlgorithm.html b/xAHAlgorithm.html new file mode 100644 index 0000000000..2c3e7bcbb9 --- /dev/null +++ b/xAHAlgorithm.html @@ -0,0 +1,682 @@ + + + + + + + + + + + xAH::Algorithm — xAODAnaHelpers c38ee56 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    xAH::Algorithm

    +
    +
    +class Algorithm : public EL::Algorithm
    +

    This is used by all algorithms within xAODAnaHelpers.

    +

    The main goal of this algorithm class is to standardize how everyone defines an algorithm that plugs into xAODAnaHelpers. A series of common utilities are provided such as m_className which defines the class name so we can manage a registry m_instanceRegistry to keep xAODAnaHelpers as flexible as possible to our users.

    +

    We expect the user to create a new algorithm, such as a selector for jets:

    +
    class JetSelector : public xAH::Algorithm
    +{
    +    // ...
    +};
    +
    +
    +

    The above example is taken from our implementation in JetSelector. Just remember that when you write your initializer, you will be expected to do something like:

    +
    // this is needed to distribute the algorithm to the workers
    +ClassImp(JetSelector)
    +
    +
    +JetSelector :: JetSelector () :
    +    Algorithm("JetSelector"),
    +    ...
    +{
    +    // ...
    +}
    +
    +
    +

    which this class will automatically register all instances of for you. Each instance can have a different algorithm name but will have the same m_className so we can track how many references have been made. This is useful for selectors to deal with cutflows, but can be useful for other algorithms that need to know how many times they’ve been instantiated in a single job.

    +

    +
    +

    Note

    +

    The expectation is that the user does not directly use this class but rather inherits from it.

    +
    +

    Subclassed by BJetEfficiencyCorrector, BasicEventSelection, ClusterHistsAlgo, DebugTool, ElectronCalibrator, ElectronEfficiencyCorrector, ElectronSelector, HLTJetGetter, IParticleHistsAlgo, IsoCloseByCorr, JetCalibrator, JetSelector, METConstructor, MessagePrinterAlgo, MetHistsAlgo, MinixAOD, MuonCalibrator, MuonEfficiencyCorrector, MuonInFatJetCorrector, MuonSelector, OverlapRemover, PhotonCalibrator, PhotonSelector, TauCalibrator, TauEfficiencyCorrector, TauJetMatching, TauSelector, TrackHistsAlgo, TrackSelector, TreeAlgo, TrigMatcher, TruthSelector, Writer

    +
    +

    Public Functions

    +
    +
    +Algorithm(std::string className = "Algorithm")
    +

    Initialization.

    +
    +
    Parameters
    +

    className – This is the name of the class that inherits from :cpp:namespace:~xAH::Algorithm

    +
    +
    +
    + +
    +
    +~Algorithm()
    +
    + +
    +
    +StatusCode algInitialize()
    +

    Run any initializations commmon to all xAH Algorithms (such as registerInstance). Call this inside histInitialize for best results.

    +
    + +
    +
    +StatusCode algFinalize()
    +

    Run any finalizations common to all xAH Algorithms (such as unregisterInstance). Call this inside histFinalize for best results.

    +
    + +
    +
    +StatusCode parseSystValVector()
    +

    Parse string of systematic sigma levels in m_systValVectorString into m_systValVector.

    +
    + +
    +
    +

    Public Members

    +
    +
    +std::string m_name = "UnnamedAlgorithm"
    +

    All algorithms initialized should have a unique name, to differentiate them at the TObject level.

    +

    Note, GetName() returns a char* while this returns a std::string.

    +
    + +
    +
    +bool m_debug = false
    +

    m_debug is being deprecated

    +
    + +
    +
    +bool m_verbose = false
    +

    m_verbose is being deprecated

    +
    + +
    +
    +MSG::Level m_msgLevel = MSG::INFO
    +

    debug level

    +
    + +
    +
    +std::string m_cutFlowStreamName = "cutflow"
    +
    + +
    +
    +std::string m_systName = ""
    +

    If running systematics, the name of the systematic

    +
    + +
    +
    +float m_systVal = 0.0
    +

    If running systematics, the value to set the systematic to

    +

    +
    +

    Note

    +

    This will set the systematic to the value \(\pm x\).

    +
    +
    + +
    +
    +std::string m_systValVectorString = ""
    +

    If running systematics, you can run multiple points and store them in here. A comma separated list of working points should be given to m_systValVectorString, and then parsed by calling parseSystValVector.

    +
    + +
    +
    +std::vector<float> m_systValVector
    +
    + +
    +
    +std::string m_eventInfoContainerName = "EventInfo"
    +

    If the xAOD has a different EventInfo container name, set it here

    +
    + +
    +
    +std::string m_vertexContainerName = "PrimaryVertices"
    +

    If the xAOD has a different PrimaryVertex container name, set it here

    +
    + +
    +
    +int m_isMC = -1
    +

    This stores the isMC decision, and can also be used to override at the algorithm level to force analyzing MC or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use eventInfo object to determine if data or mc

    0

    Treat the input as data

    1

    Treat the input as MC

    +

    +
    + +
    +
    +int m_isFastSim = -1
    +

    This stores the isFastSim decision, and can also be used to override at the algorithm level to force analyzing FastSim or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use Metadata object to determine if FullSim or FastSim

    0

    Treat the input as FullSim

    1

    Treat the input as FastSim

    +

    +
    + +
    +
    +int m_isAF3 = -1
    +

    This stores the isAF3 decision, and can also be used to override at the algorithm level to force analyzing FastSim with AF3 or not.

    + ++++ + + + + + + + + + + + + + + + + +

    Value

    Meaning

    -1

    Default, use Metadata object to determine if AF3 FastSim or not

    0

    Treat the input as FullSim or AFII

    1

    Treat the input as FastSim with AF3

    +

    +
    + +
    +
    +bool m_useRun3navigation = false
    +

    Flag to use Run 3 trigger navigation (true), or Run 2 navigation (false)

    +
    + +
    +
    +std::string m_HLTSummary = "HLTNav_Summary_DAODSlimmed"
    +

    String storing the type of HLT navigation info available for Run 3 samples. For AODs or unslimmed DAODs: HLTNav_Summary_AODSlimmed

    +
    + +
    +
    +bool m_forceFastSim = false
    +

    Flags to force a specific data-type, even if it disagrees with your input

    +
    + +
    +
    +bool m_forceFullSim = false
    +
    + +
    +
    +bool m_forceData = false
    +
    + +
    +
    +bool m_setAFII = false
    +

    Backwards compatibility, same as m_forceFastSim

    +
    + +
    +
    +bool m_setAF3 = false
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +bool isMC()
    +

    \verbatim embed:rst:leading-asterisk
    +    Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isMC` can be used
    +
    +
    + to fix the return value. Otherwise the EventInfo object is queried.

    +

    An exception is thrown if the type cannot be determined.

        ============ =======
    +    Return Value Meaning
    +    ============ =======
    +    0            Data
    +    1            MC
    +    ============ =======
    +
    +
    +

    +
    + +
    +
    +bool isFastSim()
    +

    \verbatim embed:rst:leading-asterisk
    +    Try to determine if we are running over data or MC. The :cpp:member:`xAH::Algorithm::m_isFastSim` can be used
    +
    +
    + to fix the return value. Otherwise the metadata is queried.

    +

    An exception is thrown if the type cannot be determined.

        ============ =======
    +    Return Value Meaning
    +    ============ =======
    +    0            FullSim (or Data)
    +    1            FastSim
    +    ============ =======
    +
    +
    +

    +
    + +
    +
    +bool isAF3()
    +

    If the name includes ATLFASTII or ATLFAST3 then set to AFII or AF3, if deemed fullSim then FS else leave as empty string and complain

    +
    + +
    +
    +bool isPHYS()
    +

    Determines if using DAOD_PHYS or not.

    +
    + +
    +
    +void registerInstance()
    +

    Register the given instance under the moniker xAH::Algorithm::m_className

    +

    This will increase the reference count by 1.

    +

    +
    + +
    +
    +int numInstances()
    +

    Return number of instances registered under the moniker xAH::Algorithm::m_className

    +

    This will return the reference count.

    +

    +
    +

    Warning

    +

    If for some reason the instance wasn’t registered, we spit out a warning.

    +
    +
    + +
    +
    +void unregisterInstance()
    +

    Unregister the given instance under the moniker xAH::Algorithm::m_className

    +

    This will decrease the reference count by 1.

    +

    +
    +

    Warning

    +

    If for some reason the instance wasn’t registered, we spit out a warning.

    +
    +
    + +
    +
    +template<typename T>
    inline StatusCode checkToolStore(const std::string &tool_name)
    +

    \verbatim embed:rst:leading-asterisk
    +    Check whether the input CP tool already exists with *this* name in the asg::ToolStore
    +
    +
    + Depending on the outcome, the content of the map :cpp:member:xAH::Algorithm::m_toolAlreadyUsed wll be set accordingly.
    
    +
    +
    +

    +
    + +
    +
    +inline bool isToolAlreadyUsed(const std::string &tool_name)
    +

    Check whether the input CP tool has been already used by any xAH::Algorithm in the current job by scanning xAH::Algorithm::m_toolAlreadyUsed.

    +
    + +
    +
    +template<typename T>
    inline void setToolName(__attribute__((unused)) asg::AnaToolHandle<T> &handle, __attribute__((unused)) const std::string &name = "") const
    +

    +
    +

    Sets the name of a tool. If no name is needed, the tool will use the name of the algorithm plus a unique identifier (xAH::Algorithm::getAddress()) appended to ensure the tool is unique and effectively private.

    +

    The tool will not be guaranteed unique if two tools of the same type are created without a name passed in. But this is, at this point, up to the user and a more complex scenario than what this function tries to simplify on its own.

    +

    +
    + +
    +
    +inline std::string getAddress() const
    +

    Return a std::string representation of this

    +
    + +
    +
    +

    Protected Attributes

    +
    +
    +std::string m_className = "Algorithm"
    +

    The moniker by which all instances are tracked in xAH::Algorithm::m_instanceRegistry

    +
    + +
    +
    +xAOD::TEvent *m_event = nullptr
    +

    The TEvent object

    +
    + +
    +
    +xAOD::TStore *m_store = nullptr
    +

    The TStore object

    +
    + +
    +
    +

    Private Members

    +
    +
    +bool m_registered = false
    +

    A boolean to keep track of whether this instance was registered or not.

    +

    Calling xAH::Algorithm::registerInstance() multiple times won’t inflate the number of instances of a class made because of me.

    +

    +
    + +
    +
    +std::map<std::string, bool> m_toolAlreadyUsed
    +

    Map containing info about whether a CP Tool of a given name has been already used or not by this xAH::Algorithm.

    +

    Its content gets set through xAH::Algorithm::checkToolStore(), depending on whether the tool it’s created from scratch, or retrieved from asg::ToolStore

    +

    +
    + +
    +
    +

    Private Static Attributes

    +
    +
    +static std::map<std::string, int> m_instanceRegistry = {}
    +

    Bookkeeps the number of times xAH::Algorithm::m_className has been used in a variable shared among all classes/instances that inherit from me

    +
    + +
    +
    + +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + \ No newline at end of file